Перейти к содержанию
Авторизация  
Executor

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

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

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

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

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

 

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

 

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

 

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

 

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

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

 что это дает?

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

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

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

 

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

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

 

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

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

 

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

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

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

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

Итог:

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

 

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

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

 

  • Плюс 2

Поделиться сообщением


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

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

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

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

  • Плюс 2

Поделиться сообщением


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

DEL

Изменено пользователем MasterGH
  • Плюс 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.

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Executor, попробуй найти хп 2- 3 врагов и от них попробуй найти нужные указатели.

Поделиться сообщением


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

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

 

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

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

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

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

 

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

Поделиться сообщением


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

 

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

Поделиться сообщением


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

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

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

Поделиться сообщением


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

 

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

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

 

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

Поделиться сообщением


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

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

 

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

Поделиться сообщением


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

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

я пишу умного бота а не тупого как пробку, читай название топика

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

×

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

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