Что нового

Пользовательское меню для бота

AxepoH

Новичок
Сообщения
16
Репутация
2
Покопавшись по форуму, изучив хэлп, и выпив 3 литра пива, написал бота.
Но очень хотелось бы сделать его универсальным.
Для этой задумки подскажите как сделать пользовательскую форму вида:
Где в квадратики автоматически заносятся координаты и цвет по нажатию кнопки
2ed3d262e53c.jpg

Global $antizavisalko, $antiz 'обьявляю глобальные переменные для таймера
while 1 'Тут все просто, запуск бота по клавише Esc
HotKeySet ("{ESC}","bott")
WEnd
func bott() 'начало бота
while 1 'бесконечный цикл)
WinActivate("Джаггернаут") 'Делаем активным окно бота
$antizavisalko = TimerInit() 'Включаем таймер на случай зависания клиента игры
Call ("regen") 'Вызываем функцию проверки здоровья персонажа
MouseClick("left", 1073, 530) 'Нажимаем на "Моба"
$colorExit = 7798784 'Задаем цвет кнопки выхода после убийства моба
Do 'Начало цикла убийства моба
$colorForExit = PixelGetColor (659,425) 'Снимаем цвет с места где должна быть кнопка выхода
$coloBut = PixelGetColor (671,336) 'Снимаем цвет с места где должна быть кнопка удара
if $coloBut = 4456448 then 'Если цвет кнопки удара тот что нужен нажимаем кнопку
MouseClick("left", 671,336) 'нажимаем кнопку
MouseClick("left", 700,300) 'отводим мышку в сторону, так как кнопки
EndIf 'подсвечиваются т.е. меняюц цвет
sleep (1000) 'Методом научного тыка определил что эта пауза нужна
call("timer") 'Вызов процедуры проверки на зависание скрипта
Until $colorExit = $colorForExit 'Крутим цикл пока непоявится цвет кнопки для выхода из боя
sleep (300)
MouseClick("left", 617, 435) 'Закрываем окно боя
MouseClick("left", 668, 506) 'Наводим мышку на место где должна быть кнопка закрытия еще одной менюшки
sleep (1000) 'Ждем 1 секунду, завершение боя, подсчет опыта и раздачу плюшек
Do 'Запускаем паузу (угадать невозможно) а ждать лишнее время нехочится до
$color = PixelGetColor (668,506) 'появления кнопки закрытия тупой менюшки. Цикл уже узнаваем описывать небуду
call("timer")
until $color = 7471104
MouseClick("left", 668, 506) 'Наконецто закрываем Тупую менюшку
WEnd 'Бежим в начало
EndFunc

func timer() 'Таймер от зависания бота, в принципе все элементарно, если 100сек
$antiz = TimerDiff($antizavisalko) 'бот неотвечает то закрывается окно, если надо то и сообщение об ошибке,
If $antiz > 100000 Then 'запускается снова клиент
MouseClick("left", 528, 259)
MouseClick("left", 541,439)
MouseClick("left", 541,439)
MouseClick("left", 1252, 6)
sleep (500)
MouseClick("left", 111, 139)
MouseClick("left", 111, 139)
Do
$color = PixelGetColor (233,127)
until $color = 16777215
MouseClick("left", 72, 223)
sleep (8000)
Call ("bott")
EndIf
EndFunc
Func regen() 'Функция регенерации здоровья персонажа, если здаровья мало
$color = PixelGetColor (195,162) 'он открывает сумку и из первого слота сумки ест абилки
MouseClick("left", 360, 144) 'пока невостановит здоровье, потом закрывает сумку
While $color = 2098437
$color = PixelGetColor (195,162)
MouseClick("left", 528, 259)
sleep (500)
call("timer")
WEnd
MouseClick("left", 1121, 185)
EndFunc
З.Ы Замечания по поводу скрипта бота тоже учту)
 

vovsla

Осваивающий
Сообщения
607
Репутация
36
по пользовательской форме поможет Koda http://koda.darkhost.ru/page.php?id=index

Замечания по поводу скрипта бота:
купи ещё 30 литров пива и читай доки :smile:

выставь Opt("MouseCoordMode", 0) и Opt("PixelCoordMode", 0), вместо MouseClick используй ControlClick чтобы тыкать в конкретную точку в окне, а не куда-то там в экран, при запуске выставляй конкретный размер и положение окна, по возможности максимально заменить ввод с мыши на клаву и использовать ControlSend, ещё хорошо бы максимально убрать слипы и привязываться к каким-либо событиям
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
:blink:
Да я думаю тут лучше цистерну пива надо :D
Код:
while 1                           ;Тут все просто, запуск бота по клавише Esc
   HotKeySet ("{ESC}","bott")
WEnd

Так делать нельзя. Нельзя вставлять в бесконечный цикл установку горячей клавиши!
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Vovsla сказал(а):
по пользовательской форме поможет Koda http://koda.darkhost.ru/page.php?id=index

Замечания по поводу скрипта бота:
купи ещё 30 литров пива и читай доки :smile:

выставь Opt("MouseCoordMode", 0) и Opt("PixelCoordMode", 0), вместо MouseClick используй ControlClick чтобы тыкать в конкретную точку в окне, а не куда-то там в экран, при запуске выставляй конкретный размер и положение окна, по возможности максимально заменить ввод с мыши на клаву и использовать ControlSend, ещё хорошо бы максимально убрать слипы и привязываться к каким-либо событиям
Если это клиент ммо игры то 99% что использовать контролы не удастся.
 
Автор
A

AxepoH

Новичок
Сообщения
16
Репутация
2
ЗБТ Джагернаут, можно только пиксель хантинг, потому как от создателей Двара и 3 королевства, потому как полсервера забанили на боте, так что только автокликер. Заморачиваться с окнами смысла невижу.
 

vovsla

Осваивающий
Сообщения
607
Репутация
36
да, склероз, у меня тоже не ControlClick, а MouseClick, т.к. в окне нет элементов, но при эмуляции клавиатурных нажатий использую ControlSend, в качестве controlID ставлю пустые ковычки
 

vovsla

Осваивающий
Сообщения
607
Репутация
36
есть, Send отсылает в активное окно, а ControlSend в конкретное, кстати, у меня при запуске клиента MMORPG в окне, при уже запущенном подноэкранном клиенте, Send всегда высылает в полноэкранное, это очень плохо для автологина, т.к. лог и пасс выводятся в общий чат в игре, поэтому я использую ControlSend и указываю хендл окна
 
Верх