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

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

Вопрос:

У меня возникла проблема с моим скриптом, который перестает работать должным образом, примерно через каждые 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 также показывает вам время, которое каждая строка обрабатывала и запускала. Это может быть очень ценным в вашем случае.

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