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) - структура, в которой новые функции добавляются изолированно, не задевая ядро.