Что нового

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

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
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.
ДЕТАЛИЗАЦИЯ.


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

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

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

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

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
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 действия т.е. что то типа того или все таки стоит через каждое действие проверять?

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

Belfigor

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

dozzz33

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

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

Belfigor

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

hikki

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

Belfigor

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

dozzz33

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

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

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Без второго скрипта вразумительно этого не организовать
77.gif
 

SyDr

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