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

Страниц (6): « 1 2 3 4 [5] 6 »
 

41. Junior - 28 Мая, 2018 - 14:43:17 - перейти к сообщению
 Цитата:
Вот снял короткое видео на котором показано как использовать фильтр динамики для этого.
Осваивайте инструментарий Кибор. Все это делается за минуты.


Я попробовал, проблема осталась, т.к. основная задача, не найти кнопку, а определить её состояние: вкл/выкл и если вкл, то выключить её, при том что кнопка полупрозрачная и фон меняется.

Появилась другая идея.

CODE:
int getc1, getc2, gcol1, gcol2, fp1=0, dif1, ob1, obcol1[3];
int getc3, getc4, gcol3, gcol4, fp2=0, dif2, ob2, obcol2[3];
int time1, time2, time3, time4, rzb1=20, rzb2==20;
int x1=799, y1=607, x2=850, y2=607;

starting:
pause(100);
//ñìîòðèì êàêîé öâåò ôîíà
getc1=getcolor(x1,y1);//ñìîòðèì öâåò íà êíîïêå
ob1=getcolor(799,593);
obcol1[0]=rvalue(ob1);
obcol1[1]=gvalue(ob1);
obcol1[2]=bvalue(ob1);
if (obcol1[0]>70) {gcol1=bvalue(getc1);}
else {gcol1=gvalue(getc1);}
//ñìîòðèì êàêîé öâåò ôîíà
getc3=getcolor(x2,y2);
ob2=getcolor(850,593);
obcol2[0]=rvalue(ob2);
obcol2[2]=gvalue(ob2);
obcol2[1]=bvalue(ob2);
if (obcol2[0]>70) {gcol3=bvalue(getc3);}
else {gcol3=gvalue(getc3);}
time1=gettime();
time2=time1;
a: if (time2-time1<4000){time2=gettime();

getc2=getcolor(x1,y1);
if (obcol2[0]>70) {gcol2=bvalue(getc2);}
else {gcol2=gvalue(getc2);}
dif1=gcol2-gcol1;
if ((dif1>rzb1||dif1<-1*rzb1)&&dif1!=0)
{fp1=1;textout(6, 799, 728, format(dif1), 1);}
textout(1, x1, y1+1, format(fp1), 1);
textout(2, 799, 628, format(getc2), 1);
textout(3, 799, 688, format(gcol1), 1);
textout(5, 799, 708, format(gcol2), 1);
if (dif1>20) textout(50, 799, 788, format(dif1), 1);
if (dif1<20) textout(51, 799, 808, format(dif1), 1);


getc4=getcolor(x2,y2);
if (obcol2[0]>70) {gcol4=bvalue(getc4);}
else {gcol4=gvalue(getc4);}
dif2=gcol4-gcol3;
if ((dif2>rzb2||dif2<-1*rzb2)&&dif2!=0)
{fp2=1; textout(14, 850, 728, format(gcol4-gcol3), 1);}
textout(10, x2, y2+1, format(fp2), 1);
textout(11, 850, 628, format(getc4), 1);
textout(12, 850, 688, format(gcol3), 1);
textout(13, 850, 708, format(gcol4), 1);
pause(10);
goto a;
}

if (fp1==1)
{textout(7, 799, 550, "Migaet", 1); fp1=0;
//mousemove(x1, y1);
//pause(100); mouse(LEFT, x1, y1);pause(100); mousemove(x1, y1-80);
pause(100);}
else {textout(7, 799, 550, "Ne migaet", 1);}

if (fp2==1)
{textout(8, 850, 550, "Migaet", 1); fp2=0;
//mousemove(x2, y2);
//pause(100); mouse(LEFT, x2, y2);pause(100); mousemove(x2, y2-80);
pause(100);}
else {textout(8, 850, 550, "Ne migaet", 1);}
goto starting;

Свою задачу он выполняет, но есть момент, который меня просто вымораживает и я хочу его устранить.
Суть кода такая: запоминаем начальные состояния 2ух соседних кнопок(по 1му пикселу на кнопку), запускаем таймер и внутри него спамим и запоминаем гетколор для каждой кнопки(по очереди), затем получаем разницу полученного ранее и полученного внутри таймера, если разница превышает определённое значение, то кнопка мигает и выводим на дисплей "1", если разница = 0, то выводим "0". Как я уже сказал, механизм работает, но есть нюанс... почему то первая кнопка постоянно проседает, в том плане, что даже если она мигает у неё проскакивает периодически 0(в показаниях), при том, что разница не нулевая(чисто визуально, по бегающим цифрам Улыбка), а вот вторая кнопка работает идеально. даёт только "1", когда мигает и "0", когда выключена. Пробовал, менять положение камеры, чтобы цвет фона был другим, менял блоки кнопок местами, из второй кнопки(работает идеально) делал первую. Результат, один - в кнопку 1 проскакивает "0".

Помогите найти ошибку.
42. Kibor - 28 Мая, 2018 - 16:21:28 - перейти к сообщению
Все такие задачи можно решать исключительно работая с изображением.
Только так можно найти оптимальное решение. И уверен оно не будет сложным.
43. Zireael - 28 Мая, 2018 - 17:44:17 - перейти к сообщению
CODE:
int rzb2==20

Один знак = должен быть.
Что за игра?
44. Junior - 29 Мая, 2018 - 19:50:05 - перейти к сообщению
 Zireael пишет:
CODE:
int rzb2==20

Один знак = должен быть.
Что за игра?


EVE онлайн


Использовал постоянно pause, пока не узнал, что ещё есть sleep. Чем они отличаются, в каких случаях нужно каждую из них использовать?
45. Dantes3000 - 30 Мая, 2018 - 07:00:18 - перейти к сообщению
Junior , pause(1000) это то же самое, что sleep(500); sleep(500);
(Добавление)
потому что во время sleep(10000000), например, кибор несокрушимый Ctrl+Shift+Z
46. Kibor - 30 Мая, 2018 - 07:17:08 - перейти к сообщению
Слип использовать до 500 мсек для точных замеров.
47. Zireael - 31 Мая, 2018 - 04:38:42 - перейти к сообщению
 Цитата:
EVE онлайн

https://drive.google.com/open?id...9ABN575G0FBZZ2WV
В архиве видео, как сделать картинку и как определить мигает кнопка или нет.
Код, который использовался (Отобразить)

Тут не проверяется есть ли вообще картинка на экране. Если надо добавляйте поиск с меньшей разбежностью.
48. Kibor - 31 Мая, 2018 - 05:28:53 - перейти к сообщению
 Zireael пишет:
В архиве видео, как сделать картинку

Это проще делается. Не надо выделять попиксельно. Надо выделить всю область и в меню правой кнопки выбрать (снять выделение с динамики). Останется только не динамичная область выделенной.
49. Junior - 31 Мая, 2018 - 10:49:56 - перейти к сообщению
Это гениально Улыбка И код простой(небольшой), у меня же огромная портянка получилась Улыбка Завтра попробую, когда высплюсь.
50. Junior - 01 Июня, 2018 - 19:51:33 - перейти к сообщению
Но не сработало Недовольство, огорчение Постоянно пишет вкл, если разбег выкрутить меньше 100, то постоянно пишет выкл, при 100% совпадении даже если разбег крутить от 0 до бесконечности, всё равно пишет вкл. как у тебя получилось ? Улыбка

Powered by ExBB FM 1.0 Final