Что нового

Концепция создания бота

Belfigor

Модератор
Локальный модератор
Сообщения
3 551
Репутация
930
Archy26 сказал(а):
Здесь, я постараюсь подробно изложить свои умозаключения на тему создания бота для EVE-online на AutoIT 3.


Глава 1.
Концептуальная проработка бота.


Начнём с того, что вам, дорогой ботописатель, нужно определиться с тем какой это будет бот.

1) Будет ли это многозадачный бот, написаный для использования с количеством ботов больше двух, или это будет бот опрашивающий и производящий действия только в одном окне.

2) Ответьте для себя на вопрос - Для каких целей создаётся Ваш бот? Он будет универсален, или он создаётся только под хант или майн или ещё что либо одно? (Стоит ли говорить, что в первом случае количество работы по написанию и модификации а так же дополнению предложеных автором ветки форума Belfigor`ом модулей возрастает в десятки раз?)

3) Насколько умным вы хотите получить бота? Или он будет постоянно опрашивать окна (окно) и "осматривать его" в целях выяснения изменения окружающих условий, либо он будет просто тупо выполнять какие-то макросы, раз в секунду проглядывая локал на предмет врагов? А может быть вам вообще не нужно проглядывать локал на предмет врагов, но нужно постоянно куда-то кликать и что-то набивать в появляющихся окошках (как в случае например с автоторговлей)?


Обдумайте всё это и изложите в письменном виде для себя.


Глава 2.
Создание плана действий бота.

Если вы плохо представляете, что вы хотите от бота, то, я думаю, вы потратите НУ ОЧЕНЬ МНОГО ВРЕМЕНИ, на его создание. Вам необходимо как минум знать что будет делать бот. Это звучит немного забавно, но часто, создатели разнообразных (частенько и платных) ботов просто не до конца понимают что должен делать бот в той или иной игре и деньги покупателья оказываются потрачеными зря. Бот делает что-либо не так как нужно, или и того хуже, не то, что должен. Именно для меня, плюсом в создании собственного бота является то, что мой бот будет делать именно то, что я в него вложу, и именно так, как я ему скажу это делать Smile


Итак:

В случае однозадачного (выполняющего действия только с одним окном) бота, нужно проделать как минимум следующее:

1) создайте план действий, что именно выделаете в клиенте евы для достижения желаемого результата.

2) разбейте план на этапы. Приведу пример как бы я писал план действий для хант бота:


После старта бота:

1. проверяем находимся ли мы в хантерском корабле

2. Проверяем, что у нас в карго.

3. проверяем есть ли в карго боеприпасы.

4. проверяем есть ли в локале враги.

5. Андок со станции, ждём окончания прогрузки в космос.

. проверяем есть ли в локале враги.

6. Проверяем находимся ли мы в той системе, где нужно хантить.

7. отправляемся в нужную систему

8. прибыв в систему выбираем белт.

. проверяем есть ли в локале враги.

9. Варпаемся в выбраный белт.

. проверяем есть ли в локале враги.

10. проверяем наличие написи

. проверяем есть ли в локале враги.

11. проверяем расстояние до неписи.

. проверяем есть ли в локале враги.

12. Выбираем цели.

. проверяем есть ли в локале враги.

13. Лочим цели

. проверяем есть ли в локале враги.

14. Стреляем в первую залоченую цель

. проверяем есть ли в локале враги.

. проверяем количество хп шилда

. проверяем количество хп брони

. проверяем количество капы

. проверяем состояние цикла модулей оружия

. проверяем наличие целей

. проверяем количество целей

. проверяем есть ли в локале враги.

15. Стреляем в следующую залоченую цель.

---\\ \\---

19. определяем наличие белых вреков.

. проверяем есть ли в локале враги.

. проверяем количество хп шилда

. проверяем количество хп брони

. проверяем количество капы

. проверяем количество оперативного боезапаса (снаряды\ракеты загруженные в модули оружия. не для аммаров)
. проверяем общее количество боеприпасов

. проверяем есть ли в локале враги.

20. подлетаем к вреку

. проверяем есть ли в локале враги.

21. сальважим врек. (если нужно)

. проверяем есть ли в локале враги.

. проверяем количество капы

22. лутаем врек (если нужно)

. проверяем есть ли в локале враги.

23. летим в следующий белт.

. проверяем есть ли в локале враги.

ну и так далее. Вплоть до возвращения на станцию или на пос.


Список проверок, которые я бы постарался применить в хантерском боте здесь далеко далеко и ещё много раз далеко не полный. Каждая проверка имеет под собой условие для выполнения, ну и так далее.

И это далеко не всё, но, тем не менее, представление о том, что нужно сделать в для написания плана бота - даёт вполне достаточное для понимания.



Глава 3.
ДЕТАЛИЗАЦИЯ.


Теперь у вас есть полное понимание (с вашей точки зрения), плана того, что должен делать бот.
Настала пора улучшить это понимание, и заодно, немного получить представление о том, какое количество работы нас ждёт при написании бота.

Детализуйте каждый пункт плана действий бота, о котором я попытался вам рассказать в предыдущей главе, и внимательнейшим, самым детальным образом разберите каждое отдельное действие на составляющие. Стоит оговориться, что вы должны это делать, как бы с точки зрения компьютера. Если вам трудно понять о чём я говорю, попытайтесь представить себя челоеком, в задачи которого входит только слежение за курсором мыши, за нажатиями на кнопки мыши, за нажатиями на клавиатуру, и сочетаниями этих действий. Подробно разберите (а лучше даже запишите) что и куда, и в каком случае вы нажали, куда и в каком случае смотрели (это для проверок), и т.д.

Если вы успешно справились с поставленой в этой главе задачей, значит вы МЕГАКРУТЫ.
У Вас есть КОНЦЕПТУАЛЬНЫЙ ПЛАН БОТА. Жму вашу руку. Вы сделали как минимум четверть работы. Теперь пора приниматься за программирование.
Успехов Вам!

Спасибо за то, что дочитали.
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3 551
Репутация
930
Archy26 сказал(а):
Глава 4.
проект-документ.


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

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

Func MainLoop() ;- главный цикл
должен поочерёдно выполнять заранее заданные макросы, один из которых я опишу для примера ниже.
Результатом работы должна стать бесперебойная копка льда.
Dim $Enemy1, $Enemy2, $Enemy3 ;- цвета "врагов"
Dim $BelntNum ;- номер белта куда надо варпать.
Dim $StationNum ;- номер станции, куда надо варпать.
Dim $R1, $R2 ;- номера астеров (подразумевают строки в овервью, которые нужно залочить\рыть.
Dim $MinerCycleNum ;- Переменная для счётчика циклов.

ScanLocal($Enemy1, $Enemy2, $Enemy3)
LoadingIntoSpace()
ScanLocal($Enemy1, $Enemy2, $Enemy3)
WarpToBelt($BelntNum)
ScanLocal($Enemy1, $Enemy2, $Enemy3)
TargetIceRoids($R1, R2)
ScanLocal($Enemy1, $Enemy2, $Enemy3)
MinerCycle($MinerCycleNum)
ScanLocal($Enemy1, $Enemy2, $Enemy3)
WarpToStation($StationNum)
ScanLocal($Enemy1, $Enemy2, $Enemy3)
DocingStation($StationNum)
ScanLocal($Enemy1, $Enemy2, $Enemy3)
UnloadCargo()
EndFunc ;==> MainLoop()

Итак мы сделали набросок главного цикла,

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

Func ScanLocal()
Функция сканирования локала. Я предполагаю, что она должна быть реализована через стандартную функцию PixelSearch(), и должна реагировать на цвета нейтрала, красного и оранжевого минусов.
Переменные $Enemy1, $Enemy2, $Enemy3 подразумевают обозначеные(заранее определённые) цвета иконок нейтрала, красного и оранжевого минусов.
EndFunc

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

О, да я вижу у вас уже половина схемы готова? Отлично! Продолжайте в том же духе. Скоро вы начнёте автоматизировать не только еву, но и вообще всё подряд, в том числе и просмотр почты.

Интересно? Хехехе, ещё бы. Мне тоже Smile
 

dozzz33

ГаЛюЦиНоГеНнЫй ГрЫп
Сообщения
23
Репутация
2
ммм народ а подскажите как часто у вас проверяется локал чтобы успевал отварпывать при шухере?
планирую сделать через 2 действия т.е. что то типа того или все таки стоит через каждое действие проверять?

проверка модулей
варп
проверка локала
поиск цели
огонь
проверка локала
поиск цели
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3 551
Репутация
930
У нас локал проверяется настолько часто насколько возможно.
Да и в твоей схеме я бы проверку локала в сам процесс отстрела неписи включил :smile:
 

dozzz33

ГаЛюЦиНоГеНнЫй ГрЫп
Сообщения
23
Репутация
2
ну это схема просто для примера...
в общем да, проверять стоит как можно чаще или по крайней мере проверка перед варпом и распознаванием\отстрелом неписи должна быть всегда

хм вот интересно когда лучше сделать проверку на скрамблящую непись ведь они не сразу скрамблят)
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3 551
Репутация
930
На протяжении всего времени прибывания в белте.
 

hikki

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

Belfigor

Модератор
Локальный модератор
Сообщения
3 551
Репутация
930
А можно тупо вывести все эти проверки так, чтобы они каждые сколько-то мс выполнялись не зависимо от того в какой стадии сейчас находится скрипт
 

dozzz33

ГаЛюЦиНоГеНнЫй ГрЫп
Сообщения
23
Репутация
2
мм а подсказку бы как это организовать?)
единственное что приходит в голову это второй скрипт который постоянно чекает локал и с помощью этого сообщает первому скрипту

может как то лучше можно?
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3 551
Репутация
930
Без второго скрипта вразумительно этого не организовать
 

SyDr

Сидра
Сообщения
651
Репутация
158
;) Ну если второй скрипт должен передавать полученную информацию в первый, то лучше только одним скриптом и обойтись.
AdlibRegister
 
Верх