Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Ramzesia on December 16, 2020, 11:08:16 PM
-
Очень прошу помочь, нужен якорь на карте. Трудно даже логику построить, придумал следующее, мини карта по центру персонаж(желтый квадратик) в углу напарник (синий квадратик якорь). Красный круг это зона по которой будет бегать персонаж, зеленый квадрат зона по которой будет смещаться напарник(он стоит на одном месте) смещение будет происходить из зи персонажа. С кажу сразу к персонажу прямо прицепится проблематично, поэтому придется использовать в качестве якоря напарника. Я вижу это так, задать центр якоря, проверять на сколько от центра ушел якорь кликнуть в противоположную сторону. Не могу сделать следующее, как мне вычислить на сколько пикселей сместился якорь и потом кликнуть мышкой на (количество смещённых пикселей в соотношении 3 к 100) то есть, если кликнуть мышкой на 100 пикселей в сторону, то якорь на мини карте смещается на 3 пикселя. Ничего особенного не нужно, тупо нужно держать персонажа в красном кругу. Если есть другие идеи подскажите помогите как это сделать?
(https://cdn1.radikalno.ru/uploads/2020/12/16/95614154f8da7ff32024a51a5a947e6f-full.png) (https://radikalno.ru/) radikal ru (https://radikalno.ru/)
-
Написал такой скрипт, он возвращает персонажа в заданную точку, но рывками. И строчек для короткой задачи многовато, может как то компактней можно написать. Заранее спасибо.
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
-
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
$Center_x = 820
$Center_y = 270
$Coefficient = 10
$in_position = 0
WHILE($in_position = 0)
NPC()
IF(($Z_x = 0) & ($Z_y = 0))
$in_position = 1 // отцентрировались
END_IF
IF($Z_x > 0)
GO(68, $Z_x) // #D
END_IF
IF($Z_x < 0)
GO(65, $Z_x) // #A
END_IF
IF($Z_y > 0)
GO(83, $Z_y) // #S
END_IF
IF($Z_y < 0)
GO(87, $Z_y) // #W
END_IF
END_CYC
LOGWRITE("Притопали")
HALT
Может не стоит разную задержку делать и не будет дёргаться? Задать всегда одно время нажатия, минимальное. Можно просто KEYPRESS. Хотя не понятно что там за рывки.
-
Может не стоит разную задержку делать и не будет дёргаться? Задать всегда одно время нажатия, минимальное. Можно просто KEYPRESS. Хотя не понятно что там за рывки.
Спасибо за ответ, буду тестить, KEYPRESS пробовал вообще ужасное передвижение получается, а рывки такие типа если не просто нажать W а переодически нажимать отпускать.
-
Уважаемы Vint спасибо тебе еще раз, проверил твой скрип он быстрее возвращается но ходит зигзагом))) но как бы пойдет, просто палевно). а как сделать что бы он по кругу бегал? задать какую то область и что бы он кружился с возможностью регулировать диаметр области, было бы шикарно, я не ленивый просто у меня не хватает опыта и знаний.
-
Вот то же самое, не зигзагами, а сначала по x, потом по y
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
$Center_x = 820
$Center_y = 270
$Coefficient = 10
$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
LOGWRITE("Притопали")
HALT
Просто думал это же не разовая центровка, а часть большого скрипта и там если на постоянке контролировать положение, то движение углами будет менее естественным.
-
а как сделать что бы он по кругу бегал? задать какую то область и что бы он кружился с возможностью регулировать диаметр области, было бы шикарно, я не ленивый просто у меня не хватает опыта и знаний.
Смотря какая там механика и мешающие факторы.
Если просто тупо бежать вперёд периодически подруливая, то получается близкое к окружности (многоугольник).
Что то на подобие этого
$sharp = 80 // чем меньше, тем меньше радиус поворота
KEYDOWN(#W)
WHILE(1)
KEYDOWN(#D)
WAITMS(20)
KEYUP(#D)
WAITMS(20 + $sharp)
END_CYC
У меня не на чем проверить, в паинте ориентация абсолютная.
-
Смотря какая там механика и мешающие факторы.
Если просто тупо бежать вперёд периодически подруливая, то получается близкое к окружности (многоугольник).
Что то на подобие этого
$sharp = 80 // чем меньше, тем меньше радиус поворота
KEYDOWN(#W)
WHILE(1)
KEYDOWN(#D)
WAITMS(20)
KEYUP(#D)
WAITMS(20 + $sharp)
END_CYC
У меня не на чем проверить, в паинте ориентация абсолютная.
[/quote]
Механика как обычно, если управление с клавиатуры, персонаж упирается в препятствие, если же кликать мышкой перед собой то персонаж обходит препятствие. Скрип такова рода я уже пробовал, он не стабилен, круг область со временем смещается из лагов обходов и остальной мелочи. Мне бы как то прицепить центр груга к чему нибудь, а лучше к твоему второму скрипту, что бы радиус брал начало с координат найденной картинки.
-
Кстати твой циркуль не сработал, наверно из за механики игры. Я поставил значение $sharp = 1 поворот очень маленький.
Вот этот норм работает, и препятствие обходит из за передвижения кликами.
$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)
-
а как сделать что бы он по кругу бегал? задать какую то область и что бы он кружился с возможностью регулировать диаметр области
Смотри, ты задаёшь вопрос. При этом зная о препятствиях, о необходимости перемещения только кликами и прочее, нигде это не упоминаешь. Почему все "особенности" вылазят позже?
-
Так нет острой необходимости управлять мышкой, там где нужно использовать препятствий нет, можно и с клавиатуры, это если управление мышкой сделать так чисто на перспективу если понадобится использовать в местах где есть препятствие. Вопрос в другом, есть область и нужно персонажа удержать в этой области, остальное думаю не составит особых проблем.
-
Кароче ломал мозг напридумал чего то слепил что то подобное тому что мне надо, но есть проблемы.
1. Ходит не по периметру а в разброску по 4 точкам.
2. Ходит дергается, слишком палевно, перс как подходит к заданым координатам начинает метаться со стороны в сторону пока не придет к нулю в цикле, нельзя указать не ноль а скажем +/- 1 или 2 пикселя?
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
-
2. Ходит дергается, слишком палевно, перс как подходит к заданым координатам начинает метаться со стороны в сторону пока не придет к нулю в цикле, нельзя указать не ноль а скажем +/- 1 или 2 пикселя?
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
$backlash = 5 // люфт, px
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(ABS($Z_x) > $backlash)
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(ABS($Z_y) > $backlash)
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
-
В написании скриптов я полный лол
в скором времени постараюсь это хоть как то исправить.
Не подскажете как сделать скрипт в кликермане
чтобы нажимались клавиши Ctrl + Shift + S
через каждые 20 секунд
в бесконечном цикле?