Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Таймер останавливает скрипт

Страниц (1): [1]
 

1. AlexDp - 11 Октября, 2020 - 02:57:14 - перейти к сообщению
Доброго дня. Прошу помощи. Так как сам уже не понимаю в чем проблема. Скрипт работает в Nox. Так как при долгом изучении форума я не смог обойти перетаскивание в фоновом режиме пришлось задействовать Макросы самого Nox привязав их к клавишам. Уже одну версию скрипта использовал в этой игре, но сделанной только на функциях и она прекрасно работает в фоновом режиме . Хотел переделать Поиск в самой игре на Таймеры и столкнулся с непонятной мне проблемой . При запуске скрипта он отрабатывает 1 раз в полном объеме, а потом все останавливается и работают только Таймеры. Кнопки нажимать не хочет.

Вот скрипт :

CODE:
int size_key_char_KIB=-1;

int sum_KIB_T0, x_KIB_T0, y_KIB_T0;
int e;
win w_KIB;
int ex_KIB, ey_KIB, sum_KIB, x_KIB, y_KIB;
int Image_0_KIB[18][21];

start_();

enabletimer (0);

m_KIB2: int z= rand (97,104);

key_(z, 1, "", 0, 0, 500);
mu_pause();


goto m_KIB2;
m_KIB4: a:;

disabletimer (0);




function start_()
{
load_image_();
pause(1000);
w_KIB=window ("QWidgetClassWindow", "Qt5QWindowIcon", window ("NoxPlayer", "Qt5QWindowIcon", -1));
ex_KIB=w_KIB.widthclient; ey_KIB=w_KIB.heightclient;
}


function key_(int k, int m, string text, int pc, int p1, int p2)
{
pause(p1);
if (m==-1)
{
if (size_key_char_KIB==-1)
{
size_key_char_KIB=100;
new char key_char_KIB[size_key_char_KIB+1];
}
int size_key=size(text);
if (size_key_char_KIB<size_key)
{
delete key_char_KIB;
size_key_char_KIB=size_key;
new char key_char_KIB[size_key_char_KIB+1];
}
strcpy(#key_char_KIB[0], text);
for (int n=0; n<size_key; n++){sendkey(key_char_KIB[n], w_KIB); sleep(pc);}
}
else
{
if (m==1) sendkey(k, w_KIB);
if (m==2) sendkeydown(k, w_KIB);
if (m==3) sendkeyup(k, w_KIB);
}
pause(p2);
}


function findimage_(int #Image, int t, int p1, int p2, int m, int xm, int ym, int mov_m, int mov_x, int mov_y, int p3, int wait, int cycle, int fon, int r, int p, int k, int xs, int ys, int xf, int yf, int#sum, int#x, int#y)
{
int timKIB, sumKIB, xKIB, yKIB, tx, ty, tcycle=0;
sty: pause(p1);
sumKIB=0;
if (t!=0) timKIB=gettime();
a: if (r==0 && p==100){sum=findimage(k, #Image[0][0], fon, #x[0], #y[0], xs, ys, xf, yf, w_KIB); if (sum>0) goto e;}
else {sum=findimage(k, #Image[0][0], fon, #x[0], #y[0], xs, ys, xf, yf, r, r, r, r, r, r, p, 1, w_KIB); if (sum>0) goto e;}
if (t==0) return 0;
if (gettime()-timKIB<t){sleep(20); goto a;}
return 0;
e: sumKIB=sum; xKIB=x[0]; yKIB=y[0];
pause(p2);
if (m==1){sendmouse(LEFT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==2){sendmouse(MIDDLE, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==3){sendmouse(RIGHT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==4){sendmousedown(LEFT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==5){sendmousedown(MIDDLE, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==6){sendmousedown(RIGHT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==7){sendmouseup(LEFT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==8){sendmouseup(MIDDLE, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==9){sendmouseup(RIGHT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==10){sendmousedbl(LEFT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==11){sendmousedbl(MIDDLE, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==12){sendmousedbl(RIGHT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==13)sendmousemove(xs+xKIB+xm, ys+yKIB+ym, w_KIB);
hy: if (mov_m==1)sendmousemove(mov_x, mov_y, w_KIB);
if (m>0 && m<14)pause(p3);
if (wait!=-1)
{
for (int ttim=gettime(); gettime()-ttim<wait; sleep(20))
{
if (r==0 && p==100){if (findimage(1, #Image[0][0], fon, #x[0], #y[0], xs, ys, xf, yf, w_KIB)==0)return sumKIB;}
else {if (findimage(1, #Image[0][0], fon, #x[0], #y[0], xs, ys, xf, yf, r, r, r, r, r, r, p, 1, w_KIB)==0)return sumKIB;}
}
if (tcycle<cycle){tcycle++; goto sty;}
return 0;
}
return sumKIB;
}



function findimage_T0(int #Image, int t, int p1, int p2, int m, int xm, int ym, int mov_m, int mov_x, int mov_y, int p3, int wait, int cycle, int fon, int r, int p, int k, int xs, int ys, int xf, int yf, int#sum, int#x, int#y)
{
int timKIB, sumKIB, xKIB, yKIB, tx, ty, tcycle=0;
sty: pause(p1);
sumKIB=0;
if (t!=0) timKIB=gettime();
a: if (r==0 && p==100){sum=findimage(k, #Image[0][0], fon, #x[0], #y[0], xs, ys, xf, yf, w_KIB); if (sum>0) goto e;}
else {sum=findimage(k, #Image[0][0], fon, #x[0], #y[0], xs, ys, xf, yf, r, r, r, r, r, r, p, 1, w_KIB); if (sum>0) goto e;}
if (t==0) return 0;
if (gettime()-timKIB<t){sleep(20); goto a;}
return 0;
e: sumKIB=sum; xKIB=x[0]; yKIB=y[0];
pause(p2);
if (m==1){sendmouse(LEFT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==2){sendmouse(MIDDLE, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==3){sendmouse(RIGHT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==4){sendmousedown(LEFT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==5){sendmousedown(MIDDLE, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==6){sendmousedown(RIGHT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==7){sendmouseup(LEFT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==8){sendmouseup(MIDDLE, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==9){sendmouseup(RIGHT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==10){sendmousedbl(LEFT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==11){sendmousedbl(MIDDLE, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==12){sendmousedbl(RIGHT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); goto hy;}
if (m==13)sendmousemove(xs+xKIB+xm, ys+yKIB+ym, w_KIB);
hy: if (mov_m==1)sendmousemove(mov_x, mov_y, w_KIB);
if (m>0 && m<14)pause(p3);
if (wait!=-1)
{
for (int ttim=gettime(); gettime()-ttim<wait; sleep(20))
{
if (r==0 && p==100){if (findimage(1, #Image[0][0], fon, #x[0], #y[0], xs, ys, xf, yf, w_KIB)==0)return sumKIB;}
else {if (findimage(1, #Image[0][0], fon, #x[0], #y[0], xs, ys, xf, yf, r, r, r, r, r, r, p, 1, w_KIB)==0)return sumKIB;}
}
if (tcycle<cycle){tcycle++; goto sty;}
return 0;
}
return sumKIB;
}




function load_image_()
{
loadimage (#Image_0_KIB[0][0], "C:\111 Бот\оконный\Руда.bmp");
}


CREATE_TIMER(0, 1000)
{

m_KIB1_T0: if (findimage_T0(#Image_0_KIB[0][0], 1000, 0, 0, 13, 0, 0, -1, 0, 0, 0, -1, -1, -1, 30, 70, 1, 0, 0, ex_KIB, ey_KIB, #sum_KIB_T0, #x_KIB_T0, #y_KIB_T0)>0) goto m_KIB2_T0;
else goto m_KIB3_T0;
m_KIB3_T0:
goto m_KIB1_T0;
m_KIB2_T0: goto a;

}


function mu_pause()
{

int t = gettime ();

m_KIB1: s:;


if ((gettime () - t)< 10000 ) goto m_KIB3;
else goto m_KIB5;
m_KIB3: sleep (10);
goto m_KIB1;
m_KIB5:

}



А вот визуальная сторона .
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]

И еще один вопрос . Если я правильно понял ... Увод паузы в функцию сделан для того что бы Таймер успевал в это время запускаться . Смотрел по отладчику ... во время работы функции запуска таймера ни разу не увидел .
Подскажите пожалуйста что ни так . Либо дайте ссылку на визуализированный подобный пример.
2. Zireael - 11 Октября, 2020 - 03:16:07 - перейти к сообщению
Из таймера переход в метке a:; от которой блок выключения таймера, а дальше нет никакого перехода. Вот скрипт и останавливается.
3. AlexDp - 11 Октября, 2020 - 03:24:44 - перейти к сообщению
 Zireael пишет:
Из таймера переход в метке a:; от которой блок выключения таймера, а дальше нет никакого перехода. Вот скрипт и останавливается.

Да вы правы . Дальше я просто не стал писать код . Остановка Таймера по блоку а: это при выполнении условия . ( то есть если нашли картинку ) но ведь если не нашли скрипт должен перейти опять а нажатию кнопок или я что то не так понимаю ? А скрипт висит и работают только таймеры ( согласно Отладчику ) Вот эту проблему не вижу как решить .
Не могу понять почему останавливается закольцованный цикл нажатия клавиш и почему во время увода паузы в функцию mu_pause() не успевает отрабатывать Таймер ?
4. Zireael - 11 Октября, 2020 - 03:31:58 - перейти к сообщению
 Цитата:
если не нашли скрипт должен перейти опять а нажатию кнопок

Нет, потому что у вас в таймере зациклен код. Поиск картинки руда, переход к блоку кода, переход к поиску картинки. Из таймера скрипт не выходит. Нужно убрать переход от блока кода к поиску картинки руда.
5. AlexDp - 11 Октября, 2020 - 03:40:45 - перейти к сообщению
 Zireael пишет:
Нет, потому что у вас в таймере зациклен код. Поиск картинки руда, переход к блоку кода, переход к поиску картинки. Из таймера скрипт не выходит. Нужно убрать переход от блока кода к поиску картинки руда.

Огромное вас СПАСИБО . Извиняюсь за невнимательность . Потерял сутки на такой мелочи.
Еще раз Спасибо .

Powered by ExBB FM 1.0 Final