Что нового

EVE Hunt Bot пишем за несколько часов :D

Belfigor

Модератор
Локальный модератор
Сообщения
3 590
Репутация
938
Появилась тут у меня неожиданная необходимость написать маленького хантера для импы. Эксперемент провести так сказать понадобилось :smile:. Ближайшие часов 5-10 я буду его писать с нуля и выкладывать сюда, мб кому будет интересно :smile:


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

И так, с чего начать? Перво наперво мы подберем фит для нашего корабля. Фит нужен такой чтобы выжимать максимум профита из процесса, тоесть лутать и сальважить мы тоже будем. Поскольку у чара 50кк сп особо ограничиваться т1 кораблями я не планирую, в будущем же этот бот будет расчитан на работу на триале. Итак, пошел я подбирать фит :D


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

Начинать наверное разумнее всего будет вот с такого фита:
[box title=TitleBox][Caracal, Hunt Bot]
Expanded Cargohold II
Expanded Cargohold II

Medium Shield Booster II
Cap Recharger II
Cap Recharger II
Cap Recharger II
10MN MicroWarpdrive I

Heavy Missile Launcher II, Thunderbolt Heavy Missile
Heavy Missile Launcher II, Thunderbolt Heavy Missile
Heavy Missile Launcher II, Thunderbolt Heavy Missile
Heavy Missile Launcher II, Thunderbolt Heavy Missile
Salvager I

Medium Cargohold Optimization I
Medium Cargohold Optimization I
Medium Cargohold Optimization I[/box]




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

Итак, корабль собрал, лечу на место преступления. Как прилечу начну писать :smile:


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

Итаг, я на месте. Первое что нам будет нужно - это варпаться по белтам. Думаю использовать систему букмарок - не модно, поэтому мы напишем простенький модуль для работы с игровым меню.


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

Собственно для работы с меню игры мы будем пользоваться вот этой вот фишкой: http://autoit-script.ru/index.php?topic=63.msg13800#msg13800
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3 590
Репутация
938
Вот на базе OpenMenu v0.6 у нас появился простенький скелетег который умеет варпаться по белтам :smile: . Ну точнее не то что умеет а может. Никаких обработчиков у нас пока нету, только две операционные функции :smile:



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

Далее нам нужно научиться искать и убивать непись :smile:
 

yaodnako

Продвинутый
Сообщения
120
Репутация
78
To Belfigor:
оч.интересно понаблюдать - может что-нибудь новенькое интересненькое и не выставляемое ранее интегрируешь в бота :smile:
Очень хочется увидеть побольше комментов внутри кода...так как я думаю на форуме много новичков,которым в этом интересно копаться и разбираться,а с комментами это гораздо интереснее происходит и быстрее...
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3 590
Репутация
938
Готова версия 0.2. Бот теперь умеет:
- Определять где он находится.
- Определять заполненность трюма.
- Определять есть ли в овервью непись и если нету неписи то есть ли вреки.
- Смотреть если ли у него кто на таргете.
- Определять находится ли он в процессе доккинга, варпа или же джампа.
- Узнавать активен ли какой-то конкретный модуль.
- Круто варпаться по системе.

Тем не менее ничего связанного с хантом бот пока что не умеет :smile:. Я перепатчил и засунул в код крутую функцию ConCheck содержащую в себе различные проверки по теме. Радуйтесь :smile:


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

Итак, вроде бы к набором датчиков которые мы будем использовать я определился и накодил их. Какие же датчики нам будут нужны?
Положение корябля (станция космос)
Состояние трюма (заполненность)
Состояние овервью (цели)
Наличие затаргеченной цели
Возможность затаргетить цель (дописал)
В варпе ли мы
В процессе ли мы джампа, дока или же варпа
Работают ли у нас модули
Простенький датчик на ХП (полное или нет) (дописал)

Вот этими дитчиками мы будем оперировать при разработке ИИ нашего бота. Если вдруг какой-то датчик забыт и потом окажется что его нужно дописать и включить в работу - это будет печально ибо придется переделывать всю логику ибо она у нас будет работать по пресетам :smile:



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

Вроде бы основа готова. Пора начинать писать операционные функции и попутно заполнять логику



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

Итак, с самого начала:
Обработаем ситуации на станции. Что нам надо там делать?
1) разгружать трюм
2) заправляться патронами (в нашем случае ракеты
Если бы мы были корабль был аммарским - 2-й пункт нас бы не тревожил, а так нам придется реализовать корявый метод заправки.
К чему будем привязываться? На станции настраиваем положение окна Items и My Cargo. My Cargo прикрепляем в левый нижний угол экрана, Items над ним. Далее у нас на станции должен быть Giant Secure Container. Куда бы мы его не засунули, когда мы докнемся в окне Итемс первым итемом будет лежать джайнт конт. В Джайнт конт мы суем наши патроны. При дозаправке патронами мы открываем Секур конт, перетаскиваем оттудова с зажатым шифотм к себе в трюм патроны и вводим нужное для зарядки количество патронов. Вот так собсно мы и будем решать проблему дозаправки патронами
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3 590
Репутация
938
Дописал еще 1 датчик для наблюдения за секур контейнером на станции. Бот научился разгружаться, перезаряжаться и андокаться
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3 590
Репутация
938
Итак, по прошествии 8 часов мы имеем рабочую бету.
Бот различает 23 ситуации и теперь может летать по белтам и убивать непись, правда не лутая и не сальважа, но таки задачу можно считать выполненной ибо прикрутить лут и сальваг - дело десяти минут :smile:
Код правда не откомменчен и под конец я уже его писал лишь бы закончить, но как пример для новичков оно самое то :smile:
 

DJ_Tommy

Продвинутый
Сообщения
235
Репутация
57
Столько , сколько ты делаешь для этой ветки не сделал еще никто. Спасибо. Себе то же скачаю - а то привязки к координатам уже надоели. Кстати, в прошлом году Вааб (ивсруком) по его заявлениям заработал чистыми порядка 1 кк рублей. Не планируешь выйти на его уровень и иметь пару десятков тысяч руб в месяц доп дохода?
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3 590
Репутация
938
Я стараюсь

Дохода с чего? С ботов или с их продажи? :smile:


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

Вай вай вай. Вчера после того как выложил 0.5 версию, решил научить бота лутать и сальважить, а поскольку хотелось и спать и написать - пошел по наикратчайшему пути подставления костылей. Кароче несколько модулей убиты насмерть и логика похоронена под толстым слоем тупняков :smile:. Щас с 0.5-й версии забекаплюсь и буду заново 0.6-ю делать :smile:
 

hikki

Продвинутый
Сообщения
233
Репутация
99
Тема однозначно нужная. Все ищут готового бота, даже не ради того чтоб просто скопировать, а посмотреть как работает, и сделать свое, а тут можно сказать процесс написания с нуля, причем уже имея опыт. Моего бота тормозит то что его основа написана была когда очень плохо понимал что делаю в автоите, поэтому логика кривая, алгоритм ужасен, а переделывать его страшно, проще с нуля начать)))
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3 590
Репутация
938
Ставим плюсики и жмем на "Полезное сообщение". Не стесняемся :smile:. Больше плюсиков - круче и более функциональнее модули будут интегрированы в код



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

В связи со специфичностью работы при луттинге и сальваге, в проверочную и операционную функции был интегрирован SIOp модуль. Спустя продолжительных тестов он заработал корректно. Теперь бот умеет узнавать состояние кнопок Selected Item (Кнопки должны быть маленькими) и различть состояния по "Могу нажать" "Не могу нажать", Бот научился нажимать на кнопки с 1 по 7. Так же бот научился различать расстояние до цели по позициям:
Дальше 10км
Ближе 10км
Дальше 1км но ближе 10км
Ближе 10км.

Пора возвращаться к перелопачиванию логики.
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3 590
Репутация
938
Переработан датчик Can Do? Для более удобной работы с выделенной целью.
Код:
Case $ToCheck = "Can Do?"
            If $Location <> "Space" Then Return "#" ;Если датчик ConCheck("Location") видит что мы не в космосе то вернуть #
            If $LogicState[6] = "No Target" Then Return "#" ;Если датчик ConCheck("Target") не видит выделенную цель то вернуть #
            If $LogicState[5] = "NPC" Then    ;Если датчик ConCheck("Overview") видит NPC то
                If ConCheck("SI", "Button", "Get Status", 5) = "Can Use" Then ;Если 5-я кнопка (Кнопка прицеливания на непись) активна то
                    Return "Can Target"
                Else
                    Return "Cannot Target"
                EndIf
            ElseIf $LogicState[4] = "Wreck" Then ;Иначе есди датчик ConCheck("Overview") видит Wreck то
                If ConCheck("SI", "Button", "Get Status", 6) = "Can Use" Then ;Если 6-я кнопка (Кнопка прицеливания на врек) активна то
                    If ConCheck("SI", "Button", "Get Status", 3) = "Can Use" Then ;Если 3-я кнопка (Кнопка открытия врека) активна то
                        Return "Can Open"
                    Else
                        Return "Can Target"
                    EndIf
                ElseIf
                    Return "Cannot Target"
                EndIf
            EndIf



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

Еще раз переработан модуль Can Do? Для более кашерной работы со вреками. В часть взаимодействующую с неписью изменений внесено небыло ибо и того что есть вполне хватает.
Код:
Case $ToCheck = "Can Do?"
			If $Location <> "Space" Then Return "#" ;Если датчик ConCheck("Location") видит что мы не в космосе то вернуть #
			If $LogicState[6] = "No Target" Then Return "#" ;Если датчик ConCheck("Target") не видит выделенную цель то вернуть #
			If $LogicState[5] = "NPC" Then	;Если датчик ConCheck("Overview") видит NPC то
				If ConCheck("SI", "Button", "Get Status", 5) = "Can Use" Then ;Если 5-я кнопка (Кнопка прицеливания на непись) активна то
					Return "Can Target" ;Сообщить о том что цель можно взять на таргет
				Else
					Return "Cannot Target" ;Сообщить о том что цель нельзя взять на таргет
				EndIf
			ElseIf $LogicState[5] = "Wreck" Then ;Иначе есди датчик ConCheck("Overview") видит Wreck то
				Local $6Use = ConCheck("SI", "Button", "Get Status", 6) ;Узнаем активна ли 6-я кнопка (Кнопка атаки)
				Local $6Lock = ConCheck("SI", "Button", "Get Locked", 6) ;Узнаем есть ли на 6-й кнопке красный крестик (Цель залочена)
				Local $3Use = ConCheck("SI", "Button", "Get Status", 3) ;Узнаем активна ли 3-я кнопка (Кнопка открытия врека)
				If $6Use = "Can Use" Then ;Если 6-я кнопка (Кнопка прицеливания на врек) активна то
					If $6Lock = "Locked" Then ;Если выделенная цель затаргечена (На ней есть красный крестик) то
						If $3Use = "Can Use" Then ;Если 3-я кнопка активна (Кнопка открытия врека) то
							Return "Can Open" ;Сообщить что мы можем открыть врек
						ElseIf $3Use = "Cannot Use" Then ;Иначе если 3-я кнопка не активна (Кнопка открытия врека) то
							Return "Need to Approach" ;Сообщить что нам нужно приблизиться к вреку
						EndIf
					ElseIf $6Lock = "Not Locked" Then ;Иначе если выделеннай цель не затаргечена (На ней отсутствует красный крестик) то
						Return "Need to Lock" ;Сообщить о том что нужно брать цель на таргет
					EndIf
				ElseIf $6Use = "Cannot Use" ;Если 6-я кнопка (Кнопка прицеливания на врек) НЕ активна то
					Return "Cannot target" ;Сообщить о том что мы не можем затаргетить объект
				EndIf
			EndIf
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3 590
Репутация
938
Итак, я таки добрался до работы. Правда тут у меня вшивый маленький нетбук, но я попробую продолжить написание бота :smile:
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3 590
Репутация
938
0.7 версия.
Переработана логика. ХП Отвязано от общей обработки и обрабатывается независимо от других датчиков. Данный вариант не умеет варпаться по белтам но на ура очнувшись в белте убивает всю непись и лутает все свои вреки что видит. Единственный баг - если запустить его с заранее выделенным в овервью вреком при наличии неписи в белте - он затупит пока вы не выделите непись.


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

P.S. кое-где модули слегка корявенько переписаны для успешной работы на нетбуке с 8-12 фпс :smile:
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3 590
Репутация
938
Итак, я вернулся домой, щас буду дальше допиливать логику :smile:
 

DJ_Tommy

Продвинутый
Сообщения
235
Репутация
57
Белф, он только маленькие кнопки распознает? А то я специально себе сделал большие - так кашернее выглядит.
(Кнопки управления бывают большими и маленькими и их размер зависит только от размера окна селектед итем, т.е. если в него влезут большие кнопки - значит они будут большие, если не влезут, значит будут маленькими. Если у вас большие кнопки, то не факт что они будут всегда такими, т.к. есть объекты с доп функциями, например палка поса, где кол-во кнопок становится больше и не всегда они могут влезть в окно)
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3 590
Репутация
938
Да, именно маленькие и только их. Не стоит забывать что это только пример :smile:. Писать тут полнофункционального бота для нулей как минимум глупо - ибо все равно никто если пропатчит даже этого импового бота или допишет в него что-то маломальски стоящее - сюда это не выложит, а про то что кто-то переделает этого бота под нули и поделиться с другими я вообще молчу, беспрецедентный случай :smile:, поэтому финальной версией бота из этой темы будет бот с ограниченным функционалом и для ханта в импе :smile:.
И тем не менее все же я не оставляю надежды на то что кто-то если будет изменять исходный код бота - будет делиться изменениями с другими :smile:


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

А у нас какая-нибудь нубонепись дает Мелтед капаситор при сальваге? :smile:
 

hikki

Продвинутый
Сообщения
233
Репутация
99
Конечно текущую версию неотдам))), а если отдам ту самую версию полугодовалой давности, что сутками пахала, но имела глюки страшнее моей жизни, то мне будет стыдно псц. Да и привязки опять, абсолютные, тоесть непойдет на другом коме 100пудей, надо будет код править.
 

DJ_Tommy

Продвинутый
Сообщения
235
Репутация
57
Код:
#include <Misc.au3>
Global $dll = DllOpen("user32.dll")

для чего используются эти вставки?
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3 590
Репутация
938
Для слежения за нажатием клавиш ALT и SHIFT
Код:
Case $Case1 = "Use Module"
			If $Case2 = "High" Then
				Send("{F"&$Case3&"}")
			ElseIf $Case2 = "Mid" Then
				Send("{ALTDOWN}")
				Sleep(250)
				If _IsPressed("12", $dll) Then 
					Send("{F"&$Case3&"}")
				EndIf
			ElseIf $Case2 = "Low" Then
				Send("{CTRLDOWN}")
				Sleep(250)
				If _IsPressed("11", $dll) Then 
					Send("{F"&$Case3&"}")
				EndIf
			Else
				ErrorMSG("Неверный ввод _Then('Use Module'")
			EndIf
			If _IsPressed("12", $dll) Then Send("{ALTUP}")
			If _IsPressed("11", $dll) Then Send("{CTRLUP}")
 

DJ_Tommy

Продвинутый
Сообщения
235
Репутация
57
от спс. буду знать.

Белф, а что нужно сделать что бы использовать тело этого бота только ради сальважинья в аномальке и ничего более?
 
Верх