Modding:клиент-серверное взаимодействие
Эта страница проверялась в последний раз для версии Vintage Story 1.15.
Разработка модов на основе кода для 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, но другие операционные системы должны работать аналогично».
- Прежде чем начать, удалите все моды, которые вы поместили непосредственно в каталог программы Vintage Story (например,
C:\Program Files\Vintagestory
). Моды в этом каталоге будут общими для сервера и клиента с настройкой, описанной ниже.- Вместо этого переместите эти моды в каталог данных (в Windows это
%appdata%/Vintagestory/Mods/
по умолчанию).
- Вместо этого переместите эти моды в каталог данных (в Windows это
- Установите ярлык для файла VintageStoryServer.exe игры в существующем каталоге программы Vintage Story. Вы будете использовать этот ярлык для запуска тестового сервера. Вам нужно будет указать собственный путь к данным с помощью параметра запуска, чтобы убедиться, что сервер использует путь к данным, отличный от пути к данным по умолчанию. Например, в Windows ваш ярлык может иметь цель
C:\Program Files\Vintagestory\VintagestoryServer.exe --dataPath "%appdata%/VintagestoryData_Server"
- Дважды щелкните ярлык, чтобы запустить сервер.
- В этот момент сервер сгенерирует новые папки и содержимое в указанном вами каталоге
--dataPath
. Например, теперь вы можете перейти по этому пути и добавить копию вашего мода в подкаталог /Mods, если вы хотите, чтобы сервер загрузил ваш мод (после чего вам нужно будет перезапустить сервер). Сервер также будет выводить журналы в подкаталог/Logs
здесь. - Если вы хотите загрузить копию своего мода на стороне клиента, обязательно добавьте свой мод в каталог с обычным путем к данным (в Windows это
%appdata%/Vintagestory/Mods/
по умолчанию). - Запустите обычный игровой клиент и выберите «Мультиплеер» в главном меню. Добавьте новый сервер и настройте его со значением хоста/IP-адреса «localhost». Затем нажмите "Сохранить".
- Теперь вы можете выбрать свой сервер в многопользовательском меню для подключения! Все моды, настройки и журналы должны быть разделены, и вы можете проверить, будет ли мод работать должным образом на многопользовательском сервере.
Примечания
- Если по какой-то причине вы хотите установить полностью отдельную установку для своего тестового сервера, вы также можете это сделать. Либо установите полную версию игры в отдельный каталог и запустите оттуда свой сервер, либо загрузите TAR-файл «(только для сервера)» с сайта загрузки Vintage Story. Имейте в виду, что вам все равно нужно указать собственный путь к данным, чтобы файлы сервера были отделены от обычного игрового клиента.
- Вы также можете настроить дополнительные пользовательские пути для вашего сервера, используя другие параметры запуска, такие как
--addModPath
. Для получения дополнительной информации посетите страницу Параметры запуска клиента. - Если вы не знакомы с настройкой сервера, вы также можете посетить страницу Конфигурация сервера. Например, вы можете установить значение конфигурации
"AdvertiseServer"
в "false", если вы используете этот сервер только для локального тестирования модов.
Wondering where some links have gone?
The modding navbox is going through some changes! Check out Navigation Box Updates for more info and help finding specific pages.
Modding | |
---|---|
Modding Introduction | Getting Started • Пакет тем |
Content Modding | Content Mods • Developing a Content Mod • Basic Tutorials • Intermediate Tutorials • Advanced Tutorials • Content Mod Concepts |
Code Modding | Code Mods • Setting up your Development Environment |
Property Overview | Item • Entity • Entity Behaviors • Block • Block Behaviors • Block Classes • Block Entities • Block Entity Behaviors • Collectible Behaviors • World properties |
Workflows & Infrastructure | Modding Efficiency Tips • Mod-engine compatibility • Mod Extensibility • VS Engine |
Additional Resources | Community Resources • Modding API Updates • Programming Languages • List of server commands • List of client commands • Client startup parameters • Server startup parameters Example Mods • API Docs • GitHub Repository |