Что нового

Майнер бот. Эволюция от примитивного до умного.v2.5

yaodnako

Продвинутый
Сообщения
120
Репутация
78
Это мой первый Бот.Еще не закончен.Он донельзя примитивен,но работает :smile:
Писал сам под себя,прочитав статью о концепции бота Belfigor'а.
Придумал примерно что хочу от бота,и последовательно функция за функцией составлял.
Посмотрел ледяного бота - много чего не понял и решил сам с нуля писать.Лучше проще и меньше - зато с кристальной ясностью что делает каждый элемент.
У меня нет Макинавы - копаю на примитивном Navitas.но это неважно - главное все работает :smile:
Выложил для ознакомления новичкам(почти все комментил) и может ветераны что-нибудь посоветовуют или может какую оптимизацию предложат :whistle:




Код:
Opt("PixelCoordMode", 2) ;Отсчет координат пикселей от левого верхнего угла клиентской части окна
Opt("MouseCoordMode", 2) ;Отсчет координат мыши от левого верхнего угла клиентской части окна
;Opt("MustDeclareVars", 1)
Opt ("MouseClickDelay", 50)
HotKeySet ("{`}","_exit");задаем горячую клавишу остановки скрипта
;----------------------------------------------Ниже основа ------------
while 1

WinActivate("EVE - CharName")
Undock()
sleep (1000)
WarpToBelt()
Sleep (1000)
MouseClick("left",x, y,2);здесь апруч к первому в overview метеору - пока проверок на отсутсвие нет.
sleep (1000)
Mine();здесь проверка расстояния,лок цели,добыча.
sleep (1000)
Dock();здесь проверка на трюм и отлет домой при наполнении
sleep (3000)
OreToHome()
;sleep (27000)
Wend
;--------------------------------------------Конец основы---------------

;--------------------------------------------------
Func _exit();завершение работы скрипта
	Exit
EndFunc
;--------------------------------------------------

Func WarpToBelt() ;функция варпа на белт
	;здесь есть один нездоровый глюк - после андока
	;,почему то по правому клику на закладке перестает работать варп на белт.т.е. в выпадающем меню нету варпа
	;но когда в оverview щелкнуть на какой либо объект,то все начинает работать.
	MouseClick ("left",x, y);переключить с вкладки mining на основную
	sleep (2000)
	MouseClick ("left",x, y);кликнуть на 2й объект
	sleep (500)
	MouseClick ("right",x, y);правой клавишей на буку
	sleep (100)
	MouseClick ("left",x, y);выбираем варпаться в белт
	sleep(100)
	MouseClick ("left",x, y);возращаемся с основной вкладки на настроенную нами заранее вкладку mining
	Sleep (4000)
	Do
		WinActivate("EVE - CharName")
		ToolTip ("летим к белту",0,0)
	Until CheckEndWarp()=1
EndFunc
;-----------------------------------------------
Func CheckEndWarp() ;функция проверки окончания варпа
	PixelSearch (x, y,x1, y1,color);проверяется левый верхний пиксель буквы Г в слове Гиперпрыжок :)пока он есть мы в гиперпрыжке.
	If @error Then
	Return 1
	Else
	Return 0
	EndIf
EndFunc

;----------------------------------------------
Func CheckAsteroid();проверка на наличие любого объекта в оverview(в данном случае астероида)- пока не встроен
	WinActivate("EVE - CharName")
	PixelSearch (x, y,x1,y1,color);
	If @error Then
	Return 0
	Else
	Return 1
	EndIf
EndFunc

;------------------------------------------------
Func Dock() ;Полет домой если заполнен трюм
	Do
		ToolTip ("ждем пока не заполнится трюм",0,0)
	Until CargoCheck()=1
	WinActivate("EVE - CharName")
	MouseClick("right",x, y,1);правой на буке "дом"
	MouseClick("left",x, y,1);левой на строку док на станцию
	Do
		ToolTip ("Летим домой",0,0)
	Until CheckSpace()=0
EndFunc
;------------------------------------------------
Func CargoCheck();проверка на заполненность трюма
	WinActivate("EVE - CharName")
	PixelSearch (x, y,x1, y1,color);проверка на наличие синего цвета.если есть,то заполнен.
	If Not @error Then
	Return 1
	Else
	Return 0
	EndIf
EndFunc



;-----------------------------------------------
Func Undock();вылет со станции.
	WinActivate("EVE - CharName")
	MouseClick("left",x, y);щелчок на андок
	Do
		ToolTip ("я на станции!",0,0)
	Until CheckSpace()=1
EndFunc
;-----------------------------------------------
Func CheckSpace();проверка на космос
		WinActivate("EVE - CharName")
		PixelSearch(x, y,x1, y1,color);ищем наличие черного цвета в пикселе.при появлении любого другого цвета в пикселе -
		if @error Then                     ;- мы находимся в космосе.(у меня данный пиксель при андоке меняется на оранжевый цвет)
		;ToolTip ("я в космосе",0,0)
		return 1
		Else
		return 0
		EndIf
EndFunc
;------------------------------------------------
Func Mine();включить лазеры для добычи если дистанция ближе 10км
	Do
		ToolTip("Подлетаю к метеору ближе 10 км",0,0)
	Until DistanceCheck()=1
	MouseClick ("left",x, y);жмем кнопку лока цели
	Sleep (5000);ждем окончания лока
	Send("{F1}");копать лазером 1
	Send("{F2}");копать лазером 2
EndFunc
;------------------------------------------------
Func DistanceCheck();проверка на дистанцию - меньше или больше 10км
	WinActivate("EVE - CharName")
	PixelSearch (x, y,x1, y1,color);проверка диапазона пикселей между 2х значным числом километров и слова км.на наличие черного цвета.
	If @error Then                        ;если появился любой цвет в диапазоне,кроме черного,значит мы уже ближе 10км.
	ToolTip("ближе 10км",0,0)
	Return 1
	Else
	Return 0
	EndIf
EndFunc
;-------------------------------------------------
Func OreToHome();функция сбрасывания руды на станцию
	MouseClickDrag ("left",x, y,x1,y1,30)
	EndFunc
;--------------------------------------------------


p.s. убрал все координаты - решил,что хочу,чтобы человек,скачавший бота - (пусть даже это вермишель)пошевелил мозгами и настроил все сам - к тому же все очень подробно расписано что и где кликается,ищется... :smile:

p.p.s
Последняя версия бота 2.5 и 2.5i(лёд) тут
Настройки - тут

 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: Нубский Майнер Бот(замкнутая вермишель)

совет самый главный: Строй своего бота так, чтобы в случае если какая-то команда не прошла, он не встал на месте. Например тот же самый Undock() - повесит скрипт в случае если вдруг из-за глюка до сервера не дойдет команда о том что ты тока что попытался вылететь в космос. Скрипт будет ждать когда же исчезнет кнопка андока и будет думать что она уже нажата даже если сигнал до сервера из-за какого-то лагга не дошел. Ну это только одно из многих мест где твой макрос может сбиться :smile:
 
Автор
yaodnako

yaodnako

Продвинутый
Сообщения
120
Репутация
78
Re: Нубский Майнер Бот(замкнутая вермишель)

Ага это в перспективе наладка автономности и проверка на текущий статус.проверки обязательно сделаю...я сам новичок в этом деле,так что буду разбираться дальше.
Чем больше укажете на ошибки тем лучше.будет над чем подумать.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: Нубский Майнер Бот(замкнутая вермишель)

Да тут в принципе в разделе все уже указано в других темах, как-то да упоминались различные всевозможные ньюансы, если что-то не было упомянуто то либо эта мелочь с которой разработчик в принципе в 99.999999% случаев не встретится либо это опять же что-то из разряда высшего пилотажа :smile:. В каждый исходник то вникать голова тоже лопнет. Я просто посмотрел первую функцию на которую ссылается скрипт, дальше я даже не лез
91.gif
.
Кстати чем конкретнее будет вопрос тем конкретнее будет на него ответ :smile:. Я просто во время просмотра аниме каждые 5-15 минут альттабаюсь в раздел, так что тебе будет гораздо проще задавать маленькие вопросы относительно 10-30 строк кода, или какого-то отдельного модуля чем по целому боту :smile:. Со временем реагирования на вопрос - каждые 15 минут, это - самый оптимальный вариант вытягивания информации из окружающих
39.gif
 

hikki

Продвинутый
Сообщения
233
Репутация
99
Re: Нубский Майнер Бот(замкнутая вермишель)

WarpToBelt() както непонятно сделан, зачем все эти телодвижения?
попробуй меню выпадающее из белого треугольника в верхнем левом углу, там где имя системы написано.
Ну и действительно, проверок работы нет никаких, пока твой слив это копеечная баржа это пофиг, когда цена вопроса будет халк или макинав то станет обидно. поэтому маусклик, проверка что маусклик сработал, следущий маусклик. итд.


Добавлено:
Сообщение автоматически объединено:

Код:
Do
        WinActivate("EVE - CharName")
        ToolTip ("летим к белту",0,0)
    Until CheckEndWarp()=1

воткни сюда sleep(100) иначе будет жутко тормозить
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: Нубский Майнер Бот(замкнутая вермишель)

Хикки прав, но маусклик не по какой-то конкретной причине, а по сбору с целой кучи датчиков. То есть оценил картину происходящего - маусклик, далее после этого маусклика - ты не ждешь пока клиент отзовется, а спустя несколько секунд - снова оценил ситуацию происходящего, и если прошлый маусклик - удался, то скрипт увидит уже другую ситуацию, ежели нет - скрипт повторит попытку. Я выкладывал тут где-то ии, как оно работает.
 
Автор
yaodnako

yaodnako

Продвинутый
Сообщения
120
Репутация
78
Re: Нубский Майнер Бот(замкнутая вермишель)

Спасибо всем огромное :smile: буду дорабатывать.Офигеть - я даже не задумывался проверять каждое телодвижение.Но это верно - иначе бот может встать.
А по поводу варпа на белт.там без разницы куда тыкать - и на треугольнике и на буках - после андока,почему то пропадает вкладка Warp to,когда правый клик делаешь.пока в overview не щелкнуть на любой объект,а для этого нужно переключится с настроенной вкладки mining,на основную вкладку и затем назад! никто не сталкивался с такой проблемой? именно из за этого глюка столько много телодвижений - так было бы 2 клика всего.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: Нубский Майнер Бот(замкнутая вермишель)

Оперируя игрой не через главное меню игры, ты ни к чему кроме сотен тысяч лишних строк телодвижений не придешь. Через главное меню игры можно варпаться как хочешь, куда хочешь, зная где вкладка с белтами - ты будешь знать где вкладка на белт 2-5 например, будучи же выровненным по расстоянию, в овервью - этот белт может находиться где угодно, и даже будучи выравненным по имени, этот белт может быть тупо за пределами отображаемой области овервью. Привязка к треугольничкам правит миром.
 
Автор
yaodnako

yaodnako

Продвинутый
Сообщения
120
Репутация
78
Re: Нубский Майнер Бот(замкнутая вермишель)

Да нее :smile: ты не так понял... у меня белты на буках.и когда выходишь из станции почему то в выпадающем по правому клику меню по буке белта - нет варпа,только аппруч к нему.Тоже самое для треугольника - так же глючит (есть мысль - возможно это 0км варп патч чудит - проверю или может кэш почистить...).Для того чтобы появился варп - нужно в овервью на любой объект щелкнуть.
У меня меньше телодвижений чем если щелкать на могучий треугольник,потому как там далеко мышь надо передвигать.Но ты действительно прав треугольник незыблем и не меняет своего положения,а значит все координаты будут всегда актуальны.

p.s.сейчас попробовал с треугольником - перестало глючить :smile: патч 0км варп убрал.не знаю из за него было или нет.буду дальше тестить. - демоны все бэлты за ночь сгрызли - лед рулит :'(

Очень понравилось про маусклики - кликать не для того чтобы сделать что то,а потому что выполнился ряд условий.так снижается к минимуму возможность встать.т.е. каждое действие изначально рассчитано на основании предидущих данных. Очень круто было бы сделать именно такого бота - поставил настройки по умолчанию,обозначил дом и запускаешь бота в любой точке - он сам поймет что дальше ему делать оценив статус.
А что означает
Код:
#Region .... #EndRegion
?
p.s. пытаюсь вникнуть как написать такую логику - это ведь надо отдельный модуль на анализ - который будет делать все проверки...исследую кусок логики из мультиоконного майнера Belfigor.Крутотень...предвкушаю как это будет...
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: Нубский Майнер Бот(замкнутая вермишель)

В переменную собираешь результаты работы всех датчиков и просто их уже оцениваешь.
 

DJ_Tommy

Продвинутый
Сообщения
236
Репутация
57
Re: Нубский Майнер Бот(замкнутая вермишель)

Еще от себя внесу маленький совет - все абсолютные координаты прописывай в начале скрипта переменными - так будет проще если настройки вдруг собьются. Ну и молодец что пишешь комментарии в теле файла - потом будет проще вспомнить что куда и откуда берется.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: Нубский Майнер Бот(замкнутая вермишель)

Ога, за комменты +1, окр который я написал для евы когда-то, был без единого коммента, как результат, когда понадобилось его модифицировать, мне пришлось писать окр по новой
42.gif
.
 
Автор
yaodnako

yaodnako

Продвинутый
Сообщения
120
Репутация
78
Re: Нубский Майнер Бот(замкнутая вермишель)

Круть :smile: по сравнению с моим это мозг :smile: Гуй делать своему не буду.Датчиков накручу - в общем есть куда расти...спасибо что выложил - очень интересно глянуть.

тут есть недоработка которую не знаю как решить
не знаю как проверить в радиусе ли мы действия лазеров, поэтому тупо спамим пока не заработает
Если я правильно понял что ты не решил -
можешь попробовать как я сделал(примитивно донельзя) - просто между числом XX и км есть расстояние,и когда ты подлетаешь ближе 10 км числа xx км меняются на xxxx м.то есть между xx и км появляется белые пиксели.на это появление и срабатывает проверка - то есть ближе 10км - включить лазеры.
 

Zuzik

Знающий
Сообщения
45
Репутация
5
Re: Нубский Майнер Бот(замкнутая вермишель)

Идея интересная, попробую
 
Автор
yaodnako

yaodnako

Продвинутый
Сообщения
120
Репутация
78
Re: Нубский Майнер Бот(замкнутая вермишель)

я нашел из-за чего не работает сразу варп на белт при андоке со станции - из-за звездной карты - стоит ее убрать и все правильно работает и сразу варпится и по букам и по треугольнику.
Можно конечно сделать ф10,затем снова ф10 и затем клик свернуть панель управления звездной картой - это так же не менее муторно чем щелкать на вкладке оverview на первый объект,затем снова на вкладку настроенную тобой(второй вариант не всегда с первого раза срабатывает) .первый работает всегда.Так вот вопрос тем кто решил эту проблему - намекните хотя бы как вы так сделали,чтобы при развернутой черной звездной карте сразу заработал варп при андоке?(с минимальными телодвижениями)
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: Нубский Майнер Бот(замкнутая вермишель)

У меня оно работает по дефолту. Главное меню не обновляется, но работает, потом скажу как гляну что у меня там как.
 

Zuzik

Знающий
Сообщения
45
Репутация
5
Re: Нубский Майнер Бот(замкнутая вермишель)

ну вот а мой скрипт никто не поглядел( на ошибки
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: Нубский Майнер Бот(замкнутая вермишель)

Дак ты вроде и не спрашивал :smile:. Апай свою тему, мы и там найдем одну две ошибки которые можно освятить :smile:
 

Zuzik

Знающий
Сообщения
45
Репутация
5
Re: Нубский Майнер Бот(замкнутая вермишель)

ну, чтоб тему не создавать, я тут разместил, ну как и просто показать как пример, ну и чтоб покритиковали. (на предыдущей странице)
 

hikki

Продвинутый
Сообщения
233
Репутация
99
Re: Нубский Майнер Бот(замкнутая вермишель)

Zuzik сказал(а):
ну вот а мой скрипт никто не поглядел( на ошибки
почему? поглядел, увидел много строк, много функций, значения из гуя... признайся чесно, ведь не на ошибки проверить выложил))), у самого чешется иногда))
Про ошибки ты нам сам скажеш))) спросиш совета как править)
Думаю надо его выделить в отдельную тему, темболее что прокоментирован хорошо.


Теперь критика(если будет отдельная тема то и критику туда пожалуйста)
1. GUI, гуй есть, но както непонятно зачем, все значения можно было в боте прописать (так оно и есть в принципе) или в ини загнать и хоткеями обойтись, такое чувство что просто пробовал и тренировался.
2. очень много абсолютных значений, координат кликов и тд. используй привязку к чему либо, треугольник овервью, внизу треугольник HUD, слева сверху треугольник главного меню, большинство операций проходят вокруг них и если определены эти координаты то и остальное тоже будет работать. темболее что находятся они тоже легко.
и тд.
 
Верх