Modding:Server-Client Considerations/ru: Difference between revisions

From Vintage Story Wiki
(Created page with "Разработка модов на основе кода для Vintage Story требует понимания разницы между сервером и клиентом, особенно для более сложных приложений.")
(Created page with "=== Примечания === * Если по какой-то причине вы хотите установить полностью отдельную установку для своего тестового сервера, вы также можете это сделать. Либо установите полную версию игры в отдельный каталог и запустите оттуда свой сервер, либо загрузите TAR-фа...")
 
(4 intermediate revisions by the same user not shown)
Line 5: Line 5:
Разработка модов на основе кода для Vintage Story требует понимания разницы между сервером и клиентом, особенно для более сложных приложений.
Разработка модов на основе кода для Vintage Story требует понимания разницы между сервером и клиентом, особенно для более сложных приложений.


<div lang="en" dir="ltr" class="mw-content-ltr">
Понимание разделения задач между серверными и клиентскими потоками облегчит устранение неполадок и создание хорошо спроектированных систем модов, особенно если вы планируете, чтобы ваш мод работал на многопользовательских серверах.
Understanding the division of tasks between server and client threads will make it easier to troubleshoot and to create well-designed mod systems, particularly if you plan for your mod to work on multiplayer servers.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
== Основы ==
== Basics ==
Ядром типичного мода является ModSystem, более подробно описанная на странице [[Modding:Advanced_Blocks/ru|Advanced Blocks]].
The core of a typical mod is the ModSystem, which is introduced in more detail on the [[Modding:Advanced_Blocks#The_Mod_System|Advanced Blocks]] page.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<syntaxhighlight lang="c#">
<syntaxhighlight lang="c#">
public class ExampleMod : ModSystem
public class ExampleMod : ModSystem
</syntaxhighlight>
</syntaxhighlight>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Как описано в документации по API ([https://apidocs.vintagestory.at/api/Vintagestory.API.Common.ModSystem.html VintageStory.API.Common.ModSystem]), <code>ModSystem</code> включает номер виртуальных методов, которые ваш мод может переопределить. Возможно, чаще всего используется метод <code>ModSystem.Start(ICoreAPI)</code>. Вы можете использовать этот метод для определения кода инициализации, который должен запускаться при первой загрузке игры. Однако важно понимать, что по умолчанию игра создает один экземпляр вашей ModSystem на сервере и один дополнительный экземпляр ModSystem на каждом клиенте. В случае однопользовательской игры на одном компьютере будут работать один сервер и один клиент. В результате любой код, который вы поместите в <code>ModSystem.Start</code>, будет выполняться два или более раз — один раз в потоке сервера и один раз в каждом потоке клиента.
As described in the API docs ([https://apidocs.vintagestory.at/api/Vintagestory.API.Common.ModSystem.html VintageStory.API.Common.ModSystem]), <code>ModSystem</code> includes a number of virtual methods which your mod may override. Perhaps the most commonly used method is <code>ModSystem.Start(ICoreAPI)</code>. You can use this method to define initialization code that should run when the game first loads. However, it is important to realize that, by default, the game creates one instance of your ModSystem on the server, and one additional ModSystem instance on each client. In the case of a single-player game, there will be one server and one client running on the same machine. As a result, any code that you put in <code>ModSystem.Start</code> will be run two or more times - once on the server thread and once on each client thread.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
== Is My Mod Server-Side, Client-Side, or Both? ==
== Is My Mod Server-Side, Client-Side, or Both? ==
''TBA''
''TBA''
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
== Общие "подводные камни" ==
== Common "Gotchas" ==
* В одиночной игре сервер и клиент используют один и тот же путь к данным. Это важно иметь в виду, особенно если вы сохраняете/читаете какие-либо настройки мода из пути к данным игры, например, используя встроенные методы [[Modding:ModConfig/ru|ModConfig]]. Например, ваш мод может работать нормально в одиночной игре, если серверный поток читает ваш файл настроек, но затем не работает должным образом на многопользовательском сервере, где клиентский поток должен был читать настройки игрока.
* In a singleplayer session, the server and the client share the same dataPath. This is important to keep in mind particularly if you are saving/reading any mod settings from the game's data path, such as by using the built in [[Modding:ModConfig|ModConfig]] methods. For example, your mod might appear to work fine on singleplayer if the server thread is reading your settings file, but then fail to work as expected on a multiplayer server, where the client thread should have been reading the player's settings.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
== Полезные советы ==
== Helpful Tips ==
* В большинстве случаев мод может быть разработан для работы как в одиночной, так и в многопользовательской игре без какой-либо специальной логики. Однако если вам по какой-то причине нужно проверить состояние сеанса, вы можете использовать свойство <code>ICoreClientAPI.IsSinglePlayer</code>, чтобы проверить, является ли текущая игра однопользовательской игрой.
* In most cases, a mod can be designed to work on both singleplayer and multiplayer sessions with no special logic needed. However, if you need to check the state of the session for some reason, you can use the <code>ICoreClientAPI.IsSinglePlayer</code> property to check if the current game is a singleplayer game.
* Если у вас есть какие-либо сомнения или опасения по поводу работы вашего мода на многопользовательском сервере, рассмотрите возможность настройки локального сервера на своем компьютере, чтобы проверить его!
* If you have any doubts or concerns about your mod working on a multiplayer server, consider setting up a local server on your machine to test it out!
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
== Тестирование разделенного сервера и клиента ==
== Testing a Divided Server and Client ==
Легко проверить, как ваш мод будет работать на многопользовательском сервере, даже если вы работаете только на одной локальной машине!
It's easy to test how your mod will work on a multiplayer server, even if you're just working on a single local machine!
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
«Следующие инструкции предназначены для Windows, но другие операционные системы должны работать аналогично».
''The following instructions are for Windows, but other operating systems should work similarly.''
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
# Прежде чем начать, удалите все моды, которые вы поместили непосредственно в каталог программы Vintage Story (например, <code>C:\Program Files\Vintagestory</code>). Моды в этом каталоге будут общими для сервера и клиента с настройкой, описанной ниже.
# Before getting started, remove any mods that you've put directly in your Vintage Story program directory (such as <code>C:\Program Files\Vintagestory</code>). Mods in this directory will be shared by the server and client with the setup described below.
#* Вместо этого переместите эти моды в каталог данных (в Windows это <code>%appdata%/Vintagestory/Mods/</code> по умолчанию).
#* Instead, move these mods into the data directory (on windows, that is <code>%appdata%/Vintagestory/Mods/</code> by default).
# Установите ярлык для файла VintageStoryServer.exe игры в существующем каталоге программы Vintage Story. Вы будете использовать этот ярлык для запуска тестового сервера. Вам нужно будет указать собственный путь к данным с помощью параметра запуска, чтобы убедиться, что сервер использует путь к данным, отличный от пути к данным по умолчанию. Например, в Windows ваш ярлык может иметь цель<br><code>C:\Program Files\Vintagestory\VintagestoryServer.exe --dataPath "%appdata%/VintagestoryData_Server"</code><br>[[Image: Local_Server_Example_Shortcut.png]]
# Set up a shortcut to the game's VintageStoryServer.exe file in your existing Vintage Story program directory. You'll use this shortcut to launch your test server. You will need to give it a custom data path using a run parameter to ensure that the server uses a different data path than the default data path. For example, on Windows your shortcut might have a target of<br><code>C:\Program Files\Vintagestory\VintagestoryServer.exe --dataPath "%appdata%/VintagestoryData_Server"</code><br>[[Image:Local_Server_Example_Shortcut.png]]
# Дважды щелкните ярлык, чтобы запустить сервер.
# Double-click the shortcut to launch the server.
# В этот момент сервер сгенерирует новые папки и содержимое в указанном вами каталоге <code>--dataPath</code>. Например, теперь вы можете перейти по этому пути и добавить копию вашего мода в подкаталог </code>/Mods</code>, если вы хотите, чтобы сервер загрузил ваш мод (после чего вам нужно будет перезапустить сервер). Сервер также будет выводить журналы в подкаталог <code>/Logs</code> здесь.
# At this point, the server will generate new folders and content in the <code>--dataPath</code> directory you specified. For example, you can now visit that path and add a copy of your mod to the </code>/Mods</code> subdirectory if you'd like the server to load your mod (after which you'd need to restart the server). The server will also output logs to the <code>/Logs</code> subdirectory here.
# Если вы хотите загрузить копию своего мода на стороне клиента, обязательно добавьте свой мод в каталог с обычным путем к данным (в Windows это <code>%appdata%/Vintagestory/Mods/</code> по умолчанию).
# If you'd like load a copy of your mod on the client side, make sure to add your mod to the normal data path directory (on windows, that is <code>%appdata%/Vintagestory/Mods/</code> by default).
# Запустите обычный игровой клиент и выберите «Мультиплеер» в главном меню. Добавьте новый сервер и настройте его со значением хоста/IP-адреса «localhost». Затем нажмите "Сохранить".<br>[[Image:Local_Server_Example_Config.png]]
# Launch the normal game client, and select "Multiplayer" from the main menu. Add a new server and configure it with a Host / IP Address value of "localhost". Then click "Save".<br>[[Image:Local_Server_Example_Config.png]]
# Теперь вы можете выбрать свой сервер в многопользовательском меню для подключения! Все моды, настройки и журналы должны быть разделены, и вы можете проверить, будет ли мод работать должным образом на многопользовательском сервере.
# You can now select your server from the Multiplayer menu to connect! All mods, settings, and logs should be separated, and you can test whether the mod will work as expected on a multiplayer server.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
=== Примечания ===
=== Notes ===
* Если по какой-то причине вы хотите установить полностью отдельную установку для своего тестового сервера, вы также можете это сделать. Либо установите полную версию игры в отдельный каталог и запустите оттуда свой сервер, либо загрузите TAR-файл «(только для сервера)» с сайта загрузки Vintage Story. Имейте в виду, что вам все равно нужно указать собственный путь к данным, чтобы файлы сервера были отделены от обычного игрового клиента.
* If for some reason you'd like to have a completely separate install for your test server, you can do that too. Either install a full version of the game in a separate directory and run your server from there, or download the "(server only)" TAR file from the Vintage Story download site. Keep in mind that you'll still need to set a custom data path to ensure the server files are separate from the normal game client.
* Вы также можете настроить дополнительные пользовательские пути для вашего сервера, используя другие параметры запуска, такие как <code>--addModPath</code>. Для получения дополнительной информации посетите страницу [[Client startup parameters/ru|Параметры запуска клиента]].
* You can also configure additional custom path(s) for your server using other run parameters, such as <code>--addModPath</code>. For more info, check out the [[Client startup parameters]] page.
* Если вы не знакомы с настройкой сервера, вы также можете посетить страницу [[Server Config/ru|Конфигурация сервера]]. Например, вы можете установить значение конфигурации <code>"AdvertiseServer"</code> в "false", если вы используете этот сервер только для локального тестирования модов.
* If you're unfamiliar with server setup, you may also want to check out the [[Server Config]] page. For example, you might want to set the <code>"AdvertiseServer"</code> config value to "false" if you're only using this server to test mods locally.
</div>
{{Navbox/modding|Vintage Story}}
{{Navbox/modding|Vintage Story}}

Latest revision as of 06:25, 17 October 2022

Эта страница проверялась в последний раз для версии Vintage Story 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", если вы используете этот сервер только для локального тестирования модов.
Icon Sign.png

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 ItemEntityBlockBlock BehaviorsBlock ClassesBlock EntitiesBlock Entity BehaviorsWorld properties
Workflows & Infrastructure Modding Efficiency TipsMod-engine compatibilityMod ExtensibilityVS Engine
Additional Resources Community Resources Modding API Updates Programming Languages List of server commandsList of client commandsClient startup parametersServer startup parameters
Example ModsAPI DocsGitHub Repository