lavpochta |
Отправлено: 14 Марта, 2021 - 21:11:55
|
Наблюдатель
Покинул форум
Сообщений всего: 27
Дата рег-ции: Нояб. 2019
Репутация: 0
|
Здравствуйте опять!
Опытным путем выяснил, что таймер перестаeт работать, если его вызов по счетчику таймера совпадет с вызовом функций key, keydown, keyup. Что в общем-то мешает автономной работе бота. Я пока вижу один выход - прерывать работу таймера и запускать вновь, но появляется тонкий момент, если оборвал таймер перед его активацией, то он начнет счет с нуля.
Пока проблему решаю тем, что дублирую функцию таймера обычной функцией. Есть что-то, что может помочь решить проблему?
Можно ли получить значение внутреннего счетчика таймера при его прерывании?(Отредактировано автором: 14 Марта, 2021 - 21:27:33) |
|
|
lavpochta |
Отправлено: 14 Марта, 2021 - 21:46:01
|
Наблюдатель
Покинул форум
Сообщений всего: 27
Дата рег-ции: Нояб. 2019
Репутация: 0
|
Я выделил отдельный кусок кода с виснущим таймером, прописал в него не саму функцию лечения персонажа, а только "флаг"лечение=1 каждые 3с, саму функцию лечения вызывал без таймера. Лечение происходило в ней по "флаг"=1, и сбрасывал после "флаг"=0,
записывал видео движения бота, отображая на экране точки таймера и нажатия клавиатуры по движению персонажем и таким образом вышел на этот вывод, при совпадении вызова нажатия клавиши с ожидаемым временем таймера - таймер так и не отобразил контрольное сообщение, перестал отображаться и "флаг"=1, он так и остался =0. Это произошло после 6-ти кратного успешного выполнения самой функции лечения.
(Добавление)
Kibor пишет: Странно.
Кстати а может ничего странного и нет, пишу для Lineage2 для Оффа, а там "Frost", влючаю Анти-Антикликер, пускаю прямо из под оболочки "Кибора" - вот оно глючит?(Отредактировано автором: 14 Марта, 2021 - 21:57:47) |
|
|
Budni |
Отправлено: 22 Марта, 2021 - 08:27:14
|
Специалист
Покинул форум
Сообщений всего: 419
Дата рег-ции: Март 2018
Репутация: 2
|
Добавлю и свои 5 копеек, когда в таймере вызываю функцию после нее не выполняется код что был в таймере.
Код с ошибкой (Отобразить)
CODE:
external(VOID, "Key", "Key", pathfolder()+"Key_SendKey_Wheel.dll");
string su="/PiP"; // строку, которую нужно напечатать
int r=0; // разбежность
int color[2]={65535}; //
int kol[2]={1}; // количество
int x[100], y[100]; // координаты
int R__HP=1;//Разбежность цвета полоски хп. (0-255)
int colorgame;
sleep(1000);
colorgame=getcolor(199, 60);
int hp=getcolor(142, 81);
int xr=399;
int yr=330;
sleep(1000);
enabletimer(0);
loop()
{
for (int a1=0; a1<19; a1++)
{
if(klik(0, 0, 800, 600)==1){sleep(rand(10,30))};
}
a1=0;
ing();
}
function klik(int kor1, int kor2, int kor3, int kor4) {
int k=findheapcolor(sizearray(x), #color[0], #kol[0], sizearray(color), 1, #x[0], #y[0], 24, 18, 41, 20, kor1, kor2, kor3, kor4, r, r, r, r, r, r, -1);
sort(398, 315, #x[0], #y[0], 12);
textbkcolor (255, 65280);
for(int i=0; i<k; i++)
{
int rondo1=rand(0,3);
int rondo2=rand(0,3);
textout(i, x[i]+kor1+rondo1, y[i]+kor2+rondo2, format(i), 0);
keydown(F3);
sleep(rand(20,30));
keyup(F3);
sleep(rand(20,30));
mouse(LEFT, x[i]+kor1, y[i]+kor2);
sleep(164);
if (finde()==0) ing();
return 1;
}
return 0;
}
function ing() {
keydown(F2);
sleep(rand(20,120));
keyup(F2);
sleep(rand(220,320));
while(waitin()==1)sleep(10);
}
function waitin(){
if (scanpixel(199, 60, colorgame, R__HP, R__HP, R__HP, R__HP, R__HP, R__HP, -1)==0)
{
return 1;
}
}
function finde() {
int Image_0[29][4];loadimage (#Image_0[0][0], "C:\shit.bmp");
int PosX_0[512];int PosY_0[512];
int k=findimage(-1, #Image_0[0][0], 255, #PosX_0[0], #PosY_0[0], 321, 196, 478, 287, -1);
if(k>=1) {
return 1;
}
return 0;
}
CREATE_TIMER(0, 170000)
{
sleep(rand(120,230));
mouse(LEFT, 1184, 16);
sleep(rand(320,340));
key(F7);
sleep(rand(320,340));
mouse(LEFT, 337, 13);
loop(10) {
if(klik(0, 0, 800, 600)==1){sleep(rand(10,300))};
}
//После лупов код дальше не выполняется
Key(su, 30);
sleep(rand(320,340));
key(RETURN);
sleep(rand(320,340));
key(45);
sleep(11000);
mouse(LEFT, 1135, 16);/
}
|
|
|
Kibor |
Отправлено: 22 Марта, 2021 - 08:41:19
|
Эксперт
Просматривает форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Budni пишет: Добавлю и свои 5 копеек, когда в таймере вызываю функцию после нее не выполняется код что был в таймере.
Запускаемый пример тут:
Все отрабатывает.
CODE:enabletimer(0);
loop()sleep(10);
function klik(int kor1, int kor2, int kor3, int kor4) {
if (finde()==0) ing();
return 1;
}
function ing() {
}
function waitin(){
if (scanpixel(199, 60, colorgame, R__HP, R__HP, R__HP, R__HP, R__HP, R__HP, -1)==0)
{
return 1;
}
}
function finde() {
int k=1;
if(k>=1) {
return 1;
}
return 0;
}
CREATE_TIMER(0, 1700)
{
beep(2000, 100);
loop(10) {
if(klik(0, 0, 800, 600)==1){sleep(rand(10,300))};
}
//После лупов код дальше не выполняется ?????
beep(1000, 100);
}
|
|
|
Kibor |
Отправлено: 22 Марта, 2021 - 08:46:25
|
Эксперт
Просматривает форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Budni , Ваш код не запускаем. Выкладывать надо код который будет работать просто скопировав его в Кибор.
Мой код по логике идентичный. Просто убрал действия, которые на таймер не влияют.
Для проверки нужен запускаемый, простой сценарий.
(Добавление)
Budni , Проблема в вызове одной функции в таймере и коде:
loop()
{
for (int a1=0; a1<19; a1++)
{
if(klik(0, 0, 800, 600)==1){sleep(rand(10,30))};
}
a1=0;
ing();
}
============
CREATE_TIMER(0, 1000)
{
loop(10) {
if(klik(0, 0, 800, 600)==1){sleep(rand(10,300))};
}
Не используйте в таймере функции которые используете в коде. |
|
|
|