Author Topic: Бот для Warface  (Read 19333 times)

0 Members and 1 Guest are viewing this topic.

Antracit

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
Бот для Warface
« on: January 31, 2013, 03:16:53 PM »
Здравствуйте уважаемые форумчане!
Есть игра, онлайн шутер(warface) от первого лица.
Задача: мониторить кнопку "Т", при ее нажатии нажать кнопку "SHift", а затем кнопку "F" и снова мониторить кнопку "T". Для чего: в игре нужно нажать две кнопки чтобы совершить подкат shift+F, вот думал сделать на одну кнопку "T".

Использую Clickermann 4.7 SE
Вот что у меня получилось:

Code: (clickermann) [Select]
begin:
if ( iskeydown(84)=1 )     //если нажата клавиша "T"
   waitms(200)                 //ждем 200мс
   gosub(1)                      //идем в подпрограмму "1"
else  goto(begin)            //иначе на метку "begin"
END_IF                           //конец условия


sub(1)                             //название подпрограммы
   KEYDOWN(16)             //жмем клавишу  "shift"
   waitms(200)                //ждем 200мс
   KEYUP(16)                   // отпускаем клавишу "SHIFT"
   logwrite("SHIFt")         //log
   wait(1)                        //ждем 1c
   KEYDOWN(70)             //жмем клавишу "F"
   waitms(200)                //ждем 200мс
   KEYUP(70)                   //отпускаем клавишу "T"
   waitms(200)                //ждем 200мс
   logwrite("F")                //log
   goto(begin)                //идем в начало программы
end_sub                        //конец подпрограммы

Теперь есть два вопроса!
1) Перечитав форум, увидел что использование команды goto нежелательна, понятно что тут мало кода, но планирую дальше наращивать и изучать кликер.
Как можно в этой несложной программе заменить goto?
2) Просто не работает. Почему? Пробовал: заменять команду "iskeydown(84)=1" на keydown/keyup - нет результата, но в игре видно что, что то пытается сделать т.е. как бы вперед дернется и все. Пробовал написать чтобы нажалась кнопка бежать вперед - тоже результата нету. Пробовал захват окна и помещать в координаты - работает. Но вот почему кнопки не срабатывают не знаю. Отчаившись прошу помощи или намека что еще почитать.
« Last Edit: November 27, 2014, 10:26:19 AM by Johnny »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Clickermann в игре Warface
« Reply #1 on: January 31, 2013, 04:03:34 PM »
Куча лишнего.
Code: (clickermann) [Select]
IF ( iskeydown(84)=1 )
   KEYDOWN(16)
   WAITMS(100)
   KEYDOWN(70)
   WAITMS(100)
   KEYUP(70)
   WAITMS(100)
   KEYUP(16)
END_IF
WAITMS(200)

Всё. Повторятся и так будет.
Основные ошибки: В конце подпрограммы goto не нужен (и нельзя) всё и так возвращается для этого и есть end_sub.
Нажимается и держится SHIFT, потом жмакаем кнопку и отпускаем SHIFT.

А лучше использовать утилитки для горячих клавиш, коих вагон и тележка. Особенно для шутера. Повесить на клавишу комбинацию клавиш.
« Last Edit: January 31, 2013, 04:06:08 PM by Vint »


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Clickermann в игре Warface
« Reply #2 on: January 31, 2013, 04:55:06 PM »
Правильнее писать так:

Цикл WHILE здесь вставлен для того чтобы нажатие Shift+F свершилось только после отпускания T
Code: (clickermann) [Select]
IF(iskeydown(#T)=1)
   WHILE(iskeydown(#T)=1)
      waitms(50)
   END_CYC
   KEYDOWN(#SHIFT)
   waitms(50)
   KEYDOWN(#F)
   waitms(200)
   KEYUP(#F)
   KEYUP(#SHIFT)
Else
   waitms(20) // задержка для разгрузки проца
END_IF

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Clickermann в игре Warface
« Reply #3 on: January 31, 2013, 05:05:29 PM »
А зачем после отпускания? И так жмёт. Понятно, чтоб небыло повтора. Повтора быстрого и не будет если задержку увеличить.  Да и с такой задержкой (20мс) его шутер от первого лица превратится в тормоза. ИМХО. Да мои 200 это конечно много нужно уменьшать.
« Last Edit: January 31, 2013, 05:11:27 PM by Vint »


Antracit

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
Re: Clickermann в игре Warface
« Reply #4 on: January 31, 2013, 05:15:59 PM »
Не ребят, помоему все это бесполезно т.к. ничего не пашет, сейчас пробовал даже сделать просто вот так:

IF ( iskeydown(84)=1 )
   KEYDOWN(16)
   WAITMS(300)
END_IF
WAITMS(200)

он даже просто бег не жмет!

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Clickermann в игре Warface
« Reply #5 on: January 31, 2013, 05:20:13 PM »
Говорю же попробуй утилиты для назначения горячих клавиш.
Я в COD4 правил файл с настройками для нажатия комбинаций.


Antracit

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
Re: Clickermann в игре Warface
« Reply #6 on: January 31, 2013, 05:24:55 PM »
Говорю же попробуй утилиты для назначения горячих клавиш.
Я в COD4 правил файл с настройками для нажатия комбинаций.


да хотелось бы так организовать)))) Видимо не судьба!)

AlexMole

  • Зашел в гости
  • *
  • Posts: 2
    • View Profile
Re: Clickermann в игре Warface
« Reply #7 on: October 18, 2014, 04:25:44 PM »
вопрос к автору темы, ну или к тому, кто сможет воплотить в реальность скрипт: возможно ли написать скрипт нажатия пробела с интервалом в 3 секунды для игры warface?

Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
Re: Clickermann в игре Warface
« Reply #8 on: October 18, 2014, 04:32:37 PM »
господи, ты серьезно что ли?

Code: (clickermann) [Select]
keypress(#space)
wait(3)

aden

  • Оплот сообщества
  • ****
  • Posts: 363
    • View Profile
Re: Clickermann в игре Warface
« Reply #9 on: October 18, 2014, 06:16:01 PM »
Code: (clickermann) [Select]
keypress(#space)
wait(3)

божественный код, на него можно любоватся вечный, о наш Создатель

Boroducu

  • Зашел в гости
  • *
  • Posts: 2
    • View Profile
Re: Бот для Warface
« Reply #10 on: April 25, 2017, 09:48:39 AM »
Всем здравия!
Тема для Warface уже создана, поэтому со своим вопросом обращаюсь сюда.
Задача: в сабжевой игре реализовать механизм реакции кликера на определенные сообщения в чате.

Проблемы:
а) в основном поле чата текст отображается в виде графики, а не в виде символов. То есть анализ сообщений на основе копипасты неприменим.
б) сам текст (точнее изображение) имеет полупрозрачность, а в фоне крутится анимация, что затрудняет распознавание команды на основе анализа цвета/координат пикселей.

Испробованные методы решения:
1. ифпикчерин с цветокоррекцией;
2. подсчет количества количества пикселей после цветокоррекции.
Поток сознания на тему:
Методы использовались и по отдельности и оба последовательно. Добиться однозначного определения команды в обоих случаях не удалось. Реализовал механизм вычисления координат блока команды, чтобы в строке чата изолировать саму команду от ника.
Толку никакого. В зависимости от длины ника (то есть смещения начала команды относительно левого края окна) пикселькаунт в одной и той же команде выдает разброс значений, неприменимый для однозначной идентификации команды. Например, при x=403, количество контрольных пикселей 129 (+-1), но при x=467 количество меняется на 112(+-2). Долбаный динамический фон...

В связи со всей этой мутью, изложенной выше, вопросы:
1. Какую порекомендуете методику для анализа и однозначной идентификации объекта (текста в данном случае) с полупрозрачностью и динамическим фоном? Листинг скрипта необязателен, интересует сам теоретический подход, концепция, что ли...
2. В ходе экспериментов возник интерес к работе команд, использующих в качестве параметра точность (например, ифпекчерин, сканпикча). Каким образом происходит сравнение образца с эталонным? Учитывается только цвет и количество пикселей? Или, может быть, еще и координаты массивов пикселей одного или подобных цветов? Хотелось бы поподробнее узнать о механике работы подобных команд.
3. Как часть 2. Заинтересовал параметр точности. В справке не нашел команды, которая бы сравнивала образец с эталоном и на выходе выдавала бы процент точности. Каким образом можно установить степень соответствия двух изображений?

ЗЫ. Пока писал пост, по третьему вопросу возникла мысль соотнести выводы команд pxlxor(или pxlcrc) для исходной области и текущей. Корректен ли будет такой способ оценки соответствия двух изображений?

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Бот для Warface
« Reply #11 on: April 25, 2017, 10:51:13 AM »
что бы что либо рекомендовать, было бы не плохо увидеть фрагменты скринов. определять требуется именно ник (какието определенные ники)? или текст сообщения? впринципе графику можно менять до неузнаваемости. но я предполагаю, что будет достаточно использовать игнорируемый цвет фона в IF_PICTURE_IN, ну и небольшой процент несовпадения.



насчет вот этого
Quote
В справке не нашел команды, которая бы сравнивала образец с эталоном и на выходе выдавала бы процент точности.
вот нашел, хоть тема и старая, вроде ничего сложного, в последней версии кликера должно работать.
http://crapware.aidf.org/forum/index.php?topic=1022.msg4329#msg4329
« Last Edit: April 25, 2017, 10:59:31 AM by dramster »

Boroducu

  • Зашел в гости
  • *
  • Posts: 2
    • View Profile
Re: Бот для Warface
« Reply #12 on: April 27, 2017, 09:13:39 AM »
Спасибо за оперативный ответ.
1. Скрины во вложении. Без цветокоррекции. Требуется корректно определять слово "сибирь" (в идеале конечно часть слова "ибирь". Во избежание непонимания скриптом прописной буквы). Ники замазал на всякий.
2. Требуется определять текст сообщения.

За ссылку на тему со скриптом процента отдельная благодарность.
« Last Edit: April 27, 2017, 09:17:59 AM by Boroducu »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Бот для Warface
« Reply #13 on: April 27, 2017, 11:13:34 AM »
Именно эти два варианта находит так:
Code: (clickermann) [Select]
GETSCREEN
COLORMODE(8)
IF_PICTURE_IN(0,0, $_xmax,$_ymax, "siberia.bmp", -1, 95)
    LOGWRITE("Найдено")
    MOVE($_return1, $_return2)
ELSE
    LOGWRITE("НЕ найдено")
END_IF
HALT

При увеличении числа вариантов можно точнее вычислить процент.
Сейчас заготовка 43х8 = 344 пкс. Несовпадающих с образцом во второй картинке 14 пкс, что = 5%.
Или пока на глаз поставить 80-85% и тестировать.

Хочешь, обрежь "сибирь" до "ибирь".


Пока писал пост, по третьему вопросу возникла мысль соотнести выводы команд pxlxor(или pxlcrc) для исходной области и текущей. Корректен ли будет такой способ оценки соответствия двух изображений?
Когда присутствует сглаживание, меняющийся фон и прочее о  pxlxor и pxlcrc сразу забудь. Здесь без вариантов.
Иногда можно применить PXLCOUNT - подсчет количества пикселей заданного цвета. И полученное число сверять с диапазоном. Для текста подходит не всегда, если текста и самих вариантов не много. И когда область расположения известна точно.
« Last Edit: April 27, 2017, 11:20:11 AM by Vint »