16
Общие вопросы / Re: Номер картинки
« on: February 04, 2021, 06:17:15 PM »
О спасибо), в моем примере тоже выход из цикла был, еще раз спасибо за оперативность)
Добавлена тема оформления "Clickermann" для кода с подсветкой синтаксиса. Выбирается из выпадающего списка "Код" (рядом с "цвет", "размер" и "шрифт") в режиме редактирования поста. Либо просто BB-тегом "code=clickermann"
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
$Lvl = 0
GETSCREEN
FOR($Var = 1, $Var < 21)
INC($Lvl)
IF_PICTURE_IN (0,0, $_xmax,$_ymax, STRCONCAT($Var, ".bmp"), -1, 100)
$Var = 777
END_IF
END_CYC
LOGWRITE ("Картинка №",$Lvl)
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "1.bmp")
$Lvl = 1
ELSE
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "2.bmp")
$Lvl = 2
ELSE
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "3.bmp")
$Lvl = 3
ELSE
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "4.bmp")
$Lvl = 4
ELSE
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "5.bmp")
$Lvl = 5
// И так 20 раз
END_IF
END_IF
END_IF
END_IF
END_IF
FOR($Varr = 1, $Varr < 21)
GETSCREEN
SCANPICTURE($ARR_SCAN, 0,0, $_xmax,$_ymax, STRCONCAT($Varr, ".bmp"), -1, 100)
$scan_size = ARRSIZE($ARR_SCAN)
FOR($ARR_NUM=0, $ARR_NUM < $scan_size, 2)
$X = $ARR_SCAN[$ARR_NUM]
$Y = $ARR_SCAN[$ARR_NUM+1]
LCLICK($X + 3, $Y + 3)
WAITMS(100)
END_CYC
UNDEFINE($ARR_SCAN)
WAITMS(50)
END_CYC
LOGWRITE ($Varr)
SUB(NPC)
GETSCREEN(804,245, 850,294)
IF_PICTURE_IN(804,245, 850,294, "..\Нарезка\NPC.bmp")
//LOGWRITE("NPC")
$Z_x = $_return1 - $Center_x
$Z_y = $_return2 - $Center_y
//LOGWRITE($_return1," x ",$_return2)
END_IF
END_SUB
SUB(GO, $key, $wt)
KEYDOWN($key)
WAITMS(ABS($wt) * $Coefficient)
KEYUP($key)
WAITMS(ABS($wt) * $Coefficient)
END_SUB
$Coefficient = 20
$Ots_x = 5
$Ots_y = 5
$Tx = 820
$Ty = 270
INC($Point)
SWITCH($Point)
CASE(1)
$Center_x = $Tx - $Ots_x
$Center_y = $Ty - $Ots_y
CASE(2)
$Center_x = $Tx + $Ots_x
$Center_y = $Ty - $Ots_y
CASE(3)
$Center_x = $Tx + $Ots_x
$Center_y = $Ty + $Ots_y
CASE(4)
$Center_x = $Tx - $Ots_x
$Center_y = $Ty + $Ots_y
END_SWITCH
IF($Point = 4)
$Point = 0
END_IF
$Z_x = 1
WHILE($Z_x ! 0)
NPC()
IF($Z_x > 0)
GO(68, $Z_x) // #D
END_IF
IF($Z_x < 0)
GO(65, $Z_x) // #A
END_IF
END_CYC
$Z_y = 1
WHILE($Z_y ! 0)
NPC()
IF($Z_y > 0)
GO(83, $Z_y) // #S
END_IF
IF($Z_y < 0)
GO(87, $Z_y) // #W
END_IF
END_CYC
//HALT
$x = 500 // === Половина окна
$y = 250 // === Растояние, клик перед персом
$s = 30 // Чем больше, тем меньше окружность
RDOWN($x, $y)
WAITMS($s + 70)
RUP($x + $s, $y)
WAITMS(50)
LCLICK($_xmouse, $_ymouse)
WAITMS(100)
//HALT
GETSCREEN
IF_PICTURE_IN (800,250, 850,300, "..\Нарезка\NPC.bmp")
// === Если радиус больше заданного, вернуть на допустимое растояние
END_IF
С кругом наверно сложнее, может проще сделать что бы он по периметру ходил? Задать точки относительно NPC.bmp$Center_x = 825
$Center_y = 275
$Otstup = 50
$Tx_1 = $Center_x - $Otstup
$Ty_1 = $Center_y - $Otstup
$Tx_2 = $Center_x + $Otstup
$Ty_2 = $Center_y - $Otstup
$Tx_3 = $Center_x + $Otstup
$Ty_3 = $Center_y + $Otstup
$Tx_4 = $Center_x - $Otstup
$Ty_4 = $Center_y + $Otstup
Go_to_1 ($Tx_1, $Ty_1)
Go_to_2 ($Tx_2, $Ty_2)
Go_to_3 ($Tx_3, $Ty_3)
Go_to_4 ($Tx_4, $Ty_4)
$sharp = 80 // чем меньше, тем меньше радиус поворота
KEYDOWN(#W)
WHILE(1)
KEYDOWN(#D)
WAITMS(20)
KEYUP(#D)
WAITMS(20 + $sharp)
END_CYC
У меня не на чем проверить, в паинте ориентация абсолютная.Может не стоит разную задержку делать и не будет дёргаться? Задать всегда одно время нажатия, минимальное. Можно просто KEYPRESS. Хотя не понятно что там за рывки.Спасибо за ответ, буду тестить, KEYPRESS пробовал вообще ужасное передвижение получается, а рывки такие типа если не просто нажать W а переодически нажимать отпускать.
SUB(NPC)
GETSCREEN
IF_PICTURE_IN (804,245, 850,294, "..\Нарезка\NPC.bmp")
LOGWRITE ("NPC")
$npc_x = $_return1
$npc_y = $_return2
$Koeficent = 10
IF($npc_x > $Center_x)
$Z_x = ($npc_x - $Center_x)*$Koeficent
ELSE
$Z_x = ($Center_x - $npc_x)*$Koeficent
END_IF
IF($npc_y > $Center_y)
$Z_y = ($npc_y - $Center_y)*$Koeficent
ELSE
$Z_y = ($Center_y - $npc_y)*$Koeficent
END_IF
LOGWRITE ($npc_x," x ",$npc_y)
WAITMS(50)
END_IF
END_SUB
$Center_x = 820
$Center_y = 270
$Pravo = 0
WHILE($Pravo = 0)
NPC()
IF($npc_x > $Center_x)
KEYDOWN(#D)
WAITMS($Z_x)
KEYUP(#D)
WAITMS($Z_x)
ELSE
$Pravo = 1
END_IF
END_CYC
$Levo = 0
WHILE($Levo = 0)
NPC()
IF($npc_x < $Center_x)
KEYDOWN(#A)
WAITMS($Z_x)
KEYUP(#A)
WAITMS($Z_x)
ELSE
$Levo = 1
END_IF
END_CYC
$Vpered = 0
WHILE($Vpered = 0)
NPC()
IF($npc_y > $Center_y)
KEYDOWN(#S)
WAITMS($Z_y)
KEYUP(#S)
WAITMS($Z_y)
ELSE
$Vpered = 1
END_IF
END_CYC
$Nazad = 0
WHILE($Nazad = 0)
NPC()
IF($npc_y < $Center_y)
KEYDOWN(#W)
WAITMS($Z_y)
KEYUP(#W)
WAITMS($Z_y)
ELSE
$Nazad = 1
END_IF
END_CYC
HALT