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. Setup PIN code view ## 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. Admin panel sign-in -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. Admin panel terminal \ 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 +```