Моддинг: клиент-серверное взаимодействие

From Vintage Story Wiki
This page is a translated version of the page Modding:Server-Client Considerations and the translation is 100% complete.

This page was last verified for Vintage Story version 1.15.

Other languages:

Разработка модов на основе кода для Vintage Story требует понимания разницы между сервером и клиентом, особенно для более сложных приложений.

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

Основы

Ядром типичного мода является ModSystem, более подробно описанная на странице Advanced Blocks.

public class ExampleMod : ModSystem

Как описано в документации по API (VintageStory.API.Common.ModSystem), ModSystem включает номер виртуальных методов, которые ваш мод может переопределить. Возможно, чаще всего используется метод ModSystem.Start(ICoreAPI). Вы можете использовать этот метод для определения кода инициализации, который должен запускаться при первой загрузке игры. Однако важно понимать, что по умолчанию игра создает один экземпляр вашей ModSystem на сервере и один дополнительный экземпляр ModSystem на каждом клиенте. В случае однопользовательской игры на одном компьютере будут работать один сервер и один клиент. В результате любой код, который вы поместите в ModSystem.Start, будет выполняться два или более раз — один раз в потоке сервера и один раз в каждом потоке клиента.

Is My Mod Server-Side, Client-Side, or Both?

TBA

Общие "подводные камни"

  • В одиночной игре сервер и клиент используют один и тот же путь к данным. Это важно иметь в виду, особенно если вы сохраняете/читаете какие-либо настройки мода из пути к данным игры, например, используя встроенные методы ModConfig. Например, ваш мод может работать нормально в одиночной игре, если серверный поток читает ваш файл настроек, но затем не работает должным образом на многопользовательском сервере, где клиентский поток должен был читать настройки игрока.

Полезные советы

  • В большинстве случаев мод может быть разработан для работы как в одиночной, так и в многопользовательской игре без какой-либо специальной логики. Однако если вам по какой-то причине нужно проверить состояние сеанса, вы можете использовать свойство ICoreClientAPI.IsSinglePlayer, чтобы проверить, является ли текущая игра однопользовательской игрой.
  • Если у вас есть какие-либо сомнения или опасения по поводу работы вашего мода на многопользовательском сервере, рассмотрите возможность настройки локального сервера на своем компьютере, чтобы проверить его!

Тестирование разделенного сервера и клиента

Легко проверить, как ваш мод будет работать на многопользовательском сервере, даже если вы работаете только на одной локальной машине!

«Следующие инструкции предназначены для Windows, но другие операционные системы должны работать аналогично».

  1. Прежде чем начать, удалите все моды, которые вы поместили непосредственно в каталог программы Vintage Story (например, C:\Program Files\Vintagestory). Моды в этом каталоге будут общими для сервера и клиента с настройкой, описанной ниже.
    • Вместо этого переместите эти моды в каталог данных (в Windows это %appdata%/Vintagestory/Mods/ по умолчанию).
  2. Установите ярлык для файла VintageStoryServer.exe игры в существующем каталоге программы Vintage Story. Вы будете использовать этот ярлык для запуска тестового сервера. Вам нужно будет указать собственный путь к данным с помощью параметра запуска, чтобы убедиться, что сервер использует путь к данным, отличный от пути к данным по умолчанию. Например, в Windows ваш ярлык может иметь цель
    C:\Program Files\Vintagestory\VintagestoryServer.exe --dataPath "%appdata%/VintagestoryData_Server"
    Local Server Example Shortcut.png
  3. Дважды щелкните ярлык, чтобы запустить сервер.
  4. В этот момент сервер сгенерирует новые папки и содержимое в указанном вами каталоге --dataPath. Например, теперь вы можете перейти по этому пути и добавить копию вашего мода в подкаталог /Mods, если вы хотите, чтобы сервер загрузил ваш мод (после чего вам нужно будет перезапустить сервер). Сервер также будет выводить журналы в подкаталог /Logs здесь.
  5. Если вы хотите загрузить копию своего мода на стороне клиента, обязательно добавьте свой мод в каталог с обычным путем к данным (в Windows это %appdata%/Vintagestory/Mods/ по умолчанию).
  6. Запустите обычный игровой клиент и выберите «Мультиплеер» в главном меню. Добавьте новый сервер и настройте его со значением хоста/IP-адреса «localhost». Затем нажмите "Сохранить".
    Local Server Example Config.png
  7. Теперь вы можете выбрать свой сервер в многопользовательском меню для подключения! Все моды, настройки и журналы должны быть разделены, и вы можете проверить, будет ли мод работать должным образом на многопользовательском сервере.

Примечания

  • Если по какой-то причине вы хотите установить полностью отдельную установку для своего тестового сервера, вы также можете это сделать. Либо установите полную версию игры в отдельный каталог и запустите оттуда свой сервер, либо загрузите TAR-файл «(только для сервера)» с сайта загрузки Vintage Story. Имейте в виду, что вам все равно нужно указать собственный путь к данным, чтобы файлы сервера были отделены от обычного игрового клиента.
  • Вы также можете настроить дополнительные пользовательские пути для вашего сервера, используя другие параметры запуска, такие как --addModPath. Для получения дополнительной информации посетите страницу Параметры запуска клиента.
  • Если вы не знакомы с настройкой сервера, вы также можете посетить страницу Конфигурация сервера. Например, вы можете установить значение конфигурации "AdvertiseServer" в "false", если вы используете этот сервер только для локального тестирования модов.


Modding
Green Items require C# coding
Basics

Getting Started | Mod Types | Simple Examples | Theme Pack

Asset System | Textures | Items | Recipes | Blocks | Entities | Model Creator | Animation Basics | VTML & Icons | Mod Packaging & Release | Modinfo | Debugging

Advanced

JSON Patching | Advanced JSON Items | The Remapper | Server-Client Considerations | Compatibility with other mods

Setting Up Your Development Environment (General - Windows - Linux)

Advanced Blocks | Advanced Items | Item-Block Interactions | Block Behavior | Block Entities | Particle Effects | World Access | Inventory Handling | Chat Commands | GUIs | Server-Client Networking | Monkey patching (Harmony)

Data Management

Savegame Data Storage | ModConfig File | Chunk Data Storage | Tree Attribute

Worldgen

WorldGen Concepts | Terrain | Ores | Trees | WorldGen API

Rendering

Shaders and Renderers

Property Overview

Item | Entity | Block | Block Behaviors | Block Classes | Block Entities | Block Entity Behaviors

Workflows & Infrastructure

Modding Efficiency Tips | Mod-engine compatibility | Mod Extensibility | Load Order

Additional Resources

List of server commands | List of client commands | Client startup parameters | Creative Starter Guide | ServerBlockTicking | Bot System | WorldEdit | Cinematic Camera

Example Mods | API Docs | GitHub Repository