Пишу бота для 3d игры в nox, для перемещения персонажа используется управление движением как в MOBA (в данном случае посылаем зажатие ПКМ по координатам, и персонаж двигается в определенную сторону). Нужно что бы персонаж двигался в определенную сторону некоторое время и искал при этом некие пиксели на экране. Псевдокод:
CODE:sendmousedown(послали клик в направлении движения)
looptime(10000){ // двигаемся некоторое время и ищем обьект
if(findheapcolor() == 1){ // как нашли обьект
sendmouseup // отпустить
// некие действия
goto me;
}
}
sendmouseup
me:;
Но может возникнуть проблема: зажатие ПКМ в направлении движения мы послали, а персонаж не сдвинулся с места, хотя управление движением в MOBA показывает что ПКМ зажата. Что бы этого избежать делаю скриншот местности (она всегда статична когда персонаж не перемещается) и через некоторое время проверяю: если местность не изменилась - отпустить клавишу, пауза, нажать клавишу, перезапустить looptime. Псевдокод:
CODE: int счетчик сканирования = 0
sendmousedown(послали клик в направлении движения)
looptime(10000){ // двигаемся некоторое время и ищем обьект
if(findheapcolor() == 1){ // как нашли обьект
sendmouseup // отпустить
// некие действия
goto me;
}
счетчик сканирования ++
if(счетчик сканирования == 100) скриншот местности
if(счетчик сканирования == 500) поиск местности. Если найдена - отпустить клавишу, пауза, нажать клавишу, перезапустить looptime
}
sendmouseup
me:;
Хотя возможно это действительно лишняя функция т.к частный случай в конкретной игре да и нужно будет не только для looptime
(Добавление)
Хотя вообще можно воспользоваться таймером(Отредактировано автором: 21 Апреля, 2021 - 17:32:01) |