Dantes3000 |
Отправлено: 25 Декабря, 2017 - 03:30:35
|
Эксперт
Покинул форум
Сообщений всего: 1489
Дата рег-ции: Июнь 2016
Репутация: 58
|
Kibor пишет: а сэмулировать? поставить рис который есть всегда.
я не в том смысле...Даже эмулировать не надо, я знаю, что всё будет ок, ибо выполнялся этот участок всегда без сучка и задоринки.
Вот убрал я таймер вообще (точнее из таймера весь код убрал) и работает без сбоев уже 3 часа.
Поскольку все скрипты, которые я одновременно запускал, так же одновременно и вырубались, то мне кажется, что тут именно в киборе проблема. То ли массив какой-то переполняется...то ли еще что-то.
Повторюсь и уточню: вырубаются все почти одновременно,но немного при разных условиях. В первом случае- перс после функции "крест" находит "руку" над умершим мобом и всё. В другом - нажимает на трупик и так же выбивает. Ну...я сделаю нормальный лог и узнаю по-точнее.
(Добавление)
а еще поэксперементирую так: раньше код выполнялся раз в 1 сек и кибор падал спустя минут 40. Если поставить 500мсек и он упадет раньше, то тут уж точно что-то не то с кибором. |
|
|
Kibor |
Отправлено: 25 Декабря, 2017 - 11:31:54
|
Эксперт
Просматривает форум
Сообщений всего: 8218
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Мне так не кажется. Использую таймеры активно.
(Добавление)
Вот акракадабра с применением таймера, переходов, остановки запуска его в цикле.
Но код составлен правильно и нигде нет ошибок.
Не падает, хоть таймер быстро зациклен.
CODE:int Image_0[26][20];
int Image_1[22][20];
int PosX_0[512];int PosY_0[512];
int PosX_1[512];int PosY_1[512];
int a=0;
int b=0;
int r=0;
loadimage (#Image_0[0][0], "C:\Users\Вова\Desktop\Image_0.bmp");
loadimage (#Image_1[0][0], "C:\Users\Вова\Desktop\Image_1.bmp");
enabletimer(1);
loop()
{
e:;
r++;
if (r>10){r=0; disabletimer(1);}
if (findimage(-1, #Image_1[0][0], 0, #PosX_1[0], #PosY_1[0], 0, 0, 1366, 768, -1)>0)
{
SD();
goto e:;
}
enabletimer(1);
sleep(10);
}
function SD()
{
b=0;
enabletimer(1);
}
CREATE_TIMER(1, 20)
{
if (findimage(-1, #Image_0[0][0], 0, #PosX_0[0], #PosY_0[0], 0, 0, 1366, 768, -1)>0)a++;
if (a>1000)a=0;
b++;
if (b>10){b=0; goto e;}
} |
|
|
Kibor |
Отправлено: 26 Декабря, 2017 - 03:40:37
|
Эксперт
Просматривает форум
Сообщений всего: 8218
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Dantes3000 ,
просмотрел код...
что делают переменные sum_KIB_T1, x_KIB_T1, y_KIB_T1 в функции цикл?
к вылету это конечно не приведет в этом случае, но неверную работу может создать если код таймера вклинится таким образом:
CODE:function findimage_(int #Image, int t, int p1, int p2, int m, int xm, int ym, int p3, 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;
pause(p1);
sumKIB=0;
if (t!=1) 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:
//сюда, так как sum; x[0]; y[0] это указатели на переменные sum_KIB_T1, x_KIB_T1, y_KIB_T1 будут в этом случае
// а если сюда вклинится таймер то они перепишутся функцией поика в таймере.
sumKIB=sum; xKIB=x[0]; yKIB=y[0];
pause(p2);
if (m==1){sendmouse(LEFT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); pause(p3);}
if (m==2){sendmouse(MIDDLE, xs+xKIB+xm, ys+yKIB+ym, w_KIB); pause(p3);}
if (m==3){sendmouse(RIGHT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); pause(p3);}
if (m==4){sendmousedown(LEFT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); pause(p3);}
if (m==5){sendmousedown(MIDDLE, xs+xKIB+xm, ys+yKIB+ym, w_KIB); pause(p3);}
if (m==6){sendmousedown(RIGHT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); pause(p3);}
if (m==7){sendmouseup(LEFT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); pause(p3);}
if (m==8){sendmouseup(MIDDLE, xs+xKIB+xm, ys+yKIB+ym, w_KIB); pause(p3);}
if (m==9){sendmouseup(RIGHT, xs+xKIB+xm, ys+yKIB+ym, w_KIB); pause(p3);}
if (m==10){sendmousemove(xs+xKIB+xm, ys+yKIB+ym, w_KIB); pause(p3);}
return sumKIB;
}
дальше..
на кой вызывать два раза функцию старт? что бы 2 раза грузить изображения?
я понимаю что подразумевалось получить в переменные ex_KIB, ey_KIB новые рамеры окна после
CODE:win wars;
getmouse(x_id, y_id);
wars=getwindow(1, x_id, y_id);
wars.width=740;
wars.height=740;
movewindow(wars);
но зачем? если мы и так их указываем..
только правильнее будет
Цитата: wars.widthclient=740;
wars.heightclient=740;
moveclient(wars);
или так не меняется?
С какой опцией собирается код?
фоновый режим.. окно или контрол?
если окно, то в ex_KIB, ey_KIB после такой смены размера останутся прежние размеры, несмотря на то что мы их программно сменили перед этим.
только при втором запуске они заимеют реальные размеры окна.
CODE:movewindow(wars);
start_();
messagebox (ex_KIB);
что там показывает? |
|
|
Dantes3000 |
Отправлено: 26 Декабря, 2017 - 16:58:34
|
Эксперт
Покинул форум
Сообщений всего: 1489
Дата рег-ции: Июнь 2016
Репутация: 58
|
Kibor пишет: что делают переменные sum_KIB_T1, x_KIB_T1, y_KIB_T1 в функции цикл?
Просто из таймера в функцию перекинул. По сути это ничего не поменяло, т.к таймера как такового уже нет. Единственный поиск "взять" в таймере посылает по метке и там не нужны эти переменные.
Kibor пишет: на кой вызывать два раза функцию старт?
Я бы и не против ее 1 раз вызвать, но для того чтобы функции в виз редакторе работали - они должны получить указатель в переменную w_KIB. Привязка по контролу.
Kibor пишет: но зачем? если мы и так их указываем..
Это старое решение) А сюда скопировал только чтобы размер изменить.Не знаю как иначе сделать. Работает же
Kibor пишет: что там показывает?
показывает 734(Отредактировано автором: 26 Декабря, 2017 - 16:59:40) |
|
|
|