Author Topic: Помогите пожалуйста  (Read 3510 times)

0 Members and 1 Guest are viewing this topic.

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Помогите пожалуйста
« on: December 16, 2020, 11:08:16 PM »
Очень прошу помочь, нужен якорь на карте. Трудно даже логику построить, придумал следующее, мини карта по центру персонаж(желтый квадратик) в углу напарник (синий квадратик якорь).  Красный круг это зона по которой будет бегать персонаж, зеленый квадрат зона по которой будет смещаться напарник(он стоит на одном месте) смещение будет происходить из зи персонажа. С кажу сразу к персонажу прямо прицепится проблематично, поэтому придется использовать в качестве якоря напарника. Я вижу это так, задать центр якоря, проверять на сколько от центра ушел якорь кликнуть в противоположную сторону. Не могу сделать следующее, как мне вычислить на сколько пикселей сместился якорь и потом кликнуть мышкой на (количество смещённых пикселей в соотношении 3 к 100) то есть, если кликнуть мышкой на 100 пикселей в сторону, то якорь на мини карте смещается на 3 пикселя. Ничего особенного не нужно, тупо нужно держать персонажа в красном кругу. Если есть другие идеи подскажите помогите как это сделать?

radikal ru
« Last Edit: December 16, 2020, 11:10:56 PM by Ramzesia »

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Помогите пожалуйста
« Reply #1 on: December 20, 2020, 04:12:17 PM »
Написал такой скрипт, он возвращает персонажа в заданную точку, но рывками. И строчек для короткой задачи многовато, может как то компактней можно написать. Заранее спасибо.
Code: (clickermann) [Select]
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

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Помогите пожалуйста
« Reply #2 on: December 21, 2020, 10:41:42 AM »
Code: (clickermann) [Select]
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. Хотя не понятно что там за рывки.


Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Помогите пожалуйста
« Reply #3 on: December 21, 2020, 07:49:02 PM »
Может не стоит разную задержку делать и не будет дёргаться? Задать всегда одно время нажатия, минимальное. Можно просто KEYPRESS. Хотя не понятно что там за рывки.
Спасибо за ответ, буду тестить, KEYPRESS пробовал вообще ужасное передвижение получается, а рывки такие типа если не просто нажать W а переодически нажимать отпускать.

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Помогите пожалуйста
« Reply #4 on: December 21, 2020, 07:58:26 PM »
Уважаемы Vint  спасибо тебе еще раз, проверил твой скрип он быстрее возвращается но ходит зигзагом))) но как бы пойдет, просто палевно). а как сделать что бы он по кругу бегал? задать какую то область и что бы он кружился с возможностью регулировать диаметр области, было бы шикарно, я не ленивый просто у меня не хватает опыта и знаний.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Помогите пожалуйста
« Reply #5 on: December 22, 2020, 08:34:58 AM »
Вот то же самое, не зигзагами, а сначала по x, потом по y

Code: (clickermann) [Select]
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

Просто думал это же не разовая центровка, а часть большого скрипта и там если на постоянке контролировать  положение, то движение углами будет менее естественным.


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Помогите пожалуйста
« Reply #6 on: December 22, 2020, 08:54:30 AM »
а как сделать что бы он по кругу бегал? задать какую то область и что бы он кружился с возможностью регулировать диаметр области, было бы шикарно, я не ленивый просто у меня не хватает опыта и знаний.

Смотря какая там механика и мешающие факторы.
Если просто тупо бежать вперёд периодически подруливая, то получается близкое к окружности (многоугольник).
Что то на подобие этого
Code: (clickermann) [Select]
$sharp = 80  // чем меньше, тем меньше радиус поворота
KEYDOWN(#W)
WHILE(1)
    KEYDOWN(#D)
    WAITMS(20)
    KEYUP(#D)
    WAITMS(20 + $sharp)
END_CYC
У меня не на чем проверить, в паинте ориентация абсолютная.
« Last Edit: December 22, 2020, 09:32:59 AM by Vint »


Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Помогите пожалуйста
« Reply #7 on: December 22, 2020, 09:43:52 AM »
Смотря какая там механика и мешающие факторы.
Если просто тупо бежать вперёд периодически подруливая, то получается близкое к окружности (многоугольник).
Что то на подобие этого
Code: (clickermann) [Select]
$sharp = 80  // чем меньше, тем меньше радиус поворота
KEYDOWN(#W)
WHILE(1)
    KEYDOWN(#D)
    WAITMS(20)
    KEYUP(#D)
    WAITMS(20 + $sharp)
END_CYC
У меня не на чем проверить, в паинте ориентация абсолютная.
[/quote]
Механика как обычно, если управление с клавиатуры, персонаж упирается в препятствие, если же кликать мышкой перед собой то персонаж обходит препятствие. Скрип такова рода я уже пробовал, он не стабилен, круг область со временем смещается из лагов обходов и остальной мелочи. Мне бы как то прицепить центр груга к чему нибудь, а лучше к твоему второму скрипту, что бы радиус брал начало с координат найденной картинки.

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Помогите пожалуйста
« Reply #8 on: December 22, 2020, 12:17:18 PM »
Кстати твой циркуль не сработал, наверно из за механики игры. Я поставил значение $sharp = 1 поворот очень маленький.
Вот этот норм работает, и препятствие обходит из за передвижения кликами.
Code: (clickermann) [Select]
$x = 500 // === Половина окна
$y = 250 // === Растояние, клик перед персом

$s = 30 // Чем больше, тем меньше окружность

RDOWN($x, $y)
WAITMS($s + 70)
RUP($x + $s, $y)
WAITMS(50)
LCLICK($_xmouse, $_ymouse)
WAITMS(100)

//HALT

Как это прицепить к координатам на мини карте?
Вот к этому:
Code: (clickermann) [Select]
   GETSCREEN
   IF_PICTURE_IN (800,250, 850,300, "..\Нарезка\NPC.bmp")
      // === Если радиус больше заданного, вернуть на допустимое растояние
   END_IF
С кругом наверно сложнее, может проще сделать что бы он по периметру ходил? Задать точки относительно NPC.bmp
Code: (clickermann) [Select]
$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)

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Помогите пожалуйста
« Reply #9 on: December 22, 2020, 01:51:32 PM »
а как сделать что бы он по кругу бегал? задать какую то область и что бы он кружился с возможностью регулировать диаметр области
Смотри, ты задаёшь вопрос. При этом зная о препятствиях, о необходимости перемещения только кликами и прочее, нигде это не упоминаешь. Почему все "особенности" вылазят позже?


Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Помогите пожалуйста
« Reply #10 on: December 22, 2020, 06:06:52 PM »
Так нет острой необходимости управлять мышкой, там где нужно использовать препятствий нет, можно и с клавиатуры, это если управление мышкой сделать так чисто на перспективу если понадобится использовать в местах где есть препятствие. Вопрос в другом, есть область и нужно персонажа удержать в этой области, остальное думаю не составит особых проблем.
« Last Edit: December 22, 2020, 06:13:27 PM by Ramzesia »

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Помогите пожалуйста
« Reply #11 on: December 22, 2020, 08:22:39 PM »
Кароче ломал мозг напридумал чего то слепил что то подобное тому что мне надо, но есть проблемы.
1. Ходит не по периметру а в разброску по 4 точкам.
2. Ходит дергается, слишком палевно, перс как подходит к заданым координатам начинает метаться со стороны в сторону пока не придет к нулю в цикле, нельзя указать не ноль а скажем +/- 1 или 2 пикселя?
Code: (clickermann) [Select]
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

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Помогите пожалуйста
« Reply #12 on: December 23, 2020, 12:40:48 PM »
2. Ходит дергается, слишком палевно, перс как подходит к заданым координатам начинает метаться со стороны в сторону пока не придет к нулю в цикле, нельзя указать не ноль а скажем +/- 1 или 2 пикселя?
Code: (clickermann) [Select]
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


Нимношка

  • Зашел в гости
  • *
  • Posts: 2
    • View Profile
Re: Помогите пожалуйста
« Reply #13 on: January 12, 2021, 01:22:47 PM »
В написании скриптов я полный лол
в скором времени постараюсь это хоть как то исправить.
Не подскажете как сделать скрипт в кликермане
чтобы нажимались клавиши Ctrl + Shift + S
через каждые 20 секунд
в бесконечном цикле?