Что нового

[HoMM online] Пишу бота

leon001

Новичок
Сообщения
22
Репутация
1
ссылка на сайт игры: http://homm.91.com/index/
Я новичок в этом языке программирования. Игра написана на С++ с львиной долей flash

Решил создать бота для этой игры в игре есть несколько рутинных моментов:
1. кач в локациях
2. качание некоторых скилов
3. выполнение квестов

для начала хотело бы попробовать автоматизировать эти процессы.

что необходимо для кача в локациях:
1. поиск объектов нападения(возможно передвижение по карте)
картинка..
Суть в том, что название животины часто меняется, но лвл остается тот же или меняется на 5+- это отследить легче мне кажется...
2. автоматическое ведение боя


для прокачки скилов:
1. необходимо найти объект для повышения скилов(например курсировать по карте в определеном квадрате координат)
2. после того как объект обнаружен необходимо тыкнуть на него лкм и проверить:
если скил действие происходит, то все гуд, если нет, то сменить позицию и лкм по объекту...
если счетчик = 5, то пометить объект как недоступный (текстуры дело злое...)
картинки...
тут показано все что бы хотелося найти и научится этим управлять

Выполнение квестов:
1. Есть возможность автоматического следования для "взять квест/сдать квест", но по дороге на персонажа могут напасть мобы и надо либо убить их, либо уйти с боя(вот тут надо как-то проверить те ли это мобы, которые надо для квеста), после завершения квеста пойти его сдать. // этот третий пункт не обязателен пока, это можно пока и ручками сделать... в то время как первые два надо тыкать 100500млн раз... это банально утомляет...
картинки..
показано где проверить можно сделан ли квест и что там надо делать :smile:

П.с. Вариант создания графической матрицы мне не интересен вообще, хочется создать бота работающего с объектами, а не с пикселями на экране. В идеале, чтоб это все работало и при свернутом окне. Буду рад любым подсказкам, ссылкам, содержательным советам.

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

Dellroc

Осваивающий
Сообщения
151
Репутация
31
Задумка стандартная, но для начала советую тебе обдумать основную часть, а именно - ведение боя. Для этого тебе нужно напрячься и написать какой-нибудь алгоритм. Мы же со своей стороны тебе подскажем что изменить и как лучше сделать.
 
Автор
L

leon001

Новичок
Сообщения
22
Репутация
1
Итак... на данном этапе есть 2 проблемы:
1. чет в хелпах не нашел как можно закрыть приложение, которое висит в трее
2. при вводе пароля команда send посылает символ. но тот не всегда пропечатывается... бывало. что вместо 10-12 символов пароля впечатывает лишь 2-3... так и не понял в чем пролема, есть подозрение. что дело в моем компе, но задержка между символами 1 секунда Оо(1000 милисекунд, если я правильно понял хелп о sleep), поле для ввода активное, в блокноте все работает замечательно >< проверил на WoT тоже нормально вводит пасс, при чем без всяких задержек...

З.ы. Про автобой... пока этот вопрос не стоит. в игре есть кнопка автобой, он туповат, но, для начала сойдет и такой
 

C2H5OH

AutoIT Гуру
Сообщения
1 473
Репутация
333
А зачем ты пароль посимвольно вводишь? Води весь сразу одним Send.
 
Автор
L

leon001

Новичок
Сообщения
22
Репутация
1
2 C2H5OH:
я писал выше, что не работает ни один из вариантов...
ни одним сендом, ни по 1 символу... вообще в то поле запихнуть ничего не выходит
 

C2H5OH

AutoIT Гуру
Сообщения
1 473
Репутация
333
Покаж код каким ты пароль запихиваешь.

И ещё. Вот если ты зайдешь в игру, скопируешь линк где ты находишься, потом IE закроешь. А потом снова запустишь и попробуещь зайти на туже страницу (вставишь линк и нажмешь "огонь!"). Тебе придётся снова пароль вводить или ты спокойно попадёшь на ту страницу где был?
 
Автор
L

leon001

Новичок
Сообщения
22
Репутация
1
странный ты парень...
1. игра не браузерка, это вроде достаточно отчетливо видно на скринах, игра имеет клиент с нормальным интерфейсом
2. бывает разные варианты ввода текста?)
код простой:
Код:
MouseClick("left", 814, 300, 1, 100000000) //установка фокуса мышкой на месте ввода пароля
Sleep (2000) // на всякий случай
Send("123456") // первый вариант
//второй вариант
Send("1")
Sleep (2000)
Send("2")
Sleep (2000)
Send("3")
Sleep (2000)
Send("4")
Sleep (2000)
Send("5")
Sleep (2000)
Send("6")
 

C2H5OH

AutoIT Гуру
Сообщения
1 473
Репутация
333
А если во втором варианте поставить
Код:
Send("{1}")

?

Я всё таки поддерживаю Dellrocа - написал бы ты сначала бой (у меня боты так и работают - я сам логинюсь, потом ALT+TAB и запуск бота). А то ты забуксовал на логине, хотя непонятно стоит ли на него тратить силы.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 596
Репутация
938
{CodeWarn}
 
Автор
L

leon001

Новичок
Сообщения
22
Репутация
1
{} ничего не дают, история та же
такое впечатление. что вы не читаете мои посты

1. В самой игре есть автобой. все что надо сделать - тыкнуть в определенную точку экрана. чтоб его запустить, делается лекгко:
1: 1 if - если нет по таким-то координатам пикселя или сравнение участка экрана с шаблоном, то слип 1-2 сек и тыкнуть лкм в определенный участок экрана... кстати с этим тоже непонятка, походу клиент написан коряво и аутоит не может работать в нем с относительными координатами, что в свою очередь не дает возможности играть в "свернутом режиме". Мб я просто нуб и чего-то не понимаю, но это меня пока мало волнует.

Основная проблема у меня на данном этапе, что каждый моб/объект (монстр или дерево как показано выше на скринах, имеет достаточно много вариантов отрисовки, а отслеживать 56 мобов с отрисовкой в 6 плоскостях это как-то печально... есть вариант затачивать под конкретную локу, но все-равно геморно да и будет достаточно сильну грузить машину...)

кстати проверил на других кликерах пароль тоже не вводится.

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

leon001

Новичок
Сообщения
22
Репутация
1
Поиск моба
Код:
While True
Local $size = WinGetPos ( "Heroes of Might and Magic Online", "" )
Local $coord = PixelSearch ( 420, 10, 1444, 768, 0x00ff00,"", 1)
If Not @error Then
ControlClick ( "Heroes of Might and Magic Online", "", "[CLASS:#32770; INSTANCE:1]", "left", 1, $coord[0] - $size[0] + 30, $coord[1] - $size[1] + 170)
EndIf
WEnd


тыканье на автобой:
Код:
ControlClick ( "Heroes of Might and Magic Online", "", "[CLASS:Button; INSTANCE:7]", "left", 1, 32, 10)


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

Dellroc

Осваивающий
Сообщения
151
Репутация
31
Для поиска мобов может подойти принцип бота "Бродяга". Он крутит мышкой в окне и если ID курсора мышки изменяется на нужный, то тыкает в цель. Читать про эту команду:
Код:
_WinAPI_GetCursorInfo
 
Автор
L

leon001

Новичок
Сообщения
22
Репутация
1
за идею спасибо, подумаю как ее реализовать, правда в поиске мобов никак не поможет да и вполне достаточно пиксельсерча)
 

Dellroc

Осваивающий
Сообщения
151
Репутация
31
PixelSearch находит уникальный пиксель и не факт, что он нужный. А если добавить проверку на изменение ID курсора, то бот будет реже ошибаться в определении цели.
 
Автор
L

leon001

Новичок
Сообщения
22
Репутация
1
там не меняется курсор вообще
 
Верх