Александр Зуев
Divo RP - Клиент-серверная многопользовательская ролевая игра по подобию GTA SA RP
Александр Зуев
#Программирование игр

Divo RP - Клиент-серверная многопользовательская ролевая игра по подобию GTA SA RP

36 
Александр Зуев Россия, Краснодар
Поделиться: 0 0 0
Divo RP - Клиент-серверная многопользовательская ролевая игра по подобию GTA SA RP
Бюджет

1 000 000

Сфера

Информационные технологии и интернет

Сдано

Апрель 2025

Задача

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

1. Синхронизация состояния в реальном времени между всеми клиентами - движение игроков, физика транспорта, стрельба, поведение NPC - при минимальной нагрузке на канал.

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

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

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

Решение

В основу положена сетевая модель FishNet с четким разделением ответственности через три типа удаленных вызовов:

  • ServerRpc - клиент просит сервер выполнить действие (купить топливо, нанести урон, открыть вклад);

  • ObserversRpc - сервер рассылает результат всем наблюдателям (визуальные эффекты, спавн объектов, синхронизация);

  • TargetRpc - сервер отвечает конкретному клиенту-инициатору (обновить его баланс, открыть окно).

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

Персистентность реализована через тонкий собственный слой доступа к MS SQL Server с обобщенным маппером на рефлексии (Select<T>), который автоматически проецирует строки результата на типизированные C#-модели без ручного кода для каждой сущности. Записи в БД выполняются асинхронно, не блокируя игровой поток, а фоновая задача автосохранения фиксирует позицию и инвентарь игрока каждые 10 секунд.

Результат

  • Реализована законченная сетевая архитектура уровня MMO: серверно-авторитарная модель, персистентный мир на SQL, real-time-синхронизация - фундамент, на котором проект может масштабироваться по контенту без переписывания ядра.

  • 15+ взаимосвязанных игровых систем доведены до рабочего состояния: экономика, банкинг, кредитование, недвижимость, транспорт, бой, ИИ, автошкола с экзаменом, навигация, чат, локализация, аутентификация.

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

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

  • Надежная персистентность: автосохранение прогресса каждые 10 секунд и неблокирующая запись в БД, что гарантирует сохранность мира при сбоях и перезапусках.

  • ~4 600 строк собственного прикладного кода в 54 модулях (без учета сторонних библиотек), организованных по доменным областям (Network, Player, Car, City, DB, NPC, UI) - структура, в которой новые функции добавляются изолированно, не задевая ядро.

https://mega.nz/file/pDswlC7C#M-9S6uVcba3PXZPz0JGcFUeCsizEJfwdTEMoRAK0Dhw

Стек технологий

  • С# С# Язык программирования
  • Unity Unity Среда разработки

Оцените кейс
Спасибо за оценку
Выскажите мнение
Авторизуйтесь, чтобы добавить свой комментарий.
оставить заявку

Хотите заказать похожий проект?

Оставить заявку