Как игровые роботы воспринимают игровой мир и других существ?

52

Этот вопрос был у меня в голове некоторое время ... в основном потому, что я вижу ботов для всех видов игр, таких как WoW и другие. Мой вопрос как боты узнают, что появляется на экране? Я не играю в WoW, поэтому мой пример может быть неправильным, но если, например, есть монстр, как бот узнает, где этот монстр находится на экране и как он знает, как с ним взаимодействовать?

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

Заранее спасибо :)

TheRapture87
источник
14
В большинстве случаев эти боты зацепляются за память игры и непосредственно читают положение игрового элемента, вместо того, чтобы пытаться понять, что на экране.
Александр Дезбиенс,
2
Aceboy1993, ты программист? Пожалуйста, отредактируйте вопрос и сообщите нам в любом случае. Ответы, вероятно, должны быть сделаны немного по-другому, в зависимости от этого.
Panzercrisis
3
Просто быть чистым; Вы говорите о не встроенной автоматизации игрового процесса, верно? Золотодобывающие боты, прицелы и тому подобное? Или вы просто имеете в виду игроков ИИ?
Анко
Привет я программист Да, я говорю о золотодобывающих ботах и ​​прицельных ботах, но я также интересуюсь игроками ИИ :)
TheRapture87
3
@ Aceboy1993 Если рассмотреть оба вопроса, этот вопрос будет слишком широким. Пожалуйста, разделите их.
Мачта

Ответы:

77

Есть много моментов, когда бот может внедрить себя в игру.

  • Экран - один из них, но далеко не самый полезный. Тем не менее, я когда-то видел очень раннего прицела для Counter Strike, который использовал цветовое кодирование. Это было с альтернативными моделями персонажей с одноцветными текстурами (игра была достаточно дружественной к моддингу, чтобы позволить это), а затем просто обнаруживающими пиксели этих цветов. Хотя не очень эффективный метод. Тогда это было уже довольно неуклюже и становилось все менее и менее жизнеспособным, потому что графические движки становятся все более и более мощными, а это означает, что все больше и больше деталей запутывают любые алгоритмы оптического распознавания.

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

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

  • И тогда есть сетевой код. В онлайн-игре сервер отправляет свойства и позиции всех объектов в игре по сети. Поток сетевых данных между сервером и клиентом может быть перехвачен и проанализирован. Популярный инструмент для этого - wireshark, Когда разработчик повторно разработал сетевой код, он может написать бота, который перехватывает сетевой трафик, как это делает Wireshark, и использует информацию для принятия решения. Когда разработчик более мотивирован, он может даже разработать полноценный игровой клиент с нуля, который реализует сетевой протокол и играет в игру, даже не имея графического вывода. Такие боты очень популярны у золотых фермеров, потому что без графического вывода клиент обычно гораздо более дружественен к ресурсам, что означает, что они могут запускать множество из них одновременно на небольшом сервере.


1: Поскольку вы упоминаете WoW, стоит отметить, что в ранней и пресловутой программе ботов WoWGlider использовался прямой доступ к памяти. У Blizzard была подпрограмма Warden, предназначенная для обнаружения и блокирования доступа внешних программ к внутреннему игровому состоянию WoW. Поскольку программа для ботов обошла эту защиту и считала память без разрешения, в 2006 году решение MDY v Blizzard было принято в пользу Blizzard на том основании, что производитель ботов поощряет и позволяет своим пользователям нарушать авторские права и нарушать DMCA .

Philipp
источник
Комментарии не для расширенного обсуждения; этот разговор был перемещен в чат .
Джош
18

Боты являются игроками. Они просто читают позиции игрока / монстра с сервера, как и любой другой игрок, и используют эти значения в сочетании с простым AI-сценарием для выполнения действий в игре, программно моделируя нажатия клавиш и щелчки мыши. Если бы у ботов действительно был алгоритм, позволяющий определять, что за монстр находится на экране, и взаимодействовать с ним, это было бы довольно впечатляющее программное обеспечение, которое стоило бы миллионы. Это в основном ИИ для роботов.

dimitris93
источник
2
Проще сделать некоторую проверку окклюзии и приведение лучей, чтобы проверить, видел ли бот монстра, а затем использовать состояние анимации, чтобы проверить, что делает монстр.
чокнутый урод
Чтобы сделать это, вам придется провести обратный инжиниринг игры, реализовать приведение лучей, а также прочитать состояние анимации монстра, что потребует введения кода и изменения .exe. Как это проще, чем читать сетевые пакеты, которые вы получаете с сервера (используя wireshark, как предложил Филлип), а затем просто иметь AI-скрипт для имитации действий клавиатуры / мыши на основе сетевых пакетов?
dimitris93
2
Я предполагал, что это бот "противника ИИ", а не модифицированный клиентский бот.
чокнутый урод
3
@ratchetfreak О, теперь это имеет смысл. Ссылка WoW в вопросе на самом деле подразумевает, что «боты» в основном являются золотодобытчиками, а не противниками ИИ.
dimitris93
7

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

В Runescape существовал большой проект (RSBot), который копировал бы содержимое памяти из клиента Runescape в его локальную память, где он мог затем просматривать все состояние игры без риска того, что клиент зацепится. Потребовалось немного реинжиниринга, чтобы определить, где искать в памяти, чтобы найти указатели на данные, но как только они это сделали, они предоставили API, чтобы воспользоваться информацией. Он точно знал бы, что было в мире, получив координаты объекта, а затем преобразовав их с помощью матрицы преобразования камеры, чтобы получить положение на экране. Маски попаданий также были читабельными, поэтому было легко определить, в какой именно диапазон перемещать мышь, чтобы получить желаемый результат.

Бот предоставил кучу отладочной информации, такой как аннотации, которые сообщают разработчику, где находятся координаты плитки, какой идентификатор у этого объекта, какой идентификатор принадлежит данному элементу и т. Д. Эта информация может затем использоваться для создания ботов. Фактический процесс создания скриптов для ботов был довольно простым. Среда предоставила много полезных функций, таких как move_to(world_coordinates)или mouse_move(x,y)которые могли бы выполнять определенные действия в некоторой степени правдоподобно (перемещение мыши вдоль случайного сплайна, многократное перемещение через миникарту и экран и т. Д.)

Также в Runescape у вас есть возможность резко снизить качество графики. На самом деле было довольно легко делать определенные виды ботов, снимая экран и применяя некоторые базовые концепции компьютерного зрения, чтобы построить модель мира. Используя эту технику, я сделал и проклятого бота, и плавильного бота, оба из которых работали довольно хорошо. Он просто взял бы кадр, увеличил бы насыщенность настолько, насколько мог, и затем попытался бы извлечь из него шаблоны, которые он мог бы затем сгенерировать карту вероятности для зон щелчка.

В случае с проклятым ботом целью был меньший демон, который просто огромная красная вещь, которую тривиально найти. В случае плавильного бота он будет искать маленькую оранжевую трапецию, окруженную серым, и это будет печь. Он также попытался бы найти большую, светло-серую «L» форму, которая была бы банковским столом. Это было сделано только с помощью даунскейлинга и базовой эвристики. Он также мог ориентироваться с помощью удобного компаса рядом с миникартой, поэтому он мог ориентировать камеру в более надежном положении, чтобы найти целевые объекты.

В различных играх Nexon серверы очень доверяют клиентам. Я использовал эту кучу тонны в Maplestory, изменив карты, чтобы убрать опасности или добавить перекосы, чтобы бот не был настолько сложным. Я бы также следил за трафиком к серверу и обратно, чтобы построить модель мира, которую затем можно было бы использовать для быстрого поиска и убийства монстров.

Когда я понял, что больше не играю в ММО, а просто автоматизировал их, я решил вообще прекратить играть. Если бы я не беспокоился о том, чтобы разоблачить себя на законных основаниях, я мог бы, вероятно, совершить убийство, продавая MMO-ботов, но я действительно не хотел, чтобы меня судили. Вот почему я трачу свое время на настоящее программирование!

Kaslai
источник
Аминь в этом последнем абзаце. Я увлекся программированием: 1) играл в WoW 2) занимался ботом WoW 3) начинал писать свой собственный бот для WoW. Знания по программированию, которые я получил всего за 2 года, были более ценными, чем все, что я узнал во время учебы (ну, по крайней мере, по отношению к «практическому» программированию).
Себастьян Граф
2

Ответ Филиппа великолепен, но только краткое замечание о модели Модель / Представление / Контроллер или MVC для краткости.

Ваш экран является частью «вида», который представляет данные из «модели», которая является реальным состоянием игры, если хотите. Боты и ваш персонаж все «существуют» (в некотором смысле) внутри модели. Представьте, если вы отключите экран - игра продолжится, даже если вид исчезнет.

В сетевой игре понятие «модель» немного сложнее, так как у вас на самом деле много моделей. У вас есть модель на сервере, а затем модель на каждом клиенте, которая частично обновляется из-за данных, получаемых с сервера. Вы можете думать о «модели» как о модели сервера и модели вашего клиента, или вы можете думать о ней как о модели вашего собственного клиента. В любом случае, здесь живут боты. Таким образом, их «восприятия», которые мы могли бы использовать как сокращение для их ввода данных и состояния, основаны на состоянии модели в то время и взаимодействии между различными объектами / объектами в этой модели. На практике каждый бот может иметь функцию «refreshState», которая запускается один раз за кадр или что-то в этом роде и заставляет его обновлять ее.

Макс Уильямс
источник
0

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

Вы можете увидеть обнаружение столкновений на этой странице.

Megasa3
источник
Это потребует от вас ввода кода в настоящую игру
dimitris93
Да, конечно. Все это запрограммировано, но полезно для свободных путей или случаев, таких как боты, следующие за вами и так далее. В 3D играх это самый распространенный способ AFAIK, и он изучал, по крайней мере, тот, который не является mmorp ... возможно, вау, имеет всю информацию на сервере, но она отличается от большой mmorp.
Megasa3