diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/01-what-is-wukong-mp.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/01-what-is-wukong-mp.md
index 9863057..edea16e 100644
--- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/01-what-is-wukong-mp.md
+++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/01-what-is-wukong-mp.md
@@ -1,15 +1,20 @@
# 什么是 WukongMP?
-WukongMP 是我们为 **《黑神话:悟空》** 打造的社区多人项目。我们开发它的目标,是让玩家能够在共享的多人体验中相聚,使大家可以一起合作探索世界、与朋友并肩挑战 Boss,并加入由社区运营的自定义服务器。
+WukongMP 是我们为 **《黑神话:悟空》**
+打造的社区多人项目。我们开发它的目标,是让玩家能够在共享的多人体验中相聚,使大家可以一起合作探索世界、与朋友并肩挑战 Boss,并加入由社区运营的自定义服务器。
## WukongMP 的设计目标
-WukongMP 围绕社区驱动的多人玩法而设计。借助它,玩家可以创建并加入自定义服务器,通过自动模组同步实现一键连接,并使用我们内置的服务器工具启动专用服务器。我们还计划继续扩展该平台,加入自定义游戏模式以及公平竞技 / 安全功能。
+WukongMP
+围绕社区驱动的多人玩法而设计。借助它,玩家可以创建并加入自定义服务器,通过自动模组同步实现一键连接,并使用我们内置的服务器工具启动专用服务器。我们还计划继续扩展该平台,加入自定义游戏模式以及公平竞技
+/ 安全功能。
## 我们为什么要打造它
-我们的目标,是把原本的单人体验转变为一个可模组化、由社区驱动的多人平台。我们希望为玩家和创作者提供工具,让他们能够打造属于自己的玩法、分享自定义体验,并围绕这些内容发展社区。WukongMP 旨在以类似于 FiveM 对 *Grand Theft Auto V* 所做到的方式,推动自定义多人玩法的普及与民主化。
+我们的目标,是把原本的单人体验转变为一个可模组化、由社区驱动的多人平台。我们希望为玩家和创作者提供工具,让他们能够打造属于自己的玩法、分享自定义体验,并围绕这些内容发展社区。WukongMP
+旨在以类似于 FiveM 对 *Grand Theft Auto V* 所做到的方式,推动自定义多人玩法的普及与民主化。
## 当前开放情况
-目前,我们正在邀请玩家报名申请 SDK 抢先体验,与社区一起继续塑造 WukongMP 的未来。WukongMP 并非 **《黑神话:悟空》** 的官方服务,也与 Game Science 没有关联
\ No newline at end of file
+目前,我们正在邀请玩家报名申请 SDK 抢先体验,与社区一起继续塑造 WukongMP 的未来。WukongMP 并非 **《黑神话:悟空》**
+的官方服务,也与 Game Science 没有关联.
diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/02-Server/01-installation.mdx b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/02-Server/01-installation.mdx
index 3be7448..615c860 100644
--- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/02-Server/01-installation.mdx
+++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/02-Server/01-installation.mdx
@@ -6,10 +6,10 @@ The WukongMP server is currently distributed in the following formats:
- Docker image **(coming soon)**
### Downloads
-| Platform | Architecture | Download |
-| --- | --- | --- |
-| Linux | x64 | [Download for Linux](https://readymstorage.blob.core.windows.net/wukong-server-releases/wukong-server-linux64-alpha.zip) |
-| Windows | x64 | [Download for Windows](https://readymstorage.blob.core.windows.net/wukong-server-releases/wukong-server-win64-alpha.zip) |
+| Platform | Architecture | Download |
+| -------- | ------------ | ------------------------------------------------------------------------------------------------------------------------ |
+| Linux | x64 | [Download for Linux](https://readymstorage.blob.core.windows.net/wukong-server-releases/wukong-server-linux64-alpha.zip) |
+| Windows | x64 | [Download for Windows](https://readymstorage.blob.core.windows.net/wukong-server-releases/wukong-server-win64-alpha.zip) |
## Installation
@@ -30,12 +30,13 @@ server/
Start the server by running the `server.exe` binary.
-On first launch, the server creates a `data/` directory inside the server folder.
-This directory contains the `web.db` database file, where persistent data is stored.
+On first launch, the server creates a `data/` directory inside the server
+folder. This directory contains the `web.db` database file, where persistent
+data is stored.
The server listens on the following ports:
-| Port | Protocol | Purpose |
-| --- | --- | --- |
-| 9050 | UDP | Game traffic (player connections, game state synchronization, etc.) |
-| 9050 | HTTP | [Admin panel](admin-panel) |
+| Port | Protocol | Purpose |
+| ---- | -------- | ------------------------------------------------------------------- |
+| 9050 | UDP | Game traffic (player connections, game state synchronization, etc.) |
+| 9050 | HTTP | [Admin panel](admin-panel) |
diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/02-Server/02-admin-panel.mdx b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/02-Server/02-admin-panel.mdx
index e8f506c..ca60a04 100644
--- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/02-Server/02-admin-panel.mdx
+++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/02-Server/02-admin-panel.mdx
@@ -1,16 +1,18 @@
-import setupPinImg from '/img/docs/admin-panel-setup-pin.png';
-import terminalImg from '/img/docs/admin-panel-terminal.png';
-import signInImg from '/img/docs/admin-panel-sign-in.png';
+import setupPinImg from '/img/docs/admin-panel-setup-pin.png'; import
+terminalImg from '/img/docs/admin-panel-terminal.png'; import signInImg from
+'/img/docs/admin-panel-sign-in.png';
# Admin panel
The admin panel is available over HTTP on port `8900`.
-If the server is running on your local machine, you can open it at http://localhost:8900.
+If the server is running on your local machine, you can open it at
+http://localhost:8900.
## First-time setup
-When launching the server for the first time, you will need to create an administrator account.
+When launching the server for the first time, you will need to create an
+administrator account.
During startup, the server prints a one-time setup PIN in the console output:
@@ -27,9 +29,9 @@ $ ./server.exe
Enter this PIN in the admin panel to begin the setup process.
## Sign in with ReadyM
@@ -37,20 +39,22 @@ Enter this PIN in the admin panel to begin the setup process.
After entering the PIN, you will be asked to sign in with your ReadyM account.
-You will be redirected to the ReadyM authentication page, where you can enter your credentials.
+You will be redirected to the ReadyM authentication page, where you can enter
+your credentials.
-Once authentication is successful, you will be redirected back to the admin panel automatically.
+Once authentication is successful, you will be redirected back to the admin
+panel automatically.
## Admin panel interface
After signing in, you can access the admin panel interface.
\ No newline at end of file
+src={terminalImg}
+alt="Admin panel terminal"
+/>
diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/01-modding-overview.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/01-modding-overview.md
index 0b02734..e699f6e 100644
--- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/01-modding-overview.md
+++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/01-modding-overview.md
@@ -1,5 +1,5 @@
# Modding overview
-:::info[Work in progress]
-This feature is not documented yet.
-:::
\ No newline at end of file
+:::info[Work in progress]\
+This feature is not documented yet.\
+:::
diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/02-server-side-mods.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/02-server-side-mods.md
index 771e985..6e6203c 100644
--- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/02-server-side-mods.md
+++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/02-server-side-mods.md
@@ -1,5 +1,6 @@
# Server-side mods
-:::warning[Work in progress]
-This feature is under development and will be available in a future version of the SDK.
-:::
\ No newline at end of file
+:::warning[Work in progress]\
+This feature is under development and will be available in a future version of
+the SDK.\
+:::
diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/04-APIs/console-commands.mdx b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/04-APIs/console-commands.mdx
index e7c789c..c37f8fd 100644
--- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/04-APIs/console-commands.mdx
+++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/04-APIs/console-commands.mdx
@@ -1,21 +1,23 @@
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
+import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem';
# Console commands
-The WukongMP SDK includes a command console accessible by pressing F1 on your keyboard.
+The WukongMP SDK includes a command console accessible by pressing F1
+on your keyboard.
## Keyboard shortcuts
-| Binding | Action |
-| --------|--------|
-| TAB | Auto-complete the selected command |
-| Alt + ↑ | Previous command |
-| Alt + ↓ | Next command |
+| Binding | Action |
+| ----------------------------- | ---------------------------------- |
+| TAB | Auto-complete the selected command |
+| Alt + ↑ | Previous command |
+| Alt + ↓ | Next command |
## Defining custom commands
-Use the [Console API](/docs/wukongmp-api-reference/WukongMp.Sdk.Api/WukongMp.Sdk.Api.IWukongConsoleApi.md) to define custom commands.
+Use the [Console
+API](/docs/wukongmp-api-reference/WukongMp.Sdk.Api/WukongMp.Sdk.Api.IWukongConsoleApi.md)
+to define custom commands.
### Register commands without parameters
@@ -44,8 +46,9 @@ rebirth_shrine
### Require parameters
-The command parameters are deducted from the handler signature - supported types are `string`, `int`, `float`, `double`, and `bool`.
-Parameters can be optional, in which case a default value must be provided.
+The command parameters are deducted from the handler signature - supported types
+are `string`, `int`, `float`, `double`, and `bool`. Parameters can be optional,
+in which case a default value must be provided.
@@ -71,7 +74,9 @@ teleport_shrine 2005 # teleports to shrine 2005
### Define auto-completed paremeters
-You can define a list of parameter values that will be displayed when the command is typed in. These values will be selectable with arrow keys and auto-completeable with TAB.
+You can define a list of parameter values that will be displayed when the
+command is typed in. These values will be selectable with arrow keys and
+auto-completeable with TAB.
@@ -89,7 +94,8 @@ void SpawnMonster(string monsterType) { ... }
-Immediately upon finishing the command name, the available parameter values will be shown:
+Immediately upon finishing the command name, the available parameter values will
+be shown:
```shell
spawn
@@ -113,4 +119,4 @@ wolf_sentinel
---
-
\ No newline at end of file
+
diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/04-APIs/custom-components.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/04-APIs/custom-components.md
index 45fef35..2d798c4 100644
--- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/04-APIs/custom-components.md
+++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/04-APIs/custom-components.md
@@ -1,9 +1,11 @@
# Custom components
-The WukongMP SDK allows for defining custom data components attached to entities in the game. These can be anything from primitive values to complex structures.
+The WukongMP SDK allows for defining custom data components attached to entities
+in the game. These can be anything from primitive values to complex structures.
---
-:::warning[Work in progress]
-This feature is under development and will be available in a future version of the SDK.
-:::
\ No newline at end of file
+:::warning[Work in progress]\
+This feature is under development and will be available in a future version of
+the SDK.\
+:::
diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/04-APIs/custom-rpc.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/04-APIs/custom-rpc.md
index 13a2618..3f8fab2 100644
--- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/04-APIs/custom-rpc.md
+++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/04-APIs/custom-rpc.md
@@ -1,9 +1,12 @@
# Custom RPC
-The WukongMP SDK allows for defining arbitrary Remote Procedure Call (RPC) functions. These can have arbitrary payloads and support a number of [Relay Modes](/docs/wukongmp-api-reference/ReadyM.Api.Multiplayer.Protocol.Enums/ReadyM.Api.Multiplayer.Protocol.Enums.RelayMode.md).
+The WukongMP SDK allows for defining arbitrary Remote Procedure Call (RPC)
+functions. These can have arbitrary payloads and support a number of [Relay
+Modes](/docs/wukongmp-api-reference/ReadyM.Api.Multiplayer.Protocol.Enums/ReadyM.Api.Multiplayer.Protocol.Enums.RelayMode.md).
---
-:::warning[Work in progress]
-This feature is under development and will be available in a future version of the SDK.
-:::
\ No newline at end of file
+:::warning[Work in progress]\
+This feature is under development and will be available in a future version of
+the SDK.\
+:::
diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/04-APIs/custom-widgets.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/04-APIs/custom-widgets.md
index eb8d6ed..507fa44 100644
--- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/04-APIs/custom-widgets.md
+++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/04-APIs/custom-widgets.md
@@ -2,6 +2,7 @@
---
-:::warning[Work in progress]
-This feature is under development and will be available in a future version of the SDK.
-:::
\ No newline at end of file
+:::warning[Work in progress]\
+This feature is under development and will be available in a future version of
+the SDK.\
+:::
diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/04-APIs/game-events.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/04-APIs/game-events.md
index 911ea54..895f61e 100644
--- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/04-APIs/game-events.md
+++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/04-APIs/game-events.md
@@ -1,3 +1,6 @@
# Game events
-The WukongMP SDK provides means to react to the most common events in the game. Refer to the [Events API](/docs/wukongmp-api-reference/WukongMp.Sdk.Api/WukongMp.Sdk.Api.IWukongEventApi.md) for a complete list.
\ No newline at end of file
+The WukongMP SDK provides means to react to the most common events in the game.
+Refer to the [Events
+API](/docs/wukongmp-api-reference/WukongMp.Sdk.Api/WukongMp.Sdk.Api.IWukongEventApi.md)
+for a complete list.
diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/04-APIs/key-bindings.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/04-APIs/key-bindings.md
index 9f15ba8..a6a2236 100644
--- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/04-APIs/key-bindings.md
+++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/04-APIs/key-bindings.md
@@ -1,6 +1,8 @@
# Key bindings
-The [Input API](/docs/wukongmp-api-reference/WukongMp.Sdk.Api/WukongMp.Sdk.Api.IWukongInputApi.md) provides a way to register custom keyboard and controller bindings.
+The [Input
+API](/docs/wukongmp-api-reference/WukongMp.Sdk.Api/WukongMp.Sdk.Api.IWukongInputApi.md)
+provides a way to register custom keyboard and controller bindings.
## Examples
@@ -24,7 +26,9 @@ WukongApi.Input.RegisterKeyBind(ModifierKeys.Alt, Key.X, () =>
## Register controller bindings
-Use the [RegisterGamePadBind](/docs/wukongmp-api-reference/WukongMp.Sdk.Api/WukongMp.Sdk.Api.IWukongInputApi#-registergamepadbindgamepadbutton-action) method to bind to one of the following buttons:
+Use the
+[RegisterGamePadBind](/docs/wukongmp-api-reference/WukongMp.Sdk.Api/WukongMp.Sdk.Api.IWukongInputApi#-registergamepadbindgamepadbutton-action)
+method to bind to one of the following buttons:
```csharp
public enum GamePadButton
@@ -55,7 +59,10 @@ public enum GamePadButton
## Using `CanApplyInput`
-Key bindings run every time a key is pressed, regardless of context. If you want to ensure that pressing 'K' when typing in chat will not trigger any command logic, gate it behind the call to [CanApplyInput](/docs/wukongmp-api-reference/WukongMp.Sdk.Api/WukongMp.Sdk.Api.IWukongInputApi#-canapplyinput).
+Key bindings run every time a key is pressed, regardless of context. If you want
+to ensure that pressing 'K' when typing in chat will not trigger any command
+logic, gate it behind the call to
+[CanApplyInput](/docs/wukongmp-api-reference/WukongMp.Sdk.Api/WukongMp.Sdk.Api.IWukongInputApi#-canapplyinput).
```csharp showLineNumbers
WukongApi.Input.RegisterKeyBind(Key.K, () =>
@@ -65,4 +72,4 @@ WukongApi.Input.RegisterKeyBind(Key.K, () =>
// toggle chat window visibility
}
});
-```
\ No newline at end of file
+```
diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/04-APIs/save-file-management.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/04-APIs/save-file-management.md
index 39f42cf..5fe17c7 100644
--- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/04-APIs/save-file-management.md
+++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/04-APIs/save-file-management.md
@@ -1,6 +1,7 @@
# Save file management
-The WukongMP SDK allows for a few modes of operation when it comes to save files.
+The WukongMP SDK allows for a few modes of operation when it comes to save
+files.
## Loading save files
@@ -19,6 +20,7 @@ During the game, you may choose to:
---
-:::warning[Work in progress]
-This feature is under development and will be available in a future version of the SDK.
-:::
\ No newline at end of file
+:::warning[Work in progress]\
+This feature is under development and will be available in a future version of
+the SDK.\
+:::
diff --git a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/05-Examples/01-swarm-mode.md b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/05-Examples/01-swarm-mode.md
index 826a138..56305a7 100644
--- a/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/05-Examples/01-swarm-mode.md
+++ b/i18n/zh-Hans/docusaurus-plugin-content-docs/current/wukongmp-docs/03-Development/05-Examples/01-swarm-mode.md
@@ -1,12 +1,16 @@
# Swarm Mode
-The mod aims to provide an example of a simplest way to implement a new game mode in WukongMP.
-It registers a console command `swarm_mode` which makes enemies spawn around the player in waves every few seconds.
-The players are supposed to fight until they can't anymore, after which the mod will print the number of enemies summoned.
+The mod aims to provide an example of a simplest way to implement a new game
+mode in WukongMP. It registers a console command `swarm_mode` which makes
+enemies spawn around the player in waves every few seconds. The players are
+supposed to fight until they can't anymore, after which the mod will print the
+number of enemies summoned.
## Mod entry point
-In order to create a WukongMP mod, you must create a new C# library project referencing `WukongMp.Sdk.dll` and define a class derived from [ModBase](/docs/wukongmp-api-reference/WukongMp.Sdk/WukongMp.Sdk.ModBase).
+In order to create a WukongMP mod, you must create a new C# library project
+referencing `WukongMp.Sdk.dll` and define a class derived from
+[ModBase](/docs/wukongmp-api-reference/WukongMp.Sdk/WukongMp.Sdk.ModBase).
At minimum, the mod must define its name and version number:
@@ -17,11 +21,14 @@ public class Mod : ModBase
public override string Version => "1.0.0";
```
-The `Initialize` method is the place to configure your mod. In this mod, we do a few things:
+The `Initialize` method is the place to configure your mod. In this mod, we do a
+few things:
-1. Resolve `SpawnEnemySwarmSystem` from the dependency injection container - every system defined in your mod will be injected there.
+1. Resolve `SpawnEnemySwarmSystem` from the dependency injection container -
+ every system defined in your mod will be injected there.
2. Register a console command `swarm_mode` which turns on our custom game mode.
-3. Subscribe to the `OnPlayerDead` event to turn it off when the last player dies.
+3. Subscribe to the `OnPlayerDead` event to turn it off when the last player
+ dies.
```csharp title="Mod.cs" showLineNumbers
protected override void Initialize(IDependencyContainer services)
@@ -49,7 +56,7 @@ The `Initialize` method is the place to configure your mod. In this mod, we do a
## Core gameplay loop
-The main logic of the mod is encapsulated in `SpawnEnemySwarmSystem`.
+The main logic of the mod is encapsulated in `SpawnEnemySwarmSystem`.
We begin by defining a few constants to configure the behavior of our system:
@@ -67,7 +74,9 @@ public sealed class SpawnEnemySwarmSystem : ModSystemBase
private const float InitialDelay = 3.0f;
```
-Then - the methods for enabling and disabling the system. We use the [Local API](/docs/wukongmp-api-reference/WukongMp.Sdk.Api/WukongMp.Sdk.Api.IWukongLocalApi) for showing message banners and adding messages to the chat window.
+Then - the methods for enabling and disabling the system. We use the [Local
+API](/docs/wukongmp-api-reference/WukongMp.Sdk.Api/WukongMp.Sdk.Api.IWukongLocalApi)
+for showing message banners and adding messages to the chat window.
```csharp showLineNumbers=13 title="SpawnEnemySwarmSystem.cs"
@@ -94,8 +103,17 @@ Then - the methods for enabling and disabling the system. We use the [Local API]
}
```
-All systems (classes derived from [ModSystemBase](/docs/wukongmp-api-reference/WukongMp.Sdk/WukongMp.Sdk.ModSystemBase)) expose an [OnUpdate](/docs/wukongmp-api-reference/WukongMp.Sdk/WukongMp.Sdk.ModSystemBase#-onupdateupdatetick) method which runs on every frame.
-We can use that to count the number of seconds since the last time we spawned enemies. When `_timeSinceLastSpawn` exceedes the threshold, we use the [Synchronization API](/docs/wukongmp-api-reference/WukongMp.Sdk.Api/WukongMp.Sdk.Api.IWukongSynchronizationApi) to spawn an enemy (Wolf Sentinel) a few times in a circle around the player. All available enemy types are defined in [TamerConstants](/docs/wukongmp-api-reference/WukongMp.Api.Configuration/WukongMp.Api.Configuration.TamerConstants).
+All systems (classes derived from
+[ModSystemBase](/docs/wukongmp-api-reference/WukongMp.Sdk/WukongMp.Sdk.ModSystemBase))
+expose an
+[OnUpdate](/docs/wukongmp-api-reference/WukongMp.Sdk/WukongMp.Sdk.ModSystemBase#-onupdateupdatetick)
+method which runs on every frame. We can use that to count the number of seconds
+since the last time we spawned enemies. When `_timeSinceLastSpawn` exceedes the
+threshold, we use the [Synchronization
+API](/docs/wukongmp-api-reference/WukongMp.Sdk.Api/WukongMp.Sdk.Api.IWukongSynchronizationApi)
+to spawn an enemy (Wolf Sentinel) a few times in a circle around the player. All
+available enemy types are defined in
+[TamerConstants](/docs/wukongmp-api-reference/WukongMp.Api.Configuration/WukongMp.Api.Configuration.TamerConstants).
```csharp showLineNumbers=35 title="SpawnEnemySwarmSystem.cs"
protected override void OnUpdate(UpdateTick tick)
@@ -128,4 +146,4 @@ We can use that to count the number of seconds since the last time we spawned en
private static Vector3 GetNthPointOnCircle(Vector3 center, int i, int n) { ... }
}
-```
\ No newline at end of file
+```