Боты для компьютерных игр
1.0.0
1.0.0
  • Боты для компьютерных игр
  • manuscript
    • Кликеры
      • Перехват устройств вывода
      • Инструменты для разработки
      • Внедрение данных на уровне ОС
      • Пример кликера для Lineage 2
      • Методы защиты от кликеров
    • Внеигровые боты
      • Методы защиты от внеигровых ботов
      • Пример бота для NetChess
      • Перехват трафика
      • Сетевые протоколы
      • Инструменты для разработки
    • Специальные техники
      • Перехват данных на уровне ОС
      • Эмуляция устройств ввода
    • Классификация ботов
      • Задачи ботов
      • types-of-bots
      • Игровое приложение
    • Внутриигровые боты
      • Методы защиты от внутриигровых ботов
      • Инструменты для разработки
      • Доступ к памяти процесса
      • Пример бота для Diablo 2
      • Организация памяти процесса
    • Заключение
    • foreword
Powered by GitBook
On this page

Was this helpful?

  1. manuscript
  2. Классификация ботов

Игровое приложение

Previoustypes-of-botsNextВнутриигровые боты

Last updated 5 years ago

Was this helpful?

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

Сначала мы рассмотрим . Иллюстрация 1-1 демонстрирует её логические элементы.

{caption: "Иллюстрация 1-1. Элементы типичного приложения онлайн-игры"}

Запуская игру на компьютере, вы создаёте новый [вычислительный процесс]()) (process). Он имеет собственную (memory region), которая выделяется (ОС). Память – только один из ресурсов предоставляемых ОС. Другими ресурсами являются устройства ввода-вывода: монитор, клавиатура, мышь, сетевая плата и т.д. Процессорное время тоже относится к одному из ресурсов. Оно определяет, как часто конкретный процесс получает управление в многозадачной ОС.

Возможно, вы спросите: "Зачем нужна ОС для запуска игры? Разве не проще работать приложениям вообще без неё?" ОС – это прежде всего удобная платформа для разработки. Без неё каждой компании, создающей программы, пришлось бы изобретать собственные средства для работы с устройствами ввода-вывода. Это потребовало бы много времени и усилий. Намного проще использовать драйвера устройств и системные библиотеки, предоставляемые ОС. Кроме того ни о какой не могло бы идти и речи: всё процессорное время использовалось бы только одним приложением, как это было в .

Вернёмся к иллюстрации 1-1. Прямоугольники соответствуют элементам приложения, а стрелки – направлению передачи данных.

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

Рассмотрим обработку однократного действия игрока. В ней участвует несколько элементов, изображённых на иллюстрации. Предположим, что мы перемещаем персонажа. Для этого нажимаем клавишу на клавиатуре. Обработка нажатия состоит из следующих шагов:

  1. Устройство ввода -> Операционная система Клавиатура посылает сигнал о нажатии клавиши контроллеру прерываний. Это устройство передаёт сигналы в процессор в порядке очереди и с учётом приоритетов. На программном уровне они обрабатываются драйвером ОС.

  2. Операционная система -> Клиент игрового приложения ОС получает от драйвера событие, соответствующее нажатию клавиши. Затем ОС передаёт его дальше: процессу игрового приложения. Обычно, событие нажатия клавиши получает процесс, окно которого является активным в данный момент. Предположим, что активно игровое приложение.

  3. Клиент игрового приложения После получения события нажатия клавиши, процесс обновляет состояние игровых объектов в своей памяти. В нашем случае изменение касается местоположения персонажа.

  4. Клиент игрового приложения -> Операционная система Процесс должен сообщить игровому серверу о новом местоположении персонажа. Для этого надо отправить на сервер сетевой пакет с новой информацией. Процесс обращается к ОС через системную библиотеку. Эта библиотека получает доступ к драйверу сетевой платы, который и отправляет пакет.

  5. Операционная система -> Игровой сервер Игровой сервер получает сетевой пакет. Затем он проверяет, соответствует ли новая информация о персонаже игровым правилам. Если проверка прошла успешно, сервер принимает эти данные и отправляет клиенту подтверждение. Если к серверу подключено несколько клиентов, он рассылает новую информацию о персонаже им всем.

  6. Операционная система -> Клиент игрового приложения Через контроллер прерываний сетевая плата посылает сигнал в процессор о получении сетевого пакета от игрового сервера. Сигнал обрабатывается драйвером. На уровне ОС создаётся соответствующее событие, которое передаётся процессу игрового приложения.

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

  8. Клиент игрового приложения -> Операционная система Процесс игрового приложения обращается к системной библиотеке ОС (в случае Windows это обычно DirectX) для отображения на мониторе нового положения персонажа.

  9. Операционная система -> Устройство вывода Библиотека ОС выполняет необходимые расчёты и обращается к драйверу видеокарты для отрисовки картинки на экране.

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

Состояние игровых объектов может меняться как из-за действий игрока, так и из-за событий на стороне сервера (например, срабатывание таймера). Эти события будут обрабатываться по алгоритму, который состоит из рассмотренных выше шагов с шестого по девятый. В этом случае сервер уведомляет клиента об изменении. После этого процесс игрового приложения обновляет состояние объектов и перерисовывает картинку на экране.

PC и онлайн-игры взаимодействуют с ресурсами ОС через системные библиотеки по одинаковым алгоритмам.

В случае онлайн-игры, состояние игровых объектов хранится на сервере и клиенте. При этом информация на стороне сервера более приоритетна. Это значит, что если информация клиента отличается, она будет заменена на ту, что хранится на сервере. Таким образом сервер контролирует корректность состояния игровых объектов. В случае однопользовательской PC-игры такого контроля нет.

Большинство современных онлайн-игр работают по рассмотренной нами схеме. Эта схема работы называется .

Иллюстрация 1-2 демонстрирует схему . В отличие от онлайн-игры, здесь отсутствует сервер. Действия пользователя отражаются только на памяти процесса игрового приложения, в которой хранится состояние всех объектов.

{caption: "Иллюстрация 1-2. Элементы типичного приложения однопользовательской PC-игры", height: "50%"}

архитектурой клиент-сервер
однопользовательской
PC-игры
онлайн-игру
https://ru.wikipedia.org/wiki/Процесс_(информатика
область памяти
операционной системой
многозадачности
MS-DOS
Схема приложения однопользовательской игры
Схема приложения онлайн-игры