Перейти к содержанию

умный векторный аим для contract wars


Рекомендуемые сообщения

     И так уважаемые , загорелся сделать себе аим бота, да не простого, а умного. Чтобы играть не задрачиваясь потея, а в удовольствие.И чтоб при желании он мог сам играть ,пока я чай пью :)

Одним словом автоматизация процесса.

    Тут же хочу пояснить, кодить я умею и на с++ и на делфи, хотя последний недолюбливаю , из-за обилия знаков в синтаксических конструкциях, но если надо, терпимо.

 

 И так, хватит слов, ближе к делу.

 

Сначала какие данные хочу использовать:

 

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

 

Что собственно пришло на ум дальше? естественно матан, вектора, матрицы, направляющие косинусы и прочие прелести.

 К примеру есть две точки в пространстве, игрок и враг. по ним строим вектор.

 что это дает?

  • можно найти во-первых его длину, то есть расстояние между точками
  • можно узнать направление вектора

дальше , к примеру мы знаем направление (скорее всего единичного) вектора камеры.

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

 

 собственно поворот я хочу осуществить прямым хуком директ3д камеры и умножением на нужную матрицу. Предполагаю, что координаты и в directx и игровые являются одинаковыми.

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

 

    Предполагаемые режимы бота:

  • следование за ближайшей целью
  • автовыбор ближайшей цели + выбор самого побитого и добивание 
  • режим автоматической игры (ну когда совсем лень :)  )

 

Предполагаемый алгоритм:

  • в цикле проверяем каждые  n  секунд на появление новых игроков на карте
  • заносим их в массив (vector c++)
  • каждые n секунд листаем массив проверяя расстояние между игроком.
  • проверяем нет ли препятствий между игроком и противником
  • закидываем ближайших товарищей в массив
  • вычисляем кто ближе всех, вычисляем того кто хуже себя чувствует, и кого сильно побили
  • и начинаем методический отстрел тяжело больных товарищей, переходя к более сильным , в зоне видимости .
  • не забываем перезаряжаться.
  • если включен режим автоматической игры, то нужно ходить к скоплению вражин. (но это еще более суровая логика :) )

собственно какие вопросы и проблемы возникли:

  • я сомневаюсь что нужно хукать d3d камеру. наверное скорее всего стоит искать объект unity (что проблематично, мне кажется)
  • поиск данных тоже поставил меня в тупик
  • в литературе по dx & opengl вычитал что матрицы и вектора должны быть четырехмерными. я понимаю что принцип тот же, но ставит в тупик 4-я координата. вроде как это для камеры нужно.
  • опять же если подумать, то повороты и прочая ерунда должны отправляться на сервер, если менять их в обход, то  наводка будет осуществлена только у меня, а по данным сервера я выстрелю мимо.
  • проблемно рейкастить пространство не имея api движка.
  • не сильно ли упадет фпс от всех этих премудростей ?

Итог:

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

 

В заключение хочу добавить, что сие чудо в массы запускать и не думаю (если вдруг читают админы cw пусть выдохнут, и отложат валидол в сторонку) целью является сделать пример автоматизированного выполнения задач, да и просто получить в итоге немного релакса :)

всем заранее спасибо!

 

  • Плюс 2
Ссылка на комментарий
Поделиться на другие сайты

[terminus]--------------------------------------------------------------------------------

Привет! Рекомендую с браузерки не начинать, а в целом мысли верные.

--------------------------------------------------------------------------------[/terminus]

  • Плюс 2
Ссылка на комментарий
Поделиться на другие сайты

offtopic.gif А тебе не кажется, что интереснее сделать робота в реальной жизни...

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

Ссылка на комментарий
Поделиться на другие сайты

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

 

Наверно, все что можно это  отправлять оси "X,Y мышки" и нажатие на кнопки.

        float h = horizontalSpeed * Input.GetAxis("Mouse X");        float v = verticalSpeed * Input.GetAxis("Mouse Y"); 

Но их надо рассчитывать лучше чем это делает мозг глядя на экран монитора и двигая рукой мышку...

 

А поскольку игра написана на Unity3d и все API доступны, то собрать .net модуль с отправкой осей мышки и её кнопок. Тот же рейкаст гораздо удобнее делать C# и функциям движка, там несколько строчек кода.

 

 

Дистанция: Vector3.Distance

Направление вектора: отнять дальний вектор позиции от текущего вектора позиции 

var heading = target.position - player.position;

О том как внедрять код .net сборки я писал здесь (Внедряем свою dll-ку в игру на Unity3D с помощью CE AA).

 

 

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

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

Executor, так как игра написана на Unity, тебе прядется достать файл "Assembly-CSharp.dll" в котором находится код игры.

Существуют два способа это статья и SWF Memory Dumper, скорей тебе подъедает 2 способ.

Запускаем программу ставим галочку "Unity", и выбираем из нескольких процесс браузера нужный и нажимаем на "Scan Process" если не нашли выбирай другой процесс браузера, нашли выбираем нужные Файлы и нажимаем на "Dump to Disk".

После этого выбираем сохранены файл и запускаем в Декомпилятор .NET и изучаем код.

в цикле проверяем каждые  n  секунд на появление новых игроков на карте

заносим их в массив (vector c++)

каждые n секунд листаем массив проверяя расстояние между игроком.

В игре есть значение, сколько игроков с час играет, не легче его считывать?

И не легче будет найти структуру игроков и с них считывать данные здоровья, позиция XYZ? 

 

поиск данных тоже поставил меня в тупик

Это каких? если позиций XYZ, здоровья и всего остального, то запускаем CheatEngine в SWF Memory Dumper находим нужный процесс браузера, запоминаем PID переводим в НЕХ(при помощи калькулятора WIndows (ставим галочку в "Вид > Программист")) и ищем в cheatengine нужный значение.

Пример: в "SWF Memory Dumper" нужное значение PID = 345, Name = Opera, переводи 345 в HEX это будет 159, в СheatEngine ищем 00000159-Opera.exe, подключаемся и начинаем искать данные. 

 

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

Так найди функцию которая отвечает за повороты и туда записывай значения. 

 

не сильно ли упадет фпс от всех этих премудростей ?

главное правильно написать код и тормозить не чего не будет.
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

В игре есть значение, сколько игроков с час играет, не легче его считывать? И не легче будет найти структуру игроков и с них считывать данные здоровья, позиция XYZ? 

так вот проблема в поиске этой структуры. в принципе как делаю я:

1) нахожу значение хп

2)ищу многоуровневые указатели

3)дальше в принципе нахожу структуру своего игрока (там валяется уровень броня и ид, и прочее)

4) перехожу на указатель выше и не нахожу остальных игроков, собсно в этом то и тупик :(

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

да готовый код мне не нужен. при желании сам напишу. это нормальное явление , писать код :)

В игре есть значение, сколько игроков с час играет, не легче его считывать?

ты прав, так будет удобнее

Ссылка на комментарий
Поделиться на другие сайты

так вот проблема в поиске этой структуры. в принципе как делаю я: 1) нахожу значение хп 2)ищу многоуровневые указатели 3)дальше в принципе нахожу структуру своего игрока (там валяется уровень броня и ид, и прочее) 4) перехожу на указатель выше и не нахожу остальных игроков, собсно в этом то и тупик

 

Тебе будет значительно легче, если ты будешь знать Unity3D и на нём сначала отработаешь бота. А затем инжектируюя .net модуль уже в саму игру.

Объекты GameObject(контейнеры) искать по tag, имени, положению в иерархии объектов. Компоненты контейнера искать по типу. Поля и функции искать по C#-функциями. Читать поля, вызывать функции по C#-функциям. 

Но, даже если ты найдешь все объекты (своего персонажа, чужих), все компоненты объектов, поля, функции и прочее. То как уже писал автор, все расчеты на серваке. Если автору игры верить, то рейкаст из точки выстрела в точку попадания в персонажа рассчитается на сервере. Тогда ты сможешь только искать GOs своего и чужих персонажей, искать компонент Transform, из него координаты, а отправлять только оси мышки, клавиши мышки, клавиши клавиатуры. Может быть непросто рассчитать оси мышки, чтобы подменить их (добавить дельту) так, чтоб прицел попал в голову, учитывая динамичность игры. Хотя возможно.

Также забыл, написать. Чтобы найти чтение осей мышки и класс Input, тебе надо декомпилировать одну из .net .dll в папке с игрой. Через поиск найти. Когда напишешь свой скрипт, тебе придется либо добавлять дельту, либо подменять чужой компонент контроллера своим. Контроллер - компонент управления каким-то объектом.

 

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

Ссылка на комментарий
Поделиться на другие сайты

  • 2 месяца спустя...

 

я думаю как бы не вытаскивали расчеты на сервер, подменить нужное мы можем в любом случае, проблема в поиске :)

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

после долгого моего отсутствия тема всё еще актуальна  =)  иду методом

2zolo2 , дизасмил код, нашел кучу интересностей и полезностей. думаю над дальнейшей реализацией)
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

 

после долгого моего отсутствия тема всё еще актуальна  =)  иду методом

2zolo2 , дизасмил код, нашел кучу интересностей и полезностей. думаю над дальнейшей реализацией)

 

делай цветовой aim-bot ...

Ссылка на комментарий
Поделиться на другие сайты

перехожу на указатель выше и не нахожу остальных игроков, собсно в этом то и тупик

 

Как не пытался, у меня тоже на получается находить координаты других игроков в unity3d! Пробовал на двух играх из ВК, но никак(

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...
  • 6 лет спустя...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.