l2mrakg |
Отправлено: 12 Июня, 2019 - 18:09:54
|
Участник
Покинул форум
Сообщений всего: 50
Дата рег-ции: Март 2018
Откуда: Одесса, Украина.
Репутация: 1
|
Подскажите как подсветить найденые зоны динамикой?
CODE:
function finddynamic_(int onx, int ony, int oox, int ooy, int t, int pscan, int p1, int p2, int m, int xm, int ym, int p3, int k, int xs, int ys, int xf, int yf, int#sum, int#x, int#y)
{
xs=xs+sx_KIB; ys=ys+sy_KIB; xf=xf+sx_KIB; yf=yf+sy_KIB;
int timKIB, sumKIB, xKIB, yKIB;
pause(p1);
sumKIB=0;
if (t!=0) timKIB=gettime();
a: finddynamic(0, #x[0], #y[0], 0, 0, 0, 0, xs, ys, xf, yf, -1);
pause(pscan);
sum=finddynamic(k, #x[0], #y[0], onx, ony, oox, ooy, xs, ys, xf, yf, -1);
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){mouse(LEFT, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==2){mouse(MIDDLE, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==3){mouse(RIGHT, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==4){mousedown(LEFT, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==5){mousedown(MIDDLE, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==6){mousedown(RIGHT, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==7){mouseup(LEFT, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==8){mouseup(MIDDLE, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==9){mouseup(RIGHT, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==10){mousedbl(LEFT, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==11){mousedbl(MIDDLE, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==12){mousedbl(RIGHT, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==13){mousemove(xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
return sumKIB;
}
|
|
|
Zireael |
Отправлено: 12 Июня, 2019 - 19:25:53
|
Эксперт
Покинул форум
Сообщений всего: 4467
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: sum=finddynamic(k, #x[0], #y[0], onx, ony, oox, ooy, xs, ys, xf, yf, -1);
if (sum>0) goto e;
Примерно так:
CODE:sum=finddynamic(k, #x[0], #y[0], onx, ony, oox, ooy, xs, ys, xf, yf, -1);
if (sum>0)
{
for(int i=0; i<sum; i++)
{
textout(i, xs+x[i], ys+y[i], format(i), 0);
sleep(100);
}
goto e;
}
Если нужны линии или рамка, то:
https://kibor-bot.com/forum/topi...76612#1558176612
https://kibor-bot.com/forum/topi...51539#1558651539 |
|
|
l2mrakg |
Отправлено: 13 Июня, 2019 - 18:08:12
|
Участник
Покинул форум
Сообщений всего: 50
Дата рег-ции: Март 2018
Откуда: Одесса, Украина.
Репутация: 1
|
Благодарю за подсказку, метка появляется, но слишком быстро.
Все таки хочется подсветить динамику линиями, но что то не выходит, подскажите что не так.
КОД Динамики.
CODE:
//
#define PS_SOLID 0
external(INT, "GetDC", "GetDC", "User32.dll" );
external(INT, "CreatePen", "CreatePen", "Gdi32.dll" );
external(INT, "SelectObject", "SelectObject", "Gdi32.dll" );
external(INT, "MoveToEx", "MoveToEx", "Gdi32.dll" );
external(INT, "LineTo", "LineTo", "Gdi32.dll" );
int hdc_dialog=GetDC(0); // ?????????? ?????????
int pen=CreatePen(PS_SOLID, 2, 1376392); // ??????? ???????
SelectObject(hdc_dialog, pen);
//
function finddynamic_(int onx, int ony, int oox, int ooy, int t, int pscan, int p1, int p2, int m, int xm, int ym, int p3, int k, int xs, int ys, int xf, int yf, int#sum, int#x, int#y)
{
xs=xs+sx_KIB; ys=ys+sy_KIB; xf=xf+sx_KIB; yf=yf+sy_KIB;
int timKIB, sumKIB, xKIB, yKIB;
pause(p1);
sumKIB=0;
if (t!=0) timKIB=gettime();
a: finddynamic(0, #x[0], #y[0], 0, 0, 0, 0, xs, ys, xf, yf, -1);
pause(pscan);
sum=finddynamic(k, #x[0], #y[0], onx, ony, oox, ooy, xs, ys, xf, yf, -1);
//Рисуем
RES(xs, ys, xf, yf);
//текстом...
if (sum>0)
{
for(int i=0; i<sum; i++)
{
textout(i, xs+x[i], ys+y[i], format(i), 0);
sleep(100);
}
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){mouse(LEFT, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==2){mouse(MIDDLE, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==3){mouse(RIGHT, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==4){mousedown(LEFT, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==5){mousedown(MIDDLE, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==6){mousedown(RIGHT, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==7){mouseup(LEFT, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==8){mouseup(MIDDLE, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==9){mouseup(RIGHT, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==10){mousedbl(LEFT, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==11){mousedbl(MIDDLE, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==12){mousedbl(RIGHT, xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
if (m==13){mousemove(xs+xKIB+xm, ys+yKIB+ym); pause(p3);}
//
return sumKIB;
}
///оишбка
function RES(int xs, int ys, int xf, int yf)
{
MoveToEx(hdc_dialog, xs, ys, 0); // ?? ?????? ?????
LineTo(hdc_dialog, xf, ys); // ?????? ?????
LineTo(hdc_dialog, xf, yf); // ?????? ?????
LineTo(hdc_dialog, xs, yf); // ?????? ?????
LineTo(hdc_dialog, xs, ys); // ?????? ?????
}
Отладка с момента включения до ошибки.
CODE:
start_ ( )
load_image_ ( )
loadimage ( # Image_0_KIB [ 0 ] [ 0 ] , " D:\Кибор\Проекты\test\target.bmp " )
loadimage ( # Image_1_KIB [ 0 ] [ 0 ] , " D:\Кибор\Проекты\test\dead.bmp " )
pause ( 1000 )
w_KIB = window ( " Lineage II " , " l2UnrealWWindowsViewportWindow " , - 1 )
ex_KIB = w_KIB.widthclient
ey_KIB = w_KIB.heightclient
sx_KIB = w_KIB.leftclient
sy_KIB = w_KIB.topclient
if ( findimage_ ( # Image_0_KIB [ 0 ] [ 0 ] , 300 , 0 , 0 , 0 , 0 , 0 , - 1 , 0 , 0 , 0 , - 1 , - 1 , - 1 , 0 , 100 , 1 , 0 , 0 , ex_KIB , ey_KIB , # sum_KIB , # x_KIB , # y_KIB ) > 0 )
xs = xs + sx_KIB
ys = ys + sy_KIB
xf = xf + sx_KIB
yf = yf + sy_KIB
int timKIB , sumKIB , xKIB , yKIB , tx , ty , tcycle = 0
pause ( p1 )
sumKIB = 0
if ( t != 0 )
timKIB = gettime ( )
if ( r == 0 && p == 100 )
sum = findimage ( k , # Image [ 0 ] [ 0 ] , fon , # x [ 0 ] , # y [ 0 ] , xs , ys , xf , yf , - 1 )
if ( sum > 0 )
if ( t == 0 )
if ( gettime ( ) - timKIB < t )
return 0
if ( finddynamic_ ( 80 , 80 , 160 , 160 , 100 , 200 , 0 , 0 , 1 , 0 , 0 , 0 , 30 , 0 , 0 , ex_KIB , ey_KIB , # sum_KIB , # x_KIB , # y_KIB ) > 0 )
xs = xs + sx_KIB
ys = ys + sy_KIB
xf = xf + sx_KIB
yf = yf + sy_KIB
pause ( p1 )
sumKIB = 0
if ( t != 0 )
timKIB = gettime ( )
finddynamic ( 0 , # x [ 0 ] , # y [ 0 ] , 0 , 0 , 0 , 0 , xs , ys , xf , yf , - 1 )
pause ( pscan )
sum = finddynamic ( k , # x [ 0 ] , # y [ 0 ] , onx , ony , oox , ooy , xs , ys , xf , yf , - 1 )
RES ( xs , ys , xf , yf )
MoveToEx ( hdc_dialog , xs , ys , 0 )
Остановка скрипта на
MoveToEx ( hdc_dialog , xs , ys , 0 )
----
Инструкция:
MoveToEx ( -842150451 , 14 , 37 , 0 ) |
|
|
Zireael |
Отправлено: 14 Июня, 2019 - 01:30:13
|
Эксперт
Покинул форум
Сообщений всего: 4467
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: #define PS_SOLID 0
external(INT, "GetDC", "GetDC", "User32.dll" );
external(INT, "CreatePen", "CreatePen", "Gdi32.dll" );
external(INT, "SelectObject", "SelectObject", "Gdi32.dll" );
external(INT, "MoveToEx", "MoveToEx", "Gdi32.dll" );
external(INT, "LineTo", "LineTo", "Gdi32.dll" );
int hdc_dialog=GetDC(0); // ?????????? ?????????
int pen=CreatePen(PS_SOLID, 2, 1376392); // ??????? ???????
SelectObject(hdc_dialog, pen);
Это должно быть в самом начале скрипте. В логе отладки этих строк нет. |
|
|
l2mrakg |
Отправлено: 14 Июня, 2019 - 02:15:52
|
Участник
Покинул форум
Сообщений всего: 50
Дата рег-ции: Март 2018
Откуда: Одесса, Украина.
Репутация: 1
|
Zireael пишет: Цитата: #define PS_SOLID 0
external(INT, "GetDC", "GetDC", "User32.dll" );
external(INT, "CreatePen", "CreatePen", "Gdi32.dll" );
external(INT, "SelectObject", "SelectObject", "Gdi32.dll" );
external(INT, "MoveToEx", "MoveToEx", "Gdi32.dll" );
external(INT, "LineTo", "LineTo", "Gdi32.dll" );
int hdc_dialog=GetDC(0); // ?????????? ?????????
int pen=CreatePen(PS_SOLID, 2, 1376392); // ??????? ???????
SelectObject(hdc_dialog, pen);
Это должно быть в самом начале скрипте. В логе отладки этих строк нет.
Спасибо действительно тупанул, не могу понять, а почему он рисует за пределами окна?
Как указатель указать на окно?
CODE:w_KIB = window ( " Lineage II " , " l2UnrealWWindowsViewportWindow " , - 1 ) |
|
|
Zireael |
Отправлено: 14 Июня, 2019 - 03:00:31
|
Эксперт
Покинул форум
Сообщений всего: 4467
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: почему он рисует за пределами окна?
Потому что рисует в экранных координатах. Нужно прибавить позицию окна.
Цитата: function RES(int xs, int ys, int xf, int yf)
{
setwindowparam(w_KIB);
MoveToEx(hdc_dialog, xs + w_KIB.leftclient, ys + w_KIB.topclient, 0);
LineTo(hdc_dialog, xf + w_KIB.leftclient, ys + w_KIB.topclient);
LineTo(hdc_dialog, xf, yf);
LineTo(hdc_dialog, xs, yf);
LineTo(hdc_dialog, xs, ys);
} |
|
|
Zireael |
Отправлено: 14 Июня, 2019 - 03:26:04
|
Эксперт
Покинул форум
Сообщений всего: 4467
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Можно вообще вывести BitBlt над окном.
code (Отобразить)CODE:#define SRCCOPY 13369376
#define PS_SOLID 0
#define HWND_TOP 0
#define SWP_NOSIZE 1
#define SWP_NOMOVE 2
external(INT, "GetDC", "GetDC", "User32.dll" );
external(INT, "BitBlt", "BitBlt", "Gdi32.dll" );
external(INT, "CreateCompatibleDC", "CreateCompatibleDC", "Gdi32.dll" );
external(INT, "CreateCompatibleBitmap", "CreateCompatibleBitmap", "Gdi32.dll" );
external(INT, "SelectObject", "SelectObject", "Gdi32.dll" );
external(INT, "DeleteObject", "DeleteObject", "Gdi32.dll" );
external(INT, "CreatePen", "CreatePen", "Gdi32.dll" );
external(INT, "Polyline", "Polyline", "Gdi32.dll");
external(INT, "SetWindowPos", "SetWindowPos", "User32.dll" );
win w=window (-1, "l2UnrealWWindowsViewportWindow", -1); // окно
int rectangle1[6]={50, 50, 150, 150, 5, 65280} // координаты прямоугольника, толщина линии и её цвет
int rectangle2[6]={250, 100, 300, 200, 3, 255} // координаты прямоугольника, толщина линии и её цвет
int rectangle3[6]={10, 10, 500, 400, 6, 16000000} // координаты прямоугольника, толщина линии и её цвет
if(w)
{
int DC=GetDC(formatwi(w));
int hdc0=GetDC(0);
int Comp=CreateCompatibleDC(DC);
int bitmap=CreateCompatibleBitmap(DC, w.widthclient, w.heightclient);
SelectObject(Comp, bitmap);
SetWindowPos(formatwi(w),HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
loop()
{
BitBlt(Comp, 0, 0, w.widthclient, w.heightclient, DC, 0, 0, SRCCOPY );
rectangle(Comp, #rectangle1[0]); // нарисовать прямоугольник
rectangle(Comp, #rectangle2[0]); // нарисовать прямоугольник
rectangle(Comp, #rectangle3[0]); // нарисовать прямоугольник
setwindowparam(w);
BitBlt(hdc0, w.leftclient, w.topclient, w.widthclient, w.heightclient, Comp, 0, 0, SRCCOPY);
sleep(10);
}
}
else messagebox("Окно не найдено");
function rectangle(int HDC, int #a)
{
int pen=CreatePen(PS_SOLID, a[4], a[5]);
int b[10]={a[0], a[1], a[2], a[1], a[2], a[3], a[0], a[3], a[0], a[1]}
int old_pen=SelectObject(HDC, pen);
Polyline(HDC, address(#b[0]), 5);
SelectObject(HDC, old_pen);
DeleteObject(pen);
} |
|
|
l2mrakg |
Отправлено: 14 Июня, 2019 - 03:44:04
|
Участник
Покинул форум
Сообщений всего: 50
Дата рег-ции: Март 2018
Откуда: Одесса, Украина.
Репутация: 1
|
Zireael пишет: Можно вообще вывести BitBlt над окном.
code (Отобразить)CODE:#define SRCCOPY 13369376
int rectangle1[6]={50, 50, 150, 150, 5, 65280} // координаты прямоугольника, толщина линии и
}
я так понимаю в координаты надо указать перменные динамики?
(Добавление)
l2mrakg пишет: Zireael пишет: Можно вообще вывести BitBlt над окном.
code (Отобразить)CODE:#define SRCCOPY 13369376
int rectangle1[6]={50, 50, 150, 150, 5, 65280} // координаты прямоугольника, толщина линии и
}
я так понимаю в координаты надо указать перменные динамики?
Во теперь за пределы окна не уходит ! Спасибо!(Отредактировано автором: 14 Июня, 2019 - 03:47:58) |
|
|
|