#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
Pause
F12::
Pause
;Проблема: В онлайн игре прокачивается четверка лошадей. Они движутся по заданному маршруту. В режиме карты мира видно не лошадей и повозку, а их синюю иконку. При длительной работе игра может глюконуть и движение по маршруту прекратится. Об этом нужно уведомить пользователя, что-бы он исправил ситуацию. Определить факт глюка (микроразрыва соединения с сервером) можно проверяя, изменилось положение иконки или нет.
;Задача. Определить перемещается ли иконка с заданным цветом по заданному окну (игры, но в данном случае по окну Win 7 Paint'a, ибо скрипт тестируется на другом компе.). Если да, то всё норм, иначе - уведомить пользователя об этом
Loop
{
;Ищем, где на экране окно
WinGetPos , GameWindowPosX, GameWindowPosY, GameWindowWidth, GameWindowHeight, Безымянный - Paint
if (GameWindowPosX = "") {
MsgBox, Не могу найти окно игры, наверное она закрыта.
Break
}
;Этот кусок кода нужен что-бы определить цвет искомой иконки, если мы его не знаем. Если бы скрипт не глючил и не тестировался на Paint'е вместо Black Desert, то закоментированый кусок был-бы не нужен. Пока что целевой цвет изменен на правый верхний цвет (Фиолетовый) в палитре Paint'а
;MouseGetPos, MouseX, MouseY
;PixelGetColor, color, %MouseX%, %MouseY%
;MsgBox, The color at the current cursor position is %color%.
TargetColor = 0xA449A3
;Получаем величину разрешения экрана и проверяем, не уходит ли окно за его границы
SysGet, ScreenWidth, 78
SysGet, ScreenHeight, 79
if (GameWindowPosX + GameWindowWidth > ScreenWidth) OR (GameWindowPosY + GameWindowHeight > ScreenHeight) {
MsgBox, Окно не полностью видно, возможно ложное срабатывание.
Break
}
;Ищем, где на экране искомая иконка, если скрипт только запустился, то по всему окну, иначе, в окрестностях того места где оно было в последний раз
if (CurrentHorseIconPosX = "")
PixelSearch, CurrentHorseIconPosX, CurrentHorseIconPosY, GameWindowPosX, GameWindowPosY, (GameWindowPosX + GameWindowWidth), (GameWindowPosY + GameWindowHeight), %TargetColor%
else
PixelSearch, CurrentHorseIconPosX, CurrentHorseIconPosY, CurrentHorseIconPosX - 70, CurrentHorseIconPosY - 70, CurrentHorseIconPosX + 70, CurrentHorseIconPosY + 70, %TargetColor%
if (ErrorLevel = 1) {
MsgBox, Не видно искомой иконки. Откройте карту и убедитесь, что иконку видно на всей длинне маршрута.
Break
}
;Ждем пока иконка переместится, предпологается, что она должна двигаться. В случае тестирования на Paint'е нужно просто переместить окно на 140 пикселей, или не перемещать. Если она не найдена в прежних координатах, то всё норм. Если нет, то в игре бы это значило что на короткое время оборвалось интернет-соединение с сервером игры и это привело к тому что повозка встала. Об этом нужно уведомить пользователя. В процессе тестирования MsgBox нужно раскоментировать.
Sleep 3000
PixelSearch, CurrentHorseIconPosX, CurrentHorseIconPosY, CurrentHorseIconPosX - 70, CurrentHorseIconPosY - 70, CurrentHorseIconPosX + 70, CurrentHorseIconPosY + 70, %TargetColor%
if (ErrorLevel = 1) {
;MsgBox, Отлично, повозка передвинулась.
continue
}
else if (ErrorLevel = 0) {
MsgBox, Увы, повозка встала.
Break
}
}