Что нового

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

Belfigor

Модератор
Локальный модератор
Сообщения
3,602
Репутация
941
Итаг начнем. Отсчет времени будет вестись с момента начала написания кода, пока что мы определимся с целью, задачами, оговорим словестно алгоритмы и всякие прочие свистелки и перделки которые мы будем использовать в нашем коде :smile:
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3,602
Репутация
941
Кстати можете поздравить меня, я купил себе ноут Asus N71J и теперь могу нормально пользоваться евой и автоитом даже на работе :smile:. Итак, свежесозданный чар, бюджет проекта 20кк. Чар - кальдари, выбранный шип - Bantam с перспективой роста в Moa. Фит для бантама будет таков:
[Bantam, Trial Miner]

Expanded Cargohold I
Aoede Mining Laser Upgrade

Civilian Shield Booster I
Civilian Afterburner

Cu Vapor Particle Bore Stream I
Cu Vapor Particle Bore Stream I


Выеживаться смысла нету, ибо через 2 дня (а 90% этого вреемни у нас будет качаться фригат 4 лвл) мы пересядем на моа и будем по настоящему порабощать астероиды. Но даже на этот бантам придется поучиться 4 часа :smile:




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

На все вместе со скиллами я потратил 1,795,000 ISK, скиллы которые необходимо выучить для того чтобы использовать указанный выше фит:
Instant Recall
Anal Mind
Hull Upg 1
Mining 3 - самый долгий, 4 часа, вот думаю спать лечь, а потом продолжить :smile:
Mining Upg 1


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

Следующий шаг нашего обучения будет посадка на Osprey. Фит еще не придумал, главное сесть :smile:


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

Пришло время подумать о том, с чего начать и чем закончить? Начинать будем с минимума, а совершенству нет предела, в какой-то момент мне надоест и я заброшу этого бота. Я решил взять пример с yaodnako и постепенно от версии к версии усложнять бота и наращивать функционал. Поддержку дронов я вероятнее всего делать не буду.

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

Первый функционал:
1) Андок со станции
1.1 Понимание ситуации, на станции или в космосе
1.1.1 - 4 главных параметра, кнопка дока, кнопка меню (хотя можно и без нее но пусть будет), станция в овервью в первой строке, ройд в овервью в первой строке.
1.1.2 В настройках видим только астероиды и станции
1.1.3 Если видим кнопку дока - то мы в станции
1.1.4 Если не видим кнопку дока и видим кнопку меню и ройд - мы в белте
1.1.5 Если не видим кнопку дока и видим кнопку меню и станцию - требуется уточнение состояния станции
1.2 Инициализация отстыковки
1.2.1 Если п1.1.3 + трюм пуст и есть еще непустые белты - андок
1.2.2 Если п1.1.4 + трюм не полон и рядом есть астероиды - копаем
1.2.3 Если п1.1.4 + трюм полон - летим в док
1.2.4 Если п1.1.5 = у станции + трюм пуст - варп в белт
1.2.5 Если п1.1.5 = на расстоянии варпа и трюм не полон - варп в белт если возможно
2) Варп
2.1 Понимание ситуации в варпе или нет
2.2 Понимание куда надо варпать
2.3 Инициализация ухода в варп
3) Копка
3.1 Поиск астероида
3.2 Включение стрипов
3.3 Заполнение трюма
4) Док
4.1 Понимание ситуации (док у станции или из белта)
4.2 Инициализация процесса стыковки
4.2.1 Если п1.1.5 = у станции + трюм полон - в док
4.2.2 Если п1.1.5 = на расстоянии варпа и трюм полон - в док
5) Разгрузка
5.1 Понимание необходимости этого действия
5.2 Инициализация самого действия

Постараюсь по возможности все эти 5 пунктов расписать более развернуто.
 

dkrichun

Новичок
Сообщения
7
Репутация
0
Собираюсь переписать бота с нуля.
Т.к. иногда меня преследуют дисконекты (спасибо провайдеру) решил попробовать сделать такую логику

ЭТАП 1 - Где мы можем находиться? (pixelsearch)
1. На станции $station=1
2. В космосе в варпе $warping=1
3. В космосе в белте $inbelt=1
4. В космосе около станции $station=1

ЭТАП 2 - Проверяем в зависимости от местонахождения следующие ключевые параметры/обьекты
1. На станции
- смотрим трюм
- смотрим какой пояс у нас текущий
- смотрим сколько времени до ДТ
2. В космосе в варпе
- ждем когда закончится ВАРП
3. В космосе в белте
- есть ли цели в белте
- какое расстояние до целей
- смотрим трюм
- смотрим какой пояс у нас текущий
- смотрим сколько времени до ДТ
4. В космосе около станции
- смотрим трюм
- смотрим какой пояс у нас текущий
- смотрим сколько времени до ДТ
После проверок присваиваем соответствующие переменные

ЭТАП 3 - Действие
Сопоставляем данные полученные на 1 и 2 этапе и в зависимости от них уже начинаем действовать

Например
Мы на станции - $station = 1
Если мы на станции нужно проверить следующее:
Трюм почти пустой - $cargo < 30
Текущий номер пояса меньше максимального - $belt < $maxbelts+1
До ДТ еще долго - $dt = 0
Нужно
Выгрузиться - unload()
Ундокнуться - undock()
(После успешного ундока можно завести переменную $nearstation = 1 <- находимся около станции, для облегчения определения местоположения)

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

Р.S. Затруднение вызывает следующее - как определить в космосе возле станции ты или в белте,
единственное что придумал использовать переменные:
нажали ундок подождали появление треугольника = значит мы около станции $nearstation=1
потом нажали варп = ждем когда начнется варп - варп начался - $inbelt=1 (и ждем когда варп закончится)
Прилетели в белт - заполнили трюм - нажали варп на станцию - появился варп = $nearstation = 1(и ждем когда варп закончится)
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3,602
Репутация
941
если ты в белте, то ты видишь астероиды, если в белте нету астероидов то ты видишь станцию и тебе полюбому надо либо докаться на разгруз лететь, либо лететь на другой белт, это решение можно принять исходя из заполненности трюма, пункт 4.2 второго поста
 

yaodnako

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

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

Либо переменную:
как только андокнулись переменная - возлестанции=1.
как только прошла проверка на варп к белту,возлестанции=0.
как наполнили карго - после попытки дока и проверки на варп - возлестанции=1.при прилете к станции ждать дока.


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

можешь посмотреть как я все это реализовал в моем боте.в этом же разделе валяется.
или тут Бельф скорее всего что нибудь очень интересное накодит :beer:.
 

dkrichun

Новичок
Сообщения
7
Репутация
0
Таймеры использовать в принципе хороший вариант.
На счет белтов - если ты в белте и белт весь выкопан - можно в овервью добавить станции и искать белый квадрат в первой строке - если есть значит белт пустой или ты возле станции )
С меню тоже вариант хороший!
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3,602
Репутация
941
А я обычно по принципу описанному во 2-м посте работаю :smile:. Лучше перебдить чем недобдить :smile:
 

Lexx98

Продвинутый
Сообщения
272
Репутация
73
У моего нубомайнера всё просто. У него две закладки, в одной только станции, в другой только астероиды. Таким образом, если я не вижу астероидов, то переключение на закладку станций, выделение первой в списке (сортировка по расстоянию) и анализ доступности кнопок. Если доступна кнопка варп - значит я далеко от станции = в белте. Если варп недоступна, значит я у станции.
Если мне память не изменяет, давно я им не занимался.
В общем, я там по состоянию кнопок смотрю вроде бы.

А, там кажется есть ещё одна закладка, в которой только белты. Так вот, если в ближайший белт варпнуть нельзя, значит я уже в нём. Иначе - у станции.
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3,602
Репутация
941
Чтож, думаю сегодня смогу посвятить пару часов автоиту. Отбросим желание написать бота за пару часов, будем писать отдельными модулями. Абсолютно независимыми друг от друга но с возможностью работать вместе, скомпанованы они тоже будут в одну функцию :smile:
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3,602
Репутация
941
Я определился, будем писать каждый модуль как отдельного бота. Так интереснее
93.gif



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

К вопросу о том у станции мы или же просто мы в белте в котором пусто. Я использую настройки в которых отображаются только станция и астеры. Если мы видим станцию - то нам абсолютно без разницы в пустом ли мы белте. Нам нужно знать единственные две вещи, нужно нам докаться / лететь дальше и в каком мы белте. Мои боты по дефолту знают в каком они белте щас торчат, поэтому я всегда могу выполнить необходимое мне действие исходя из своего трюма :smile:


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

Эххх, жалко до поднятия сервера я не досидел, пора идти, но у меня в процессе ожидания появилась пара интересных (по крайней мере для меня) идей, которые я за выходные реализую и выложу :smile:
 

yaodnako

Продвинутый
Сообщения
120
Репутация
78
К вопросу о том у станции мы или же просто мы в белте в котором пусто. Я использую настройки в которых отображаются только станция и астеры. Если мы видим станцию - то нам абсолютно без разницы в пустом ли мы белте.
а зачем отображение станции вместе с астерами? (у меня только астеры).
Нам нужно знать единственные две вещи, нужно нам докаться / лететь дальше и в каком мы белте. Мои боты по дефолту знают в каком они белте щас торчат, поэтому я всегда могу выполнить необходимое мне действие исходя из своего трюма :smile:
ага.мы именно об этом и говорили,когда подразумевали использование переменных.т.е.бот помнит где он щас находится.
----------------------------------------------
У него две закладки, в одной только станции, в другой только астероиды. Таким образом, если я не вижу астероидов, то переключение на закладку станций, выделение первой в списке (сортировка по расстоянию) и анализ доступности кнопок. Если доступна кнопка варп - значит я далеко от станции = в белте. Если варп недоступна, значит я у станции.

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

Если устраивают незначительные убытки,то без разницы.Переменные использовать целесообразней - значительно быстрее.(в моем случае) 4 секунды потерь за цикл - это 160 секунд потерь за 10 часов майна=примерно 2200 кубов карго - 120 000 исков - в принципе не критично - но убыток(это при майне велдспара ;)) :whistle:.пара таких вот проверок и превышенных sleep'ов и мы значительно теряем иски.
 

dkrichun

Новичок
Сообщения
7
Репутация
0
Переменные наверное лучше

Нажали кнопку ундок - желтая кнопка пропала - ищем треугольник в космосе - нашли - следовательно $NearStation = 1
Далее - нажали варптобелт - ждем появление надписи WARPING - увидели надпись варпинг $NearStation = 0

По идее если дисконет произойдет в любом промежутке - переменная нас спасет!

З.Ы. И в овервью можно оставить только нужные астероиды + проверка по меню это палево, хочется чтобы бот был похож на человека ))) а если прикрутить "не прямолинейное движение курсора" и "конво от GM" то можно вообще в еву не играть )
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3,602
Репутация
941
Выложил тот модуль, который пригодится нам при написании бота: http://autoit-script.ru/index.php/topic,2744.0.html
 
Автор
B

Belfigor

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


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

Никакой циклической зависимости, запускать можно в любом состоянии из любого места.


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

На нубшипе цикл отрабатывается на 5+ :smile:
С очередным наш проект так сказать обновлением :smile:
Добавил файл с первый пост
 

Frag31337

Новичок
Сообщения
7
Репутация
2
Адаптировал бота, добавил пару новых ситуаций... Прекрасный шаблон для разработки бота.
Всё было прекрасно пока не случился один казус. Корабль прилетел в док с полным трюмом, и оказалось что автоит не способен отправить команду ^A, я перепробывал уже все варианты и слипы ставил, но выделить всё в трюме шипа так и не смог... Как быть?
Мне интересно аж стало в чём проблема, начал проверять на скрипте вида
Код:
sleep(1111)
Send("^A")

И на выходе не получил ничего, автоит всё так же отказывается нажимать на контрол A. Начал проверять в блокноте, и та же история, посылается просто нажатие на A, что делать, как быть? Можно ли эмулировать нажатие клавиши какойнить другой функцией?
автоит v3.3.6.1
вин7
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3,602
Репутация
941
Код:
Send("^a")

? Попробуй так
 

Frag31337

Новичок
Сообщения
7
Репутация
2
не работает так(= а работает вот так
Код:
Send("^ф")
 
Автор
B

Belfigor

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

DJ_Tommy

Продвинутый
Сообщения
236
Репутация
57
Код:
Send ("{CTRLDOWN}")
Sleep
Send ("a")
Sleep
Send ("{CTRLUP}")


я так решаю данную проблему
 

Lexx98

Продвинутый
Сообщения
272
Репутация
73
Ну и как уже не в одной теме советую попробовать поставить паузы на время нажатия клавиши, время паузы между нажатиями, и время нажатия мыши поболее стандартных. Для бота в виртуалках использую значения от 50 до 100.
Искать в параметрах функции AutoItSetOption() в хелпе.
 
Верх