Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: HasTigeR on July 11, 2017, 05:51:36 PM
-
Добрый день, вот код
DEFINE($a)
FOR($a, $a < 20)
GETSCREEN($nkan_x,$nkan_y,$nkan_x+1,$nkan_y+1)
DEFINE($nkan)
$nkan = PXL($nkan_x,$nkan_y)
PRINT("nkan", $nkan)
IF($nkan = 11862012) //если на главном окне
goto(zagr)
ELSE
WAIT(1)
END_IF
END_CYC
goto(end)
zagr:
UNDEFINE($nkan)
UNDEFINE($a)
DEFINE($a)
FOR($a,$a < 60) //проверка не идёт ли загрузка
DEFINE($zagr)
GETSCREEN($zagr_x,$zagr_y,$zagr_x+1,$zagr_y+1)
$zagr = PXL($zagr_x,$zagr_y)
PRINT("zagr",$zagr)
IF ($zagr = 16579068) // подставить 16579068 если метаморфоз или 1600355 если стандартное древо
goto(arena)
ELSE
WAIT(1)
END_IF
END_CYC
goto(end)
arena:
UNDEFINE($a)
UNDEFINE($zagr)
LCLICK($arena_x,$arena_y) //идем на арену
Как правильно прописать два условия в строку
IF ($zagr = 16579068) // подставить 16579068 если метаморфоз или 1600355 если стандартное древо
потому что такие коды почему то
IF ($zagr = 16579068 ^ $zagr = 1600355)
IF ($zagr = 16579068 | $zagr = 1600355)
IF ($zagr = (16579068 ^1600355))
не работают
заранее спасибо
-
Немного поправил. Выпрыгивать из циклов по goto() ЗАПРЕЩЕНО!
FOR($a=0, $a < 20)
GETSCREEN($nkan_x,$nkan_y,$nkan_x+1,$nkan_y+1)
$nkan = PXL($nkan_x,$nkan_y)
PRINT("nkan", $nkan)
IF($nkan = 11862012) //если на главном окне
$a=99
FOR($b=0,$b < 60) //проверка не идёт ли загрузка
GETSCREEN($zagr_x,$zagr_y,$zagr_x+1,$zagr_y+1)
$zagr = PXL($zagr_x,$zagr_y)
PRINT("zagr",$zagr)
IF (($zagr = 16579068)|($zagr = 1600355)) // подставить 16579068 если метаморфоз или 1600355 если стандартное древо
$b=99
LCLICK($arena_x,$arena_y) //идем на арену
ELSE
WAIT(1)
END_IF
END_CYC
ELSE
WAIT(1)
END_IF
END_CYC
-
Немного поправил. Выпрыгивать из циклов по goto() ЗАПРЕЩЕНО!
Почему запрещено? проблема в том что мне надо что то вроде проверок на ошибки, то есть DEFINE($a)
FOR($a, $a < 20)
GETSCREEN($nkan_x,$nkan_y,$nkan_x+1,$nkan_y+1)
DEFINE($nkan)
$nkan = PXL($nkan_x,$nkan_y)
PRINT("nkan", $nkan)
IF($nkan = 11862012) //если на главном окне
goto(zagr)
ELSE
WAIT(1)
END_IF
END_CYC
goto(end)
....
end:
IF (проверка)
//исправить и начать цикл заново
ELSE IF(следующая проверка)
//исправить и начать цикл заново
ELSE
....
...
END_IF
END_IF
и так по отношению почти к каждому циклу. Что то вроде тотального контроля. И я вообще не представляю как это сделать без goto. Точнее представляю, но код будет в разы объёмнее.
И еще, разве объявлять переменные не требуется? у вас в коде DEFINE отсутствует, и такое не в первые вижу. Не пойму этой механики
-
Нет не требуется. Кликер сам при первом упоминании объявляет переменную. Функция DEFINE может пригодиться если нужно объявить переменную с каким то начальным значением и после не менять это значение пока переменная существует
DEFINE($a, 1000)
LOGWRITE ($a)
INC($a,1)
WAITMS(500)
Выпрыгивать из циклов и подпрограмм нельзя. Конечно если ты так напишешь кликер молчком будет молотить код но это неминуемо приведет к глюкам. Потому что выполнение, для себя, не вышло из подпрограммы или цикла, и когда ты снова войдешь в подпрограмму то кликер подумает что ты входишь в подпрограмму в подпрограмме.
Вот пример показывающий глюк
SUB(prog, $a)
skip:
WHILE($q < 3)
inc($q)
print($q)
GOTO(skip)
END_CYC
print($a," в подпрограмме")
END_SUB
print("начало")
prog("подпрограмма")
print("конец")
HALT
Лог:
21:10:04 начало
21:10:04 1
21:10:04 2
21:10:04 3
21:10:04 подпрограмма в подпрограмме
21:10:04 0 в подпрограмме
21:10:04 0 в подпрограмме
21:10:04 0 в подпрограмме
21:10:04 конец
Кликер подумал что было 3 вложенных цикла и поэтому еще три раза прокрутил подпрограмму написав 0 в подпрограмме чего в нормальном скрипте быть не может.
-
Спасибо, понял, то есть первый проход будет нормальный, а потом глюки. Тогда такой код будет рабочим?
FOR($c = 0, $c < 300)
FOR($a = 0, $a < 15)
IF(условие)
$a = 16
ELSE
WAIT(1)
END_IF
END_CYC
IF ($a = 14)
#include "error cms"
goto(end)
END_IF
FOR($a = 0, $a < 15)
IF(условие)
$a = 16
ELSE
WAIT(1)
END_IF
END_CYC
IF ($a = 14)
#include "error cms"
goto(end)
END_IF
end:
END_CYC
а в файле error.cms
IF(//проверка)
//устранение ошибки
goto(endEr)
ELSE
IF(//проверка)
//устранение ошибки
goto(endEr)
ELSE
IF
...
goto(endEr)
ELSE
END_IF
END_IF
END_IF
Вроде goto не в циклах получается. А то меня вложенные циклы выше немного смутили)
-
FOR($a = 0, $a < 15)
IF(условие)
$a = 16 // если условие верно прерываем цикл
ELSE
WAIT(1)
END_IF
// Цикл наращивает переменную в этом месте. А это значит что при выходе из цикла переменная будет равна: В случае если условие верно - 17, если не верно - 15.
END_CYC
IF ($a = 14) // Значит это условие не сработает.
#include "error.cms" // если эта строка находится внутри цикла, и в файле error.cms есть переход на метку, а сама метка находится за пределами цикла, это считается "прыжком" из него.
goto(end)
END_IF
-
FOR($a = 0, $a < 15)
IF(условие)
$a = 16 // если условие верно прерываем цикл
ELSE
WAIT(1)
END_IF
// Цикл наращивает переменную в этом месте. А это значит что при выходе из цикла переменная будет равна: В случае если условие верно - 17, если не верно - 15.
END_CYC
IF ($a = 14) // Значит это условие не сработает.
#include "error.cms" // если эта строка находится внутри цикла, и в файле error.cms есть переход на метку, а сама метка находится за пределами цикла, это считается "прыжком" из него.
goto(end)
END_IF
да спасибо, немного ошибся. Не подумал что он всё равно нарастит ещё единицу после прерывания цикла.
FOR($c = 0, $c < 300)
FOR($a = 0, $a < 15)
IF(условие)
$a = 16
ELSE
WAIT(1)
END_IF
END_CYC
IF ($a = 15)
#include "error.cms"
goto(end)
END_IF
FOR($a = 0, $a < 15)
IF(условие)
$a = 16
ELSE
WAIT(1)
END_IF
END_CYC
IF ($a = 15)
#include "error.cms"
goto(end)
END_IF
end:
END_CYC
error.cms
IF(//проверка)
//устранение ошибки
goto(endEr)
ELSE
IF(//проверка)
//устранение ошибки
goto(endEr)
ELSE
IF
...
goto(endEr)
ELSE
END_IF
END_IF
END_IF
endEr:
Так будет работать?
-
Работать будет. Но лучше избавляйся от goto(). Ну ооочень у тебя их много. :)
В error.cms они вообще не нужны. Там в любом случае все придет в нужное место.
-
Работать будет. Но лучше избавляйся от goto(). Ну ооочень у тебя их много. :)
В error.cms они вообще не нужны. Там в любом случае все придет в нужное место.
ну уже появилась идея свитчем делать error.cms, потом подумаю :D главное принцип работы понял :)
не хватает операторов типа break; continue; из с++ мне)