AutoHotkey – скрипт перестает работать через некоторое время

Вопрос:

У меня возникла проблема с моим скриптом, который перестает работать должным образом, примерно через каждые 20-30 минут работы. Проблема, похоже, связана с циклом, который я создал, и он останавливается после этого определенного времени. Это не весь скрипт, который перестает работать, потому что, например, когда я нажимаю еще одну привязку на блокировку, он работает нормально. Кроме того, при перезагрузке скрипта autohotkey я получаю сообщение о том, что “Сценарий не может быть перезагружен”. которые я никогда не испытывал до этой проблемы с циклом.

Итак, вот код:

#IfWinActive Tibia
SplashTextOn, 100, 40, Running, WASD
WinMove, Running,, 1, 21

;SUSPEND AND INFORMATION===================================================
CapsLock::
Suspend
Toggle := !Toggle
if (Toggle = 0)
SplashTextOn, 90, 25, Running, WASD
WinMove, Running,, 1, 27

if (Toggle = 1)
{
SplashTextOn, 120, 40, NOT RUNNING, TYPING
WinMove, NOT RUNNING,, 1497, 69
}
return


NumpadAdd::
MsgBox, You have 0.5 seconds to mouse over MAIN BACKPACK.
Sleep, 500
MouseGetPos, mainbpxpos, mainbpypos

MsgBox, You have 0.5 seconds to mouse over MAIN SLOT BACKPACK.
Sleep, 500
MouseGetPos, mainbpslotxpos, mainbpslotypos

MsgBox, You have 0.5 seconds to mouse over FOOD.
Sleep, 500
MouseGetPos, foodxpos, foodypos

MsgBox, You have 0.5 seconds to mouse over HAND.
Sleep, 500
MouseGetPos, handxpos, handypos

MsgBox, You have 0.5 seconds to mouse over BLANK on GROUND.
Sleep, 500
MouseGetPos, blankgroundxpos, blankgroundypos

MsgBox, You have 0.5 seconds to mouse over LAST BLANK.
Sleep, 500
MouseGetPos, lastblankxpos, lastblankypos

MsgBox, You have 0.5 seconds to mouse over MADE RUNES POS.
Sleep, 500
MouseGetPos, maderunesxpos, maderunesypos

MsgBox, You have 0.5 seconds to mouse over RUNBACK POSITION (OUT HOUSE).
Sleep, 500
MouseGetPos, runbackxpos, runbackypos

MsgBox, You have 0.5 seconds to mouse over RUN POSITION (IN HOUSE).
Sleep, 500
MouseGetPos, runxpos, runypos

InputBox, blankrunesleft, Blank runes left, Enter the blank runes left, , 200, 170

MsgBox, SCRIPT IS ABOUT TO RUN, CLOSE ALL BPS!

BreakLoop = 0
iamout = 0
enemy = 0
Loop
{
if (BreakLoop = 1) {
break
}

Loop, %blankrunesleft%
{
if (BreakLoop = 1) {
break
}
SetMouseDelay, 5
battleOne := ReadMemory(0x5C6950,"Tibia")
;Notify(battleOne)
if (battleOne > 0) {
MouseClick, left, runxpos, runypos
Sleep, 30000
MouseClickDrag, left, mainbpslotxpos, mainbpslotypos, blankgroundxpos, blankgroundypos
Sleep, 400
Send, {Control Down}g{Control Up}
Sleep, 200
Send, {Enter}
Sleep, 5000
iamout = 0
}

if (battleOne == 0) {
if (iamout == 0) {
MouseClick, right, mainbpxpos, mainbpypos
Sleep, 200
MouseClick, right, blankgroundxpos, blankgroundypos
Sleep, 200
MouseClickDrag, left, blankgroundxpos, blankgroundypos, mainbpslotxpos, mainbpslotypos
Sleep, 200
MouseClick, left, runbackxpos, runbackypos
iamout = 1
Sleep, 500
}
}

mana := ReadMemory(0x5C682C,"Tibia")
if (iamout == 1) {
if (mana > 999) {
MouseClick, right, foodxpos, foodypos
Sleep, 60
MouseClick, right, foodxpos, foodypos
Sleep, 60
MouseClick, right, foodxpos, foodypos
Sleep, 100
MouseClickDrag, left, lastblankxpos, lastblankypos, handxpos, handypos
Sleep, 350
Send, Adori Vita Vis
Sleep, 100
Send, {Enter}
Sleep, 500
MouseClickDrag, left, handxpos, handypos, lastblankxpos, lastblankypos
Sleep, 350
blankrunesleft -= 1
}
}
if (iamout == 1) {
if (blankrunesleft == 0) {
Sleep, 100
MouseClick, left, runxpos, runypos
Sleep, 2000
MouseClickDrag, left, mainbpslotxpos, mainbpslotypos, maderunesxpos, maderunesypos
Sleep, 400
MouseClick, right, mainbpxpos, mainbpypos
Sleep, 500
blankrunesleft = 20
iamout = 0
}
}
}
}

Esc::
BreakLoop = 1
return

#IfWinActive

Изменение: Чтобы добавить, я перезапустил компьютер и выполнил еще 2 теста на этом скрипте. Результат состоял в том, что он всегда прекращает работу должным образом, ровно через 22 минуты. Я понятия не имею, что может быть причиной этого, буду признателен за любую помощь

Лучший ответ:

Возможно, если вы немного измените ситуацию.

Переместите это вверху с помощью других подпрограмм hotkey; Горячие клавиши всегда должны быть в верхней части вашего скрипта.

Esc::
BreakLoop = 1
return

положите return после последнего {

Это приведет к тому, что сценарий завершится, когда цикл закончится.

Что касается вашей остановки каждые 22 минуты – возможно ли, что это длина последовательности циклов? Поскольку сроки кажутся последовательными, вы должны быть в состоянии найти проблему, следя за одновременными событиями.

Кроме того, так вы можете сказать, в какой строке работает скрипт, когда он говорит, что он не перезагрузится? Если вы щелкните правой кнопкой мыши по значку в трее и выберите “Открыть”, вы сможете увидеть статус обрабатываемых линий. Такой метод debuggin также показывает вам время, которое каждая строка обрабатывала и запускала. Это может быть очень ценным в вашем случае.

Оцените статью
TechArks.Ru
Добавить комментарий