🇷🇺DevLog # 12

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

Предисловие

Если вам понравится Нам бы очень хотелось видеть вашу активность в чате, живые обсуждения и обратную связь. Очень хотим видеть что всё это делается не зря. Всем привет! В данном посте мы расскажем о начале разработки нового онлайн-мода. В последние месяцы мы начали разработку собственного онлайн-мода. Это не обновление OnlineCity или чего-то другого, а полностью своя разработка на новой архитектуре. Почему и для чего? В данный момент мы ощущаем трудности с масштабированием OnlineCity (далее — ОС). Множество функций, таких как синхронизация мира, требуют огромных затрат на переписывание половины старого кода, а более простая реализация работает на костылях и не является универсальной. Иные моды, такие как RimWorld Together или Zetrith's Multiplayer, не поддаются модификации из-за авторских прав или просто не подходят для реализации глобального онлайна. Поэтому мы решили начать делать свой онлайн-мод, который удовлетворит все потребности игроков и разработчиков. Давайте посмотрим, что уже реализовано на данный момент, что будет сделано в ближайшее время и какие у нас планы. Техническая часть: Интеграция и сервер В отличие от старого OnlineCity (ОС), новая модификация полностью интегрирована в игру. Нам больше не нужно создавать IPC-связь (межпроцессное взаимодействие) между клиентом и сервером, как это сейчас реализовано для «Барахолки». Зачем нужна интеграция серверной части в игру? Всё просто: если сервер работает вне игрового движка, мы не можем использовать нативные типы данных Unity. Это создает множество проблем и делает невозможной адекватную реализацию многих механик, таких как полная синхронизация мира, биржа, PvP и другие. В нашем новом решении мы лишены этого недостатка: сервер может полноценно использовать все типы Unity.

Клиентская часть

Вкладка «Интернет»

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

Вкладка «Избранное»

Здесь вы можете добавить любой сервер вручную через связку IP + Port и подключиться к нему. В карточке добавленного сервера отображается ключевая информация:

  • Название

  • Описание

  • Текущий онлайн

  • Пинг

Если сервер недоступен, карточка будет помечена красной надписью, сигнализирующей об отсутствии соединения.

Серверная часть

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

Ниже приведены параметры сервера, которые уже реализованы и доступны для редактирования:

Ролик демонстрирующий работу онлайна

26MB
Open

Полная синхронизация мира

На данный момент уже реализована полноценная синхронизация карты мира. Дороги, реки, поселения — абсолютно всё синхронизируется между игроками. Кроме того, мы добавили поддержку WorldEdit: вы можете создать собственный пресет мира и загрузить его на сервер. Администратор сервера может в режиме реального времени (онлайн) строить дороги, уничтожать поселения, менять тайлы и ландшафт — и все эти изменения мгновенно отобразятся у всех игроков.

Как это меняет геймплей?

Помните наш ивент «Ледниковый период»? Раньше он был локальным: каждый игрок получал свою клиентскую версию события, и у всех оно проходило по-разному. Теперь всё это вынесено на сервер. Будь то ледниковый период, глобальное потепление или потоп — биомы и тайлы будут меняться одновременно для всех игроков в течение нескольких реальных дней.

Серверный Рассказчик

Мы нацелены на полный перенос мировых ивентов (Которые происходят на планете, таких как «Поглотитель солнца» и др.) под управление Серверного Рассказчика.Как это работает? Сейчас все события обрабатываются на клиенте, и ваш локальный Рэнди сам решает, когда и что вам отправить. В нашей новой архитектуре будет Серверный Рэнди. Он будет собирать данные о каждом игроке (богатство, время выживания и прочее) и на их основе генерировать события, видимые ВСЕМ игрокам на карте.Примеры реализации:

  • Конкурентные квесты: На карте появляется схрон с 5 архо-ногами. Он появляется у всех на сервере, но забрать награду сможет только тот, кто доберется первым.

  • Общие угрозы: Если появляется Поглотитель солнца, он активируется для всех игроков в радиусе действия и влияет на всех сразу. Достаточно, чтобы один игрок уничтожил его — и эффект пропадёт у всех остальных.

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

Планы и идеи: Что нас ждет дальше?

Первоочередная задача — полностью завершить разработку синхронизации мир, перенос ивентов на Серверного Рассказчика и исправить все баги. Как только база будет готова, мы начнем постепенно интегрировать весь необходимый контент для полноценного онлайна:

  • Чат;

  • Профили игроков;

  • Торговля;

  • Биржа;

  • Система кланов;

  • Рейды за золотом с механикой грабежа;

  • И, возможно, полноценное PvP (но об этом поговорим чуть позже).

Ниже — референсы того, как мы видим новый интерфейс:

Референс не передаёт финальный вариант UI

Пару слов о PvP

Здесь пока рано делать громкие заявления. Если мы и возьмемся за реализацию PvP, то точно в последнюю очередь. Это колоссальная задача, под которую придется перестраивать множество систем, вплоть до того, что для корректной работы может потребоваться переписывание кода других модов.Однако наша архитектура частично работает по принципу Zetrith's Multiplayer, что позволяет реализовать внятное PvP. Наше видение: под каждое сражение или посещение локации будет запускаться отдельная серверная копия RimWorld. Она будет обрабатывать 2, 3, да хоть 10 игроков — главное, чтобы железо сервера справилось с нагрузкой.В этом кроется и главная фишка, и главная проблема:

  • Плюс: Обработка на стороне сервера кардинально упрощает синхронизацию. Если вырос куст — он вырос у всех. Если пешка погибла — она погибла для всех.

  • Минус: Такой подход создает огромную нагрузку на серверные мощности.

Заключение

На этом пока всё! Мы очень надеемся на вашу поддержку. И речь не обязательно о материальной помощи — нам бы очень хотелось видеть вашу активность в чате, живые обсуждения и обратную связь. Это вдохновляет и показывает, что мы делаем этот проект не просто так, а он действительно кому-то нужен.

Last updated