Что нового

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

Автор
yaodnako

yaodnako

Продвинутый
Сообщения
120
Репутация
78
Re: Майнер бот. Эволюция от примитивного (замкнутая вермишель) до умного.v2.41

Всем привет:smile: Давно я тут не был. Решил вернутся в еву и понял, что для пвп таки нужны кораблики и иски :smile: и поэтому решил снова бота втыкать на ночь. Думал быстро все настрою - фиг. 3 часа колупался, все окна посдвигались, все заного пришлось искать. Но ничего бот до сих пор работает. Так что возможно я еще допишу к нему что-нибудь и выложу сюда. Когда настраивал - вспомнил слова Бельфа :smile: делать сразу так, чтобы перенастраивать было легко, а я не послушал :smile:)

Пысы: Чару уже два года 36кк сп. стемно его на бота ставить :smile: думаю второго раскачать под это дело.
 

DJ_Tommy

Продвинутый
Сообщения
236
Репутация
57
Re: Майнер бот. Эволюция от примитивного (замкнутая вермишель) до умного.v2.41

Зная команды, зная логику, зная игру - написать простейшего бота 4-5 часов.
 
Автор
yaodnako

yaodnako

Продвинутый
Сообщения
120
Репутация
78
Re: Майнер бот. Эволюция от примитивного (замкнутая вермишель) до умного.v2.41

Зная команды, зная логику, зная игру - написать простейшего бота 4-5 часов.
я вроде не писал, что хочу нового бота. Этот вроде не простейший, и зачем мне заного писать, если я этого уже сто лет назад написал и нужно было только настроить его? Бельфу вон вообще пара часов простейшего бота написать, ну и что?
несколько раз перечитывал. непонятно к чему это ты написал...

пысы: кстати autoit подзабыл реально за год. довольно сложно разгребать :smile: скорее всего за 4-5 часов нового, я бы вряд ли написал. да и не к чему это. Ща хочется этому чтонибудь прикрутить и улучшить.
 

running-frag

why me?
Сообщения
441
Репутация
60
Re: Майнер бот. Эволюция от примитивного (замкнутая вермишель) до умного.v2.41

вы путаете "простейшее" с "тупейшим" :smile: даже простейшего бота без датчиков и адекватном алгоритме не так быстро написать, а вот тупейшего - да, легко :smile:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: Майнер бот. Эволюция от примитивного (замкнутая вермишель) до умного.v2.41

Простейший многооконный бот для этой игры таки пишется за пару часов.
 

n978143

Новичок
Сообщения
1
Репутация
0
Re: Майнер бот. Эволюция от примитивного (замкнутая вермишель) до умного.v2.41

и как этим пользоваться? есть инструкция?
 

Lexx98

Продвинутый
Сообщения
272
Репутация
73
Re: Майнер бот. Эволюция от примитивного (замкнутая вермишель) до умного.v2.41

Выучиваешь автоит, выкуриваешь эту ветку форума, настраиваешь под себя, и пользуешься.
Рецепт универсальный для всех "готовых" ботов, выложенных в данной ветке форума.
 

Mdsanta

Новичок
Сообщения
13
Репутация
0
Re: Майнер бот. Эволюция от примитивного (замкнутая вермишель) до умного.v2.41

Подскажите пожалуйста...
Просматривая тело бота v2.41 наткнулся на непонятную переменную $Object2
Переменная явно текстовая (string), периодически встречается сравнивание ее значений с текстовыми величинами.
Объявления переменной не нашел. :(

вот к примеру - объявляется, в функции, как текст и во втором же кейсе используется при вычислении координаты.
Условий изменения величины, после вызова функции, я не нашел.

Код:
Func _Check($Object,$Object2="No")
	Select

Код:
Case $Object="Chk10km";определение по SI
			;++++++++++ Ближе или дальше 10км любого объекта в овервью
				Local $y=183;координата Y первого объекта оверью
				Local $x=774;координата X первого объекта оверью
				$y=$y+(20*$Object2-20)
				MouseClick("left",$x, $y,1,8)


Конвертится в число и используется?
тогда зачем усложнять все текстовым значением?


З.Ы. вечность ничего не писал :(
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: Майнер бот. Эволюция от примитивного (замкнутая вермишель) до умного.v2.41

Тут слегка другой смысл. Полагаю эта функция что-то сродни моим функциям ConCheck и Then. Тоесть:
Код:
Func _Check($Object,$Object2="No")

Тут лишь указано какие переменные принимает функция из вне.
Код:
$Object2="No"

Это применено чтобы скрипт не пытался учудить что-нибудь, если бы ты указал например $Obhect2 = 0, тоесть тупо задал дефолтное значение этой переменной в числовом виде, то если мне память не изменяет скрипт бы начал глючить в структуре Select...Case.

Эти переменные указаны дабы структурировать функцию _Check на подразделы и собрать в одной функции набор схожих по типу действий.




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

Рассмотрим например вот эту функцию:
Код:
Func _Check($Object,$Object2="No")
    Select
		Case $Object = "Проверить NPC"
			;1
			;Сюда тоже можно вставить какой-нибудь код, очень удобно.
			Select 
				Case $Object2 = "Наличие"
				;1.1	
				Case $Object2 = "Дальность"
				;1.2
				Case $Object2 = "Размер"
				;1.3
				Case $Object2 = "ХП"
				;1.4
				Case $Object2 = "Джам"
				;1.5
				Case $Object2 = "Скрамбл"
				;1.6
				Case $Object2 = "Фракция"
				;1.7
			EndSelect
		Case $Object = "Проверить Астероид"
			;2
			Select 
				Case $Object2 = "Наличие"
				;2.1	
				Case $Object2 = "Дальность"
				;2.2
				Case $Object2 = "Тип"
				;2.3
				Case $Object2 = "Крутость"
				;2.4
				Case $Object2 = "Пилю ли я его"
				;2.5
			EndSelect
		Case $Object = "Проверить Контейнер"
                        ;3
			Select 
				Case $Object2 = "Наличие"
				;3.1	
				Case $Object2 = "Дальность"
				;3.2
                                Return "Выполнено"
				Case $Object2 = "Врек"
				;3.3
				Case $Object2 = "Джет"
				;3.4
				Case $Object2 = "Секонт"
				;3.5
				Case $Object2 = "Открыт ли"
				;3.6
				Case $Object2 = "Заполненность"
				;3.7
		EndSelect
	EndSelect
EndFunc

Это что-то типа UDF написанной под себя, с удобным тебе синтаксисом и тд и тп. Сюда собираются куски часто используемого кода и организуются для удобства быстрого вызова. Например чтобы вызвать участок кода под номером 3.2 тебе надо использовать следующую строку:
Код:
$var = _Check("Проверить контейнер", "Дальность")

И после этой строки будет выполнен участок кода заключенный в указанном сегменте вызываемой функции. Вроде понятно объяснил.
 
Автор
yaodnako

yaodnako

Продвинутый
Сообщения
120
Репутация
78
Re: Майнер бот. Эволюция от примитивного (замкнутая вермишель) до умного.v2.41

Бельф клево описал.
Это по сути контейнер функций, в который удобно собирать однотипные функции. например у меня в этой функции _check находятся все функции проверки. в скобках находятся переменные, кот. используются и через которые мы попадаем на нужный отсек контейнера или в его подраздел. Написав в данном случае -
Код:
Func _Check($Object,$Object2="No")

я объявил контейнер с отсеками-функциями под названием _Check, а $Object,$Object2="No" - означает, что этих переменных может быть две. Это сделано потому что у меня один из отсеков внутри контейнера состоит из нескольких частей и каждая часть делает что-то свое. Поэтому если я обращусь напр:
Код:
_Check("AstLockChk","Free")

это значит, что я залез в контейнер, состоящий из нескольких однотипных функций, и выбрал выполнить ветвь Free,если просто указать
Код:
_Check("AstLockChk")
, то будет выполнена только ветка AstLockChk;можно было конечно разделить это просто на разные ветки, но выбрал сделать именно так. Если бы нужна была бы более наглядная модель, то я бы сейчас сделал бы как отсек и в нем 2 ветки. чтобы в итоге вызывалось напр.так:
Код:
_Check("Lock","Free")
_Check("Lock","Status")
/т.е. стало бы сразу видно, что я залез в отсек с функциями по локу и там 2 ветки.

Также вторая переменная $Object2="No" может быть заменена на любую числовую переменную для действий с этой переменной внутри нужного раздела.

ЗЫ: С ботом я поковырялся немного. последнюю исправленную выложу скорее всего на днях.
Кстати под лед его изменить довольно просто. Просто повырубать ненужности.
 

Mdsanta

Новичок
Сообщения
13
Репутация
0
Re: Майнер бот. Эволюция от примитивного (замкнутая вермишель) до умного.v2.41

Бельф действительно хорошо написал.
Полезный урок, как сделать код более читаемым :smile:

Собственно вопрос был лишь по конкретному моменту:
Если
Код:
_Check("Chk10km",$FreeLockPosition)

вызывается с опущенным вторым параметром (потому что конструкция позволяет)
то
вот это выражение:
Код:
$y=$y+(20*$Object2-20)

принимало непонятный вид, т.к. значение по умолчанию было текстовым.

Подсказали, что в данном случае значение $Object2 будеть равно нулю.
Соответственно $y=$y-20

Судя по коду вызов планировался быть с указанием номера строки, например
Код:
_Check("Chk10km","1")

и тогда все работает нормально.

З.Ы. Все понятно, но почувствовал, что надо расставить все точки, если кто еще читать будет.
 
Автор
yaodnako

yaodnako

Продвинутый
Сообщения
120
Репутация
78
Re: Майнер бот. Эволюция от примитивного (замкнутая вермишель) до умного.v2.41

Mdsanta Перечитай это сообщение - раз 30 наверно редактировал :whistle:
Собственно вопрос был лишь по конкретному моменту:
Если
Код:
_Check("Chk10km",$FreeLockPosition)

вызывается с опущенным вторым параметром (потому что конструкция позволяет)
Неа. $FreeLockPosition не опущенный второй параметр. В данном случае в качестве параметра $Object2 используется переменная $FreeLockPosition, нужная для работы внутри конкретной ветки, которая в моей функции указывается в $Object1.В переменной $FreeLockPosition хранится номер ближайшего незалоченного астера,начиная сверху в овервью. т.е. в данном случае этот номер означает ту позицию, куда кликнет мышь для проверки дальности незалоченного астероида(чтобы потом его залочить, если ближе 10км).
В $Object2 необязательно должен быть текст. тут может быть и обычная числовая переменная или число.
И если указать так:
Код:
_Check("Chk10km",3)
То функция вычислит координаты третьей позиции в овервью, кликнет и начнет проверять ближе дальше 10 км выбранный объект.

Теперь я точно понял твой вопрос :smile: Как ты уже заметил $Object2 это параметр, которому я присваиваю по дефолту текст ="No". Кажется, присваивание дефолтного значения нужно для того, чтобы можно было запустить любую часть контейнера _Check, не используя каждый раз при обращении к функции второй параметр $Object2(кажется он обязателен). т.е. я вместо того чтобы каждый раз при обращении к контейнеру прописывать _Check("CheckSpace", тут любая переменная), я просто с самого создания контейнера присваиваю дефолтное значение $Object2="No" и это дает мне возможность теперь просто написать _Check("CheckSpace") и он будет автоматом использовать в $Object2 дефолтное текстовое значение "No", которое роли не играет вообще никакой, просто такова специфика - если есть второй параметр, то автоиту нужно, чтобы он был определен при обращении к функции, даже если он не используется внутри данной ветки контейнера. Если же я решаю использовать конкретную переменную, то я ее и пишу.
Если же использовать выделенную тобой фукнцию без 2го параметра, то он автоматом использует дефолтное значение для него.
Код:
_Check("Chk10km")
Он сам подставит 2й параметр и воспримет это как
Код:
_Check("Chk10km","No")
То как ты заметил произойдет фигня. конечно он не поймет как вычислять куда ему тыкать мышей для проверки, потому вместо необходимого для вычисления числа там будет текстовое значение. Во всем контейнере _Check, только в этой части на проверку 10км обязательна для использования $Object2 числовая переменная. Параметры $Object2 и $Object1 используются только при обращении к функции, поэтому объявлять их не нужно. Их значения в момент обращения могут быть такими какими ты хочешь. Если ты указал $Object2 дефолтное значение текстом, то при обращении ты легко можешь поставить числовую или другую текстовую переменную и дефолтное значение просто не будет использоваться. вот и все.

Подсказали, что в данном случае значение $Object2 будеть равно нулю.
Нет. Ты не так понял. Бельф про другое писал. Значение $Object2 будет либо тем, которое указываешь ты при обращении к функции, либо дефолтным. у меня по дефолту текст="No"

Зы. Кстати странно что мало людей задают вопросы. Вот человек задал вопросы и стимул отвечать и может что дописать к боту усилился. Я свой код после 2 лет отсутвия в еве вкуривал часа 2 чтобы разобраться полностью и проставить все пиксельсечи заного.+ я когда понимал что конкретный кусок делает, добавлял описания. так что в новой выложенной версии будет гораздо больше пояснений. пиксельсечи все расписал точно. Пишите все у кого есть вопросы, а также те, кому есть что добавить :smile: - Когда я вижу, что это интересно другим, то стимул модифицировать, улучшать и выкладывать в открытый доступ усиливается...
 
Автор
yaodnako

yaodnako

Продвинутый
Сообщения
120
Репутация
78
Re: Майнер бот. Эволюция от примитивного (замкнутая вермишель) до умного.v2.41

Лень редактировать предидущее сообщение. захотелось объяснить принцип работы параметров в функциях. Если что не так поправьте.

например создаем функцию _Check() и можно не указывать никаких параметров для нее, если не нужны,а можно указать. пример:
_Check($par1) называешь параметр как угодно хоть $Tapok.название роли не играет, это скорее метка для тебя что указываться будет как параметр. это значит что теперь к этой функции я буду обращаться с любым нужным мне параметром в скобках и только внутри этой функции я буду с ним работать.
названия параметров можно ставить одинаковыми для разных функций внутри кода - это роли не играет(я так и делал). Главное здесь понять, что обозначение параметра $par1 означает, что здесь будет использоваться любое нужное мне значение, либо переменная.самой такой переменной $par1 во всем коде, кроме функции, в которой ты его указываешь обычно нет, иначе путаница будет. Параметр это переменная для хранения того,значения, кот. ты впоследствии задашь при обращении к функции. Используя $par1 внутри функции ты сообщаешь, что прямо сейчас я использую то значение параметра, кот.ты указал в момент обращения к функции до ее завершения.параметр нужен там, где ты работаешь с большим количеством разных данных и чтобы каждый раз не создавать кучи переменных.
Вот пример:
Код:
Local $noga=1
Local $glaz=2
Local $golova=3

Func _Check($ZdesBilVasya=10);сама функция+мы объявили, что в ней будет использоваться параметр, на место которого можно ставить что хочешь, в случае пустого параметра, будет использовать число десять.
$summa=$ZdesBilVasya+51;это действие с параметром внутри фукнции, вот ключевое место для чего нужен параметр.
;Если бы параметра не было, то пришлось бы создавать 3 расчета под каждую переменную. Или создавать и объявлять лишнюю переменную.
;Если такого типа фукнций у тебя много, то пришлось бы создавать много лишних переменных.
EndFunc

_Check($noga);это означает,что я обращаюсь к функции и использую на месте параметра $ZdesBilVasya переменную $noga.
;и в момент обращения $summa=$ZdesBilVasya+51 это тоже самое что и $summa=$noga+51

_Check($golova);это означает,что я обращаюсь к функции и использую на месте параметра $ZdesBilVasya переменную $golova.
;и в момент обращения $summa=$ZdesBilVasya+51 это тоже самое что и $summa=$golova+51

_Check(3);это означает,что я обращаюсь к функции и использую на месте параметра $ZdesBilVasya число 3.
;и в момент обращения $summa=$ZdesBilVasya+51 это тоже самое что и $summa=3+51

_Check();это означает,что я обращаюсь к функции и использую на месте параметра $ZdesBilVasya дефолтное ее значение т.е.10.
;и в момент обращения $summa=$ZdesBilVasya+51 это тоже самое что и $summa=10+51.
;просто введя один параметр мы создали универсальную переменную, в которую можно втискивать то, что тебе нужно.
 

Mdsanta

Новичок
Сообщения
13
Репутация
0
Re: Майнер бот. Эволюция от примитивного (замкнутая вермишель) до умного.v2.41

Ага. В самую точку попал, то что, как раз, и смущало.
Нашли истину :smile:

Буду курить дальше. Код интересный, комментариев куча. Самое то. :smile:
+ Читать куда легче, чем писать :rofl:
 
Автор
yaodnako

yaodnako

Продвинутый
Сообщения
120
Репутация
78
Re: Майнер бот. Эволюция от примитивного (замкнутая вермишель) до умного.v2.41

Версия бота 2.48
Изменения не помню. Много раз чето дописывал, корректировал. Сейчас бот скорее всего заработает у всех с дефолтными настройками на английской версии в окне 1024 на 768 (хотя может пара датчиков придется таки настраивать из за неокома). Ввел тултипу дополнительную закомменченную - там вынесены почти все датчики и таким образом можно отследить - что правильно определяет, что нет. Советую при первом запуске как раз ее разкомментить, чтобы увидеть правильно ли бот видит ситуацию. Мой бот ща пашет без дронов, поэтому с дронами может тупить - не смотрел.

Пожелания и рекомендации к исправлению буду рад услышать, особенно будет приятно если Бельф или еще ктонибудь из старичков чтонибудь полезное посоветует :smile:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: Майнер бот. Эволюция от примитивного (замкнутая вермишель) до умного.v2.48

Ну, первое и самоге главное неудосбство которое я ощутил бы для себя работая с твоим скриптом, это отсутствие как таковых использования Return. То есть у тебя не возвращаются значения из функций после того как они отработали, а изменяются напрямую внутри функции и записываются в глобальную переменную. То есть для того чтобы работать с таким кодом нужно постоянно держать в голове какая функция какую переменную правит, просто использовать запись подобную этой:
Код:
Local $AnyVar = _Check("CheckWarp")
If $AnyVar = 1 Then 
.....

Я не могу, допустима только такая конструкция:
Код:
_Check("CheckWarp")
If $WarpChk = 1 Then

При том я всегда должен держать в голове имена переменных которые изменяются той или инной функцией, что в зависимости от подряд проведенных за разработкой скрипта часов и усталости, влияет на количество совершаемых ошибок. Ну это как по мне :smile:.
А так кроме отсутствия возвратов из функций, я бы еще добавил в функции проверки дополнительный параметр который будет определять тип возвращаемого значения, число или удобоваримая для человека текстовая запись. То есть у себя в скриптах я использую 2 возвращаемых значения в зависимости от запроса. Как и у тебя 1 или 0, так и "InWarp" "Docking" "Jumping" и тд и тп, ибо иногда 2-х значений для описания состояния одного или нескольких датчиков мало, на помощь приходит комбинация уже набора нулей и единичек, но все опять же в голове не удержишь, поэтому в процессе разработки я использую словестные пояенения, тоесть скрпт мне напрямую и возвращает "InWarp" "OnDock" "AtDock" и тд и тп.
Так же удобно для дебага при выводе в туллтип. Либо ты видишь
Warp: 1, Dock: 0, Aster: [еще что-то] и тд и тп
Либо видишь
В варпе, докнуться не могу, вижу астероид, вижу непись
Ну тут тоже вопрос восприятия, кому как удобно :smile:
 

Mdsanta

Новичок
Сообщения
13
Репутация
0
Re: Майнер бот. Эволюция от примитивного (замкнутая вермишель) до умного.v2.48

Пока обдумывал чего я хочу от бота - окончательно пропало желание играть в евку. %)
Продолжу изучение алгоритмики в образовательных целях.


Можете мну ткнуть в описалово, как эта радость работает?
Код:
AdlibRegister("Status",150)

Можно непосредственно по AdlibRegister. Хелп крайне скуден по ее поводу.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: Майнер бот. Эволюция от примитивного (замкнутая вермишель) до умного.v2.48

Эта команда как бы "2-м потоком" каждое указанное время запускает указанную функцию. Собственно вот и всё описание.
 

EVEGamer

Знающий
Сообщения
27
Репутация
12
Re: Майнер бот. Эволюция от примитивного (замкнутая вермишель) до умного.v2.48

Каждые 150мс вызов функции Status, жёстко )). И за него бан легко получить, клики не рандом.
 
Автор
yaodnako

yaodnako

Продвинутый
Сообщения
120
Репутация
78
Re: Майнер бот. Эволюция от примитивного (замкнутая вермишель) до умного.v2.48

Да. вроде 13 дней бан в первый раз. за 1 год работы и сейчас за 2 месяца тишина ни конво ничего другого. может везет, а может просто клики никто и не смотрит.
 
Верх