Author Topic: помогите грамотно построить код  (Read 4532 times)

0 Members and 1 Guest are viewing this topic.

Ellen

  • Освоившийся
  • **
  • Posts: 54
    • View Profile
помогите грамотно построить код
« on: January 20, 2023, 03:15:20 PM »
Есть игра https://prizes.gamee.com/game/karatekid2
Играем в рабочем чате в тг на рейтинг до понедельника))
Механика достаточно простая, персонаж может стоять или слева или справа от дерева. управляется или мышкой или кнопками влево-вправо. Задача  направлять персонажа слева или справа от дерева в зависимости от веток, игра в общем доступе, можете открыть посмотреть, если кому интересно.

Пришла идея написать скрипт, с помощью которого автоматически будет анализировано с какой стороны есть ветка и в зависимости от результата приниматься решение нажатия клавиши влево или вправо так как появление абсолютно рандомное, кроме как делать скрин и анализировать по пикселю больше идей нет. В том и сложность, не могу точно сформулировать скрипт.

Идея такая:
Вначале думал делать скрин всей области и считывать сколько веток по разным сторонам, и в зависимости от этого далее нажимать клавиши, но иногда на дереве встречаются ледяные фигуры или х2 т.е. данную часть можно разбить только с 2 или 3 раз.
Решил упростить задачу, делать скрин только одной стороны (левой) и только самую ближнюю зону в которой будет только одна ветка: ветка есть - кнопка вправо, ветки нет - кнопка влево. Так даже если встретятся части которые разбиваются с 2 или 3 раз персонаж просто будет оставаться на одной из сторон и просто прожимать одну сторону до тех пор пока на зоне которая скриншотится не появится ветка.
 
пример льда

изменить размер картинки онлайн
Дело в том что у веток ещё и разная длина


И вот:


Как грамотно написать скрипт, чтобы скриншотилась область выделенная красным, а поиск пикселя в области которая указана желтым. там на ветках с краю есть однотонная заливка по которой и можно определять где ветка.

В кликере я новичок, знаком только с стандартными функциями, поэтому, если есть кто на опыте, можете подсказать как составить скрипт?
И правильна ли вообще идея?

Ellen

  • Освоившийся
  • **
  • Posts: 54
    • View Profile
Re: помогите грамотно построить код
« Reply #1 on: January 20, 2023, 04:02:13 PM »
Code: (clickermann) [Select]
WAITMS(100)
GETSCREEN
IF_PIXEL_IN(654,577,747,615,5605331)
KEYPRESS(#RIGHT)
ELSE
KEYPRESS(#LEFT)
END_IF

Вот что удалось написать, но постоянно жмется кнопка влево, значит пиксель не найден?

Ellen

  • Освоившийся
  • **
  • Posts: 54
    • View Profile
Re: помогите грамотно построить код
« Reply #2 on: January 20, 2023, 04:15:01 PM »
Code: (clickermann) [Select]
WAITMS(100)
GETSCREEN
WAITMS(20)
IF_PIXEL_IN(653,572,762,631,2776231)
WAITMS(20)
LCLICK(956,467)
WAITMS(20)
ELSE
WAITMS(20)
LCLICK(559,498)


END_IF

Перескакивает на разные стороны, но почему то умирает слева на коротких ветках, как исправить?

kiril

  • Активный участник
  • ***
  • Posts: 106
    • View Profile
Re: karatekid2
« Reply #3 on: January 20, 2023, 05:34:39 PM »
уже писали что-то для вашей игры
https://vk.com/topic-14410794_23383620?offset=40420

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: помогите грамотно построить код
« Reply #4 on: January 20, 2023, 06:22:33 PM »
Там в указанном месте бывает ещё один цвет если место х3. Но это всё равно не поможет от сбоев.
Указанный цвет искать плохо ещё по причине, что иногда из-за вылетающих брёвен, они перекрывают конец ветки


Сначала добавил цветов от сероватого наконечника и светлых полос, стало реже, но совсем не пропало.

Code: (clickermann) [Select]
GETSCREEN(930, 740, 950, 885)
IF_PIXEL_IN(930, 740, 950, 885, 1446469, 1446725)
    KEYDOWN(#RIGHT)
    WAITMS(100)
    KEYUP(#RIGHT)
ELSE
    KEYDOWN(#LEFT)
    WAITMS(100)
    KEYUP(#LEFT)
END_IF

WAITMS(500)

Вот в этом месте поиск


Задержка великовата, т.к. страница нереально подтормаживает и после удара не успевает ветка опуститься. Нужно пробовать у вас конкретно какую задержку ставить.
« Last Edit: January 20, 2023, 06:49:53 PM by Vint »


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: помогите грамотно построить код
« Reply #5 on: January 20, 2023, 06:43:21 PM »
Там эти грёбанные, медленно летящие брёвна всё портят. Подлазят под руку.
И немного - белые числа.

P.S. добавил ещё один цвет. Сейчас хорошо работает, но не быстро. Ошибается очень-очень редко.
« Last Edit: January 20, 2023, 06:54:15 PM by Vint »


Ellen

  • Освоившийся
  • **
  • Posts: 54
    • View Profile
Re: помогите грамотно построить код
« Reply #6 on: January 20, 2023, 08:39:49 PM »
1. В команде поиска пикселя можно указать не один пиксель? Вот тут IF_PIXEL_IN(930, 740, 950, 885, 1446469, 1446725)
2. Около каждой ветки есть треугольная тень, которая прикасается к дереву, поиск ставлю теперь на эту точку, вроде нормально, но иногда путается почему то… видимо реально нужно поиграться с задержками, потому что замечал, что если он увидел ветку слева прыгает направо и сразу возвращается обратно, хотя там ветка
3. Почему вы используете 2 команды на нажатии клавиши вместо одной? Есть какой то секрет?

kiril

  • Активный участник
  • ***
  • Posts: 106
    • View Profile
Re: помогите грамотно построить код
« Reply #7 on: January 21, 2023, 01:37:26 AM »
1. В команде поиска пикселя можно указать не один пиксель? Вот тут IF_PIXEL_IN(930, 740, 950, 885, 1446469, 1446725)
2. Около каждой ветки есть треугольная тень, которая прикасается к дереву, поиск ставлю теперь на эту точку, вроде нормально, но иногда путается почему то… видимо реально нужно поиграться с задержками, потому что замечал, что если он увидел ветку слева прыгает направо и сразу возвращается обратно, хотя там ветка
3. Почему вы используете 2 команды на нажатии клавиши вместо одной? Есть какой то секрет?
1. пиксель это точка на мониторе, имеющая определённые координаты.
    в показанной вами строке через запятую можно перечислять номера цветов поиска. проверка осуществляется в
    порядке записи цветов и прерывается при первом совпадении.
2. есть смысл попробовать уменьшить область проверки по горизонтали всего до нескольких пикселей и подрезать её снизу, там где с учётом времени на обработку скрипт всё равно не успеет вовремя среагировать.
два  близких проверяемых цвета существенно замедляют проверку, быстрее будет использовать в работе скрипта цветокоррекцию.
3. в  одну команду клика встроена  внутренняя задержка между зажатием и отжатием клавиши 30 мс.
     раздельные команды позволяют эту задержку настраивать под требования игры или скорость интернета.

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: помогите грамотно построить код
« Reply #8 on: January 21, 2023, 09:25:05 AM »
Code: (clickermann) [Select]
GETSCREEN(930, 740, 950, 885)
IF_PIXEL_IN(930, 740, 950, 885, 1446469, 1446725)
    KEYDOWN(#RIGHT)
    WAITMS(100)
    KEYUP(#RIGHT)
ELSE
    KEYDOWN(#LEFT)
    WAITMS(100)
    KEYUP(#LEFT)
END_IF

WAITMS(500)



Я в своих скриптах использую вот такие паузы для кликов:

Code: (clickermann) [Select]
GETSCREEN(930, 740, 950, 885)
IF_PIXEL_IN(930, 740, 950, 885, 1446469, 1446725)
   $left_time = 0
   IF($right_time < $_ms)
      KEYDOWN(#RIGHT)
      WAITMS(100)
      KEYUP(#RIGHT)
      $right_time = $_ms + 500
   END_IF
ELSE
   $right_time = 0
   IF($left_time < $_ms)
      KEYDOWN(#LEFT)
      WAITMS(100)
      KEYUP(#LEFT)
      $left_time = $_ms + 500
   END_IF
END_IF

WAITMS(50)

Может как-то поможет? Кликает с паузами, но во время этих пауз, экран держится под контролем.
Я не ду... Потому и не бу...

Ellen

  • Освоившийся
  • **
  • Posts: 54
    • View Profile
Re: помогите грамотно построить код
« Reply #9 on: January 21, 2023, 01:00:08 PM »
Code: (clickermann) [Select]
// 1446725
WAITMS(100)
GETSCREEN(771, 567, 786, 682)
IF_PIXEL_IN(771, 567, 786, 682, 1446725, 1579598, 2301001, 5653088)
   $left_time = 0
   IF($right_time < $_ms)
      KEYDOWN(#RIGHT)
      WAITMS(40)
      KEYUP(#RIGHT)
      $right_time = $_ms + 100
   END_IF
ELSE
   $right_time = 0
   IF($left_time < $_ms)
      KEYDOWN(#LEFT)
      WAITMS(40)
      KEYUP(#LEFT)
      $left_time = $_ms + 100
   END_IF
END_IF
 
WAITMS(20)

Вот последний рабочий код, но спотыкается когда белые цифры вылетают после удара, думал покопаться в js игры и отключить загрузку цифр вообще... но после этого висит окно загрузки бесконечно, а в панели разработчика выходит ошибка о том, что не все данные были загружены для запуска игры Может тут есть эксперты по js? Как отключить цифры или есть возможность подать на сервер ответ, в котором будет прописано желаемое количество очков?
« Last Edit: January 21, 2023, 01:03:09 PM by Ellen »

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: помогите грамотно построить код
« Reply #10 on: January 21, 2023, 01:53:12 PM »
Code: (clickermann) [Select]
// 1446725
WAITMS(100)
GETSCREEN(771, 567, 786, 682)
IF_PIXEL_IN(771, 567, 786, 682, 1446725, 1579598, 2301001, 5653088)
   $left_time = 0
   IF($right_time < $_ms)
      KEYDOWN(#RIGHT)
      WAITMS(40)
      KEYUP(#RIGHT)
      $right_time = $_ms + 100
   END_IF
ELSE
   $right_time = 0
   IF($left_time < $_ms)
      KEYDOWN(#LEFT)
      WAITMS(40)
      KEYUP(#LEFT)
      $left_time = $_ms + 100
   END_IF
END_IF
 
WAITMS(20)

Вот последний рабочий код, но спотыкается когда белые цифры вылетают после удара, думал покопаться в js игры и отключить загрузку цифр вообще... но после этого висит окно загрузки бесконечно, а в панели разработчика выходит ошибка о том, что не все данные были загружены для запуска игры Может тут есть эксперты по js? Как отключить цифры или есть возможность подать на сервер ответ, в котором будет прописано желаемое количество очков?

Во первых - зачем тебе пауза в начале скрипта и в конце? У тебя в скрипте (в его конце) срабатывает пауза, после которой он выходит в свое начало и снова срабатывает пауза... Где логика...? Если тебе нужна пауза в 120 мс, то укажи в конце скрипта WAITMS(120), а в чем логика, чтобы разбить паузу на две части и выставить их друг за другом...?
Во вторых - покажи на скрине, в какой области ты ищешь эти пиксели.
« Last Edit: January 21, 2023, 01:55:44 PM by Hito »
Я не ду... Потому и не бу...

Ellen

  • Освоившийся
  • **
  • Posts: 54
    • View Profile
Re: помогите грамотно построить код
« Reply #11 on: January 21, 2023, 02:14:26 PM »
Всегда ставлю паузу перед началом сценария, а в конце пауза прост осталась от скопированного отсюда кода




Первый - угол тени
Второй - край бревна, который касается дерева
Третий, четвертый, такие же края бревен, только других цветов

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: помогите грамотно построить код
« Reply #12 on: January 21, 2023, 03:02:35 PM »
Всегда ставлю паузу перед началом сценария, а в конце пауза прост осталась от скопированного отсюда кода




Первый - угол тени
Второй - край бревна, который касается дерева
Третий, четвертый, такие же края бревен, только других цветов

В общем что могу сказать... Ты зря перешел на пиксельный разбор. Я сейчас около часа помыкался, проанализировал картинки и все такое... Если брать с бревен чисто пиксели цветные, то нет-нет, но такие же пиксели попадаются в углах выскакивающих цифр. Кликер принимает их за бревна и отсылает перса в другую сторону, а там действительно бревно... Сейчас попробую с бревен брать картинки буквально 3 на 3 пекселя, и искать бревна по этим картинкам.
Я не ду... Потому и не бу...

Ellen

  • Освоившийся
  • **
  • Posts: 54
    • View Profile
Re: помогите грамотно построить код
« Reply #13 on: January 21, 2023, 03:53:50 PM »
Можно ли как то увидеть те точки, на которые ошибочно срабатывает кликер? Ну т.е. сохранение картинок в файл, с пометкой точки на котору реагирвоал кликер

Ellen

  • Освоившийся
  • **
  • Posts: 54
    • View Profile
Re: помогите грамотно построить код
« Reply #14 on: January 21, 2023, 04:00:12 PM »
Можно ли как то увидеть те точки, на которые ошибочно срабатывает кликер? Ну т.е. сохранение картинок в файл, с пометкой точки на которую реагировал кликер