Автокликер Clickermann :: Форум
Основной раздел => Использование => Topic started by: nolek on September 14, 2022, 12:49:01 PM
-
есть ли возможность подтягивать один и тот же внешний скрипт с GOTO в разных частях основного сценария ??
пробовал через SUB и INCLUDE , но ловлю глюки из-за того, что основной скрипт похоже генерирует все подпрограммы и инклуды и путается, так как имеем одинаковых таргетов по GOTO множество в разных местах.
еслиб как-то изолировать каждую подтяжку внешнего скрипта, то проблемы не было бы, или очистить после выполнения из основного скрипта..
-
есть ли возможность подтягивать один и тот же внешний скрипт с GOTO в разных частях основного сценария ??
В разных - нет. Метки же будут дублироваться.
Нужно импортировать в подпрограмму, а уже её вызывать по скрипту. Или этот внешний скрипт сразу оформить в виде подпрограммы.
Без кода неясно как там пытался сделать.
-
я пытался и инклудом и подпрограмой - результат один и тот же - глюк
часть основного сценария (выше в сценарии есть похожие места с похожими внешними файлами и одинаковыми названиями GOTO)
t6-8:
#include "\bl\t+2Kpdrdpr.cms"
#include "bl\sld48.cms"
GETSCREEN(624, 288, 851, 616)
IF_PICTURE_IN(624, 288, 851, 616, "\pict\001.bmp", -1, 60)
MOVE($_return1, $_return2)
WAIT(1)
ELSE
#include "bl\plznv.cms"
GOTO(bgn1)
END_IF
GETSCREEN(624, 288, 851, 616)
COLORMODE(8, 624, 288, 851, 616)
IF_PICTURE_IN(624, 288, 851, 616, "\pict\06.bmp", -1, 98)
#include "\bl\t+2Kpdrdpr.cms"
#include "bl\plznv.cms"
ELSE
#include "bl\plznv.cms"
END_IF
GOTO(bgn1)
часть файла t+2Kpdrdpr.cms
//1-1
GETSCREEN
IF_PICTURE_IN(624, 317, 680, 367, "\pict\001.bmp", -1, 60)
GOTO(1h1)
ELSE
GOTO(1h-2)
END_IF
1h1:
FOR($a=0, $a < 2)
MOVE(1013,831)
WAITMS(201)
LDOWN(1013,831)
WAITMS(99)
LUP(1013,831)
WAITMS(1501)
MOVE(652,343)
WAITMS(201)
LDOWN(652,343)
WAITMS(500)
MOVER(10,10)
WAITMS(201)
MOVE(1059,467)
WAITMS(201)
LUP(1059,467)
WAITMS(101)
MOVE(1014,740)
WAITMS(101)
LDOWN(1014,740)
MOVER(10,10)
WAITMS(102)
MOVE(1016,477)
WAITMS(103)
LUP(1016,477)
WAITMS(104)
MOVE(974,577)
WAITMS(902)
LDOWN(974,577)
WAITMS(99)
LUP(974,577)
WAITMS(4701)
GETSCREEN
IF_PICTURE_IN(988, 431, 1043, 491, "\pict\cri.bmp", -1, 60)
GOTO(1h-2)
END_IF
END_CYC
//1-2
1h-2:
GETSCREEN
IF_PICTURE_IN(664, 317, 716, 367, "\pict\001.bmp", -1, 60)
GOTO(1h2)
ELSE
GOTO(1h-3)
END_IF
1h2:
FOR($a=0, $a < 2)
MOVE(1013,831)
WAITMS(201)
LDOWN(1013,831)
WAITMS(99)
LUP(1013,831)
WAITMS(1501)
MOVE(691,343)
WAITMS(201)
LDOWN(691,343)
WAITMS(500)
MOVER(10,10)
WAITMS(201)
MOVE(1059,467)
WAITMS(201)
LUP(1059,467)
WAITMS(101)
MOVE(1014,740)
WAITMS(101)
LDOWN(1014,740)
MOVER(10,10)
WAITMS(102)
MOVE(1016,477)
WAITMS(103)
LUP(1016,477)
WAITMS(104)
MOVE(974,577)
WAITMS(902)
LDOWN(974,577)
WAITMS(99)
LUP(974,577)
WAITMS(4701)
GETSCREEN
IF_PICTURE_IN(988, 431, 1043, 491, "\pict\cri.bmp", -1, 60)
GOTO(1h-3)
END_IF
END_CYC
//1-3
1h-3:
GETSCREEN
IF_PICTURE_IN(704, 317, 752, 367, "\pict\001.bmp", -1, 60)
GOTO(1h3)
ELSE
GOTO(1h-4)
END_IF
1h3:
FOR($a=0, $a < 2)
MOVE(1013,831)
WAITMS(201)
LDOWN(1013,831)
WAITMS(99)
LUP(1013,831)
WAITMS(1501)
MOVE(727,343)
WAITMS(201)
LDOWN(727,343)
WAITMS(500)
MOVER(10,10)
WAITMS(201)
MOVE(1059,467)
WAITMS(201)
LUP(1059,467)
WAITMS(101)
MOVE(1014,740)
WAITMS(101)
LDOWN(1014,740)
MOVER(10,10)
WAITMS(102)
MOVE(1016,477)
WAITMS(103)
LUP(1016,477)
WAITMS(104)
MOVE(974,577)
WAITMS(902)
LDOWN(974,577)
WAITMS(99)
LUP(974,577)
WAITMS(4701)
GETSCREEN
IF_PICTURE_IN(988, 431, 1043, 491, "\pict\cri.bmp", -1, 60)
GOTO(1h-4)
END_IF
END_CYC
и дальше ещё 2000+ строк кода но они похожи
глюк при таком раскладе начинался уже на первом проходе
IF_PICTURE_IN(624, 288, 851, 616, "\pict\06.bmp", -1, 98)
#include "\bl\t+2Kpdrdpr.cms"
до конца не проигрывается, иногда на середине начинается сбой, когда в конце, и таких включений с GOTO еще около дестяка м везде пришлось на сейчас присваивать уникальные таргеты на GOTO и тогда всё работает.
пробовал через подпрограмму
описание в самом начале сценария штук 5 как ниже
sub(2Kpdrdpr)
#include "\bl\t+2Kpdrdpr.cms"
end_sub
и потом вызов
2Kpdrdpr()
но также сбоит и с такими же симптомами как и по инклуду
-
Если до этого простое правило, не выскакивать из циклов и подпрограмм с помощью GOTO, вы могли тупо игнорировать, то теперь можете практически наблюдать, почему этого делать нельзя. :o
-
GOTO из циклов работает без нареканий и к поднятой проблеме прямого отношения не имеет, из подпрограмм выхода по GOTO у меня нет.
при назначении уникального таргета по GOTO у меня проблем нет.
суть вопроса можно ли как-то изолировать от общего сценария отдельный скрипт подтягиваемый по инклуду или изолировать подпрограмму, например выполнили подпрограмму и основной сценарий не держит её в памяти.
-
суть вопроса можно ли как-то изолировать от общего сценария отдельный скрипт подтягиваемый по инклуду или изолировать подпрограмму, например выполнили подпрограмму и основной сценарий не держит её в памяти.
Конечно можно.
Потоки и проверка условий в этом помогут.
Если, ты такой щепетильный к сути, каким хочешь казаться, то используй последовательное открытие и закрытие скриптов в отдельных копиях программы и команды удаления переменных из памяти программы.
-
у меня нет переменных которым что-то присвоено - удалять нечего
последовательное открытие скриптов - это как ? или как их можно открыть паралельно ?
суть проблемы, что Clickermann.exe генерирует весь сценарий при открытии, то есть инклуды и подпрограммы все превращаются в единый сценарий, который хранится в памяти, и меня интересует есть ли какая то возможность очистить какую-то часть памяти, после исполнения, как очистка переменных, только к куску кода, пока что я не смог найти как.
Сейчас у меня мой вопрос решён уникальными таргетами по GOTO - через генерацию рэндом числа в диапазоне, но есть риск, что сгенерируется одинаковое число, и тогда сценарий словит глюк, запоминать переменные и писать проверку каждой на совпадение тоже не хочу, а вот если очистить из памяти сценария часть кода, тогда и уникальных таргетов ненадо и сценарий будет без глюков.
если у вас есть решение - покажите на участке кода, который я привёл выше в постах.
UPD
1) почитал про потоки, - в моём случае не вариант, слишком ресурсоёмкое.
2) отказался от генерации рэндом числа в диапазоне для уникальных таргетов GOTO, глючит почему-то, перезаписал вручную таргеты всё заработало как часы.
-
суть проблемы, что Clickermann.exe генерирует весь сценарий при открытии, то есть инклуды и подпрограммы все превращаются в единый сценарий, который хранится в памяти, и меня интересует есть ли какая то возможность очистить какую-то часть памяти, после исполнения, как очистка переменных, только к куску кода, пока что я не смог найти как.
Нет такой возможности. При правильном построении скрипта, это и не нужно.
Сейчас у меня мой вопрос решён уникальными таргетами по GOTO - через генерацию рэндом числа в диапазоне, но есть риск, что сгенерируется одинаковое число, и тогда сценарий словит глюк, запоминать переменные и писать проверку каждой на совпадение тоже не хочу, а вот если очистить из памяти сценария часть кода, тогда и уникальных таргетов ненадо и сценарий будет без глюков.
Ты не показал подробно как сделал через подпрограммы. Если инклюдит 1 раз - проблем быть не должно.
если у вас есть решение - покажите на участке кода, который я привёл выше в постах.
Проще чем перезапускать скрипты и плодить потоки сделать через подпрограмму.
Ещё правильней - избавиться от GOTO, тем более, что оно здесь совсем не нужно
файл t+2Kpdrdpr.cms
//1-1
GETSCREEN
IF_PICTURE_IN(624, 317, 680, 367, "\pict\001.bmp", -1, 60)
FOR($a=0, $a < 2)
MOVE(1013,831)
WAITMS(201)
LDOWN(1013,831)
WAITMS(99)
LUP(1013,831)
WAITMS(1501)
MOVE(652,343)
WAITMS(201)
LDOWN(652,343)
WAITMS(500)
MOVER(10,10)
WAITMS(201)
MOVE(1059,467)
WAITMS(201)
LUP(1059,467)
WAITMS(101)
MOVE(1014,740)
WAITMS(101)
LDOWN(1014,740)
MOVER(10,10)
WAITMS(102)
MOVE(1016,477)
WAITMS(103)
LUP(1016,477)
WAITMS(104)
MOVE(974,577)
WAITMS(902)
LDOWN(974,577)
WAITMS(99)
LUP(974,577)
WAITMS(4701)
GETSCREEN
IF_PICTURE_IN(988, 431, 1043, 491, "\pict\cri.bmp", -1, 60)
$a = 100
END_IF
END_CYC
END_IF
//1-2
GETSCREEN
IF_PICTURE_IN(664, 317, 716, 367, "\pict\001.bmp", -1, 60)
FOR($a=0, $a < 2)
MOVE(1013,831)
WAITMS(201)
LDOWN(1013,831)
WAITMS(99)
LUP(1013,831)
WAITMS(1501)
MOVE(691,343)
WAITMS(201)
LDOWN(691,343)
WAITMS(500)
MOVER(10,10)
WAITMS(201)
MOVE(1059,467)
WAITMS(201)
LUP(1059,467)
WAITMS(101)
MOVE(1014,740)
WAITMS(101)
LDOWN(1014,740)
MOVER(10,10)
WAITMS(102)
MOVE(1016,477)
WAITMS(103)
LUP(1016,477)
WAITMS(104)
MOVE(974,577)
WAITMS(902)
LDOWN(974,577)
WAITMS(99)
LUP(974,577)
WAITMS(4701)
GETSCREEN
IF_PICTURE_IN(988, 431, 1043, 491, "\pict\cri.bmp", -1, 60)
$a = 100
END_IF
END_CYC
END_IF
//1-3
GETSCREEN
IF_PICTURE_IN(704, 317, 752, 367, "\pict\001.bmp", -1, 60)
FOR($a=0, $a < 2)
MOVE(1013,831)
WAITMS(201)
LDOWN(1013,831)
WAITMS(99)
LUP(1013,831)
WAITMS(1501)
MOVE(727,343)
WAITMS(201)
LDOWN(727,343)
WAITMS(500)
MOVER(10,10)
WAITMS(201)
MOVE(1059,467)
WAITMS(201)
LUP(1059,467)
WAITMS(101)
MOVE(1014,740)
WAITMS(101)
LDOWN(1014,740)
MOVER(10,10)
WAITMS(102)
MOVE(1016,477)
WAITMS(103)
LUP(1016,477)
WAITMS(104)
MOVE(974,577)
WAITMS(902)
LDOWN(974,577)
WAITMS(99)
LUP(974,577)
WAITMS(4701)
GETSCREEN
IF_PICTURE_IN(988, 431, 1043, 491, "\pict\cri.bmp", -1, 60)
$a = 100
END_IF
END_CYC
END_IF
Т.к. действия однотипные, скрипт можно уменьшить больше, чем в 20 раз, с 2000 строк до < 100
SUB(pict001, $px1, $px2)
GETSCREEN
IF_PICTURE_IN($px1, 317, $px2, 367, "\pict\001.bmp", -1, 60)
FOR($a=0, $a < 2)
MOVE(1013,831)
WAITMS(201)
LDOWN(1013,831)
WAITMS(99)
LUP(1013,831)
WAITMS(1501)
MOVE($px1 + 27, 343)
WAITMS(201)
LDOWN($px1 + 27, 343)
WAITMS(500)
MOVER(10,10)
WAITMS(201)
MOVE(1059,467)
WAITMS(201)
LUP(1059,467)
WAITMS(101)
MOVE(1014,740)
WAITMS(101)
LDOWN(1014,740)
MOVER(10,10)
WAITMS(102)
MOVE(1016,477)
WAITMS(103)
LUP(1016,477)
WAITMS(104)
MOVE(974,577)
WAITMS(902)
LDOWN(974,577)
WAITMS(99)
LUP(974,577)
WAITMS(4701)
GETSCREEN
IF_PICTURE_IN(988, 431, 1043, 491, "\pict\cri.bmp", -1, 60)
$a = 100
END_IF
END_CYC
END_IF
pict001(624, 680)
pict001(664, 716)
pict001(704, 752)
А если там нужно пробегаться по решётке или ячейкам в ряд - то задав правильно координаты сделать ещё меньше пробегаясь циклом.
-
спасибо за советы, сейчас буду ковырять, отпишусь как расковыряю, спасибо за потраченное время.
там ячейки в таблице 6х8 - пример я уже получил, буду адаптировать, за несколько дней думаю справлюсь
-
всем спасибо за отклик, избавился от GOTO, действительно тупанул, ведь переменная и есть переменная, присвоили значение больше чем условие цикла и мы выходим из цикла.. =))
выкинул весь код с координатами каждой ячейки из таблицы и заменил циклами, теперь подтягиваю по инклуду нужный файл
// рабочий цикл
logshow(1, 100,100)
$1ax1 = 637 //тут стоит формула, но для примера поставил число
$1ay1 = 321
$6hx1 = $1ax1+216
$6hy1 = $1ay1+288
FOR($tby1=$1ay1, $tby1 < $6hy1-5, +36)
FOR($tbx1=$1ax1, $tbx1 < $6hx1-5, +36)
//вычисляем и присваиваем координаты ячейки, и всех остальных отталкиваясь от верхнего левого угла
$tbx2 = $tbx1+36
$tby2 = $tby1+36
//тут тело скрипта действий с ячейкой
logwrite($tbx1,$tby1)
waitms(100)
END_CYC
END_CYC
halt
-
названия переменных не начинайте с цифр, тогда они будут правильно подсвечиваться в графических редакторах.
-
главное чтоб скрипт работал, и в тех редакторах, которыми я пользуюсь всё подсвечивается нормально