diff --git a/frontend/i18n/zh-CN/code.json b/frontend/i18n/zh-CN/code.json
index f139129fea6..ebec9fcab9e 100644
--- a/frontend/i18n/zh-CN/code.json
+++ b/frontend/i18n/zh-CN/code.json
@@ -143,7 +143,7 @@
"description": "标签列表页面的标题"
},
"announcement.serverVersion": {
- "message": "open.mp服务器{version}版本已发布!包含多项修复、性能优化及新功能!"
+ "message": "open.mp服务器{version}版本已发布!包含多项修复、性能优化及新特性!"
},
"announcement.changelog": {
"message": "更新日志"
@@ -161,7 +161,7 @@
"message": "忽略此消息"
},
"homepage.heroDescription": {
- "message": "为《侠盗猎车手:圣安地列斯》打造的全新多人模式模组,与{samp}实现{compatibility}。"
+ "message": "为《侠盗猎车手:圣安地列斯》打造的全新多人联机模组,与{samp}实现{compatibility}。"
},
"homepage.heroDescription.compatibility": {
"message": "完全向后兼容"
diff --git a/frontend/i18n/zh-CN/content/releases/launcher/v1.0.0.md b/frontend/i18n/zh-CN/content/releases/launcher/v1.0.0.md
index 63562049289..0c76eed1108 100644
--- a/frontend/i18n/zh-CN/content/releases/launcher/v1.0.0.md
+++ b/frontend/i18n/zh-CN/content/releases/launcher/v1.0.0.md
@@ -25,7 +25,7 @@ assets:
启动器新版 **v1.0.0** 现已发布。在此版本中,整个用户界面进行了重构(特别感谢 @continue2048 的参与和帮助)。我们进行了大量改进以提升性能、优化资源占用,旨在为你使用本启动器浏览服务器并加入心仪服务器时,提供最佳体验。
-以下是 open.mp 启动器最新版本的新增功能与变化列表:
+以下是 open.mp 启动器最新版本的新特性与变更列表:
- **全新设计**
- **SA-MP 安装**:无需再单独下载 SA-MP 了!现在你可以从版本列表中选择,或直接使用已安装于你游戏目录中的 SA-MP 版本。
diff --git a/frontend/i18n/zh-CN/content/releases/server/v1.1.0.2612.md b/frontend/i18n/zh-CN/content/releases/server/v1.1.0.2612.md
index eb469c3fb9f..5f1c05774ad 100644
--- a/frontend/i18n/zh-CN/content/releases/server/v1.1.0.2612.md
+++ b/frontend/i18n/zh-CN/content/releases/server/v1.1.0.2612.md
@@ -25,7 +25,7 @@ open.mp 现已结束候选版本阶段,我们很高兴地宣布,我们的项
## 启动器,迈向客户端的第一步
-open.mp 启动器终于发布了!你现在可以可靠地浏览服务器列表,选择你想游玩的服务器,并加入其中!启动器带来了许多新功能,与你以往使用 SA-MP 启动器的体验相比,你将获得好得多的体验。启动器位于此处。
+open.mp 启动器终于发布了!你现在可以可靠地浏览服务器列表,选择你想游玩的服务器,并加入其中!启动器带来了许多新特性,与你以往使用 SA-MP 启动器的体验相比,你将获得好得多的体验。启动器位于此处。
本次更新包含了大量的修复和新增内容。对于不了解详情的人,可以阅读下方的变更列表,并点击每个 PR 链接以获取更多细节。
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2019-05-22-timers.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2019-05-22-timers.md
new file mode 100644
index 00000000000..1064d1a80b2
--- /dev/null
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2019-05-22-timers.md
@@ -0,0 +1,56 @@
+---
+slug: timers
+title: 定时器模块
+authors: y_less
+---
+
+本篇前瞻文章展示了 open.mp 中定时器模块的改进,在保持向后兼容的同时,引入了一个更灵活、高效的 API。
+
+
+
+:::warning
+
+以下内容已过时,不反映 open.mp 的当前状态。本文发布于此仅作归档用。
+
+:::
+
+这是我们对 open.mp 中定时器模块所做改进的一次前瞻性展示:
+
+```c
+native SetTimer(const func[], msInterval, bool:repeat) = SetTimerEx;
+native SetTimerEx(const func[], msInterval, bool:repeat, const params[], GLOBAL_TAG_TYPES:...);
+native KillTimer(timer) = Timer_Kill;
+
+// 创建定时器
+native Timer:Timer_Create(const func[], usDelay, usInterval, repeatCount, const params[] = "", GLOBAL_TAG_TYPES:...);
+
+// 终止定时器
+native bool:Timer_Kill(Timer:timer);
+
+// 返回下一次调用前的剩余时间。
+native Timer_GetTimeRemaining(Timer:timer);
+
+// 获取剩余调用次数(0 表示无限)。
+native Timer_GetCallsRemaining(Timer:timer);
+
+// 获取 `repeatCount` 参数。
+native Timer_GetTotalCalls(Timer:timer);
+
+// 获取 `usInterval` 参数。
+native Timer_GetInterval(Timer:timer);
+
+// 将距离下次调用的剩余时间重置为 `usInterval`。
+native bool:Timer_Restart(Timer:timer);
+```
+
+前两个函数仅用于向后兼容,其余的是改进后的 API:
+
+```c
+native Timer:Timer_Create(const func[], usDelay, usInterval, repeatCount, const params[] = "", GLOBAL_TAG_TYPES:...);
+```
+
+- `func` - 作用显而易见,即指定要调用的函数。
+- `usDelay` - 同样显而易见,表示首次调用前的延迟时间(以微秒计)。
+- `usInterval` - 指定第一次调用后,将 usDelay 重置为何值。例如,如果你希望每小时执行一次定时器,而现在是上午 8:47,调用方式应为 `Timer_Create("OnTheHour", 780 SECONDS, 3600 SECONDS, 0);`
+- `repeatCount` - 与旧函数仅支持"一次"或"永久"不同,此参数指定调用函数的次数。"一次"为 `1`,`500` 表示调用 500 次后停止,(与旧 API 相反)`0` 表示"永久执行"。
+- `GLOBAL_TAG_TYPES` - 类似于 `{Float, ...}`,但支持更多标签。
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2019-10-19-turfs-formerly-gangzones-module.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2019-10-19-turfs-formerly-gangzones-module.md
new file mode 100644
index 00000000000..e0bda7f3aab
--- /dev/null
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2019-10-19-turfs-formerly-gangzones-module.md
@@ -0,0 +1,43 @@
+---
+slug: turfs-formerly-gangzones-module
+title: Turf(原帮派区域)模块
+authors: j0sh
+---
+
+大家好!我刚刚完成了Turf(领地)功能在服务器中的实现,觉得可以发文介绍一下这个模块,顺便告诉大家我们并没有放弃或停止开发!
+
+
+
+:::warning
+
+以下内容已过时,不反映 open.mp 的当前状态。本文发布于此仅作归档用。
+
+:::
+
+```c
+// 创建一个领地。可指定一个玩家ID将其设为该玩家的领地。
+native Turf:Turf_Create(Float:minx, Float:miny, Float:maxx, Float:maxy, Player:owner = INVALID_PLAYER_ID);
+
+// 销毁一个领地。
+native Turf_Destroy(Turf:turf);
+
+// 向一个或一批玩家显示一个领地。
+// 如果 playerid = INVALID_PLAYER_ID,将发送给所有玩家。
+native Turf_Show(Turf:turf, colour, Player:playerid = INVALID_PLAYER_ID);
+
+// 对一个或一批玩家隐藏一个领地。
+// 如果 playerid = INVALID_PLAYER_ID,将发送给所有玩家。
+native Turf_Hide(Turf:turf, Player:playerid = INVALID_PLAYER_ID);
+
+// 对一个或一批玩家闪烁显示一个领地。
+// 如果 playerid = INVALID_PLAYER_ID,将发送给所有玩家。
+native Turf_Flash(Turf:turf, colour, Player:playerid = INVALID_PLAYER_ID);
+
+// 停止对一个或一批玩家闪烁显示一个领地。
+// 如果 playerid = INVALID_PLAYER_ID,将发送给所有玩家。
+native Turf_StopFlashing(Turf:turf, Player:playerid = INVALID_PLAYER_ID);
+```
+
+很明显,这与传统API不同,但不用担心,我们会为这类功能提供封装层,以确保普通脚本无需修改即可重新编译,且不会出现问题。
+
+你可能还想知道另一个重要事实:所有Turf都在同一个资源池中,脚本最多可以创建4,294,967,295个Turf。但是,客户端一次最多只能同时处理1024个Turf。
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2019-11-09-vehicle-sync/index.mdx b/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2019-11-09-vehicle-sync/index.mdx
new file mode 100644
index 00000000000..7d48af7481e
--- /dev/null
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2019-11-09-vehicle-sync/index.mdx
@@ -0,0 +1,25 @@
+---
+slug: vehicle-sync
+title: 车辆同步
+authors: southclaws
+---
+
+import vehicleSync01URL from "@site/blog/2019-11-09-vehicle-sync/vehicle_sync_01.mp4";
+import vehicleSync02URL from "@site/blog/2019-11-09-vehicle-sync/vehicle_sync_02.mp4";
+import vehicleSync03URL from "@site/blog/2019-11-09-vehicle-sync/vehicle_sync_03.mp4";
+
+一篇简短的帖子展示了车辆同步技术的发展历程。
+
+
+
+
+
+
+
+
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2020-04-06-debugging.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2020-04-06-debugging.md
new file mode 100644
index 00000000000..de4ec695c71
--- /dev/null
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2020-04-06-debugging.md
@@ -0,0 +1,149 @@
+---
+slug: debugging
+title: 在 open.mp 中进行测试
+authors: y_less
+---
+
+在 SA:MP 中测试向来具有挑战性,但 open.mp 引入了新的工具,使其变得更加简单高效。借助开源代码库、增强的调试工具以及一个用于模拟玩家交互的强大新“mock”库,测试比以往任何时候都更自动化、更可靠。
+
+
+
+:::warning
+
+以下内容已过时,不反映 open.mp 的当前状态。本文发布于此仅作归档用。
+
+:::
+
+在 SA:MP 中进行测试并不容易。大多数情况下,只是连接到服务器并在各处放置打印语句。像 y_testing 这样的库使编写单元测试变得容易得多,但仅限于相当“纯粹”的代码——即主要在服务器端运行,没有太多玩家交互的代码。你可以用这种方式测试大量令人惊讶的行为,但它仍然有限,并且在问题真正出现时,并不能帮助缩小范围。
+
+那么 open.mp 是如何解决这个问题的呢?首先,代码是开源的,所以你可以使用所有现成的调试工具,例如 GDB 和 Visual Studio,来单步调试和检查代码。我们还计划为 Pawn 脚本本身添加类似的工具。
+
+但最大的新特性是“mock”库。简而言之,它允许你创建假的玩家,这些玩家的行为与真实玩家完全相同,但没有任何客户端连接。因此,脚本对这些假玩家执行的任何操作都可以被另一个脚本读取和分析。让我们以一个最简单的例子来首次演示——向玩家显示一个检查点,并确认它已被发送。使用 y_testing 时,你执行操作后必须实际询问玩家是否看到了,这很慢,不可重复,而且很繁琐:
+
+```c
+PTEST__ SetPlayerCheckpoint(playerid)
+{
+ SetPlayerCheckpoint(playerid, 0.0, 0.0, 4.0, 5.0);
+ ASK("你看到世界中间有一个检查点吗?");
+}
+```
+
+使用像 “Pawn.RakNet” 这样的库可以通过自动检查传出数据包来消除询问,但仍然需要一个已连接的玩家,因此无法自动化和重复:
+
+```c
+static
+ gCheckpointPlayer,
+ Float:gX,
+ Float:gY,
+ Float:gZ,
+ Float:gS;
+
+PTEST__ SetPlayerCheckpoint(playerid)
+{
+ SetPlayerCheckpoint(playerid, 0.0, 0.0, 4.0, 5.0);
+ ASSERT(gX == 0.0);
+ ASSERT(gY == 0.0);
+ ASSERT(gZ == 4.0);
+ ASSERT(gS == 5.0);
+ ASSERT(gCheckpointPlayer == playerid);
+}
+
+OPacket:107(playerid, BitStream:bs)
+{
+ gCheckpointPlayer = playerid;
+
+ BS_IgnoreBits(bs, 8);
+ BS_ReadFloat(bs, gX);
+ BS_ReadFloat(bs, gY);
+ BS_ReadFloat(bs, gZ);
+ BS_ReadFloat(bs, gS);
+
+ return 1;
+}
+```
+
+在 open.mp 中,我们有一个类似于 Pawn.RakNet 的 API,但是用于模拟玩家。因此,你可以创建一个没有游戏实例的玩家,并像对待普通玩家一样使用它:
+
+```c
+TEST__ SetPlayerCheckpoint()
+{
+ new playerid = Mock_CreatePlayer("Mr Mock");
+
+ // 清除所有现有数据包,便于搜索。
+ Mock_PurgeSent(playerid);
+
+ // 正常显示一个检查点。
+ SetPlayerCheckpoint(playerid, 0.0, 0.0, 4.0, 5.0);
+
+ // 检查是否看到了一个“SetCheckpoint”数据包。
+ new MockPacket:packet = Mock_GetPacket(playerid, "SetCheckpoint");
+ ASSERT(packet);
+ if (!packet) return;
+
+ // 检查数据包有4个组件,每个32位。
+ ASSERT(MockPacket_Components(packet) == 4);
+ ASSERT(MockPacket_Bits(packet) == 4 * 32);
+
+ // 检查各个组件。
+ new Float:tmp;
+ ASSERT(MockPacket_ReadFloat(packet, 0, tmp));
+ ASSERT(tmp == 0.0);
+ ASSERT(MockPacket_ReadFloat(packet, 1, tmp));
+ ASSERT(tmp == 0.0);
+ ASSERT(MockPacket_ReadFloat(packet, 2, tmp));
+ ASSERT(tmp == 4.0);
+ ASSERT(MockPacket_ReadFloat(packet, 3, tmp));
+ ASSERT(tmp == 5.0);
+}
+```
+
+这段代码完全可重复测试,是自包含的(没有全局变量和额外回调),并且易于扩展。
+
+但有时情况并非如此简单。如果你创建一个物体,你不能仅仅检查它是否立即发送给了玩家,因为他们可能离它很远,因此内置的streamer尚未将其发送给他们。为了解决这个问题,我们首先需要稍微绕开一下,解释一下像 `SetPlayerPos` 这样的基本同步是如何工作的。当你使用 `SetPlayerPos` 设置玩家的位置时,服务器并不会立即在内部以及为所有其他玩家更新他们的位置。相反,一个 `SET POSITION` 命令被发送给那个正在被移动的玩家,他们被传送到新位置,然后在下一个同步数据包中将新位置报告回服务器。原因基本上是延迟——在设置新位置后,可能仍有一个或多个使用旧位置的同步数据包在传输中。那么这对于模拟玩家意味着什么呢?这意味着你实际上无法设置他们的位置,至少不能以正常方式设置。因为没有真正的客户端,所以没有东西接收数据包(即设置位置的命令),也没有东西将数据同步回服务器。
+
+我们可以从模拟玩家为服务器生成任何模拟的同步数据,所以这是一种更新他们位置的方法,但对于一个常见操作来说可能有点繁琐,因此针对这个特定用例,有一个 `Mock_SetPlayerPos` 函数。但这还不是全部,因为我们需要streamer运行并根据他们的新位置进行更新,这只会周期性地发生(每隔几毫秒,取决于服务器滴答率)。为此,我们有另一个模拟函数——`Mock_Tick`,它可以将服务器时间瞬间向前跳转指定的微秒数(注意,不是毫秒)。这在真实服务器上绝对不应该使用,因为它会给定时器和其他对时间敏感的代码带来各种奇怪的问题,但可以用来在测试中模拟时间的流逝。请注意,`Mock_Tick(10000)` 不会延迟 10 毫秒,而是会将时间瞬间向前跳转 10 毫秒。
+
+```c
+TEST__ SetPlayerCheckpoint()
+{
+ new playerid = Mock_CreatePlayer("Mr Mock");
+
+ // 清除所有现有数据包,便于搜索。
+ Mock_PurgeSent(playerid);
+
+ // 创建一个物体。
+ CreateObject(1337, 100.0, 100.0, 4.0);
+
+ // 将模拟玩家的位置更新到服务器,使其靠近该物体。
+ Mock_SetPlayerPos(playerid, 105.0, 105.0, 4.0);
+
+ // 现在模拟经过一段时间,以便streamer运行(50毫秒应该足够)。
+ Mock_Tick(50000);
+
+ // 检查是否看到了一个“CreateObject”数据包。
+ new MockPacket:packet = Mock_GetPacket(playerid, "CreateObject");
+ ASSERT(packet);
+ if (!packet) return;
+
+ // 检查数据包是否有4个以上的组件,每个32位。
+ ASSERT(MockPacket_Components(packet) > 5);
+
+ // 检查数据包的一些组件。
+ new int;
+ new Float:tmp;
+ ASSERT(MockPacket_ReadInt32(packet, 1, int));
+ ASSERT(int == 1337);
+ ASSERT(MockPacket_ReadFloat(packet, 2, tmp));
+ ASSERT(tmp == 100.0);
+ ASSERT(MockPacket_ReadFloat(packet, 3, tmp));
+ ASSERT(tmp == 100.0);
+ ASSERT(MockPacket_ReadFloat(packet, 4, tmp));
+ ASSERT(tmp == 4.0);
+}
+```
+
+关于 `Mock_Tick` 的一个重要说明。如果你调用它,比如 `Mock_Tick(100000)`,并且有一个 1 毫秒的定时器正在运行,这会立即使定时器触发,但定时器会认为它错过了很长时间(100毫秒)并会重新排队等待自己。在 `Mock_Tick` 调用期间,定时器会触发一次,但在当前测试结束后,由于定时器认为它错过了 100 次调用时间,它会被进一步排队 99 次,每次滴答一次。
+
+以后我们会介绍一些更高级的调试技术,以便你可以更轻松地读写假的数据包,而不是像那段代码中那样一次一个组件,但这介绍了构建所有其他功能的基础。希望这能让每个人的代码开发和测试都变得更加容易(同时也能确保服务器更加稳定)。
+
+明天我们还将深入探讨 open.mp 的 API 设计。它与 SA:MP 完全向后兼容,但这并不意味着没有并行的改进空间。
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2020-04-14-scripting-api.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2020-04-14-scripting-api.md
new file mode 100644
index 00000000000..4dc8e4551ca
--- /dev/null
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2020-04-14-scripting-api.md
@@ -0,0 +1,418 @@
+---
+slug: scripting-api
+title: open.mp API 设计
+authors: y_less
+---
+
+open.mp 的一个核心关注点是保持**向后兼容性**——你现有的 SA:MP 脚本可以开箱即用。然而,open.mp 也引入了改进,以修复不一致之处,并使脚本编写更直观、更强大。下面我们来看看一些我们正在解决的常见 SA:MP 问题,以及 open.mp 如何提升开发体验。
+
+
+
+:::warning
+
+以下内容已过时,不反映 open.mp 的当前状态。本文发布于此仅作归档用。
+
+:::
+
+## 介绍
+
+首先,一个**极其重要**的澄清——现有的脚本仍然可以**原样运行**。我们在向后兼容性方面投入了大量精力,并在每个决策中都将其铭记于心。出于此原因,许多我们想要的改进都无法实现,而其他一些代码也因兼容性要求而变得极为复杂。
+
+尽管如此,我们仍可在各处进行改进。让我们来看看 SA:MP 脚本中存在的一些不一致性示例:
+
+### 标签
+
+- `Menu:CreateMenu` - 有标签。
+- `DB:db_open` - 有标签。
+- `CreateVehicle` - 无标签。
+- `CreateActor` - 无标签。
+
+```c
+#define SELECT_OBJECT_GLOBAL_OBJECT 1
+#define SELECT_OBJECT_PLAYER_OBJECT 2
+forward OnPlayerSelectObject(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ);
+```
+
+`type` 是无标签的,所有 SA:MP 定义的常量都是如此;这与 pawn 的默认常量不同:
+
+```c
+native File:fopen(const name[], filemode:mode = io_readwrite);
+```
+
+### 命名
+
+- `SetVehiclePos` - "Vehicle" 在函数名中间。
+- `TextDrawTextSize` - "TextDraw" 在开头。
+- `db_open` - "db" 在开头,且是小写。
+- `fread` - "file" 在开头,且是缩写形式。
+- `asin` - SA:MP 新增的函数,没有使用驼峰命名法。
+
+不一致性:
+
+- GetVehicleZAngle - "Z-Angle"
+- GetVehicleRotationQuat - "Rotation"
+- SetPlayerFacingAngle - "Facing Angle"
+- SetObjectRot - "Rot"
+
+尽管如此,大多数库现在已统一采用 `模块_方法` 的命名约定。
+
+### 常量
+
+- `65535` 无效玩家、演员、文本绘图等的值。它也是无效车辆的值,但 `0` 有时也会作为无效车辆 ID 返回。
+- `0` 无效文件的值,有时是车辆(同时也是 `65535`)。也是许多缺失事物的值,如动作状态和武器。
+- `255` 无效队伍和菜单的值。
+- `-1` 无效帮派区域和武器状态的值。
+
+此外,许多库使用 `0x80000000` 和 `-1` 表示无效状态,因为它们成为有效 ID 的可能性要小得多。65535 是一个相当大的数字,但一个大型服务器很容易拥有比这更多的物体。
+
+### 针对玩家的函数
+
+- `CreateObject` 和 `CreatePlayerObject` 有全局和针对玩家的版本。
+- `SetPlayerMapIcon` 没有全局版本。
+- `SetGravity` 没有针对玩家的版本,尽管这可能是最常被要求的针对玩家功能之一,并且 YSF 和其他插件几乎立即添加了它。
+- `CreateVehicle` 没有针对玩家的版本,尽管也一直被反复要求。但也没有任何(公开的)插件添加此功能,甚至streamer插件也没有。
+- `SendClientMessage` 和 `SendClientMessageToAll` 有全局和针对玩家的版本,但与大多数其他函数不同,针对玩家的版本是默认的。
+- `GangZoneShowForPlayer` 和 `GangZoneShowForAll` 菜单、帮派区域和文本绘图是 SA:MP 默认函数中**唯一**可以指定哪些玩家可以看到它们的。所有其他的都是要么所有人可见,要么仅限一人。
+
+当然,库和插件后来极大地扩展了此模型,现在大多数优秀的插件都允许对任何给定实体的可见玩家子集(组)进行非常精细的控制。
+
+### IDs
+
+- `CreateObject` 和 `CreatePlayerObject` 这些函数的 ID 池是共享的。如果全局物体的 ID 是 `4`,则任何玩家物体都不能拥有 ID `4`,但多个玩家可以拥有不同的物体,且这些物体都可以拥有 ID `5`。
+- `Create3DTextLabel` 和 `CreatePlayer3DTextLabel` ID 池是分开的——前 `1024` 个 ID 是全局的,后 `1024` 个是针对玩家的。每个玩家最多可以有 `2048` 个 3D 文本,但每种类型只有 `1024` 个,尽管在客户端这没有区别。
+- `SetPlayerMapIcon` ID 是手动指定的,最多 32 个。有一段时间,客户端并未检查此限制,导致了潜在的 ACE 漏洞。
+- `ShowPlayerDialog` ID 是手动指定的,没有限制。ID 也完全没有意义,因为一个玩家一次只能看到一个对话框。
+- `SetTimer` ID 会回绕,且不检查是否存在具有相同 ID 的定时器。你需要启动超过 40 亿个定时器才可能遇到这个问题,但这是可能发生的——它们甚至不必都保持运行。
+
+当然,有些人依赖 ID 按照非常特定的顺序分配,然后当他们添加或移除一辆车辆时,就会疑惑为什么整个游戏模式会崩溃。
+
+## 兼容性
+
+所以,再次强调,我们必须非常明确地指出,所有现有的 _"SA:MP 代码"_ 都将有效。这到底是什么意思?
+
+任何满足以下条件的代码:
+
+- 用 Pawn 编写。
+- 使用原始的 SA:MP API,没有插件。
+- 用我们的头文件重新编译。
+- 已经使用社区编译器。
+
+都将有效。
+
+但是:
+
+- 如果你使用插件用非 Pawn 语言编写代码,该插件可能首先需要移植。所以你的代码不会立即生效。
+- 如果你使用其他插件,如streamer、YSF、audio等;它们可能已经有效,可能需要移植,或者可能完全多余,因为其功能已集成到核心服务器中。所以你的代码**可能**有效。
+- 如果你只有游戏模式的 .AMX 文件,而没有原始源代码,为什么?无论如何,虽然所有 SA:MP 函数都存在,但有些函数已被 Pawn 代码或宏重做或替换,你**必须**重新编译。所以如果你不能,你的代码将完全无效。
+
+## 构建
+
+### 示例
+
+让我们从一个极其简单的 SA:MP 游戏模式开始。
+
+```c
+#include
+
+main() {}
+
+public OnGameModeInit()
+{
+ SetGameModeText("Example Script");
+ AddPlayerClass(0, 0.0, 0.0, 4.0, 0.0, 0, 0, 0, 0, 0, 0);
+ return 1;
+}
+
+public OnPlayerSpawn(playerid)
+{
+ SetPlayerCheckpoint(playerid, 20.0, 20.0, 4.0, 2.0);
+ return 1;
+}
+
+public OnPlayerEnterCheckpoint(playerid)
+{
+ SendClientMessage(playerid, 0xFF0000AA, "You won!");
+ return 1;
+}
+```
+
+你出生,前往检查点,然后获胜。
+
+### 转换
+
+要为 open.mp 构建此脚本,我们需要更改第一个包含文件并添加一个定义。
+
+这:
+
+```c
+#include
+
+main() {}
+```
+
+变成:
+
+```c
+#define OPENMP_COMPAT
+#include
+
+main() {}
+```
+
+你可能遇到的第一个错误是:`open.mp 脚本需要社区编译器,来自:`
+如果你遇到此错误,请前往 并下载编译器版本 3.10.10 或更高版本。对于正式发布版本,我们希望有一个集成了此编译器的 pawno 等效工具,但尚未完成。
+
+我**强烈建议**首先尝试用此编译器编译你的游戏模式,因为它重新启用了常量正确性警告,所以你可能会立即看到大量新警告(这**不是**编译器的问题,这些是你代码中始终存在但之前被忽略的问题)。
+
+你可能还想将这些头文件替换为:[https://github.com/pawn-lang/pawn-stdlib](https://github.com/pawn-lang/samp-stdlib)
+即使不使用 open.mp,这样做也是一件好事,因为它们修复了原始头文件中的大量标签和常量问题。
+
+### 警告
+
+如果你在使用新编译器和新版本 `a_samp` 时没有收到任何警告,现在你会看到一系列新警告,内容类似:
+
+`warning 234: function is deprecated (symbol "AddPlayerClass") Use "Class_Add" instead.`
+
+你有三个选项 - 它们都受支持:
+
+- **忽略警告:** 代码仍然有效。
+- **抑制警告:** 将 `OPENMP_COMPAT` 更改为 `OPENMP_QUIET`:
+
+```c
+ #define OPENMP_QUIET
+ #include
+ main() {}
+```
+
+- **修复警告:** 有些函数已更改名称以保持一致性;有些函数已更改参数,因为旧函数已演变且未完全暴露 open.mp 的功能。目前还没有简单的方法来转换每个函数,但你可以在慢慢转换代码时保持警告开启 - 旧函数将继续完美运行。
+
+转换分为三个阶段:
+
+### `#define OPENMP_QUIET`
+
+使用此定义允许你的游戏模式编译时不会因已弃用的函数而产生新警告。但你不应坚持使用此定义,并且隐式转换仅适用于 Pawn 代码。你可以在这种模式下转换代码,因为新 API 也有效,但你无法使用编译器查看哪些地方仍有问题。
+
+### `#define OPENMP_COMPAT`
+
+这是第二阶段。一旦你想要开始利用 open.mp 的所有改进功能,例如精细的针对玩家实体控制和移除限制,你就需要开始使用函数的新版本。新函数始终可用,但你可能不知道哪些地方需要转换。这将对旧函数给出警告,但它们仍然有效,允许你一次转换部分游戏模式。
+
+### 无定义
+
+一旦你认为已完成了代码转换,可以移除定义:
+
+```c
+#include
+main() {}
+```
+
+现在,对于仍在使用的任何旧代码,你将收到错误而非警告。
+
+## 新 API
+
+现在我们已经看到了旧 API 的问题,以及如何找到需要应用新 API 的地方,我们应该实际看看新 API 是如何解决先前提到的问题的:
+
+### 标签
+
+现在函数几乎在所有地方都使用标签。我们试图在过多的标签警告和不足的有用信息之间找到平衡,但警告是有原因的,可以帮助发现你可能遗漏的问题。例如,将车辆作为参数传递给物体函数,或给予某人一个不存在的武器:
+
+```c
+// 此代码没有警告,尽管它显然是错误的。
+new object = CreateObject(various, parameters, here);
+PutPlayerInVehicle(playerid, object);
+
+// 这里也一样 - 没有 20 号武器,尽管它在有效武器 ID 中。
+GivePlayerWeapon(playerid, 20, 200);
+```
+
+如果所有明显错误的代码都能给出警告,那会好得多。这是类型安全语言的力量,虽然 Pawn 不是完全类型安全的,但我们可以通过标签来接近这一点。这些例子变成了:
+
+```c
+// warning 213: 标签不匹配:应为标签 "Vehicle",但找到 "Object"
+new Object:object = Object@Create(various, parameters, here);
+Player_PutInVehicle(playerid, object);
+
+// warning 213: 标签不匹配:应为标签 "WeaponType",但找到但找到无标签 ("_")
+GivePlayerWeapon(playerid, 20, 200);
+
+// 这个不会给出警告:
+GivePlayerWeapon(playerid, WEAPON_COLT45, 200);
+```
+
+### 命名
+
+大多数新函数使用许多库和插件已经采用的命名方案的改进版本 - `模块_动词名词`。有些没有,当它们是独立的、不适用于任何更大模块时,但在大多数情况下,你可能能猜到所需函数的名称。
+
+不再需要纠结某个元素是 "Rot" 还是 "Rotation",除非函数名过长(32+ 个字符,编译器不接受),否则没有缩写。
+
+想要更改物体的模型?`Object_SetModel`。想要向玩家显示文本?`Text_Show`。
+
+动词的数量是有限的 - `Get`、`Set`、`Create`、`Destroy`、`Add`、`Remove`、`Show`、`Hide`、`Run`、`Move`、`Stop` 和 `Count`。可能会添加更多,并可能出现在特殊情况下,但通常如果其中之一适用,那很可能就是它。
+
+到目前为止,最常见的是 `Get` 和 `Set`,与 SA:MP 不同,它们现在总是成对出现 - 如果你可以设置任何参数,你以后也可以获取它。它们也是最常与名词搭配的动词 - 你需要指定获取或设置什么 - `Health`、`Position`、`Model`、`Width` 等。
+
+一些例子:
+
+```c
+native bool:Menu_SetDisabled(Menu:menuid, bool:disabled);
+native bool:Menu_GetDisabled(Menu:menuid);
+native bool:Text_SetAlignment(Text:text, alignment);
+native Text_GetAlignment(Text:text);
+native bool:Object_Move(Object:objectid, Float:posX, Float:posY, Float:posZ, Float:speed, Float:rotX = FLOAT_NAN, Float:rotY = FLOAT_NAN, Float:rotZ = FLOAT_NAN);
+native DBResult_CountRows(DBResult:dbresult);
+native Player_Spawn(Player:playerid);
+```
+
+请注意,模块和标签名称总是匹配的 - `Vehicle`、`DB`、`Player` 等。[这除了保持一致性外还有其他原因](https://github.com/pawn-lang/compiler/issues/234) - 它提供了更面向对象(OO)的接口,并且更容易记忆。
+
+然而,你可能在前面的例子中注意到函数 `Object@Create`,而不是 `Object_Create`。原因是第一个参数的内容。在上面七个例子中,第一个参数都是被操作的实体(物体、车辆、玩家等)。你想获取特定实体的位置。你想移动特定实体。你想获取特定实体的剩余时间。这再次映射到类似 OO 的 API - `Player_Spawn(playerid)` 可以看作 `player.Spawn()`。PAWN 不能这样做,但这并不意味着集成到此 API 的其他语言不能。用 C++ 术语来说 - `_` 是 `.` 或 `->`,并且始终需要将有效的 ID 作为第一个参数。
+
+但是,函数 `Dialog_IsValid(Dialog:id)` 根据定义,其第一个参数可能不是有效 ID(否则它的意义何在[^1]?),而 `Icon_Create(image, Float:x, Float:y, Float:z)` 根本不接收 ID。因此,它们变成了 `@` 替代 - 在 C++ 语法中是 `::`。它们可能根本不接收 ID,并且绝对不需要有效的 ID(`@Destroy` 也属于这类函数,因为销毁实体是逻辑上对实体外部的操作,而不是对实体本身的操作)。
+
+### 常量
+
+首先,我们尽可能使用 `const` 和 `enum` 而不是 `#define` 来定义所有东西,除非我们期望它们被覆盖(如 `MAX_PLAYERS`):
+
+```c
+enum ObjectMaterialTextAlignment
+{
+ MATERIAL_TEXT_ALIGN_LEFT,
+ MATERIAL_TEXT_ALIGN_CENTRE,
+ MATERIAL_TEXT_ALIGN_RIGHT,
+};
+```
+
+`Object_SetMaterialText` 现在将只接受这三个值之一,不接受其他值。
+
+那无效 ID 呢?我们也把它们统一了。所有实体现在都使用相同的无效值,这个值远在可能有效值的范围之外 - open.mp 移除了几乎所有限制,所以像 `65536` 这样的无效值就行不通了。
+
+这个新的无效值是什么?我们还没有决定... 有两个主要竞争者,各有优缺点,这个决定并不像乍看起来那么容易。但幸运的是,它对内部工作影响不大,因为我们几乎可以立即切换。
+
+这两个选择解释如下,如果你能提供反馈,我们将不胜感激:
+
+#### `0`
+
+使用 `0` 作为无效值有一些优点:
+
+- 它不是无效索引,所以当返回且未正确检查时,你的代码不会崩溃。它可能无法完美工作,但至少能继续执行某些操作。
+- 检查起来非常容易,意图显而易见:
+ ```c
+ new Object:object = Object@Create(various, parameters, here);
+ if (object)
+ {
+ Object_SetMaterialText(object, "Hello");
+ }
+ else
+ {
+ printf("Couldn't create the object.");
+ }
+ ```
+- 新声明的变量默认是无效值:
+ ```c
+ new Dialog:d;
+ ```
+ 人们遇到的最常见的错误之一是其代码只对玩家 0 有效,因为他们忘记初始化变量。如果没有玩家/物体/车辆 0,代码将不适用于任何人 - 没有人被提升为管理员比错误的人被提升为管理员要好。
+
+#### `-1`
+
+使用 `-1` 作为无效值有一些优点:
+
+- 它**是**一个无效索引。这不是 `0` 的一个优点,因为你的代码经常会继续运行而不是崩溃,但有了 crashdetect,这可能是一件好事 - 你的代码中有一个错误,崩溃会告诉你它在哪里,有时甚至精确到源代码行。是悄无声息地继续运行好,还是大声地结束运行好?
+- 人们习惯于 `0` 在大多数情况下是一个有效值。程序员从 `0` 开始计数,所以它应该是有效的,而正整数范围之外的东西应该是无效的。
+- 在无符号数学中,它是最大可能的整数 - `0xFFFFFFFF`,`4294967295`。这意味着任何实体类型的内在硬限制是其可能的最大值 - 在耗尽 ID(和内存)之前可以有 `4,294,967,295` 个物品。
+
+### 针对玩家的函数
+
+简而言之,这些已经不复存在。每个 `ForPlayer`、`ForAll`、`CreatePlayerX` 等函数都已被一个简单的函数取代 - `X_Display`(其中 `X` 是任何实体),以及用于检查的 `X_Has`:
+
+```c
+Object_Display(objectid, playerid, true); // 显示它。
+Object_Display(objectid, playerid, false); // 隐藏它。
+Text_Display(textid, true); // 向所有人显示它。
+if (Zone_Has(zoneid, playerid))
+{
+ // 玩家**允许**看到这个帮派区域。
+}
+```
+
+YSI 使用 `X_SetPlayer`,但向玩家显示东西是最基本的事情,所以它值得拥有自己的动词。一些库使用 `X_Show` 和 `X_Hide`,但这是两个函数,当需要检查该做哪个时,只会导致代码冗余:
+
+```c
+if (var)
+ Checkpoint_Show(cpid, playerid);
+else
+ Checkpoint_Hide(cpid, playerid);
+```
+
+对比
+
+```c
+Checkpoint_Display(cpid, playerid, var);
+```
+
+请注意,仅仅调用 `X_Display` 可能实际上并不会显示物品。世界另一端的物体仍然不可见。不同虚拟世界中的检查点,即使就在你旁边,也不会可见。对于世界实体,这只是表示玩家**允许**看到它,而不是他们当前**能够**看到它。相反,对于 HUD 元素,如菜单和对话框,这会立即显示它们,并且当只允许显示一个时,可能会隐藏其他的。
+
+### IDs
+
+随着针对玩家池的移除和无效 ID 的统一,这不再是问题。
+
+## 更智能的函数
+
+上面展示的 `X_Display` 函数可以接受两个参数 - 实体和显示状态,以便让每个玩家都能看到它们;或者也可以接受三个参数 - 实体、玩家和显示状态。还有其他函数也具有类似的智能参数处理。
+
+一组例子是各种旋转函数。如介绍中所述,至少有四种不同的方法来获取和设置不同实体的旋转。现在只有一个 - `X_SetRotation` 和 `X_GetRotation`。
+
+例如:
+
+```c
+// 只获取 `z`。
+z = Player_GetRotation(playerid);
+// 获取 x, y, 和 z 欧拉角。
+Object_GetRotation(objectid, x, y, z);
+// 获取 w, x, y, 和 z 四元数角。
+Vehicle_GetRotation(vehicleid, w, x, y, z);
+```
+
+哪个用于哪个实体?全部都是:
+
+```c
+// 只获取 `z`。
+z = Object_GetRotation(objectid);
+// 获取 x, y, 和 z 欧拉角。
+Object_GetRotation(objectid, x, y, z);
+// 获取 w, x, y, 和 z 四元数角。
+Object_GetRotation(objectid, w, x, y, z);
+```
+
+参数和返回值的含义由给出的参数数量决定。
+
+对于 Set 也是如此:
+
+```c
+// 只设置 `z`。
+Vehicle_SetRotation(vehicleid, z);
+// 设置 x, y, 和 z 欧拉角。
+Vehicle_SetRotation(vehicleid, x, y, z);
+// 设置 w, x, y, 和 z 四元数角。
+Vehicle_SetRotation(vehicleid, w, x, y, z);
+```
+
+## 结论
+
+我们非常努力地尝试创建一个易于使用、易于学习,同时也向后兼容的 API。SA:MP 的成功很大程度上源于其易用性,我们希望保持这一点,但也知道有高级用户希望从代码中获得更多功能。达成这种平衡总是很困难的,尤其是当发表评论最多的人往往是最有经验的人——那些精通这门语言并希望进一步推动它的人。这会导致一个系统为了高级功能而自我选择,牺牲了初学者的利益。我们不希望这样,但我们仍然希望听到你的想法。
+
+你喜欢哪些语言和 API 功能,不喜欢哪些?哪些函数能帮助你最大限度地利用你的代码?你认为新设计是简单,还是太复杂?你能接受当前函数名杂乱无章吗?它们能达到目的,为什么要改变它们?作为初学者,你希望有什么不同的处理方式吗?
+
+请在下面 burgershot 主题中分享你可能有的任何反馈。我们很乐意听取你的意见:
+
+https://forum.open.mp/showthread.php?tid=1036
+
+[^1]: 有趣的旁注。得益于我们抽象脚本 API 代码的方式,Dialog_IsValid 的实现如下:
+
+ ```c
+ SCRIPT_API(Dialog_IsValid, bool(Dialog_s))
+ {
+ return true;
+ }
+ ```
+
+ 就这些。实际上不需要任何实现,因为要调用这个函数,实体查找必须成功,因此我们可以立即返回 true。
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2021-01-30-samp-mobile.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2021-01-30-samp-mobile.md
new file mode 100644
index 00000000000..3ca7695b0b1
--- /dev/null
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2021-01-30-samp-mobile.md
@@ -0,0 +1,31 @@
+---
+slug: samp-mobile
+title: SA-MP 安卓版(移动端)
+authors: potassium
+---
+
+我们收到了很多关于安卓版 SA-MP 的询问,因此想分享我们对于合法联机替代方案的看法和计划。
+
+
+
+**open.mp 团队对安卓版 SA-MP 的看法**
+
+大家好,
+
+我们想就我们对安卓版 SA-MP 的看法写一篇简短的博客文章,因为我们在 YouTube 视频和 Discord 上收到了大量相关的评论。
+
+正如我们在 YouTube 视频中所述,**我们不支持当前版本的安卓版 SA-MP**。这个应用程序是使用从 SA-MP 团队**窃取**的源代码创建的,这使得该应用程序是非法的。
+
+我们**绝不容忍**盗窃他人代码的行为,也**绝不允许**使用盗用来的代码。我们同样不与任何非法活动产生关联。
+
+我们认识到移动端 GTA SA 联机拥有庞大的社区,我们**欢迎这个社区加入 open.mp**。
+
+我们目前正在讨论如何为《圣安地列斯》移动端创建我们自己的联机模组,从而以**合法且公平**的方式实现它!:)
+
+这意味着未来**非常有可能**会出现官方的 **"open.mp 移动端"**,所以在我们研究如何实现的同时,请继续支持我们!
+
+我们邀请移动端社区加入我们拥有超过 7000 名成员的官方 Discord,我们已经为你们创建了 `#samp-android` 频道,并期待听到你们的想法和意见!
+
+我们在那里见!
+
+https://discord.gg/samp
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2021-07-16-10k-members.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2021-07-16-10k-members.md
new file mode 100644
index 00000000000..d67d86ee77b
--- /dev/null
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2021-07-16-10k-members.md
@@ -0,0 +1,41 @@
+---
+slug: 10k-members
+title: 10,000 名成员!
+authors: potassium
+---
+
+我们刚刚达成了一个不可思议的里程碑——我们 Discord 服务器的用户数突破了 10,000 人!🎉 已经有一段时间没更新了,所以在这里快速同步一下近况以及 open.mp 的下一步计划。
+
+
+
+大家好!
+
+我们最近达成了一个令人惊叹的里程碑:**我们 Discord 服务器的用户数正式突破了 10,000 人!** 🥳🔟🥳
+
+我们觉得应该借此机会给大家一个小更新,因为我们知道已经有一段时间了,大家都在关心项目进展如何!
+
+由于开发团队的所有成员都有自己的全职工作和其他事务,而且新冠疫情的情况也确实对大家造成了不小的影响。这意味着,我们最近这段时间确实没有太多时间能投入到 open.mp 上。
+
+但是,情况最近已经开始好转,我们依然活跃,项目实际上正以比以往更快的速度推进,我们在过去几周取得的进展比之前很长一段时间都要多!
+
+我们为这项工作以及我们所拥有的这支精益求精的卓越团队感到无比自豪。
+
+在未来几个月,我们会提供更详细的信息,现在我们只想确保每个人都知道:**我们没有放弃 open.mp**,热情依然在,并且我们正在尽最大努力。所以请继续与我们同行,我们很快就会有新消息、截图和视频发布!
+
+同时,欢迎来我们的 Discord 服务器和我们一起玩!感谢你们每一位,感谢这 10,000+ 位朋友 🥰
+
+我们的 Discord 服务器是所有《圣安地列斯》多人联机模组和社区玩家与朋友的温馨聚集地!我们推广的活动包括:
+
+✅ **社区**:与老朋友们一起闲逛,认识新朋友,找到老朋友和资深玩家,在专属语言频道里找到来自你国家/地区的人,结识来自 SA-MP / MTA / 其他多人联机模组的伙伴
+
+✅ **脚本编写**:学习脚本编写,为你的脚本寻求帮助,帮助他人
+
+✅ **服务器宣传**:在专属频道里展示你的 SA-MP 服务器
+
+✅ **编程与技术**:讨论并获取其他编程语言和软件开发的帮助,获得技术支持,结识志同道合的人一起合作
+
+✅ **游戏**:找人一起玩游戏(不只是 SA!),讨论游戏新闻和更新
+
+✅ **展示**:你是 YouTuber 吗?主播?艺术家?会制作很酷的音乐?或者你是个厨师?也许你喜欢钓鱼?或者组装汽车?无论你为**什么**感到自豪,都来展示一下吧!
+
+✅ **open.mp**:了解 open.mp 最新的开发进展和 GitHub 动态,与团队一起交流,当我们的 Discord VIP 专属开发直播恢复时,别忘了观看!
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2021-08-29-how-to-join-the-team.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2021-08-29-how-to-join-the-team.md
new file mode 100644
index 00000000000..0cb9145b167
--- /dev/null
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2021-08-29-how-to-join-the-team.md
@@ -0,0 +1,36 @@
+---
+slug: how-to-join-the-team
+title: 如何加入我们的团队?
+authors: potassium
+---
+
+想成为 open.mp 团队的一员吗?我们经常收到这个问题,以下是你参与贡献和加入我们的方式!
+
+
+
+## 如何加入我们的团队?
+
+我们收到了太多关于这个问题的询问,所以觉得应该专门写一篇帖子来说明!
+
+首先,非常感谢你有兴趣为项目贡献力量!
+
+正如你所知,我们是一群资深的 SA-MP 玩家,为了守护圣安地列斯多人联机世界而汇聚于此。我们坚信这个项目是**为玩家服务、由玩家创造**的,这也是为什么它最终会走向开源。
+
+## 开发
+
+我们目前正在为 Beta 版的发布做最后的收尾工作,一旦它正式上线,我们将非常感激并欢迎来自社区的贡献!我们需要大家帮助测试各项功能、边界情况,当然还有寻找漏洞以及其他需要解决的问题。
+
+Beta 测试将是开发旅程中极其重要的一环,我们衷心希望每个人都能参与其中,所以请密切关注 Beta 测试的公告,我们保证它**真的、真的快要来了**!
+
+## 地区协调员
+
+你是否能**流利**地使用**英语和另一门语言**?我们非常需要你帮助翻译我们的维基页面、博客文章和社交媒体内容,并协助管理我们 Discord 和论坛中相应语言版块。
+
+目前,在我们进行一些调整期间,这些职位的申请暂时关闭,但很快就会重新开放!
+
+## 其他帮助方式
+
+- **分享** 我们的社交媒体帖子
+- **邀请** 其他 SA 玩家加入我们的 Discord (discord.gg/samp)
+- 在 Discord 上积极**参与**我们的社区活动
+- 在 Discord 上**帮助**其他玩家(脚本编写、技术支持,无论什么都可以!)
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2022-01-01-update-2022.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2022-01-01-update-2022.md
new file mode 100644
index 00000000000..97ea4032f6a
--- /dev/null
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2022-01-01-update-2022.md
@@ -0,0 +1,31 @@
+---
+slug: update-2022
+title: 2022 更新 - 跨平台游戏与 Beta 测试 (新年快乐 🎉)
+authors: iamir
+---
+
+经过多年的开发、实验和一次彻底的重写,open.mp 正在迎来一个重要的里程碑!我们即将启动首个半公开 Beta 测试计划,并且正在着手开发一个巨大的项目——实现不同版本《侠盗猎车手:圣安地列斯》之间的跨平台联机支持。
+
+
+
+大家好!
+
+自 open.mp 问世至今已过去三年,历经多次实验和重写,这些年我们尝试了各种不同的方法,以寻找最适合我们和社区的发展道路,如今,我们终于来到这里。不过,首先讲一点背景故事或许会更好:
+
+我们于 2019 年初启动了 open.mp 项目,并在问世后获得了大量关注。然而,我们未能按部就班、从容地推进工作,而是不得不仓促上阵,这给我们的项目管理、团队协作和代码库带来了一些问题。我们距离最初的目标还很遥远。我们的实现虽然强大,但同时也变得复杂且难以持续维护。这使我们难以遵循既定的路线图,因此,我们必须做出一个决定:启动一次重写。
+
+重写在 2021 年 6 月,经过数月的沉寂,open.mp 团队决定启动一次重写,目标是构建一个 1:1 完全替代 SA:MP 的服务器(确保所有内容向后兼容),并在修复问题的同时添加一些新特性。我们将专注于更重要的事情,额外的特性可以留待日后添加。
+
+现在,我们终于要启动首个半公开的 Beta 测试计划了。我们诚邀拥有 Pawn 语言技能的服务器开发者帮助我们进行全面测试,包括检查所有原生函数及其预期响应,以及使用他们现有的 SA:MP 脚本和玩家群进行压力测试。公告发布后,我们会附上测试者申请表的链接。如果你认为自己能够在这个过程中帮助我们,欢迎随时报名。
+
+最后但同样重要的是,我们激动地宣布,我们的团队已开始着手为《侠盗猎车手:圣安地列斯》重制版开发客户端!open.mp 的重制版客户端将与 open.mp 服务器兼容!这意味着,你只需架设一个服务器,就可以让玩家自行决定使用哪个版本的游戏加入服务器!想象一下,在一个 open.mp 服务器上,同时有使用原版、安卓版和重制版的圣安地列斯玩家,同处一服,一起游戏。这是我们为使所有版本相互兼容、为社区带来跨平台游戏体验所做的最后一次,也是最艰难的一次尝试。
+
+这样一来,作为服务器所有者,你无需担心要迁移到新平台、重新开始并导致社区分裂。因为我们将让每个人都能在同一个服务器上使用他们的 SA:MP 脚本,而玩家可以自行决定使用哪个游戏来连接服务器!
+
+感谢各位在这漫长而艰辛的旅程中与我们同行,我们为拥有这样一个庞大的社区而感到自豪!新年快乐 🎉,2022 年对我们来说将是美好的一年,也标志着我们钟爱的多人联机模组 SA:MP 将迎来变革。来自我们所有人的爱 ❤️
+
+以下是我们首次尝试测试 open.mp 《侠盗猎车手:圣安地列斯》重制版客户端首个版本的视频,其中包含了 SA:MP PC 版和 SA:MP 安卓版客户端,三者同处于一个 open.mp 服务器中:https://www.youtube.com/watch?v=-PWXXvHe35M
+
+我们的 Beta 测试者申请表可以在这里找到:https://airtable.com/shrjqca2tpgYa9sQL
+
+温馨提示:我们目前正在为我们的 open.mp 服务器项目寻找 Beta 测试者,这与客户端无关。此次招募针对脚本编写者/开发者,目前尚不需要普通玩家参与。请不要就客户端事宜向我们发送消息,如果你无法帮助我们测试 open.mp 的服务器端,也请不要填写申请表。你需要对 Pawn 语言有较好的掌握,并熟悉 samp 脚本编写。
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2022-09-08-server-beta-9.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2022-09-08-server-beta-9.md
new file mode 100644
index 00000000000..aec269ce2ea
--- /dev/null
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2022-09-08-server-beta-9.md
@@ -0,0 +1,70 @@
+---
+slug: server-beta-9
+title: 支持 SA-MP 0.3.DL 及其他新特性与错误修复 - 服务器测试版发布 9
+authors: potassium
+---
+
+我们刚刚发布了 open.mp 服务器测试版 9,带来了重大改进、修复以及万众期待的 SA:MP 0.3.DL 支持!此次更新包含了新特性、更好的插件兼容性以及增强的服务器配置选项。
+
+
+
+发布于我们的 Discord 服务器公告频道,作者 kseny ([discord.gg/samp](https://discord.gg/samp))
+
+大家好,
+
+我们刚刚发布了 open.mp 服务器测试版 9,修复了数个已报告的问题并新增了多项功能。最值得注意的变化是——**支持 SA:MP 0.3.DL**。你现在可以使用同一个二进制文件来运行兼容 0.3.7 和 0.3.DL 的服务器了。
+
+## 其他变更
+
+- **动态 Tick 率**。指定一个目标 tickrate,而非固定的休眠时间。
+ - 使用 `tickrate` 控制台命令来设置速率。
+ - `sleep` 现在可以是浮点数,以适应精确的 tick 率。
+- **更强的插件兼容性** - fsutil, Discord connector(仅限非静态构建版本)。
+- 修复了 `SetSpawnInfo` 的返回值。
+- 修复了 GMX 后天气和时间不重置的问题。
+- 修复了各种 GMX 相关错误。
+- 修复了各种控制台命令。
+- 修复了 `GetPlayerClass`。
+- 修复了 `GetVehicleLastDriver`。
+- 新增 `GetVehicles` 原生函数。
+- 新增 `GetPlayers` 原生函数。
+- 新增 `GetActors` 原生函数。
+- 所有延迟补偿模式现在都可以通过配置启用。
+- 修复了拖车同步。
+- 修复了 `GetVehicleLastDriver`。
+- 修复了 `GetPlayerRotationQuat`。
+- 修复了车辆组件的崩溃问题。
+
+## SA:MP DL
+
+这显然是最大的新闻,并且附带了一系列全新的设置:
+
+- 实现了所有 DL 原生函数和回调(`AddSimpleModel`、`AddSimpleModelTimed`、`GetPlayerCustomSkin`、`OnPlayerFinishedDownloading`、`OnPlayerRequestDownload`):
+ - `RedirectDownload` 原生函数和 `OnPlayerRequestDownload` 回调现在已被弃用,建议使用 CDN 配置选项替代。
+- 新增 `artwork.enable`(旧版:`useartwork`)配置选项。
+- 新增 `artwork.models_path`(旧版:`artpath`)配置选项。
+ - 服务器可以像 SA:MP 一样从 `artconfig.txt` 文件加载自定义模型。
+- 保留了 0.3.7 兼容性,可通过 `network.allow_037_clients` 配置选项进行配置(默认为 true)。
+- open.mp 服务器现在内置了一个用于提供自定义模型的网络服务器
+ - 该网络服务器使用 open.mp 服务器的绑定地址和端口。如果计划使用它,请在防火墙中允许该端口的 TCP 连接。
+ - 如果你的公网 IP 地址与绑定地址不同(例如,在路由器后面),你需要在 `network.public_addr` 配置选项中设置你的公网 IP。
+
+## 注意事项
+
+- 由于一些更改,旧的 config.json 文件可能无法正常工作。请使用 `./omp-server --default-config` 来生成一个新的配置文件。
+- 使用 server.cfg 的用户不受影响。
+- 在仅允许 0.3.7 连接时,最多只能创建 1000 个物体。
+- open.mp 服务器现在提供两种类型的 Linux 构建:标准版和静态版。我们鼓励尽可能使用标准版,这将最大限度地减少与各种插件的兼容性问题;但是,它需要系统上安装有 openssl 1.1。如果你的系统无法安装现代版本的 openssl(通常是非常旧的系统),可以使用静态版,但一些插件或组件可能加载失败并导致服务器崩溃。
+
+## 官方包含文件
+
+准备一个完整的版本不仅仅是一个可工作的服务器,还需要所有其他周边——库、工具、文档等。在 Pawn 方面,open.mp 是一个显著的升级,通过修复和新特性已经带来了许多生活质量提升,未来还会有更多。本次推动的一个重要部分是**通过更多的编译器诊断功能来提前发现代码问题**,主要是通过更多的标签和常量正确性来实现。虽然官方版本尚未发布,但你仍然可以通过使用以下包含文件和工具测试你的代码来提供帮助:
+
+https://github.com/pawn-lang/samp-stdlib/tree/consistency-overhaul
+https://github.com/pawn-lang/pawn-stdlib/tree/backported-natives
+https://github.com/openmultiplayer/upgrade
+https://github.com/pawn-lang/compiler
+
+这些项目最初是为了改进默认的 SA:MP 包含文件而开发的,但从未完全发布(即,尽管 PR 被接受,但从未合并到主分支)。open.mp 的包含文件建立在这些项目奠定的基础上,因此可以将它们视为通往完整的 open.mp 标签和常量安全的垫脚石;同时也是关于其发展方向的重要反馈。请参阅上面的链接,了解关于升级的更多信息和文档。
+
+和以往一样,如果你不想升级,旧代码和包含文件仍然可以工作(至少在第一个版本中)。
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2023-01-05-release-candidate-1.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2023-01-05-release-candidate-1.md
new file mode 100644
index 00000000000..1ca7eda7b6b
--- /dev/null
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2023-01-05-release-candidate-1.md
@@ -0,0 +1,157 @@
+---
+slug: release-candidate-1
+title: 候选版本 1
+authors: y_less
+---
+
+终于来了!🎉
+
+经过多年的开发、重写和各种挑战,我们非常激动地向大家介绍服务器的发布候选版本 1 (RC1)。这是我们迈向官方 1.0 版本的一个重要里程碑,带来了显著的更新、新特性和改进。
+
+
+
+来了!它终于来了!经过四年时间,两次重写,争论与波折,以及无数的其他障碍;它终于来了!服务器的发布候选版本 1 (RC1)。这,希望代表着我们 1.0 发布的最终代码版本。如果此版本的运行一切顺利,我们将在几天后最终**开放**所谓的 **open**.mp。
+
+在深入介绍本次发布的具体内容之前,我首先要诚挚地感谢团队的每一位成员,是他们的帮助让这款模组走到了今天。这并不容易,主要是因为每个人都真正地投入其中——我们都希望这款模组、社区、SA:MP、我们的服务器以及我们的玩家能获得最好的体验;如果不是这样,我们当初就不会开始这段旅程。不幸的是,对于什么才是“最好”的强大而不同的看法有时会导致摩擦。但现在,我们终于走到了这一步。
+
+所以,对所有人,致以衷心的感谢:
+
+- Amir
+- Cheaterman
+- Freaksken
+- Graber
+- Hual
+- Josh
+- JustMichael
+- kseny
+- Nexius
+- pkfin
+- Potassium
+- Southclaws
+- TommyB
+- Y_Less
+- Zeex
+- 以及更多可能遗漏的人……
+
+好了,现在是你真正关心的部分……
+
+既然我们已经离开了 Beta 测试阶段,并且(如果这周一切顺利的话)我们会按时发布。因此,除了你之前见过很多次的服务器本身,我们还有一些新的好东西给你:
+
+## Pawn
+
+下载包中包含了官方的包含文件,不再需要用 `omp.inc` 来修补旧的 SA:MP 包含文件了,现在我们正在以正确的方式做事!它还包含了一个新的编译器。是不是在想 3.10.11 什么时候发布?现在不用再等了(如果你自己构建过,可以把这个当作 3.10.12!)!有了这个组合,你可能会看到很多新的警告,但不用担心——我们也有一个工具来处理这个问题,可以自动升级大量代码,在适当的地方添加定义良好的符号名、`const` 等。
+
+也许你已经注意到了,你已经用了好几个月了,但虚拟机(服务器内部的部分)也已经更新了!哦,还有那些你熟知和喜爱的字符串原生函数,比如 `SendClientMessage` 和 `AddMenuItem`?它们现在都支持格式化了。所有都支持![^1]
+
+以下是可用功能的完整列表:
+
+- 符号长度限制增加到 64 个字符,不再需要为了塞下名字而用 `OnPlyrDoTheTing` 这样的缩写了。这也导致了……
+- 多个原生函数名称不再压缩——`Col` 是 `Colour` 还是 `Collision` 的缩写?现在你知道了!
+- 标签。到处是标签。请参阅附带的文档。
+- 官方包含文件终于具备 const 正确性。不再需要抱怨某些人可能没有它们了。
+- 编译器版本已更新:`__nameof`、`__addressof`、修复,以及太多这里无法详述的内容。
+- `switch` 语句速度大幅提升。
+- 针对以前无法检测到的问题增加了更多警告。编译器能找到的问题越多,你需要找的就越少。
+- 一个*升级*工具,用于向用户代码添加标签和 `const`,并修复几个新警告。
+- 命名更加一致。每个原生函数都经过仔细检查和比较,以确保命名的最大相似度和直观性。
+- 到处都添加了 `{Float, _}:...`。这意味着什么?意味着基本不需要 `format()` 了[^2]——想象一下原生的 y_va。
+- 在使用新编译器和虚拟机时,`-O2` 这个最高的 pawn 优化级别可以工作。一些包含文件可能需要更新,但有些已经更新了。为了帮助解决这个问题……
+- 添加了 `__optimisation` 宏,以便代码在通过 -O2 编译时可以配置自身。
+
+更新后的包含文件的文档:
+
+[https://github.com/openmultiplayer/omp-stdlib](https://github.com/openmultiplayer/omp-stdlib)
+
+新编译器的文档:
+
+[https://github.com/openmultiplayer/compiler](https://github.com/openmultiplayer/compiler)
+
+[https://pawn-lang/compiler](https://pawn-lang/compiler)
+
+qawno 的文档:
+
+[https://github.com/openmultiplayer/qawno](https://github.com/openmultiplayer/qawno)
+
+升级工具的文档:
+
+[https://github.com/openmultiplayer/upgrade](https://github.com/openmultiplayer/upgrade)
+
+[^1]: 几乎是所有的。
+
+[^2]: 几乎不需要 `format()` 了。
+
+## SDK
+
+Pawn 是长期以来(并且仍然是)为你的服务器编写模式的官方方式。它不会消失,但对于那些想要更多控制权的朋友,我们终于发布了完整的 SDK(*S*oftware *D*evelopment *K*it,软件开发工具包)。这是一个通往服务器的 C++ 接口,与构成核心代码的所有组件使用的接口相同。它们能做的任何事情,你也能做(相比之下,插件仅设计为向 pawn 提供函数,而不是编写模式)。
+
+我们正在编写一些文档,但不幸的是这需要时间。但与此同时,我们为那些想直接上手的朋友提供了几个示例组件。这些都是你可以构建的模板,可以从几乎零开始,到一个具备最常见功能的完全可运行的组件:
+
+[https://github.com/openmultiplayer/empty-template](https://github.com/openmultiplayer/empty-template)
+
+[https://github.com/openmultiplayer/basic-template](https://github.com/openmultiplayer/basic-template)
+
+[https://github.com/openmultiplayer/pawn-template](https://github.com/openmultiplayer/pawn-template)
+
+[https://github.com/openmultiplayer/full-template](https://github.com/openmultiplayer/full-template)
+
+一些术语让你入门,帮助你理解正在阅读的内容:
+
+- _组件_ - 服务器的一个逻辑独立部分,比如物体或拾取物。你不需要的部分可以不用加载。
+- _扩展_ - 扩展另一段代码的代码。你可以编写组件扩展,但最常见的是玩家扩展,它定义了一些数据结构,用于在玩家所有正常数据(如生命值和武器)之外,与玩家关联。
+- _UID_ - 唯一标识符,一个代表你且仅代表你组件的数字。这总是必需的,可以在这里获取:[https://open.mp/uid](https://open.mp/uid)
+- _实体_ - 一个东西,通常是玩家可以与之交互的东西,并且你可能有很多这样的东西。物体是实体,但其他玩家也是实体,甚至处理器中的命令也可以称为实体。
+- _池_ - 容纳实体的东西。当你有大量实体时,你需要能够通过名称或 ID 以某种方式访问它们,这就是池的作用。
+- _接口_ - 组件使用一个抽象基类作为接口。这声明了组件具有哪些方法,但不包含这些方法的代码。接口被传递,以便组件之间可以相互通信,但实现是私有的。
+- _SDK_ - 核心服务器定义的所有接口的集合。
+- _ABI_ - 应用程序二进制接口,是编译后的代码与其他编译代码通信的方式。SDK 导出的接口是 _ABI 稳定的_,这意味着使用在不同时间编译的两个组件仍然可以协同工作。
+- _pawn-natives_ - 所有原生函数声明构建于其上的库。围绕此库使用一个名为 _SCRIPT_API_ 的包装器:[https://github.com/openmultiplayer/pawn-natives](https://github.com/openmultiplayer/pawn-natives)
+- _事件_ - 外部发生的某些事情。比如玩家连接和输入命令就是事件。任何组件都可以定义事件,并告诉其他组件这些事件何时发生。
+- _处理器_ - 想知道事件何时发生的组件。
+
+如果你有任何问题,最好的地方可能是这个全新的(复兴的)论坛:
+[https://forum.open.mp/](https://forum.open.mp/)
+
+## 新特性
+
+除了为 pawn 宣布的所有新特性外,服务器中还有几个新的(以及新宣布的)特性:
+
+- 每个玩家的帮派区域,类似于 YSF 中那样。
+- 每个玩家的拾取物,也类似于 YSF 中那样。
+- `AttachPlayerObjectToPlayer`。
+- 更好的 PawnPlus 支持。
+- `:memory:` 以及其他特殊名称在 SQLite 中的支持。
+- SQLite 打开标志。
+- `exclude` 配置选项,用于不加载特定组件。
+- 显示配置解析错误,而不是默默地失败。
+- SDK 主版本检查,以防我们将来对服务器进行重大更改(希望我们不会)。
+
+## 修复
+
+在 beta 11 中引入了一些新 bug,以及之前遗留的一些小问题。修复的问题包括:
+
+- `funcidx` 已注册的警告。
+- GDK 插件(例如 streamer 等)缺少原生函数。
+- GMX 时随机崩溃。
+- 有时不调用 GDK 回调。
+- SQLite 组件在请求时没有记录日志。
+- 某些设置在 GMX 时未重置。
+- 当一次性创建大量 NPC 时,NPC 连接出现问题。
+- Linux 遗留插件名称中仍然需要 `.so` 后缀。
+
+## 链接
+
+首先,当然是新服务器版本:
+
+[https://github.com/openmultiplayer/open.mp/releases](https://github.com/openmultiplayer/open.mp/releases)
+
+其次,论坛重新上线了。有任何问题请前往:
+[https://forum.open.mp](https://forum.open.mp)
+或者
+[https://vk.com/open_mp](https://vk.com/open_mp)如果你喜欢。
+
+接下来,尽管我们多次拒绝,但到目前为止我们明确抵制任何金钱资助;因为在我们通过发布版本来证明自己之前,我们认为这不合适。随着这篇文章的发布,这个时刻现在已经到来,所以如果有人想帮助我们(所有捐款将用于基础设施和未来的客户端开发工作),我们将不胜感激:
+[https://opencollective.com/openmultiplayer](https://opencollective.com/openmultiplayer)
+
+[https://www.patreon.com/open_mp](https://www.patreon.com/open_mp)
+
+当然,一切仍在积极开发中,所以请务必定期查看以上所有链接,看看我们又有了什么新东西。
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2024-03-06-porting.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2024-03-06-porting.md
new file mode 100644
index 00000000000..c3b0ce6361e
--- /dev/null
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2024-03-06-porting.md
@@ -0,0 +1,170 @@
+---
+slug: porting
+title: 迁移至 open.mp
+authors: y_less
+---
+
+SA:MP 已停滞多年,毫无更新,且需要大量变通方案才能维持运行。open.mp 改变了这一现状——它是一个完整的重写版本,修复了长期存在的问题,改进了脚本功能,并移除了旧的限制,同时确保你现有代码的兼容性。但这对你来说究竟意味着什么?让我们来详细分解一下。
+
+
+
+:::warning
+
+以下内容已过时,且大部分与 open.mp 的当前状态无关。本文发布于此仅作归档用。
+
+:::
+
+长期以来,Kalcor 不再维护 SA:MP 已是显而易见的事实;这本身无可厚非,但作为唯一拥有官方源代码访问权限的人,这使他成为了新版本更新的瓶颈。YSF 和 fixes.inc 的创建都是为了填补这一空白——即在无法访问源代码的情况下修复服务器中的错误和不一致;前者是插件,后者是包含文件。尽管这些(以及其他)项目付出了巨大的努力,力求尽可能稳定、全面且易于使用,但它们自然也开始遇到自身的极限,需要新一代的修复方案。这就是 open.mp 诞生的原因。
+
+open.mp 秉承同样的理念,并汲取了社区十多年来开发的无数改进,是对原始 SA:MP 服务器的从头重写,包含其直接前身的所有修复,以及许多难以管理或根本不可能实现的修复。诚然,这种方法并非没有争议——一些服务器已经开发了自己私有的方法来应对 SA:MP 的特性,独立于社区的努力,但这些技术并非每个脚本编写者都应为自己重新开发的,本文将帮助迁移现有代码。
+
+我们希望解决主要的难点,但如果我们遗漏了任何问题,请随时通过 Discord 或 GitHub 联系我们,我们将很乐意修改本指南。
+
+另一种选择是使用一个与 fixes.inc 对应的库——breaks.inc,来撤销这些修复:
+
+https://github.com/pawn-lang/sa-mp-fixes/blob/master/breaks.inc
+
+因此,你可以自由安装它,通过钩子透明地恢复所有旧的行为。
+
+## `标签(Tags)`
+
+open.mp 的包含文件为函数添加了许多新标签,但仍试图在急需的升级和侵入性之间取得平衡。由于这些变更可能影响广泛,我们编写了一个工具来自动化处理其中大部分工作:
+
+## `HideMenuForPlayer`
+
+此函数一直带有一个菜单 ID 参数,但在 SA:MP 中,此 ID 并未被使用。因此,无论给定什么值,玩家的当前菜单都会被关闭,即使他们看的并不是你指定的那个菜单。
+
+旧代码可能如下所示:
+
+```c
+gShopMenu = CreateMenu("text", 2, 100.0, 30.0, 7.0);
+
+HideMenuForPlayer(gShopMenu, playerid);
+```
+
+无论玩家实际在看哪个菜单,上述代码总会关闭其当前菜单。现在,你需要记住他们正在看哪个菜单,或者直接获取它:
+
+```c
+gShopMenu = CreateMenu("text", 2, 100.0, 30.0, 7.0);
+
+HideMenuForPlayer(GetPlayerMenu(playerid), playerid);
+```
+
+## `SetPlayerAttachedObject`
+
+在 SA:MP 中,附加的物件会在游戏模式变更后保留,但在 open.mp 中则不会。如果你希望玩家在模式重启后保留他们的物件,你需要在 `OnPlayerConnect` 中重新添加它们:
+
+```c
+enum E_ATTACHMENT_DATA
+{
+ E_ATTACHMENT_DATA_MODEL,
+ E_ATTACHMENT_DATA_BONE,
+ E_ATTACHMENT_DATA_OFFSET_X,
+ E_ATTACHMENT_DATA_OFFSET_Y,
+ E_ATTACHMENT_DATA_OFFSET_Z,
+ E_ATTACHMENT_DATA_ROT_X,
+ E_ATTACHMENT_DATA_ROT_Y,
+ E_ATTACHMENT_DATA_ROT_Z,
+ E_ATTACHMENT_DATA_SCALE_X,
+ E_ATTACHMENT_DATA_SCALE_Y,
+ E_ATTACHMENT_DATA_SCALE_Z,
+ E_ATTACHMENT_DATA_COLOUR_1,
+ E_ATTACHMENT_DATA_COLOUR_2,
+}
+
+public OnPlayerConnect(playerid)
+{
+ for (new i = 0; i != MAX_OBJECT_ATTACHMENT_SLOTS; ++i)
+ {
+ SetPlayerAttachedObject(
+ playerid,
+ i,
+ gAttachementData[playerid][E_ATTACHMENT_DATA_MODEL],
+ gAttachementData[playerid][E_ATTACHMENT_DATA_BONE],
+ gAttachementData[playerid][E_ATTACHMENT_DATA_OFFSET_X],
+ gAttachementData[playerid][E_ATTACHMENT_DATA_OFFSET_Y],
+ gAttachementData[playerid][E_ATTACHMENT_DATA_OFFSET_Z],
+ gAttachementData[playerid][E_ATTACHMENT_DATA_ROT_X],
+ gAttachementData[playerid][E_ATTACHMENT_DATA_ROT_Y],
+ gAttachementData[playerid][E_ATTACHMENT_DATA_ROT_Z],
+ gAttachementData[playerid][E_ATTACHMENT_DATA_SCALE_X],
+ gAttachementData[playerid][E_ATTACHMENT_DATA_SCALE_Y],
+ gAttachementData[playerid][E_ATTACHMENT_DATA_SCALE_Z],
+ gAttachementData[playerid][E_ATTACHMENT_DATA_COLOUR_1],
+ gAttachementData[playerid][E_ATTACHMENT_DATA_COLOUR_2]
+ );
+ }
+}
+```
+
+## 死亡金钱
+
+在圣安地列斯中,当玩家死亡时,会自动扣除其 $100 作为医疗费。此特性在 SA:MP 中保留,但在 open.mp 中被移除,以便脚本可以完全管理自己的金钱。已有一些脚本试图通过在玩家死亡后或重生时增加 $100 来修复此问题。如果你的脚本属于这种情况,直接删除这个额外的修复即可,尽管 open.mp 中的代码确实尝试考虑到了执行此操作的脚本。如果你的脚本依赖于此特性,只需在 `OnPlayerDeath` 中添加以下代码:
+
+```c
+GivePlayerMoney(playerid, -100);
+```
+
+## 游戏文本
+
+SA:MP 有六种不同的游戏文本样式,但其中几种基本无法使用。一种会不断淡入淡出,一种无论你设置多长时间都会在固定时间后消失,还有一种无论选择多长时间都永远不会消失。然而,事实证明,所有这些游戏文本样式都可以通过文本绘图准确地[^1]再现。因此 fixes.inc 以及随后的 open.mp 这样做了。游戏文本的外观与以前相同,优点是所有样式都可用,缺点是不再具有淡入淡出效果。
+
+```c
+FadingGameTextForPlayer(playerid, const format[], time, style)
+{
+ if (style > 6)
+ {
+ // 这些样式没有淡入淡出版本。
+ GameTextForPlayer(playerid, format, time, style)
+ }
+ else
+ {
+ // 通过 Pawn.RakNet 发送原始消息
+ }
+}
+```
+
+[^1]: 有一个显著的例外——新的时钟游戏文本样式。出于未知的原因,时钟的颜色对不同的人显示不同,这导致在发现此差异之前,关于如何最好地复制此样式有很多来回的讨论。我们必须选择两者之一以保证一致性。
+
+## 池大小
+
+`GetPlayerPoolSize`、`GetActorPoolSize` 和 `GetVehiclePoolSize` 在首次引入时有些多余;它们返回已连接的最高 ID,这与已连接玩家的数量无关,而且远在已有更好的循环方法出现之后。有点愚蠢本身并不是移除函数的理由,但不幸的是,当没有玩家连接时,它们也存在问题并返回错误数据。没有办法在既保持向后兼容性又确保未来正确性的情况下修复这些返回值(相信我,我们试过)。鉴于这些事实,我们选择直接移除这些函数。只需使用普通循环或 `foreach`:
+
+```c
+foreach (new i : Player)
+{
+}
+```
+
+引入此变更时,一些脚本确实会崩溃,但仅当使用以下循环形式时:
+
+```c
+for (new i = 0; i != GetPlayerPoolSize(); ++i)
+{
+}
+```
+
+尽管当有玩家在线时,最高值是一个真实的玩家 ID,但这段代码本身就有问题——它漏掉了一个人。
+
+## 拼写
+
+SA:MP 在其代码拼写方面非常不一致——有些使用英式英语,有些使用美式英语:
+
+- `Bumper` - 英式
+- `Hood` - 美式
+- `Armour` - 英式
+- `Stereo` - 美式
+
+我们已统一了这些拼写,并确定使用英式拼写。例如:
+
+```c
+TextDrawBoxColor(Text:textid, boxColor);
+```
+
+现在是:
+
+```c
+TextDrawBoxColour(Text:textid, boxColour);
+```
+
+升级工具将自动处理其中大部分更改。
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2025-02-12-launcher-false-positive.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2025-02-12-launcher-false-positive.md
new file mode 100644
index 00000000000..cdc0bb2d2ec
--- /dev/null
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/2025-02-12-launcher-false-positive.md
@@ -0,0 +1,37 @@
+---
+slug: launcher-false-positive
+title: Windows Defender 对启动器的误报问题
+authors: itsneufox
+---
+
+部分用户报告,**Windows Defender 将 open.mp 启动器误报为木马/病毒**。这是一个**误报**,该启动器完全可以安全使用。
+
+启动器是**完全开源的**,你可以自行审查或构建代码:
+[https://github.com/openmultiplayer/launcher](https://github.com/openmultiplayer/launcher)
+
+我们**已经在着手修复这个问题**,以确保未来的版本不会被误报。
+
+
+
+## 当前应对措施
+
+在微软更新其检测特征库之前,你可以将启动器文件夹添加为 Windows Defender 的排除项:
+
+1. 打开 **Windows 安全中心**(在开始菜单中搜索)
+2. 进入 **病毒和威胁防护**
+3. 在 **病毒和威胁防护设置** 下,点击 **管理设置**
+4. 向下滚动到 **排除项** 并点击 **添加或删除排除项**
+5. 点击 **添加排除项** → **文件夹**
+6. 选择你的 **open.mp 启动器安装文件夹** 并确认
+7. 关闭并重新打开启动器
+
+### 注意事项
+
+- 请排除**整个启动器文件夹**,而不是单个文件,因为文件的哈希值会随着更新而改变。
+- 如果在添加排除项后 Defender 仍然发出警告,请完全关闭启动器,再次核对排除路径,然后重试。
+
+## 为什么会发生这种情况?
+
+误报在游戏相关软件中很常见。反病毒软件的启发式检测可能会将与游戏进程交互的合法程序标记为威胁。我们正在与微软合作,以使启动器被正确加入白名单。
+
+仍有疑问?请通过我们的 [Discord](https://discord.gg/samp) 联系我们。
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/options.json b/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/options.json
new file mode 100644
index 00000000000..f263e776434
--- /dev/null
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-blog/options.json
@@ -0,0 +1,5 @@
+{
+ "sidebar.title": {
+ "message": "最近的帖子"
+ }
+}
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/awesome.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/awesome.md
index 3784911caff..3cdfc89b1dd 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/awesome.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/awesome.md
@@ -1,6 +1,6 @@
---
-title: Awesome
-sidebar_label: Awesome
+title: 推荐清单
+sidebar_label: 推荐清单
description: 精心整理的实用工具、库、游戏模式、滤镜脚本和插件列表,用于SA-MP开发。
---
@@ -9,56 +9,57 @@ description: 精心整理的实用工具、库、游戏模式、滤镜脚本和
- **[社区编译器](https://github.com/pawn-lang/compiler)** - 经过大量更新的编译器版本,包含多项修复和增强功能。
- **[sampctl](https://github.com/Southclaws/sampctl)** - 用于安装库和运行服务器的包管理器。
- **[插件运行器](https://github.com/Zeex/samp-plugin-runner)** - 直接从命令行运行轻量级服务器版本的工具(无需server.cfg),用于测试插件。
-- **[插件模板](https://github.com/Southclaws/samp-plugin-boilerplate)** - 通过模板快速创建插件。
-- **[SA:MP 插件模板库](https://github.com/katursis/samp-ptl)** - 使用此模板库快速轻松地创建自定义插件。
-- **[SA-MP 代码试验场](https://fiddle.sa-mp.dev)** - 测试脚本片段(代码片段、概念验证、调试等)并与他人分享的平台。
-- **[Pawn语法 - Sublime](https://packagecontrol.io/packages/Pawn%20syntax)** - Sublime Text的Pawn自动补全插件。
-- **[Pawn语法 - Visual市场](https://marketplace.visualstudio.com/items?itemName=southclaws.vscode-pawn)** - Visual Studio Code的Pawn自动补全插件。
-- **[SA-MP区域编辑器](https://bitbucket.org/Grimrandomer/samp-zone-editor/downloads)** - 用于创建区域和其他内容的区域编辑器。
-- **[SA-MP地图编辑器](https://github.com/openmultiplayer/archive/raw/master/tools/Map%20Editor.zip)** - 流行的SA:MP地图编辑器。
+- **[插件模板 (samp-plugin-boilerplate)](https://github.com/Southclaws/samp-plugin-boilerplate)** - 通过模板快速创建插件。
+- **[SA:MP 插件模板库 (samp-ptl)](https://github.com/katursis/samp-ptl)** - 使用此模板库快速轻松地创建自定义插件。
+- **[SA-MP 代码试验场 (Fiddle)](https://fiddle.sa-mp.dev)** - 测试脚本片段(代码片段、概念验证、调试等)并与他人分享的平台。
+- **[Pawn Syntax (Sublime Text)](https://packagecontrol.io/packages/Pawn%20syntax)** - Sublime Text的Pawn自动补全插件。
+- **[Pawn Syntax (Visual Studio Code)](https://marketplace.visualstudio.com/items?itemName=southclaws.vscode-pawn)** - Visual Studio Code的Pawn自动补全插件。
+- **[SA-MP 区域编辑器 (Zone Editor)](https://bitbucket.org/Grimrandomer/samp-zone-editor/downloads)** - 用于创建区域和其他内容的区域编辑器。
+- **[SA-MP 地图编辑器 (Map Editor)](https://github.com/openmultiplayer/archive/raw/master/tools/Map%20Editor.zip)** - 流行的SA:MP地图编辑器。
## 库
- **[samp-stdlib](https://github.com/pawn-lang/samp-stdlib)** - 更新版默认包含文件,包含`const`修正、完整文档和功能。
- **[fixes.inc](https://github.com/pawn-lang/sa-mp-fixes)** - 针对大量SA:MP服务器bug的高度优化修复方案,即插即用。
-- **[YSI-Includes](https://github.com/pawn-lang/YSI-Includes)** - 最古老、最庞大、测试最充分的SA:MP/pawn库,提供大量新游戏和语言功能。
-- **[foreach](https://github.com/Open-GTO/foreach)** - 独立版foreach包含文件(非y_iterate版本)。
+- **[YSI-Includes](https://github.com/pawn-lang/YSI-Includes)** - 最古老、最庞大、测试最充分的SA-MP/pawn库,提供大量新游戏和语言功能。
+- **[foreach (独立版)](https://github.com/Open-GTO/foreach)** - 独立版foreach包含文件(非y_iterate版本)。
- **[amx_assembly](https://github.com/pawn-lang/amx_assembly)** - 提供对pawn脚本底层的访问。
- **[md-sort](https://github.com/oscar-broman/md-sort)** - 在Pawn中排序多维数组。通过修改数组内部指针实现,避免数据复制。
- **[indirection](https://github.com/Y-Less/indirection)** - 通过抽象方法自定义调用的指针传递和间接函数调用系统。
- **[code-parse.inc](https://github.com/Y-Less/code-parse.inc)** - 在编译时解析和自定义pawn代码。
-- **[扩展车辆信息](https://github.com/Vince0789/sa-mp-extended-vehicle-information)** - 将单机版大量车辆标志导入SQLite数据库。
+- **[Extended Vehicle Information](https://github.com/Vince0789/sa-mp-extended-vehicle-information)** - 将单机版大量车辆标志导入SQLite数据库。
- **[sqlitei](https://github.com/oscar-broman/sqlitei)** - SA-MP SQLite函数的高级API。
-- **[weapon-config](https://github.com/oscar-broman/samp-weapon-config)** - 更稳定、响应更快的伤害系统,包含多项新功能。
+- **[weapon-config](https://github.com/oscar-broman/samp-weapon-config)** - 更稳定、响应更快的伤害系统,包含多项新特性。
- **[samp-geoip](https://github.com/Southclaws/SAMP-geoip)** - 基于IP地址的地理信息查询。
- **[progress2](https://github.com/Southclaws/progress2)** - 以进度条形式显示时间、生命值、车辆燃油等信息。
+- **[GameText+](https://github.com/itsneufox/GameText-Plus)** - 一款同时兼容 SA-MP 与 open.mp 的插件,旨在提升原生游戏文本的显示效果。
- **[weapon-data](https://github.com/Southclaws/samp-weapon-data)** - 精细调整、可自定义的武器数据。
- **[MV_Youtube](https://github.com/MichaelBelgium/MV_Youtube)** - 音频流的Youtube转换API。
-- **[MySQL预处理语句](https://github.com/PatrickGTR/MySQL-Prepared-Statements)** - 为PAWN MySQL插件模拟预处理语句。
+- **[MySQL Prepared Statements](https://github.com/PatrickGTR/MySQL-Prepared-Statements)** - 为PAWN MySQL插件模拟预处理语句。
- **[samp-server-weapons](https://github.com/Brunoo16/samp-server-weapons)** - 完全由服务器控制的武器系统。
- **[actor_robbery](https://github.com/PatrickGTR/actor_robbery)** - 灵感来自GTA V商店抢劫,实现类似功能的actor_robbery.inc。
- **[samp-aviation](https://github.com/Southclaws/samp-aviation)** - SA-MP基础俯仰高度和滚转航向自动驾驶系统。
- **[samp-logger](https://github.com/Southclaws/samp-logger)** - 结构化日志记录工具,提供简单的日志记录和调试功能。
-- **[TDW递归扫描器](https://github.com/tdworg/samp-include-rscan)** - 检测代码中递归调用的库。
+- **[TDW Recursion Scanner](https://github.com/tdworg/samp-include-rscan)** - 检测代码中递归调用的库。
- **[easyDialog](https://github.com/Awsomedude/easyDialog)** - 简化对话框使用流程。
- **[mdialog](https://github.com/Open-GTO/mdialog)** - 现代化对话框系统,类似easyDialog。
-- **[模型尺寸增强版](https://github.com/Crayder/Model-Sizes-Plus)** - 更新版modelsizes包含文件,更精确的模型尺寸数据。
+- **[Model Sizes Plus](https://github.com/Crayder/Model-Sizes-Plus)** - 更新版modelsizes包含文件,更精确的模型尺寸数据。
- **[physics.inc](https://github.com/uPeppe/physics.inc)** - 模拟2D和3D物理效果(真实运动、碰撞等)。
- **[samp-async-dialogs](https://github.com/AGraber/samp-async-dialogs)** - 通过PawnPlus任务实现异步对话框处理。
- **[speedcap.inc](https://github.com/openmultiplayer/archive/blob/master/includes/speedcap.inc)** - 控制车辆速度的包含文件。
-- **[SA:MP指令猜测](https://github.com/Kirima2nd/samp-command-guess)** - 使用Levenshtein距离函数实现的SA:MP指令猜测器。
+- **[SA:MP Command Guess](https://github.com/Kirima2nd/samp-command-guess)** - 使用Levenshtein距离函数实现的SA-MP指令猜测器。
- **[vending](https://github.com/wuzi/vending)** - SA-MP服务端自动售货机系统。
- **[strlib](https://github.com/oscar-broman/strlib)** - 实用字符串函数集合。
- **[mathutil](https://github.com/ScavengeSurvive/mathutil)** - 实用数学函数集合。
- **[rotations.inc](https://github.com/sampctl/rotations.inc)** - Nero_3D rotations.inc提供的实用旋转函数集合。
-- **[SA-MP距离函数](https://github.com/Y-Less/samp-distance)** - 实用距离检测函数集合。
-- **[新SA-MP回调](https://github.com/emmet-jones/New-SA-MP-callbacks)** - 实用新回调函数集合。
-- **[替代对话框](https://github.com/NexiusTailer/Alternative-Dialogs)** - 采用新设计的文本绘图对话框。
+- **[SA-MP Distance Functions](https://github.com/Y-Less/samp-distance)** - 实用距离检测函数集合。
+- **[New SA-MP callbacks](https://github.com/emmet-jones/New-SA-MP-callbacks)** - 实用新回调函数集合。
+- **[Alternative Dialogs](https://github.com/NexiusTailer/Alternative-Dialogs)** - 采用新设计的文本绘图对话框。
- **[eSelection](https://github.com/TommyB123/eSelection)** - 在游戏模式中创建动态模型选择菜单的功能。
- **[mSelection](https://github.com/alextwothousand/mSelection)** - 类似eSelection,但采用不同风格。
-- **[RGB-文本绘图](https://github.com/adib-yg/SAMP-RGB-Textdraw)** - 为文本绘图添加RGB色彩支持。
+- **[RGB-Textdraw](https://github.com/adib-yg/SAMP-RGB-Textdraw)** - 为文本绘图添加RGB色彩支持。
- **[LangPlus](https://github.com/mysy00/LangPlus)** - open.mp服务器多语言支持库。
-- **[beckzy的改装店](https://beckzy.net/index.php?action=downloads;sa=view;id=41)** - 服务端改装店包含文件。
+- **[beckzy's mod shops](https://beckzy.net/index.php?action=downloads;sa=view;id=41)** - 服务端改装店包含文件。
## 指令处理器
@@ -70,57 +71,57 @@ description: 精心整理的实用工具、库、游戏模式、滤镜脚本和
- **[JIT](https://github.com/Foundation-PAWN/samp-plugin-jit-backup)** - 代码稳定后使用可显著提升运行速度。
- **[CrashDetect](https://github.com/AmyrAhmady/samp-plugin-crashdetect)** - 开发阶段用于发现错误的工具。
-- **[性能分析器](https://github.com/Foundation-PAWN/samp-plugin-profiler-backup)** - SA-MP服务器性能分析插件。
+- **[Profiler](https://github.com/Foundation-PAWN/samp-plugin-profiler-backup)** - SA-MP服务器性能分析插件。
- **[sscanf](https://github.com/Y-Less/sscanf)** - 将字符串转换为多种值类型(整数、浮点数、玩家等)。
-- **[MySQL插件](https://github.com/pBlueG/SA-MP-MySQL)** - 连接服务器到MySQL数据库。
-- **[流加载插件](https://github.com/samp-incognito/samp-streamer-plugin)** - 突破SA:MP多项限制(物体、拾取物等)。
-- **[原生检查器](https://github.com/openmultiplayer/archive/raw/master/plugins/nativechecker.zip)** - 服务器启动时检查原生函数。
-- **[FCNPC](https://github.com/ziggi/FCNPC)** - 增强标准NPC功能的插件(截至2023年1月暂不支持open.mp)。
-- **[文件管理器](https://github.com/JaTochNietDan/SA-MP-FileManager)** - 允许管理根目录文件(不限于scriptfiles目录)。
+- **[MySQL Plugin](https://github.com/pBlueG/SA-MP-MySQL)** - 连接服务器到MySQL数据库。
+- **[Streamer Plugin](https://github.com/samp-incognito/samp-streamer-plugin)** - 突破SA:MP多项限制(物体、拾取物等)。
+- **[nativechecker](https://github.com/openmultiplayer/archive/raw/master/plugins/nativechecker.zip)** - 服务器启动时检查原生函数。在 open.mp 中无需使用此插件,因为 open.mp 已内置原生检测机制。
+- **[FCNPC](https://github.com/ziggi/FCNPC)** - 增强标准NPC功能的插件。该插件在 open.mp 中无法运行,但你可以使用官方提供的 NPC 组件替代。
+- **[FileManager](https://github.com/JaTochNietDan/SA-MP-FileManager)** - 允许管理根目录文件(不限于scriptfiles目录)。
- **[Pawn.Raknet](https://github.com/katursis/Pawn.RakNet)** - 分析RakNet网络流量。
- **[samp-precise-timers](https://github.com/bmisiak/samp-precise-timers)** - 提供精确定时器的Rust插件(open.mp已内置此功能)。
- **[PawnPlus](https://github.com/IllidanS4/PawnPlus)** - 通过新结构、数据类型和编程技术扩展Pawn语言。
-- **[PAWN内存访问](https://github.com/BigETI/pawn-memory)** - 允许在PAWN中分配和释放堆内存。
-- **[原生回退](https://github.com/IllidanS4/NativeFallback)** - 为未注册原生函数提供回退实现。
+- **[PAWN memory access](https://github.com/BigETI/pawn-memory)** - 允许在PAWN中分配和释放堆内存。
+- **[Native Fallback](https://github.com/IllidanS4/NativeFallback)** - 为未注册原生函数提供回退实现。
- **[YSF](https://github.com/IllidanS4/YSF)** - 通过内存编辑和钩子实现服务器功能扩展(部分功能已集成至open.mp)。
- **[SKY](https://github.com/oscar-broman/SKY)** - 提供底层功能实现强大脚本操作。
- **[Pawn.Regex](https://github.com/katursis/Pawn.Regex)** - 为Pawn添加正则表达式支持。
- **[pawn-scraper](https://github.com/Sreyas-Sreelal/pawn-scraper)** - 支持HTML解析和CSS选择器的强大爬虫插件。
- **[TOTP](https://github.com/philip1337/samp-plugin-totp)** - 在游戏模式中使用TOTP身份验证。
-- **[DNS插件](https://github.com/samp-incognito/samp-dns-plugin)** - 提供DNS正反向查询功能。
+- **[DNS Plugin](https://github.com/samp-incognito/samp-dns-plugin)** - 提供DNS正反向查询功能。
- **[MapAndreas](https://github.com/Southclaws/samp-plugin-mapandreas)** - 加载不同高度图并查询坐标海拔。
- **[ColAndreas](https://github.com/Pottus/ColAndreas)** - 使用Bullet物理库模拟圣安地列斯世界碰撞。
-- **[路径查找器](https://bitbucket.org/Pamdex/pathfinder/src/master)** - 计算圣安地列斯地图点对点路径。
-- **[自定义查询洪水检测](https://github.com/spmn/samp-custom-query-flood-check)** - 自定义防御查询洪水攻击。
+- **[PathFinder](https://bitbucket.org/Pamdex/pathfinder/src/master)** - 计算圣安地列斯地图点对点路径。
+- **[Custom Query Flood Check](https://github.com/spmn/samp-custom-query-flood-check)** - 自定义防御查询洪水攻击。
- **[sampml](https://github.com/YashasSamaga/sampml)** - 简化机器学习工具包(包含自瞄检测功能)。
- **[TgConnector](https://github.com/Sreyas-Sreelal/tgconnector)** - 通过SA-MP与Telegram机器人交互的插件。
-- **[Discord连接器](https://github.com/maddinat0r/samp-discord-connector)** - 在PAWN脚本中控制Discord机器人。
-- **[TS连接器](https://github.com/maddinat0r/samp-tsconnector)** - 在PAWN脚本中控制TeamSpeak3服务器。
-- **[IRC插件](https://github.com/samp-incognito/samp-irc-plugin)** - 创建和管理IRC机器人。
+- **[Discord connector](https://github.com/maddinat0r/samp-discord-connector)** - 在PAWN脚本中控制Discord机器人。
+- **[TSConnector](https://github.com/maddinat0r/samp-tsconnector)** - 在PAWN脚本中控制TeamSpeak3服务器。
+- **[IRC Plugin](https://github.com/samp-incognito/samp-irc-plugin)** - 创建和管理IRC机器人。
- **[pawn-requests](https://github.com/Southclaws/pawn-requests)** - 提供HTTP(S) API交互接口,支持文本和JSON数据类型。
- **[pawn-redis](https://github.com/Southclaws/pawn-redis)** - 访问快速内存数据库和异步消息通道。
- **[Chrono](https://github.com/Southclaws/pawn-chrono)** - 现代日期时间处理库。
-- **[俄语文本修复](https://github.com/ziggi/rustext)** - 修复GameText、TextDraw和Menu的俄语显示问题。
-- **[高级昵称系统](https://github.com/KrYpToDeN/Advanced-SA-NickName)** - 支持任意字符的昵称系统。
+- **[rustext](https://github.com/ziggi/rustext)** - 修复GameText、TextDraw和Menu的俄语显示问题。
+- **[Advanced SA NickName](https://github.com/KrYpToDeN/Advanced-SA-NickName)** - 支持任意字符的昵称系统。
- **[SAMPSON](https://github.com/Hual/SAMPSON)** - SA-MP JSON插件。
- **[samp-chatbot](https://github.com/SimoSbara/samp-chatbot)** - 游戏内AI聊天机器人插件。
-- **[SA-MP BitStream崩溃修复](https://github.com/AmyrAhmady/samp-bscrashfix)** - 修复BitStream读取溢出问题。
+- **[SAMP BitStream Crash Fix](https://github.com/AmyrAhmady/samp-bscrashfix)** - 修复BitStream读取溢出问题。
- **[pawn-json](https://github.com/Southclaws/pawn-json)** - Pawn版JSON处理库。
## 客户端-服务器插件
-- **[SA-MP+](https://github.com/Hual/SA-MP-Plus)** - 通过插件SDK与服务器交互并添加新功能的客户端修改版。
+- **[SA-MP+](https://github.com/Hual/SA-MP-Plus)** - 通过插件SDK与服务器交互并添加新特性的客户端模组。
- **[CHandling](https://github.com/dotSILENT/chandling)** - 为单个车辆分配独立操控数据的功能。
- **[SAMPVOICE](https://github.com/CyberMor/sampvoice)** - 为SA:MP服务器实现语音通信系统。
-- **[按键监听器](https://github.com/CyberMor/keylistener)** - 追踪任意按键操作的客户端-服务器插件。
-- **[SA-MP CEF](https://github.com/ZOTTCE/samp-cef)** - 嵌入CEF的客户端和服务器插件。
+- **[KeyListener](https://github.com/CyberMor/keylistener)** - 追踪任意按键操作的客户端-服务器插件。
+- **[SAMP CEF](https://github.com/ZOTTCE/samp-cef)** - 嵌入CEF的客户端和服务器插件。
- **[SAMP_AC_v2](https://github.com/Whitetigerswt/SAMP_AC_v2)** - SA:MP客户端反作弊系统。
## 加密插件
- **[whirlpool](https://github.com/Southclaws/samp-whirlpool)** - SA:MP版Whirlpool加密插件。
-- **[SyS的bcrypt插件](https://github.com/Sreyas-Sreelal/samp-bcrypt)** - Sreyas Sreelal开发的Bcrypt加密插件。
-- **[lassir的bcrypt插件](https://github.com/lassir/bcrypt-samp)** - lassir开发的Bcrypt加密插件。
+- **[SyS' bcrypt Plugin](https://github.com/Sreyas-Sreelal/samp-bcrypt)** - Sreyas Sreelal开发的Bcrypt加密插件。
+- **[lassir's bcrypt Plugin](https://github.com/lassir/bcrypt-samp)** - lassir开发的Bcrypt加密插件。
- **[samp-crypto](https://github.com/alextwothousand/samp-crypto)** - 支持Argon2、Scrypt和Bcrypt的加密函数集合。
- **[SHA512](https://github.com/openmultiplayer/archive/raw/master/plugins/SHA512.zip)** - SA:MP版SHA512加密插件。
@@ -129,34 +130,35 @@ description: 精心整理的实用工具、库、游戏模式、滤镜脚本和
现在无需插件即可使用open.mp通过其他语言编写脚本,详见[此博客文章](https://www.open.mp/blog/release-candidate-1)
- **[sampsdk](https://github.com/maddinat0r/samp-plugin-sdk)** - 插件开发基础SDK。
-- **[sampgdk](https://github.com/Foundation-PAWN/sampgdk-backup)** - C/C++语言支持(编写SA:MP游戏模式)
-- **[SampSharp](https://github.com/ikkentim/SampSharp)** - C#语言支持(编写SA:MP游戏模式)
-- **[.NET插件](https://github.com/Seregamil/.NET-plugin)** - C#语言支持(编写SA:MP插件)
-- **[sampgo](https://github.com/sampgo/sampgo)** - Go语言支持(编写SA:MP游戏模式/插件)
-- **[samp-node](https://github.com/AmyrAhmady/samp-node)** - JavaScript/TypeScript语言支持(编写SA:MP游戏模式)
-- **[Shoebill项目](https://github.com/Shoebill/ShoebillPlugin)** - Java语言支持(编写SA:MP游戏模式)
-- **[pySAMP](https://github.com/habecker/PySAMP)** - Python语言支持(编写SA:MP游戏模式)
-- **[samp-rs](https://github.com/ZOTTCE/samp-rs)** - Rust语言支持(编写SA:MP插件)
-- **[Yet Another Lua插件](https://github.com/IllidanS4/YALP)** - Lua语言支持(编写SA:MP游戏模式)
-- **[SAMPHP](https://github.com/Lapayo/SAMPHP)** - PHP语言支持(编写SA:MP游戏模式)
-- **[SA-MP S[D]K](https://github.com/Hual/SA-MP-S-D-K)** - D语言支持(编写SA:MP游戏模式)
-- **[Kamp](https://github.com/Double-O-Seven/kamp)** - Kotlin语言支持(编写SA:MP游戏模式)
+- **[sampgdk](https://github.com/Foundation-PAWN/sampgdk-backup)** - C/C++语言支持(编写SA-MP游戏模式)
+- **[SampSharp](https://github.com/ikkentim/SampSharp)** - C#语言支持(编写SA-MP游戏模式)
+- **[.NET Plugin](https://github.com/Seregamil/.NET-plugin)** - C#语言支持(编写SA-MP插件)
+- **[sampgo](https://github.com/sampgo/sampgo)** - Go语言支持(编写SA-MP游戏模式/插件)
+- **[samp-node](https://github.com/AmyrAhmady/samp-node)** - JavaScript/TypeScript语言支持(编写SA-MP游戏模式)
+- **[Shoebill Project](https://github.com/Shoebill/ShoebillPlugin)** - Java语言支持(编写SA-MP游戏模式)
+- **[pySAMP](https://github.com/habecker/PySAMP)** - Python语言支持(编写SA-MP游戏模式)
+- **[samp-rs](https://github.com/ZOTTCE/samp-rs)** - Rust语言支持(编写SA-MP插件)
+- **[Yet Another Lua Plugin (YALP)](https://github.com/IllidanS4/YALP)** - Lua语言支持(编写SA-MP游戏模式)
+- **[SAMPHP](https://github.com/Lapayo/SAMPHP)** - PHP语言支持(编写SA-MP游戏模式)
+- **[SA-MP S[D]K](https://github.com/Hual/SA-MP-S-D-K)** - D语言支持(编写SA-MP游戏模式)
+- **[Kamp](https://github.com/Double-O-Seven/kamp)** - Kotlin语言支持(编写SA-MP游戏模式)
## 游戏模式
-- **[简单基础脚本](https://github.com/midosvt/omp-base-script)** - 帮助新手入门的简单基础脚本。
+- **[Simple base script](https://github.com/midosvt/omp-base-script)** - 帮助新手入门的简单基础脚本。
- **[ScavengeSurvive](https://github.com/Southclaws/ScavengeSurvive)** - 基于PvP的生存游戏模式。
- **[gta-open](https://github.com/PatrickGTR/gta-open)** - 以洛圣都为背景的警察与劫匪模式。
- **[SF-CnR](https://github.com/zeelorenc/sf-cnr)** - 圣菲耶罗警察与劫匪游戏模式。
-- **[次世代角色扮演](https://github.com/NextGenerationGamingLLC/SA-MP-Development)** - 次世代游戏公司的SA:MP游戏模式。
+- **[Next Generation Roleplay](https://github.com/NextGenerationGamingLLC/SA-MP-Development)** - 次世代游戏公司的SA:MP游戏模式。
- **[SC-RP](https://github.com/seanny/SC-RP)** - 支持MySQL的角色扮演游戏模式。
## 滤镜脚本
-- **[地图修复](https://github.com/NexiusTailer/MapFix)** - 修复GTA圣安地列斯地图的纹理错误。
-- **[SA:MP动画浏览器](https://github.com/Southclaws/samp-animbrowse)** - SA:MP动画浏览工具。
-- **[检测安卓用户](https://github.com/Fairuz-Afdhal/IsPlayerUsingAndroid)** - 检测玩家是否使用安卓设备。
-- **[文本绘图编辑器](https://github.com/Nickk888SAMP/TextDraw-Editor)** - 功能丰富的文本绘图编辑器。
-- **[终极创造器](https://github.com/NexiusTailer/Ultimate-Creator)** - 具备多项功能的先进地图编辑器。
-- **[Fusez地图编辑器](https://github.com/fusez/Map-Editor-V3)** - 游戏内地图编辑器。
-- **[材质工作室](https://github.com/Pottus/Texture-Studio)** - 支持16种材质索引和颜色设置的室内地图编辑器。
+- **[MapFix](https://github.com/NexiusTailer/MapFix)** - 修复GTA圣安地列斯地图的纹理错误。
+- **[SA:MP Animbrowse](https://github.com/Southclaws/samp-animbrowse)** - SA:MP动画浏览工具。
+- **[IsPlayerUsingAndroid](https://github.com/Fairuz-Afdhal/IsPlayerUsingAndroid)** - 检测玩家是否使用安卓设备。
+- **[Nickk's TextDraw Editor](https://github.com/Nickk888SAMP/TextDraw-Editor)** - 功能丰富的文本绘图编辑器。
+- **[Nexor's Textdraw Editor](https://github.com/nexquery/samp-textdraw-editor)** - 该编辑器为你提供诸多功能,如:分组、恢复被删内容、撤销操作更改,从文件导入文本绘图。
+- **[Ultimate Creator](https://github.com/NexiusTailer/Ultimate-Creator)** - 具备多项功能的先进地图编辑器。
+- **[Fusez's Map Editor](https://github.com/fusez/Map-Editor-V3)** - 游戏内地图编辑器。
+- **[Texture Studio](https://github.com/Pottus/Texture-Studio)** - 支持16种材质索引和颜色设置的室内地图编辑器。
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/client/CrashAddresses.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/client/CrashAddresses.md
index 01aef1a0afd..d14138dcc91 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/client/CrashAddresses.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/client/CrashAddresses.md
@@ -10,7 +10,7 @@ sidebar_label: 崩溃地址
| 出现频率 | 内存地址 | 原因 | 解决方案 |
| -------- | ------------------------ | --------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| 罕见 | 0x00000000 | SA:MP 初始化失败 | 重新安装游戏并确保单机模式可运行,移除所有模组 |
-| 罕见 | 0x006E3D17 | 角色皮肤相关。常见于玩家在车辆内/进出车辆时更换皮肤 | 确保玩家处于步行状态时更换皮肤 |
+| 罕见 | 0x006E3D17 | 皮肤相关。常见于玩家在车辆内/进出车辆时更换皮肤 | 确保玩家处于步行状态时更换皮肤 |
| 罕见 | 0x0058370A | 车辆/视角相关。当脚本尝试将玩家传送至未完成加载的车辆时触发 | 创建新车辆后等待数百毫秒再传送玩家,或使用 SetCameraBehindPlayer 预先调整视角 |
| 罕见 | 0x0040F64C | Windows 7/Vista 权限问题,与 SA:MP 安装程序相关 | 升级至 SA:MP 0.3.7,重命名游戏目录 |
| 罕见 | 0x0059F8B4 | 客户端加载 SA:MP 物体失败(通常因 samp.img 文件缺失) | 以管理员权限重新安装客户端 |
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/index.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/index.md
index 7fec8d5f65c..3d4fe238651 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/index.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/index.md
@@ -15,9 +15,12 @@ sidebar_position: 1
遗憾的是,原 SA-MP Wiki 已于 2020 年 9 月下旬下线,后以不可编辑的存档形式恢复。
-我们需要社区的力量将原 Wiki 内容迁移至这个新家!若你有意参与,请查阅[贡献指南](/docs/meta/Contributing)了解详情。
+~~我们需要社区的力量将原 Wiki 内容迁移至这个新家!~~
+衷心感谢社区!原 Wiki 内容已迁移至此。
-如果你不熟悉 GitHub 使用或 HTML 转换也无需担心!你可以通过以下方式提供帮助:
+若你有意参与,请查阅[贡献指南](/docs/meta/Contributing)了解详情。
+
+如果你不熟悉 GitHub 使用也无需担心!你可以通过以下方式提供帮助:
- 通过 [Discord](https://discord.gg/samp)、[论坛](https://forum.open.mp) 或社交媒体反馈问题
- 最重要的事:_广而告之!_ 欢迎收藏本站并分享给所有寻找 SA-MP Wiki 下落的开发者
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/callbacks/OnActorStreamIn.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/callbacks/OnActorStreamIn.md
index aa816de5fa4..c8cd1b9f1b0 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/callbacks/OnActorStreamIn.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/callbacks/OnActorStreamIn.md
@@ -1,19 +1,19 @@
---
title: OnActorStreamIn
sidebar_label: OnActorStreamIn
-description: 当角色被玩家客户端流加载时触发此回调。
-tags: ["角色"]
+description: 当演员被玩家客户端流加载时触发此回调。
+tags: ["演员"]
---
## 描述
-当角色被玩家客户端流加载时触发此回调。
+当演员被玩家客户端流加载时触发此回调。
| 参数 | 说明 |
| ----------- | ---------------------- |
-| actorid | 已为玩家流加载的角色ID |
+| actorid | 已为玩家流加载的演员ID |
| forplayerid | 触发流加载操作的玩家ID |
## 返回值
@@ -26,7 +26,7 @@ tags: ["角色"]
public OnActorStreamIn(actorid, forplayerid)
{
new string[48];
- format(string, sizeof(string), "角色 %d 已为你完成流加载。", actorid);
+ format(string, sizeof(string), "演员 %d 已为你完成流加载。", actorid);
SendClientMessage(forplayerid, 0xFFFFFFFF, string);
return 1;
}
@@ -40,4 +40,4 @@ public OnActorStreamIn(actorid, forplayerid)
以下回调可能与当前回调存在关联:
-- [OnActorStreamOut](OnActorStreamOut): 当角色被玩家客户端流卸载时触发
+- [OnActorStreamOut](OnActorStreamOut): 当演员被玩家客户端流卸载时触发
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/callbacks/OnActorStreamOut.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/callbacks/OnActorStreamOut.md
index 65b146a29fc..6f9a57985e7 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/callbacks/OnActorStreamOut.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/callbacks/OnActorStreamOut.md
@@ -1,19 +1,19 @@
---
title: OnActorStreamOut
sidebar_label: OnActorStreamOut
-description: 当角色被玩家客户端流卸载时触发此回调。
-tags: ["角色"]
+description: 当演员被玩家客户端流卸载时触发此回调。
+tags: ["演员"]
---
## 描述
-当角色被玩家客户端流卸载时触发此回调。
+当演员被玩家客户端流卸载时触发此回调。
| 参数 | 说明 |
| ----------- | ---------------------- |
-| actorid | 已为玩家流卸载的角色ID |
+| actorid | 已为玩家流卸载的演员ID |
| forplayerid | 触发流卸载操作的玩家ID |
## 返回值
@@ -26,7 +26,7 @@ tags: ["角色"]
public OnActorStreamOut(actorid, forplayerid)
{
new string[48];
- format(string, sizeof(string), "角色 %d 已为你完成流卸载。", actorid);
+ format(string, sizeof(string), "演员 %d 已为你完成流卸载。", actorid);
SendClientMessage(forplayerid, 0xFFFFFFFF, string);
return 1;
}
@@ -40,4 +40,4 @@ public OnActorStreamOut(actorid, forplayerid)
以下回调可能与当前回调存在关联:
-- [OnActorStreamIn](OnActorStreamIn): 当角色被玩家客户端流加载时触发
+- [OnActorStreamIn](OnActorStreamIn): 当演员被玩家客户端流加载时触发
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/callbacks/OnPlayerClickPlayer.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/callbacks/OnPlayerClickPlayer.md
index 242f62ee30d..8c6f95511eb 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/callbacks/OnPlayerClickPlayer.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/callbacks/OnPlayerClickPlayer.md
@@ -9,11 +9,11 @@ tags: ["玩家"]
当玩家在记分牌上双击其他玩家时触发此回调。
-| 参数 | 说明 |
-| --------------- | --------------------------------------------------------- |
-| playerid | 触发点击操作的玩家ID |
-| clickedplayerid | 被点击的玩家ID |
-| source | 点击来源(参见[点击来源](../resources/clicksources)文档) |
+| 参数 | 说明 |
+| ------------------- | --------------------------------------------------------- |
+| playerid | 触发点击操作的玩家ID |
+| clickedplayerid | 被点击的玩家ID |
+| CLICK_SOURCE:source | 点击来源(参见[点击来源](../resources/clicksources)文档) |
## 返回值
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/callbacks/OnPlayerGiveDamageActor.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/callbacks/OnPlayerGiveDamageActor.md
index 92c9edb8b60..ef4d99a752b 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/callbacks/OnPlayerGiveDamageActor.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/callbacks/OnPlayerGiveDamageActor.md
@@ -1,20 +1,20 @@
---
title: OnPlayerGiveDamageActor
sidebar_label: OnPlayerGiveDamageActor
-description: 当玩家对角色造成伤害时触发此回调函数。
-tags: ["玩家", 角色]
+description: 当玩家对演员造成伤害时触发此回调函数。
+tags: ["玩家", 演员]
---
## 描述
-当玩家对角色造成伤害时触发此回调函数。
+当玩家对演员造成伤害时触发此回调函数。
| 参数 | 说明 |
| --------------- | ------------------------------------------ |
| playerid | 造成伤害的玩家ID |
-| damaged_actorid | 受到伤害的角色ID |
+| damaged_actorid | 受到伤害的演员ID |
| Float:amount | 损失的生命值/护甲值(单位:浮点数) |
| WEAPON:weaponid | 造成伤害的武器类型 |
| bodypart | 被击中的[身体部位](../resources/bodyparts) |
@@ -39,7 +39,7 @@ public OnPlayerGiveDamageActor(playerid, damaged_actorid, Float:amount, WEAPON:w
GetPlayerName(playerid, attackerName, sizeof (attackerName));
GetWeaponName(weaponid, weaponName, sizeof (weaponName));
- format(string, sizeof(string), "%s 对角色ID %d 造成了 %.0f 点伤害,武器:%s", attackerName, damaged_actorid, amount, weaponName);
+ format(string, sizeof(string), "%s 对演员ID %d 造成了 %.0f 点伤害,武器:%s", attackerName, damaged_actorid, amount, weaponName);
SendClientMessageToAll(0xFFFFFFFF, string);
return 1;
}
@@ -49,7 +49,7 @@ public OnPlayerGiveDamageActor(playerid, damaged_actorid, Float:amount, WEAPON:w
:::tip
-若角色设置为无敌状态(默认状态),此回调不会被触发。详见[SetActorInvulnerable](../functions/SetActorInvulnerable)。
+若演员设置为无敌状态(默认状态),此回调不会被触发。详见[SetActorInvulnerable](../functions/SetActorInvulnerable)。
:::
@@ -57,19 +57,19 @@ public OnPlayerGiveDamageActor(playerid, damaged_actorid, Float:amount, WEAPON:w
以下回调函数可能与此回调相关:
-- [OnActorStreamOut](OnActorStreamOut): 当角色被玩家客户端流卸载时触发
-- [OnActorStreamIn](OnActorStreamOut): 当角色被玩家客户端流加载时触发
+- [OnActorStreamOut](OnActorStreamOut): 当演员被玩家客户端流卸载时触发
+- [OnActorStreamIn](OnActorStreamOut): 当演员被玩家客户端流加载时触发
## 相关函数
以下函数可能与此回调函数相关:
-- [CreateActor](../functions/CreateActor): 创建角色(静态NPC)
-- [SetActorInvulnerable](../functions/SetActorInvulnerable): 设置角色无敌状态
-- [SetActorHealth](../functions/SetActorHealth): 设置角色生命值
-- [GetActorHealth](../functions/GetActorHealth): 获取角色生命值
-- [IsActorInvulnerable](../functions/IsActorInvulnerable): 检测角色是否无敌
-- [IsValidActor](../functions/IsValidActor): 验证角色ID有效性
+- [CreateActor](../functions/CreateActor): 创建演员(静态NPC)
+- [SetActorInvulnerable](../functions/SetActorInvulnerable): 设置演员无敌状态
+- [SetActorHealth](../functions/SetActorHealth): 设置演员生命值
+- [GetActorHealth](../functions/GetActorHealth): 获取演员生命值
+- [IsActorInvulnerable](../functions/IsActorInvulnerable): 检测演员是否无敌
+- [IsValidActor](../functions/IsValidActor): 验证演员ID有效性
## 相关资源
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/callbacks/OnPlayerStreamIn.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/callbacks/OnPlayerStreamIn.md
index 9e18835c449..663230c01a5 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/callbacks/OnPlayerStreamIn.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/callbacks/OnPlayerStreamIn.md
@@ -39,5 +39,5 @@ public OnPlayerStreamIn(playerid, forplayerid)
以下回调可能与此回调存在关联:
- [OnPlayerStreamOut](OnPlayerStreamOut): 当玩家被其他客户端流卸载时触发
-- [OnActorStreamIn](OnActorStreamIn): 当角色被玩家客户端流加载时触发
+- [OnActorStreamIn](OnActorStreamIn): 当演员被玩家客户端流加载时触发
- [OnVehicleStreamIn](OnVehicleStreamIn): 当车辆被玩家客户端流加载时触发
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/callbacks/OnPlayerStreamOut.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/callbacks/OnPlayerStreamOut.md
index 4f3549654b4..40ffaef63c3 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/callbacks/OnPlayerStreamOut.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/callbacks/OnPlayerStreamOut.md
@@ -45,5 +45,5 @@ public OnPlayerStreamOut(playerid, forplayerid)
以下回调可能与此回调存在关联:
- [OnPlayerStreamIn](OnPlayerStreamIn): 当玩家被其他客户端流加载时触发
-- [OnActorStreamIn](OnActorStreamIn): 当角色被玩家客户端流加载时触发
+- [OnActorStreamIn](OnActorStreamIn): 当演员被玩家客户端流加载时触发
- [OnVehicleStreamIn](OnVehicleStreamIn): 当车辆被玩家客户端流加载时触发
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/ApplyActorAnimation.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/ApplyActorAnimation.md
index a75dd724aa5..bdf52debfda 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/ApplyActorAnimation.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/ApplyActorAnimation.md
@@ -1,33 +1,33 @@
---
title: ApplyActorAnimation
sidebar_label: ApplyActorAnimation
-description: 为角色应用指定的动画效果
-tags: ["角色", "动画"]
+description: 为演员应用指定的动画效果
+tags: ["演员", "动画"]
---
## 描述
-为游戏中的 NPC 角色应用指定的动画效果。
+为游戏中的 NPC 演员应用指定的动画效果。
| 参数 | 说明 |
| ------------------------ | ---------------------------------------------------------------------------------------------- |
-| actorid | 要应用动画的角色 ID |
+| actorid | 要应用动画的演员 ID |
| const animationLibrary[] | 动画资源库名称 |
| const animationName[] | 动画名称(需在指定资源库中存在) |
| float:delta | 动画播放速度(建议使用 4.1) |
| bool:loop | 是否循环播放:true 循环播放,false 单次播放 |
| bool:lockX | X 轴位置锁定:false 在动画结束后恢复原始 X 坐标(适用于移动类动画),true 保持动画结束时的位置 |
| bool:lockY | Y 轴位置锁定(参数设置应与 lockX 保持一致) |
-| bool:freeze | 动画结束后冻结角色:true 冻结角色,false 不冻结 |
+| bool:freeze | 动画结束后冻结演员:true 冻结演员,false 不冻结 |
| time | 动画持续时间(毫秒),0 表示无限循环 |
## 返回值
**true** - 动画应用成功
-**false** - 执行失败(角色不存在)
+**false** - 执行失败(演员不存在)
## 示例
@@ -36,7 +36,7 @@ new gMyActor;
public OnGameModeInit()
{
- // 在武器店创建销售员角色
+ // 在武器店创建销售员演员
gMyActor = CreateActor(179, 316.1, -134.0, 999.6, 90.0);
// 应用付款动画
ApplyActorAnimation(gMyActor, "DEALER", "shop_pay", 4.1, false, false, false, false, 0);
@@ -55,11 +55,11 @@ public OnPlayerConnect(playerid)
:::提示
-必须通过 ApplyAnimation 为玩家预加载动画资源库,否则角色动画将在下次执行时生效
+必须通过 ApplyAnimation 为玩家预加载动画资源库,否则演员动画将在下次执行时生效
:::
## 相关函数
-- [ClearActorAnimations](ClearActorAnimations): 清除角色当前应用的动画
-- [GetActorAnimation](GetActorAnimation): 获取角色当前播放的动画信息
+- [ClearActorAnimations](ClearActorAnimations): 清除演员当前应用的动画
+- [GetActorAnimation](GetActorAnimation): 获取演员当前播放的动画信息
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/ClearActorAnimations.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/ClearActorAnimations.md
index 41beb39a888..0a4da568d39 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/ClearActorAnimations.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/ClearActorAnimations.md
@@ -1,25 +1,25 @@
---
title: ClearActorAnimations
sidebar_label: ClearActorAnimations
-description: 清除角色当前应用的所有动画效果
-tags: ["角色"]
+description: 清除演员当前应用的所有动画效果
+tags: ["演员"]
---
## 描述
-终止指定角色当前正在播放的动画序列
+终止指定演员当前正在播放的动画序列
| 参数 | 说明 |
| ------- | ----------------------------------------------------- |
-| actorid | 目标角色 ID(通过[CreateActor](CreateActor)函数创建) |
+| actorid | 目标演员 ID(通过[CreateActor](CreateActor)函数创建) |
## 返回值
**1** - 函数执行成功,动画已清除
-**0** - 函数执行失败(指定角色不存在)
+**0** - 函数执行失败(指定演员不存在)
## 示例代码
@@ -28,7 +28,7 @@ new gMyActor;
public OnGameModeInit()
{
- // 在武器店创建售货员角色
+ // 在武器店创建售货员演员
gMyActor = CreateActor(179, 316.1, -134.0, 999.6, 90.0);
// 应用付款动画
ApplyActorAnimation(gMyActor, "DEALER", "shop_pay", 4.1, false, false, false, false, 0);
@@ -41,4 +41,4 @@ ClearActorAnimations(gMyActor);
## 相关函数
-- [ApplyActorAnimation](ApplyActorAnimation): 为角色应用动画
+- [ApplyActorAnimation](ApplyActorAnimation): 为演员应用动画
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/CreateActor.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/CreateActor.md
index b3af4a47687..c98a16167c2 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/CreateActor.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/CreateActor.md
@@ -1,27 +1,27 @@
---
title: CreateActor
sidebar_label: CreateActor
-description: 在游戏世界中创建静态角色实体。
-tags: ["角色"]
+description: 在游戏世界中创建静态演员实体。
+tags: ["演员"]
---
## 描述
-创建具有基础功能的静态角色实体。该实体类似 NPC 但功能受限,不会占用服务器玩家槽位。
+创建具有基础功能的静态演员实体。该实体类似 NPC 但功能受限,不会占用服务器玩家槽位。
| 参数 | 说明 |
| ----------- | ------------------------------------------- |
-| skin | 角色使用的[皮肤模型 ID](../resources/skins) |
+| skin | 演员使用的[皮肤模型 ID](../resources/skins) |
| Float:x | 生成坐标 X 轴值 |
| Float:y | 生成坐标 Y 轴值 |
| Float:z | 生成坐标 Z 轴值 |
-| Float:angle | 角色初始朝向角度(单位:度) |
+| Float:angle | 演员初始朝向角度(单位:度) |
## 返回值
-成功返回角色 ID(从 0 开始计数),当达到角色数量上限(1000)时返回 INVALID_ACTOR_ID(65535)。
+成功返回演员 ID(从 0 开始计数),当达到演员数量上限(1000)时返回 INVALID_ACTOR_ID(65535)。
## 应用示例
@@ -30,13 +30,13 @@ new gActorCJ;
public OnGameModeInit()
{
- // 在蓝莓镇(地图中心)创建CJ角色
+ // 在蓝莓镇(地图中心)创建CJ演员
gActorCJ = CreateActor(0, 0.0, 0.0, 3.0, 0.0);
}
public OnGameModeExit()
{
- // 销毁已创建的角色
+ // 销毁已创建的演员
DestroyActor(gActorCJ);
}
```
@@ -45,34 +45,34 @@ public OnGameModeExit()
:::tip
-角色实体适用于静态场景元素(如收银员、酒保),可通过[ApplyActorAnimation](ApplyActorAnimation)执行单次或循环动画
+演员实体适用于静态场景元素(如收银员、酒保),可通过[ApplyActorAnimation](ApplyActorAnimation)执行单次或循环动画
:::
:::warning
-- 角色系统独立于 NPC 系统,不占用玩家槽位且操作方式不同(最大数量 1000)
-- 角色会被车辆推动,建议使用定时器重置位置
+- 演员系统独立于 NPC 系统,不占用玩家槽位且操作方式不同(最大数量 1000)
+- 演员会被车辆推动,建议使用定时器重置位置
- 默认处于无敌状态
:::
## 关联函数
-- [DestroyActor](DestroyActor): 销毁角色实体
-- [SetActorPos](SetActorPos): 设置角色坐标
-- [GetActorPos](GetActorPos): 获取角色坐标
+- [DestroyActor](DestroyActor): 销毁演员实体
+- [SetActorPos](SetActorPos): 设置演员坐标
+- [GetActorPos](GetActorPos): 获取演员坐标
- [GetActorSpawnInfo](GetActorSpawnInfo): 获取初始生成信息
-- [SetActorFacingAngle](SetActorFacingAngle): 设置角色朝向角度
+- [SetActorFacingAngle](SetActorFacingAngle): 设置演员朝向角度
- [GetActorFacingAngle](GetActorFacingAngle): 获取当前朝向角度
- [SetActorVirtualWorld](SetActorVirtualWorld): 设置所属虚拟世界
- [GetActorVirtualWorld](GetActorVirtualWorld): 获取所属虚拟世界
-- [ApplyActorAnimation](ApplyActorAnimation): 应用角色动画
+- [ApplyActorAnimation](ApplyActorAnimation): 应用演员动画
- [ClearActorAnimations](ClearActorAnimations): 清除所有动画
- [GetActorAnimation](GetActorAnimation): 获取当前播放动画
-- [GetPlayerCameraTargetActor](GetPlayerCameraTargetActor): 检测玩家视角对准的角色
+- [GetPlayerCameraTargetActor](GetPlayerCameraTargetActor): 检测玩家视角对准的演员
- [IsActorStreamedIn](IsActorStreamedIn): 检测是否流加载
-- [SetActorSkin](SetActorSkin): 更换角色皮肤
+- [SetActorSkin](SetActorSkin): 更换演员皮肤
- [GetActorSkin](GetActorSkin): 获取当前皮肤
- [SetActorHealth](SetActorHealth): 设置生命值
- [GetActorHealth](GetActorHealth): 获取生命值
@@ -80,10 +80,10 @@ public OnGameModeExit()
- [IsActorInvulnerable](IsActorInvulnerable): 检测无敌状态
- [IsValidActor](IsValidActor): 验证 ID 有效性
- [GetActorPoolSize](GetActorPoolSize): 获取最大有效 ID
-- [GetPlayerTargetActor](GetPlayerTargetActor): 获取玩家瞄准的角色
+- [GetPlayerTargetActor](GetPlayerTargetActor): 获取玩家瞄准的演员
## 关联回调
-- [OnActorStreamIn](../callbacks/OnActorStreamIn): 角色流加载时触发
-- [OnActorStreamOut](../callbacks/OnActorStreamOut): 角色流卸载时触发
-- [OnPlayerGiveDamageActor](../callbacks/OnPlayerGiveDamageActor): 玩家攻击角色时触发
+- [OnActorStreamIn](../callbacks/OnActorStreamIn): 演员流加载时触发
+- [OnActorStreamOut](../callbacks/OnActorStreamOut): 演员流卸载时触发
+- [OnPlayerGiveDamageActor](../callbacks/OnPlayerGiveDamageActor): 玩家攻击演员时触发
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/DB_GetRowCount.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/DB_GetRowCount.md
index 6fd87505f94..7e5833e1806 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/DB_GetRowCount.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/DB_GetRowCount.md
@@ -24,31 +24,22 @@ tags: ["sqlite"]
// ...
-Examples_ListNames(DB:dbConnectionHandle)
+Examples_CountVehicles(DB:dbConnectionHandle)
{
// 执行数据库查询
- new DBResult:db_result_set = DB_ExecuteQuery(dbConnectionHandle, "SELECT `name` FROM `examples`");
+ new DBResult:db_result_set = DB_ExecuteQuery("SELECT `uid` FROM `vehicles`");
+ // 验证数据库结果集句柄有效性
if (db_result_set)
{
- // 预分配结果存储空间
- new result[256];
-
- // 获取总行数
new row_count = DB_GetRowCount(db_result_set);
- printf("查询结果包含 %d 行数据", row_count);
-
- // 遍历结果集
- do
- {
- // 通过字段名称获取数据
- DB_GetFieldStringByName(db_result_set, "name", result, sizeof(result));
- }
- while (DB_SelectNextRow(db_result_set)); // 跳转至下一行
// 释放结果集
DB_FreeResultSet(db_result_set);
+
+ return rowcount;
}
+ return 0;
}
```
@@ -74,7 +65,7 @@ public OnGameModeInit()
if (gDBConnectionHandle)
{
print("成功连接数据库 \"example.db\"");
- Examples_ListNames(gDBConnectionHandle);
+ printf("数据库中存储了 %i 辆车。", Examples_CountVehicles(gDBConnectionHandle));
}
else
{
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/DestroyActor.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/DestroyActor.md
index 159df773ae2..a52bc7c3e56 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/DestroyActor.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/DestroyActor.md
@@ -1,25 +1,25 @@
---
title: DestroyActor
sidebar_label: DestroyActor
-description: 销毁通过CreateActor创建的角色。
-tags: ["角色"]
+description: 销毁通过CreateActor创建的演员。
+tags: ["演员"]
---
## 描述
-销毁通过 CreateActor 创建的角色。
+销毁通过 CreateActor 创建的演员。
| 参数 | 说明 |
| ------- | -------------------------------------------- |
-| actorid | 要销毁的角色 ID。该 ID 由 CreateActor 返回。 |
+| actorid | 要销毁的演员 ID。该 ID 由 CreateActor 返回。 |
## 返回值
**true** - 函数执行成功
-**false** - 函数执行失败。指定的角色 ID 不存在。
+**false** - 函数执行失败。指定的演员 ID 不存在。
## 示例
@@ -41,4 +41,4 @@ public OnFilterScriptExit()
## 相关函数
-- [CreateActor](CreateActor): 创建角色(静态 NPC)
+- [CreateActor](CreateActor): 创建演员(静态 NPC)
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorAnimation.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorAnimation.md
index a2b74ab20a4..da9eccb62fa 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorAnimation.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorAnimation.md
@@ -1,19 +1,19 @@
---
title: GetActorAnimation
sidebar_label: GetActorAnimation
-description: 获取角色当前正在播放的动画信息。
-tags: ["角色"]
+description: 获取演员当前正在播放的动画信息。
+tags: ["演员"]
---
## 描述
-获取角色当前正在播放的动画信息。
+获取演员当前正在播放的动画信息。
| 参数 | 说明 |
| ------------------ | ------------------------------------------- |
-| actorid | 要获取动画的角色 ID |
+| actorid | 要获取动画的演员 ID |
| animationLibrary[] | 用于存储动画库名称的数组(引用传递) |
| librarySize | 动画库名称数组的长度 |
| animationName[] | 用于存储动画名称的数组(引用传递) |
@@ -27,7 +27,7 @@ tags: ["角色"]
## 返回值
-若角色存在且有效返回 true,否则返回 false。
+若演员存在且有效返回 true,否则返回 false。
## 示例代码
@@ -55,6 +55,6 @@ public OnGameModeInit()
## 相关函数
-- [CreateActor](CreateActor): 创建角色(静态 NPC)
-- [ApplyActorAnimation](ApplyActorAnimation): 对角色应用动画
-- [ClearActorAnimations](ClearActorAnimations): 清除角色的所有动画
+- [CreateActor](CreateActor): 创建演员(静态 NPC)
+- [ApplyActorAnimation](ApplyActorAnimation): 对演员应用动画
+- [ClearActorAnimations](ClearActorAnimations): 清除演员的所有动画
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorFacingAngle.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorFacingAngle.md
index 3f9f50162bb..223b4791bff 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorFacingAngle.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorFacingAngle.md
@@ -1,28 +1,28 @@
---
title: GetActorFacingAngle
sidebar_label: GetActorFacingAngle
-description: 获取角色的朝向角度。
-tags: ["角色"]
+description: 获取演员的朝向角度。
+tags: ["演员"]
---
## 描述
-获取角色的朝向角度。
+获取演员的朝向角度。
| 参数 | 说明 |
| ------------ | --------------------------------------------------------------- |
-| actorid | 要获取朝向角度的角色 ID(由[CreateActor](CreateActor)创建返回) |
-| &Float:angle | 浮点变量(引用传递),用于存储角色的朝向角度 |
+| actorid | 要获取朝向角度的演员 ID(由[CreateActor](CreateActor)创建返回) |
+| &Float:angle | 浮点变量(引用传递),用于存储演员的朝向角度 |
## 返回值
**true** - 函数执行成功
-**false** - 函数执行失败(指定角色不存在)
+**false** - 函数执行失败(指定演员不存在)
-角色的朝向角度将被存储到指定变量中。
+演员的朝向角度将被存储到指定变量中。
## 示例代码
@@ -33,5 +33,5 @@ GetActorFacingAngle(actorid, facingAngle);
## 相关函数
-- [SetActorFacingAngle](SetActorFacingAngle): 设置角色的朝向角度
-- [GetActorPos](GetActorPos): 获取角色的坐标位置
+- [SetActorFacingAngle](SetActorFacingAngle): 设置演员的朝向角度
+- [GetActorPos](GetActorPos): 获取演员的坐标位置
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorHealth.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorHealth.md
index effd0b415e0..49897eada59 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorHealth.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorHealth.md
@@ -1,28 +1,28 @@
---
title: GetActorHealth
sidebar_label: GetActorHealth
-description: 获取角色的生命值。
-tags: ["角色"]
+description: 获取演员的生命值。
+tags: ["演员"]
---
## 描述
-获取角色的生命值。
+获取演员的生命值。
| 参数 | 说明 |
| ------------- | ------------------------------------------ |
-| actorid | 要获取生命值的角色 ID |
-| &Float:health | 浮点变量(引用传递),用于存储角色的生命值 |
+| actorid | 要获取生命值的演员 ID |
+| &Float:health | 浮点变量(引用传递),用于存储演员的生命值 |
## 返回值
**true** - 函数执行成功
-**false** - 函数执行失败(角色未创建)
+**false** - 函数执行失败(演员未创建)
-注意:角色的生命值存储在指定变量中,而非通过返回值获取。
+注意:演员的生命值存储在指定变量中,而非通过返回值获取。
## 示例代码
@@ -31,20 +31,20 @@ new gMyActor;
public OnGameModeInit()
{
- gMyActor = CreateActor(179, 316.1, -134.0, 999.6, 90.0); // 在武器商店创建销售员角色
+ gMyActor = CreateActor(179, 316.1, -134.0, 999.6, 90.0); // 在武器商店创建销售员演员
SetActorHealth(gMyActor, 100.0);
new Float:actorHealth;
GetActorHealth(gMyActor, actorHealth);
- printf("角色ID %d 当前生命值:%.2f", gMyActor, actorHealth);
+ printf("演员ID %d 当前生命值:%.2f", gMyActor, actorHealth);
return 1;
}
```
## 相关函数
-- [CreateActor](CreateActor): 创建角色(静态 NPC)
-- [SetActorHealth](SetActorHealth): 设置角色的生命值
-- [SetActorInvulnerable](SetActorInvulnerable): 设置角色无敌状态
-- [IsActorInvulnerable](IsActorInvulnerable): 检测角色是否处于无敌状态
+- [CreateActor](CreateActor): 创建演员(静态 NPC)
+- [SetActorHealth](SetActorHealth): 设置演员的生命值
+- [SetActorInvulnerable](SetActorInvulnerable): 设置演员无敌状态
+- [IsActorInvulnerable](IsActorInvulnerable): 检测演员是否处于无敌状态
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorPoolSize.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorPoolSize.md
index 0a272796b39..403cccf8398 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorPoolSize.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorPoolSize.md
@@ -1,27 +1,27 @@
---
title: GetActorPoolSize
sidebar_label: GetActorPoolSize
-description: 获取服务器上已创建的最高角色ID。
-tags: ["角色"]
+description: 获取服务器上已创建的最高演员ID。
+tags: ["演员"]
---
## 描述
-获取服务器上已创建的最高角色 ID。注意在 SA-MP 中此函数存在缺陷,即使没有角色时也会返回`0`。open.mp 已修正此问题会返回`-1`,同时已弃用此函数,建议改用`MAX_ACTORS`或`foreach`循环。
+获取服务器上已创建的最高演员 ID。注意在 SA-MP 中此函数存在缺陷,即使没有演员时也会返回`0`。open.mp 已修正此问题会返回`-1`,同时已弃用此函数,建议改用`MAX_ACTORS`或`foreach`循环。
## 示例代码
```c
SetAllActorsHealth(Float:health)
{
- // 遍历所有可能的角色ID
+ // 遍历所有可能的演员ID
for(new i = 0, j = GetActorPoolSize(); i <= j; i++)
{
if (IsValidActor(i))
{
- SetActorHealth(i, health); // 设置有效角色的生命值
+ SetActorHealth(i, health); // 设置有效演员的生命值
}
}
}
@@ -29,6 +29,6 @@ SetAllActorsHealth(Float:health)
## 相关函数
-- [CreateActor](CreateActor): 创建角色(静态 NPC)
-- [IsValidActor](IsValidActor): 验证角色 ID 是否有效
-- [SetActorHealth](SetActorHealth): 设置角色的生命值
+- [CreateActor](CreateActor): 创建演员(静态 NPC)
+- [IsValidActor](IsValidActor): 验证演员 ID 是否有效
+- [SetActorHealth](SetActorHealth): 设置演员的生命值
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorPos.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorPos.md
index e641a50b46b..0f3e2c2ffc6 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorPos.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorPos.md
@@ -1,30 +1,30 @@
---
title: GetActorPos
sidebar_label: GetActorPos
-description: 获取角色的坐标位置。
-tags: ["角色"]
+description: 获取演员的坐标位置。
+tags: ["演员"]
---
## 描述
-获取角色的坐标位置。
+获取演员的坐标位置。
| 参数 | 说明 |
| -------- | ----------------------------------------------------------- |
-| actorid | 要获取坐标的角色 ID(由[CreateActor](CreateActor)创建返回) |
-| &Float:x | 浮点变量(引用传递),用于存储角色的 X 轴坐标 |
-| &Float:y | 浮点变量(引用传递),用于存储角色的 Y 轴坐标 |
-| &Float:z | 浮点变量(引用传递),用于存储角色的 Z 轴坐标 |
+| actorid | 要获取坐标的演员 ID(由[CreateActor](CreateActor)创建返回) |
+| &Float:x | 浮点变量(引用传递),用于存储演员的 X 轴坐标 |
+| &Float:y | 浮点变量(引用传递),用于存储演员的 Y 轴坐标 |
+| &Float:z | 浮点变量(引用传递),用于存储演员的 Z 轴坐标 |
## 返回值
**true** - 函数执行成功
-**false** - 函数执行失败(指定角色不存在)
+**false** - 函数执行失败(指定演员不存在)
-角色的坐标将被存储到指定变量中。
+演员的坐标将被存储到指定变量中。
## 示例代码
@@ -35,4 +35,4 @@ GetActorPos(actorid, x, y, z);
## 相关函数
-- [SetActorPos](SetActorPos): 设置角色的坐标位置
+- [SetActorPos](SetActorPos): 设置演员的坐标位置
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorSkin.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorSkin.md
index a518c6728c1..1e8bcc6e343 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorSkin.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorSkin.md
@@ -1,23 +1,23 @@
---
title: GetActorSkin
sidebar_label: GetActorSkin
-description: 获取角色当前使用的皮肤ID。
-tags: ["角色"]
+description: 获取演员当前使用的皮肤ID。
+tags: ["演员"]
---
## 描述
-获取角色当前使用的皮肤 ID。
+获取演员当前使用的皮肤 ID。
| 参数 | 说明 |
| ------- | ------------------- |
-| actorid | 要获取皮肤的角色 ID |
+| actorid | 要获取皮肤的演员 ID |
## 返回值
-返回角色当前使用的皮肤 ID。
+返回演员当前使用的皮肤 ID。
## 示例代码
@@ -26,7 +26,7 @@ new gMyActor;
public OnGameModeInit()
{
- gMyActor = CreateActor(179, 1153.9640, -1772.3915, 16.5920, 0.0000); // 创建皮肤ID为179的角色
+ gMyActor = CreateActor(179, 1153.9640, -1772.3915, 16.5920, 0.0000); // 创建皮肤ID为179的演员
new actorSkinID = GetActorSkin(gMyActor);
// `actorSkinID`的值现在是179
@@ -36,5 +36,5 @@ public OnGameModeInit()
## 相关函数
-- [CreateActor](CreateActor): 创建角色(静态 NPC)
-- [SetActorSkin](SetActorSkin): 设置角色的皮肤 ID
+- [CreateActor](CreateActor): 创建演员(静态 NPC)
+- [SetActorSkin](SetActorSkin): 设置演员的皮肤 ID
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorSpawnInfo.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorSpawnInfo.md
index 9a043e94811..da07f4b2557 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorSpawnInfo.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorSpawnInfo.md
@@ -1,20 +1,20 @@
---
title: GetActorSpawnInfo
sidebar_label: GetActorSpawnInfo
-description: 获取角色的初始生成点信息。
-tags: ["角色"]
+description: 获取演员的初始生成点信息。
+tags: ["演员"]
---
## 描述
-获取角色的初始生成点信息。
+获取演员的初始生成点信息。
| 参数 | 说明 |
| ----------------- | -------------------------------------------- |
-| actorid | 要获取生成信息的角色 ID |
-| &skin | 整型变量(引用传递),用于存储角色皮肤 ID |
+| actorid | 要获取生成信息的演员 ID |
+| &skin | 整型变量(引用传递),用于存储演员皮肤 ID |
| &Float:spawnX | 浮点变量(引用传递),用于存储生成点 X 坐标 |
| &Float:spawnY | 浮点变量(引用传递),用于存储生成点 Y 坐标 |
| &Float:spawnZ | 浮点变量(引用传递),用于存储生成点 Z 坐标 |
@@ -22,7 +22,7 @@ tags: ["角色"]
## 返回值
-若角色存在且有效返回 true,否则返回 false。
+若演员存在且有效返回 true,否则返回 false。
## 示例代码
@@ -31,7 +31,7 @@ new gMyActor;
public OnGameModeInit()
{
- gMyActor = CreateActor(179, 1153.9640, -1772.3915, 16.5920, 0.0000); // 创建皮肤ID为179的角色
+ gMyActor = CreateActor(179, 1153.9640, -1772.3915, 16.5920, 0.0000); // 创建皮肤ID为179的演员
new skin,
Float:spawnX,
@@ -46,8 +46,8 @@ public OnGameModeInit()
## 相关函数
-- [CreateActor](CreateActor): 创建角色(静态 NPC)
-- [GetActorPos](GetActorPos): 获取角色的坐标位置
-- [SetActorPos](SetActorPos): 设置角色的坐标位置
-- [GetActorSkin](GetActorSkin): 获取角色皮肤 ID
-- [SetActorSkin](SetActorSkin): 设置角色皮肤 ID
+- [CreateActor](CreateActor): 创建演员(静态 NPC)
+- [GetActorPos](GetActorPos): 获取演员的坐标位置
+- [SetActorPos](SetActorPos): 设置演员的坐标位置
+- [GetActorSkin](GetActorSkin): 获取演员皮肤 ID
+- [SetActorSkin](SetActorSkin): 设置演员皮肤 ID
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorVirtualWorld.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorVirtualWorld.md
index 605ea0b5995..a63e29b7a36 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorVirtualWorld.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActorVirtualWorld.md
@@ -1,25 +1,25 @@
---
title: GetActorVirtualWorld
sidebar_label: GetActorVirtualWorld
-description: 获取角色所在的虚拟世界。
-tags: ["角色"]
+description: 获取演员所在的虚拟世界。
+tags: ["演员"]
---
## 描述
-获取角色所在的虚拟世界。
+获取演员所在的虚拟世界。
| 参数名 | 说明 |
| ------- | ----------------------- |
-| actorid | 要获取虚拟世界的角色 ID |
+| actorid | 要获取虚拟世界的演员 ID |
## 返回值
-返回角色所在的虚拟世界 ID(默认值为 0)。
+返回演员所在的虚拟世界 ID(默认值为 0)。
-若指定角色不存在也会返回 0。
+若指定演员不存在也会返回 0。
## 示例代码
@@ -28,19 +28,19 @@ new MyActor;
public OnGameModeInit()
{
- MyActor = CreateActor(69, 0.0, 0.0, 3.0, 0.0); // 创建角色(皮肤ID 69)
+ MyActor = CreateActor(69, 0.0, 0.0, 3.0, 0.0); // 创建演员(皮肤ID 69)
- SetActorVirtualWorld(MyActor, 20); // 设置角色虚拟世界为20
+ SetActorVirtualWorld(MyActor, 20); // 设置演员虚拟世界为20
return 1;
}
// 在其他地方检测虚拟世界
if (GetActorVirtualWorld(MyActor) == 20)
{
- // 执行相关操作(当角色在虚拟世界20时触发)
+ // 执行相关操作(当演员在虚拟世界20时触发)
}
```
## 相关函数
-- [SetActorVirtualWorld](SetActorVirtualWorld): 设置角色所在的虚拟世界
+- [SetActorVirtualWorld](SetActorVirtualWorld): 设置演员所在的虚拟世界
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActors.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActors.md
index cbb5d8b1cdc..5132ffb9b06 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActors.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetActors.md
@@ -1,24 +1,24 @@
---
title: GetActors
sidebar_label: GetActors
-description: 获取服务器上已创建的角色ID数组。
-tags: ["角色"]
+description: 获取服务器上已创建的演员ID数组。
+tags: ["演员"]
---
## 描述
-获取服务器上已创建的角色 ID 数组。
+获取服务器上已创建的演员 ID 数组。
| 参数 | 说明 |
| -------- | ------------------------------------- |
-| actors[] | 数组变量(引用传递),用于存储角色 ID |
+| actors[] | 数组变量(引用传递),用于存储演员 ID |
| size | 数组的容量长度 |
## 返回值
-返回数组中存储的角色数量。
+返回数组中存储的演员数量。
## 示例代码
@@ -26,7 +26,7 @@ tags: ["角色"]
new actors[MAX_ACTORS];
GetActors(actors, sizeof(actors));
-// `actors`数组现在包含已创建的角色ID,例如 {0, 1, 2, 3, 4, ...}
+// `actors`数组现在包含已创建的演员ID,例如 {0, 1, 2, 3, 4, ...}
```
## 相关函数
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetPlayerCameraTargetActor.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetPlayerCameraTargetActor.md
index a9e0182195c..aeac696c3cc 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetPlayerCameraTargetActor.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetPlayerCameraTargetActor.md
@@ -1,23 +1,23 @@
---
title: GetPlayerCameraTargetActor
sidebar_label: GetPlayerCameraTargetActor
-description: 允许你获取玩家当前正在注视的角色(若有)的ID。
-tags: ["玩家", "视角", "角色"]
+description: 允许你获取玩家当前正在注视的演员(若有)的ID。
+tags: ["玩家", "视角", "演员"]
---
## 描述
-获取玩家当前正在注视的角色(若有)的 ID。
+获取玩家当前正在注视的演员(若有)的 ID。
| 参数名 | 说明 |
| -------- | ----------------------------- |
-| playerid | 需要获取目标角色 ID 的玩家 ID |
+| playerid | 需要获取目标演员 ID 的玩家 ID |
## 返回值
-玩家正在注视的角色 ID(若无可视角色则返回 INVALID_ACTOR_ID)
+玩家正在注视的演员 ID(若无可视演员则返回 INVALID_ACTOR_ID)
## 示例代码
@@ -32,7 +32,7 @@ public OnPlayerConnect(playerid)
public OnPlayerUpdate(playerid)
{
- // 检测玩家当前注视的角色(若有)
+ // 检测玩家当前注视的演员(若有)
new playerTargetActor = GetPlayerCameraTargetActor(playerid);
if (playerTargetActor != INVALID_ACTOR_ID)
@@ -44,13 +44,13 @@ public OnPlayerUpdate(playerid)
new KEY:keys, updown, leftright;
GetPlayerKeys(playerid, keys, updown, leftright);
- // 若角色未举手且玩家持械瞄准
+ // 若演员未举手且玩家持械瞄准
if (!ActorHandsup[playerTargetActor] && playerWeapon >= 22 && playerWeapon <= 42 && keys & KEY_AIM)
{
// 应用举手动画
ApplyActorAnimation(playerTargetActor, "SHOP", "SHP_HandsUp_Scr",4.1,0,0,0,1,0);
- // 标记角色已举手状态
+ // 标记演员已举手状态
ActorHandsup[playerTargetActor] = true;
}
}
@@ -62,7 +62,7 @@ public OnPlayerUpdate(playerid)
:::tip
-此函数仅返回玩家视角方向上的角色 ID,如需检测玩家是否正在瞄准该角色,请使用[GetPlayerTargetActor](GetPlayerTargetActor)
+此函数仅返回玩家视角方向上的演员 ID,如需检测玩家是否正在瞄准该演员,请使用[GetPlayerTargetActor](GetPlayerTargetActor)
:::
@@ -74,7 +74,7 @@ public OnPlayerUpdate(playerid)
## 相关函数
-- [GetPlayerTargetActor](GetPlayerTargetActor): 获取指定玩家正在瞄准的角色 ID
+- [GetPlayerTargetActor](GetPlayerTargetActor): 获取指定玩家正在瞄准的演员 ID
- [GetPlayerCameraTargetPlayer](GetPlayerCameratargetPlayer): 获取玩家当前注视的玩家 ID
- [GetPlayerCameraTargetVehicle](GetPlayerCameraTargetVehicle): 获取玩家当前注视的车辆 ID
- [GetPlayerCameraTargetObject](GetPlayerCameraTargetObject): 获取玩家当前注视的物体 ID
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetPlayerCameraTargetPlayer.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetPlayerCameraTargetPlayer.md
index 800aa771c52..59107a38127 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetPlayerCameraTargetPlayer.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetPlayerCameraTargetPlayer.md
@@ -40,7 +40,7 @@ if (IsPlayerAdmin(playerTarget))
## 相关函数
-- [GetPlayerCameraTargetActor](GetPlayerCameraTargetActor): 获取玩家当前注视的角色 ID
+- [GetPlayerCameraTargetActor](GetPlayerCameraTargetActor): 获取玩家当前注视的演员 ID
- [GetPlayerCameraTargetVehicle](GetPlayerCameraTargetVehicle): 获取玩家当前注视的车辆 ID
- [GetPlayerCameraTargetObject](GetPlayerCameraTargetObject): 获取玩家当前注视的物体 ID
- [GetPlayerCameraFrontVector](GetPlayerCameraFrontVector): 获取玩家视角前向向量
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetPlayerClass.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetPlayerClass.md
index b9a7c9be768..fd6f1a5b0c9 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetPlayerClass.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetPlayerClass.md
@@ -15,7 +15,7 @@ tags: ["职业"]
| --------------- | ------------------------------------------- |
| classid | 要获取数据的职业 ID |
| &team | 存储队伍 ID 的变量(通过引用传递) |
-| &skin | 存储角色皮肤的变量(通过引用传递) |
+| &skin | 存储皮肤的变量(通过引用传递) |
| &Float:spawnX | 存储出生点 X 坐标的浮点变量(通过引用传递) |
| &Float:spawnY | 存储出生点 Y 坐标的浮点变量(通过引用传递) |
| &Float:spawnZ | 存储出生点 Z 坐标的浮点变量(通过引用传递) |
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetPlayerTargetActor.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetPlayerTargetActor.md
index eef69447084..3d2dc834e99 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetPlayerTargetActor.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetPlayerTargetActor.md
@@ -1,7 +1,7 @@
---
title: GetPlayerTargetActor
sidebar_label: GetPlayerTargetActor
-description: 获取指定玩家正在瞄准的角色ID
+description: 获取指定玩家正在瞄准的演员ID
tags: ["玩家"]
---
@@ -9,7 +9,7 @@ tags: ["玩家"]
## 描述
-获取指定玩家当前瞄准的角色(Actor)ID
+获取指定玩家当前瞄准的演员(Actor)ID
| 参数 | 说明 |
| -------- | --------------------- |
@@ -17,7 +17,7 @@ tags: ["玩家"]
## 返回值
-被瞄准的角色 ID,若无目标则返回 `INVALID_ACTOR_ID`
+被瞄准的演员 ID,若无目标则返回 `INVALID_ACTOR_ID`
## 示例代码
@@ -28,7 +28,7 @@ public OnPlayerUpdate(playerid)
targetActorId = GetPlayerTargetActor(playerid),
string[32];
- format(string, sizeof(string), "你正在瞄准角色ID %d", targetActorId);
+ format(string, sizeof(string), "你正在瞄准演员ID %d", targetActorId);
SendClientMessage(playerid, -1, string);
return 1;
}
@@ -38,15 +38,15 @@ public OnPlayerUpdate(playerid)
:::warning
-不适用于游戏手柄/控制器,且存在有效距离限制。狙击步枪(Sniper Rifle)无法锁定目标,因此不会返回任何角色。
+不适用于游戏手柄/控制器,且存在有效距离限制。狙击步枪(Sniper Rifle)无法锁定目标,因此不会返回任何演员。
:::
## 相关函数
-- [GetPlayerCameraTargetActor](GetPlayerCameraTargetActor): 获取玩家视角目标角色(若存在)
+- [GetPlayerCameraTargetActor](GetPlayerCameraTargetActor): 获取玩家视角目标演员(若存在)
- [GetPlayerCameraFrontVector](GetPlayerCameraFrontVector): 获取玩家视角前向向量
## 相关回调
-- [OnPlayerGiveDamageActor](../callbacks/OnPlayerGiveDamageActor): 当玩家对角色造成伤害时触发
+- [OnPlayerGiveDamageActor](../callbacks/OnPlayerGiveDamageActor): 当玩家对演员造成伤害时触发
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetPlayers.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetPlayers.md
index 91441309996..368b8dfc367 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetPlayers.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetPlayers.md
@@ -36,4 +36,4 @@ length = GetPlayers(players, sizeof(players));
## 相关函数
- [GetVehicles](GetVehicles): 获取已创建车辆的 ID 数组
-- [GetActors](GetActors): 获取已创建角色的 ID 数组
+- [GetActors](GetActors): 获取已创建演员的 ID 数组
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetVehicles.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetVehicles.md
index 59c3ecfad81..c883e81f1fc 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetVehicles.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/GetVehicles.md
@@ -32,4 +32,4 @@ GetVehicles(vehicles, sizeof(vehicles));
## 相关函数
- [GetPlayers](GetPlayers): 获取当前在线玩家的 ID 数组
-- [GetActors](GetActors): 获取服务器上已创建角色的 ID 数组
+- [GetActors](GetActors): 获取已创建演员的 ID 数组
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/IsActorInvulnerable.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/IsActorInvulnerable.md
index 15577987942..2fcc9e611aa 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/IsActorInvulnerable.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/IsActorInvulnerable.md
@@ -1,25 +1,25 @@
---
title: IsActorInvulnerable
sidebar_label: IsActorInvulnerable
-description: 检查角色是否处于无敌状态
-tags: ["角色"]
+description: 检查演员是否处于无敌状态
+tags: ["演员"]
---
## 描述
-检查指定角色是否处于无敌状态。
+检查指定演员是否处于无敌状态。
| 参数 | 说明 |
| ------- | ----------------- |
-| actorid | 需要检查的角色 ID |
+| actorid | 需要检查的演员 ID |
## 返回值
-**true** - 角色处于无敌状态
+**true** - 演员处于无敌状态
-**false** - 角色可受到伤害
+**false** - 演员可受到伤害
## 示例
@@ -28,15 +28,15 @@ new gMyActor;
public OnGameModeInit()
{
- gMyActor = CreateActor(179, 316.1, -134.0, 999.6, 90.0); // 在武器商店创建销售员角色
+ gMyActor = CreateActor(179, 316.1, -134.0, 999.6, 90.0); // 在武器商店创建销售员演员
if (IsActorInvulnerable(gMyActor))
{
- print("角色处于无敌状态。");
+ print("演员处于无敌状态。");
}
else
{
- print("角色可被伤害。");
+ print("演员可被伤害。");
}
return 1;
}
@@ -44,6 +44,6 @@ public OnGameModeInit()
## 相关函数
-- [CreateActor](CreateActor): 创建角色(静态 NPC)
-- [SetActorInvulnerable](SetActorInvulnerable): 设置角色无敌状态
-- [SetActorHealth](SetActorHealth): 设置角色生命值
+- [CreateActor](CreateActor): 创建演员(静态 NPC)
+- [SetActorInvulnerable](SetActorInvulnerable): 设置演员无敌状态
+- [SetActorHealth](SetActorHealth): 设置演员生命值
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/IsActorStreamedIn.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/IsActorStreamedIn.md
index 618699ada5e..64bbb359da9 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/IsActorStreamedIn.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/IsActorStreamedIn.md
@@ -1,25 +1,25 @@
---
title: IsActorStreamedIn
sidebar_label: IsActorStreamedIn
-description: 检查角色是否已为玩家流加载
-tags: ["角色"]
+description: 检查演员是否已为玩家流加载
+tags: ["演员"]
---
## 描述
-检查指定角色是否已为玩家完成流加载。
+检查指定演员是否已为玩家完成流加载。
| 参数 | 说明 |
| -------- | ----------------- |
-| actorid | 需要检查的角色 ID |
+| actorid | 需要检查的演员 ID |
| playerid | 玩家 ID |
## 返回值
-**1** - 角色已为玩家流加载
-**0** - 角色尚未加载或不存在
+**1** - 演员已为玩家流加载
+**0** - 演员尚未加载或不存在
## 示例
@@ -44,5 +44,5 @@ public OnPlayerSpawn(playerid)
## 相关函数
-- [CreateActor](CreateActor): 创建角色(静态 NPC)
+- [CreateActor](CreateActor): 创建演员(静态 NPC)
- [IsPlayerStreamedIn](IsPlayerStreamedIn): 检查玩家是否已为另一玩家流加载
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/IsPlayerControllable.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/IsPlayerControllable.md
index e9125933026..01f123b3c4c 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/IsPlayerControllable.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/IsPlayerControllable.md
@@ -9,7 +9,7 @@ tags: ["玩家"]
## 描述
-检测玩家角色是否处于可控制状态。
+检测玩家是否处于可控制状态。
| 参数 | 说明 |
| -------- | ------- |
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/IsPlayerStreamedIn.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/IsPlayerStreamedIn.md
index 0ecbbfd2f12..dddb35505cc 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/IsPlayerStreamedIn.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/IsPlayerStreamedIn.md
@@ -41,7 +41,7 @@ if (IsPlayerStreamedIn(playerid, 0))
## 相关函数
-- [IsActorStreamedIn](IsActorStreamedIn): 检测角色是否已为玩家流加载
+- [IsActorStreamedIn](IsActorStreamedIn): 检测演员是否已为玩家流加载
- [IsVehicleStreamedIn](IsVehicleStreamedIn): 检测车辆是否已为玩家流加载
## 相关回调
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/IsValidActor.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/IsValidActor.md
index 49403ce9f42..cf41217c706 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/IsValidActor.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/IsValidActor.md
@@ -1,38 +1,38 @@
---
title: IsValidActor
sidebar_label: IsValidActor
-description: 检测角色ID是否有效。
-tags: ["角色"]
+description: 检测演员ID是否有效。
+tags: ["演员"]
---
## 描述
-检测指定角色 ID 是否有效。
+检测指定演员 ID 是否有效。
| 参数名 | 说明 |
| ------- | --------------- |
-| actorid | 要检测的角色 ID |
+| actorid | 要检测的演员 ID |
## 返回值
-**true** - 角色有效
+**true** - 演员有效
-**false** - 角色无效
+**false** - 演员无效
## 示例代码
```c
-new gMyActor; // 声明角色存储变量
+new gMyActor; // 声明演员存储变量
public OnGameModeInit()
{
- gMyActor = CreateActor(179, 316.1, -134.0, 999.6, 90.0); // 在武器商店创建销售员角色
+ gMyActor = CreateActor(179, 316.1, -134.0, 999.6, 90.0); // 在武器商店创建销售员演员
if (IsValidActor(gMyActor))
{
- SetActorHealth(gMyActor, 100.0); // 设置角色生命值
+ SetActorHealth(gMyActor, 100.0); // 设置演员生命值
}
return 1;
}
@@ -40,6 +40,6 @@ public OnGameModeInit()
## 相关函数
-- [CreateActor](CreateActor): 创建新角色
-- [GetActorPoolSize](GetActorPoolSize): 获取服务器最大角色 ID
-- [SetActorHealth](SetActorHealth): 设置角色生命值
+- [CreateActor](CreateActor): 创建新演员
+- [GetActorPoolSize](GetActorPoolSize): 获取服务器最大演员 ID
+- [SetActorHealth](SetActorHealth): 设置演员生命值
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/NPC_EnterVehicle.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/NPC_EnterVehicle.md
index 8e1c67f9fbd..1187e30df22 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/NPC_EnterVehicle.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/NPC_EnterVehicle.md
@@ -29,8 +29,8 @@ public OnPlayerCommandText(playerid, cmdtext[])
{
if (!strcmp(cmdtext, "/npcenterbike ", true, 14))
{
- new seatid = strval(cmdtext[14]);
- if (cmdtext[14] == '\0')
+ new seatid = strval(cmdtext[15]);
+ if (cmdtext[15] == '\0')
return SendClientMessage(playerid, 0xFF0000FF, "用法:/npcenterbike [座位ID]");
new npcid = PlayerNPC[playerid];
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/NPC_GetEnteringVehicleID.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/NPC_GetEnteringVehicleID.md
index ef19a49689e..d933eacd648 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/NPC_GetEnteringVehicleID.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/NPC_GetEnteringVehicleID.md
@@ -69,7 +69,7 @@ public CheckNPCEnteringVehicle(playerid)
if (isEntering)
{
- new vehicleid = NPC_GetEnteringVehicle(npcid);
+ new vehicleid = NPC_GetEnteringVehicleID(npcid);
new seatid = NPC_GetEnteringVehicleSeat(npcid);
if (vehicleid != INVALID_VEHICLE_ID && vehicleid != 0)
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/NPC_IsPlaybackPaused.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/NPC_IsPlaybackPaused.md
index b2cbec21a26..93de0ed19a7 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/NPC_IsPlaybackPaused.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/NPC_IsPlaybackPaused.md
@@ -49,7 +49,7 @@ public OnPlayerCommandText(playerid, cmdtext[])
## 相关函数
-- [NPC_PausePlayback](NPC_PausePlayback): 暂停/取消暂停回放
+- [NPC_PausePlayback](NPC_PausePlayback): 暂停/恢复回放
- [NPC_IsPlayingPlayback](NPC_IsPlayingPlayback): 检查是否正在播放
- [NPC_StartPlayback](NPC_StartPlayback): 开始回放
- [NPC_StopPlayback](NPC_StopPlayback): 停止回放
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/NPC_IsPlayingPlayback.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/NPC_IsPlayingPlayback.md
index 65199c565b1..6205948dcb3 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/NPC_IsPlayingPlayback.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/NPC_IsPlayingPlayback.md
@@ -50,7 +50,7 @@ public OnPlayerCommandText(playerid, cmdtext[])
- [NPC_StartPlayback](NPC_StartPlayback): 开始回放录制
- [NPC_StopPlayback](NPC_StopPlayback): 停止回放
-- [NPC_PausePlayback](NPC_PausePlayback): 暂停/取消暂停回放
+- [NPC_PausePlayback](NPC_PausePlayback): 暂停/恢复回放
- [NPC_IsPlaybackPaused](NPC_IsPlaybackPaused): 检查是否暂停
## 相关回调
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/NPC_IsShooting.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/NPC_IsShooting.md
index 68e49f7ca00..978193cbbbb 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/NPC_IsShooting.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/NPC_IsShooting.md
@@ -51,7 +51,6 @@ public OnPlayerCommandText(playerid, cmdtext[])
- [NPC_Shoot](NPC_Shoot): 让 NPC 射击
- [NPC_AimAt](NPC_AimAt): 让 NPC 瞄准并射击
-- [NPC_StopShoot](NPC_StopShoot): 停止 NPC 射击
- [NPC_IsAiming](NPC_IsAiming): 检查是否正在瞄准
## 相关回调
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/NPC_Move.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/NPC_Move.md
index 296ec6a82db..e2bd41adc1e 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/NPC_Move.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/NPC_Move.md
@@ -11,15 +11,15 @@ tags: ["npc", "移动"]
让 NPC 移动到指定位置。
-| 参数 | 说明 |
-| ---------------------- | ----------------------------------------- |
-| npcid | NPC 的 ID。 |
-| Float:x | 要移动到的 X 坐标。 |
-| Float:y | 要移动到的 Y 坐标。 |
-| Float:z | 要移动到的 Z 坐标。 |
-| NPC_MOVE_TYPE:moveType | 移动类型(默认: `NPC_MOVE_TYPE_JOG`)。 |
-| Float:moveSpeed | 移动速度(默认: `NPC_MOVE_SPEED_AUTO`)。 |
-| Float:stopRange | 停止前到目标的距离(默认: 0.2)。 |
+| 参数 | 说明 |
+| ---------------------- | -------------------------------------------------------------------------------- |
+| npcid | NPC 的 ID。 |
+| Float:x | 要移动到的 X 坐标。 |
+| Float:y | 要移动到的 Y 坐标。 |
+| Float:z | 要移动到的 Z 坐标。 |
+| NPC_MOVE_TYPE:moveType | [移动类型](../resources/npc-constants#移动类型)(默认: `NPC_MOVE_TYPE_JOG`)。 |
+| Float:moveSpeed | [移动速度](../resources/npc-constants#移动速度)(默认: `NPC_MOVE_SPEED_AUTO`)。 |
+| Float:stopRange | 停止前到目标的距离(默认: 0.2)。 |
## 返回值
@@ -72,3 +72,7 @@ public OnPlayerCommandText(playerid, cmdtext[])
## 相关回调
- [OnNPCFinishMove](../callbacks/OnNPCFinishMove): NPC 完成移动时调用。
+
+## 相关资源
+
+- [NPC 常量](../resources/npc-constants)
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/NPC_StartPlayback.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/NPC_StartPlayback.md
index 39c10ff765c..8c895f1821a 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/NPC_StartPlayback.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/NPC_StartPlayback.md
@@ -74,7 +74,7 @@ public OnPlayerCommandText(playerid, cmdtext[])
- [NPC_StartPlaybackEx](NPC_StartPlaybackEx): 通过录制 ID 开始回放
- [NPC_StopPlayback](NPC_StopPlayback): 停止回放
-- [NPC_PausePlayback](NPC_PausePlayback): 暂停/取消暂停回放
+- [NPC_PausePlayback](NPC_PausePlayback): 暂停/恢复回放
- [NPC_LoadRecord](NPC_LoadRecord): 预加载录制文件
## 相关回调
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/PlayerTextDrawSetString.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/PlayerTextDrawSetString.md
index 32d768a4962..74ab4aa7305 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/PlayerTextDrawSetString.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/PlayerTextDrawSetString.md
@@ -33,7 +33,7 @@ public OnPlayerStateChange(playerid, PLAYER_STATE:newstate, PLAYER_STATE:oldstat
pVehicleHealthTD[playerid] = CreatePlayerTextDraw(playerid, 320.0, 240.0, " ");
PlayerTextDrawShow(playerid, pVehicleHealthTD[playerid]);
- // 设置每秒更新文本绘图的计时器
+ // 设置每秒更新文本绘图的定时器
pVehicleHealthTimer[playerid] = SetTimerEx("UpdateVehicleHealthTextDraw", 1000, true, "i", playerid);
}
if (oldstate == PLAYER_STATE_DRIVER) // 退出驾驶状态
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SendChat.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SendChat.md
index 68931b63a8c..c60e5da47d2 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SendChat.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SendChat.md
@@ -5,6 +5,12 @@ description: 允许NPC发送聊天消息,类似于SendPlayerMessageToAll,但
tags: []
---
+:::warning
+
+此函数已弃用,请使用 [SendPlayerMessageToAll](SendPlayerMessageToAll).
+
+:::
+
## 描述
此函数允许 NPC 发送聊天消息,类似于[SendPlayerMessageToAll](SendPlayerMessageToAll),但专用于 NPC 脚本内部使用。
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SendCommand.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SendCommand.md
index b3176c6b281..69b8e5346f6 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SendCommand.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SendCommand.md
@@ -5,6 +5,14 @@ description: 强制 NPC 执行指定控制台命令。
tags: []
---
+:::warning
+
+此函数已弃用。
+
+请参阅 `PC_EmulateCommand` 在 [Pawn.CMD](https://github.com/katursis/Pawn.CMD) 中的用法,或其他命令处理器所提供的类似方法
+
+:::
+
## 描述
此函数允许 NPC 模拟执行指定的控制台命令,并产生相应的游戏效果。
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SetActorFacingAngle.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SetActorFacingAngle.md
index 6ca357a17ba..3acbb285fb8 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SetActorFacingAngle.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SetActorFacingAngle.md
@@ -1,26 +1,26 @@
---
title: SetActorFacingAngle
sidebar_label: SetActorFacingAngle
-description: 设置角色的朝向角度。
-tags: ["角色"]
+description: 设置演员的朝向角度。
+tags: ["演员"]
---
## 描述
-设置角色的朝向角度。
+设置演员的朝向角度。
| 参数 | 说明 |
| ----------- | ------------------------------------------------ |
-| actorid | 要设置朝向角度的角色 ID,由 CreateActor 函数返回 |
+| actorid | 要设置朝向角度的演员 ID,由 CreateActor 函数返回 |
| Float:angle | 要设置的朝向角度值(单位:度) |
## 返回值
**true** - 函数执行成功
-**false** - 函数执行失败。指定的角色不存在
+**false** - 函数执行失败。指定的演员不存在
## 示例代码
@@ -41,17 +41,17 @@ SetActorFacingAngle(MyActor, 180.0);
:::tip
-使用[CreateActor](CreateActor)创建角色时,已经指定了其朝向角度。除非需要后续调整方向,否则无需使用此函数
+使用[CreateActor](CreateActor)创建演员时,已经指定了其朝向角度。除非需要后续调整方向,否则无需使用此函数
:::
:::warning
-玩家只有在角色被重新流加载时才能看到朝向角度的变化
+玩家只有在演员被重新流加载时才能看到朝向角度的变化
:::
## 相关函数
-- [GetActorFacingAngle](GetActorFacingAngle): 获取角色的朝向角度
-- [SetActorPos](SetActorPos): 设置角色的坐标位置
+- [GetActorFacingAngle](GetActorFacingAngle): 获取演员的朝向角度
+- [SetActorPos](SetActorPos): 设置演员的坐标位置
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SetActorHealth.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SetActorHealth.md
index a1562e9afb4..19772fee87f 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SetActorHealth.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SetActorHealth.md
@@ -1,26 +1,26 @@
---
title: SetActorHealth
sidebar_label: SetActorHealth
-description: 设置角色的生命值。
-tags: ["角色"]
+description: 设置演员的生命值。
+tags: ["演员"]
---
## 描述
-设置角色的生命值。
+设置演员的生命值。
| 参数 | 说明 |
| ------------ | ---------------------------- |
-| actorid | 要设置生命值的角色 ID |
+| actorid | 要设置生命值的演员 ID |
| Float:health | 要设置的生命值数值(浮点数) |
## 返回值
**true** - 成功
-**false** - 失败(指定的角色不存在)
+**false** - 失败(指定的演员不存在)
## 示例代码
@@ -29,7 +29,7 @@ new gMyActor;
public OnGameModeInit()
{
- gMyActor = CreateActor(179, 316.1, -134.0, 999.6, 90.0); // 在武器店扮演销售员的角色
+ gMyActor = CreateActor(179, 316.1, -134.0, 999.6, 90.0); // 在武器店扮演销售员的演员
SetActorHealth(gMyActor, 100.0);
return 1;
@@ -38,5 +38,5 @@ public OnGameModeInit()
## 相关函数
-- [GetActorHealth](GetActorHealth): 获取角色的生命值
-- [SetActorInvulnerable](SetActorInvulnerable): 设置角色无敌状态
+- [GetActorHealth](GetActorHealth): 获取演员的生命值
+- [SetActorInvulnerable](SetActorInvulnerable): 设置演员无敌状态
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SetActorInvulnerable.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SetActorInvulnerable.md
index 8d12de3f726..d8e56ea0920 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SetActorInvulnerable.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SetActorInvulnerable.md
@@ -1,26 +1,26 @@
---
title: SetActorInvulnerable
sidebar_label: SetActorInvulnerable
-description: 切换角色的无敌状态。
-tags: ["角色"]
+description: 切换演员的无敌状态。
+tags: ["演员"]
---
## 描述
-切换角色的无敌状态。
+切换演员的无敌状态。
| 参数 | 说明 |
| ----------------- | --------------------------------- |
-| actorid | 要设置无敌状态的角色 ID |
+| actorid | 要设置无敌状态的演员 ID |
| bool:invulnerable | 'false'设为可伤害,'true'设为无敌 |
## 返回值
**true** - 成功
-**false** - 失败(指定的角色不存在)
+**false** - 失败(指定的演员不存在)
## 示例代码
@@ -29,7 +29,7 @@ new gMyActor;
public OnGameModeInit()
{
- gMyActor = CreateActor(179, 316.1, -134.0, 999.6, 90.0); // 在武器店扮演销售员的角色
+ gMyActor = CreateActor(179, 316.1, -134.0, 999.6, 90.0); // 在武器店扮演销售员的演员
SetActorInvulnerable(gMyActor, true);
return 1;
}
@@ -39,10 +39,10 @@ public OnGameModeInit()
:::warning
-设置为无敌状态后,角色不会触发[OnPlayerGiveDamageActor](OnPlayerGiveDamageActor)回调。玩家只有在角色被重新流加载时才能看到无敌状态的变化。
+设置为无敌状态后,演员不会触发[OnPlayerGiveDamageActor](OnPlayerGiveDamageActor)回调。玩家只有在演员被重新流加载时才能看到无敌状态的变化。
:::
## 相关函数
-- [IsActorInvulnerable](IsActorInvulnerable): 检查角色是否无敌
+- [IsActorInvulnerable](IsActorInvulnerable): 检查演员是否无敌
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SetActorPos.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SetActorPos.md
index ec94beeb9be..607ff2c3de6 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SetActorPos.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SetActorPos.md
@@ -1,19 +1,19 @@
---
title: SetActorPos
sidebar_label: SetActorPos
-description: 设置角色的坐标位置。
-tags: ["角色"]
+description: 设置演员的坐标位置。
+tags: ["演员"]
---
## 描述
-设置角色的坐标位置。
+设置演员的坐标位置。
| 参数 | 说明 |
| ------- | ------------------------------------------------ |
-| actorid | 要设置坐标位置的角色 ID,由 CreateActor 函数返回 |
+| actorid | 要设置坐标位置的演员 ID,由 CreateActor 函数返回 |
| Float:x | X 坐标值 |
| Float:y | Y 坐标值 |
| Float:z | Z 坐标值 |
@@ -22,7 +22,7 @@ tags: ["角色"]
**true** - 函数执行成功
-**false** - 函数执行失败(指定的角色不存在)
+**false** - 函数执行失败(指定的演员不存在)
## 示例代码
@@ -43,11 +43,11 @@ SetActorPos(gMyActor, 2062.2332, -1908.1423, 13.5485);
:::tip
-使用[CreateActor](CreateActor)创建角色时,已经指定了其坐标位置。除非需要后续调整位置,否则无需使用此函数
+使用[CreateActor](CreateActor)创建演员时,已经指定了其坐标位置。除非需要后续调整位置,否则无需使用此函数
:::
## 相关函数
-- [GetActorPos](GetActorPos): 获取角色的坐标位置
-- [CreateActor](CreateActor): 创建角色(静态 NPC)
+- [GetActorPos](GetActorPos): 获取演员的坐标位置
+- [CreateActor](CreateActor): 创建演员(静态 NPC)
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SetActorSkin.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SetActorSkin.md
index ecccd5cd345..55fa9d3180b 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SetActorSkin.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SetActorSkin.md
@@ -1,26 +1,26 @@
---
title: SetActorSkin
sidebar_label: SetActorSkin
-description: 设置角色的皮肤。
-tags: ["角色"]
+description: 设置演员的皮肤。
+tags: ["演员"]
---
## 描述
-设置角色的皮肤。
+设置演员的皮肤。
| 参数 | 说明 |
| ------- | --------------- |
-| actorid | 要设置的角色 ID |
+| actorid | 要设置的演员 ID |
| skin | 要设置的皮肤 ID |
## 返回值
**true** - 成功
-**false** - 失败(指定的角色不存在或无效)
+**false** - 失败(指定的演员不存在或无效)
## 示例代码
@@ -30,12 +30,12 @@ new gMyActor;
public OnGameModeInit()
{
gMyActor = CreateActor(179, 1153.9640, -1772.3915, 16.5920, 0.0000);
- SetActorSkin(gMyActor, 270); // 将角色皮肤从179更改为270
+ SetActorSkin(gMyActor, 270); // 将演员皮肤从179更改为270
return 1;
}
```
## 相关函数
-- [CreateActor](CreateActor): 创建角色(静态 NPC)
-- [GetActorSkin](GetActorSkin): 获取角色的皮肤
+- [CreateActor](CreateActor): 创建演员(静态 NPC)
+- [GetActorSkin](GetActorSkin): 获取演员的皮肤
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SetActorVirtualWorld.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SetActorVirtualWorld.md
index ee949a2e063..8e9881ad4e0 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SetActorVirtualWorld.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/functions/SetActorVirtualWorld.md
@@ -1,26 +1,26 @@
---
title: SetActorVirtualWorld
sidebar_label: SetActorVirtualWorld
-description: 设置角色的虚拟世界。
-tags: ["角色"]
+description: 设置演员的虚拟世界。
+tags: ["演员"]
---
## 描述
-设置角色的虚拟世界。只有处于相同虚拟世界的玩家才能看到该角色。
+设置演员的虚拟世界。只有处于相同虚拟世界的玩家才能看到该演员。
| 参数 | 说明 |
| ------------ | -------------------------------------------------- |
-| actorid | 要设置虚拟世界的角色 ID(由 CreateActor 函数返回) |
-| virtualWorld | 角色所属的虚拟世界 ID |
+| actorid | 要设置虚拟世界的演员 ID(由 CreateActor 函数返回) |
+| virtualWorld | 演员所属的虚拟世界 ID |
## 返回值
**true** - 函数执行成功
-**false** - 函数执行失败(指定的角色不存在)
+**false** - 函数执行失败(指定的演员不存在)
## 示例代码
@@ -29,7 +29,7 @@ new gMyActor;
public OnGameModeInit()
{
- // 创建角色
+ // 创建演员
gMyActor = CreateActor(69, 0.0, 0.0, 3.0, 0.0);
// 设置虚拟世界
@@ -40,5 +40,5 @@ public OnGameModeInit()
## 相关函数
-- [GetActorVirtualWorld](GetActorVirtualWorld): 获取角色的虚拟世界
-- [CreateActor](CreateActor): 创建角色(静态 NPC)
+- [GetActorVirtualWorld](GetActorVirtualWorld): 获取演员的虚拟世界
+- [CreateActor](CreateActor): 创建演员(静态 NPC)
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/resources/bullethittypes.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/resources/bullethittypes.md
index 66906efa45d..7f5c4767da2 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/resources/bullethittypes.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/resources/bullethittypes.md
@@ -19,6 +19,6 @@ sidebar_label: 子弹命中类型
:::caution
-BULLET_HIT_TYPE_PLAYER 同样适用于 NPC。此回调会忽略角色(Actor)并检测为 BULLET_HIT_TYPE_NONE。
+BULLET_HIT_TYPE_PLAYER 同样适用于 NPC。此回调会忽略演员(Actor)并检测为 BULLET_HIT_TYPE_NONE。
:::
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/resources/gametextstyles.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/resources/gametextstyles.md
index 90c127f07e8..c7f56d8c1e7 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/resources/gametextstyles.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/resources/gametextstyles.md
@@ -56,15 +56,15 @@ description: 文本绘图与游戏文本的样式说明
## 基础文本样式
-| 样式 | 预览图 | 特性说明 |
-| ------ | ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
-| 样式 0 |  | 固定显示 9 秒(无视时间设置),会覆盖其他文本(通过 fixes.inc / GameText+ 修复) |
-| 样式 1 |  | 8 秒后淡出,若设置时间更长将循环显示(通过 fixes.inc / GameText+ 修复) |
-| 样式 2 |  | 无特殊说明 |
-| 样式 3 |  | 无特殊说明 |
-| 样式 4 |  | 无特殊说明 |
+| 样式 | 预览图 | 特性说明 |
+| ------ | ------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
+| 样式 0 |  | 固定显示 9 秒(无视时间设置),会覆盖其他文本(通过 fixes.inc / GameText+ 修复) |
+| 样式 1 |  | 8 秒后淡出,若设置时间更长将循环显示(通过 fixes.inc / GameText+ 修复) |
+| 样式 2 |  | 无特殊说明 |
+| 样式 3 |  | 无特殊说明 |
+| 样式 4 |  | 无特殊说明 |
| 样式 5 |  | 固定显示 3 秒(无视时间设置),频繁调用会被屏蔽(通过 fixes.inc / GameText+ 修复) |
-| 样式 6 |  | 无特殊说明 |
+| 样式 6 |  | 无特殊说明 |
---
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/resources/mapicons.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/resources/mapicons.md
index 2bf7e6f65e2..670f280d515 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/resources/mapicons.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/resources/mapicons.md
@@ -15,7 +15,7 @@ description: 可用的地图图标列表。
| 0 |  | 彩色方框/三角(动态) | 可使用任意颜色。用于单人任务目标,当标记与玩家不处于同一地面高度时显示为三角形 |
| 1 |  | 白色方框 | 尺寸为 ID 0 的两倍且无边框 |
| 2 |  | 玩家位置 | 默认显示在小地图上 |
-| 3 |  | 玩家(菜单地图) | 暂停菜单大地图中显示的角色位置 |
+| 3 |  | 玩家(菜单地图) | 暂停菜单大地图中显示的玩家位置 |
| 4 |  | 北方指示 | 始终在雷达上指向北方 |
| 5 |  | 航空站 | |
| 6 |  | 武器商店 | |
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/resources/networkstats.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/resources/networkstats.md
index 89093b0d4c8..e5cec421588 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/resources/networkstats.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/resources/networkstats.md
@@ -5,28 +5,28 @@ description: 连接服务器时按住F5键显示的网络状态信息。
tags: []
---
-| 数据 | **说明** |
-| ---------------------------------- | --------------------------------------------------------------------------- |
-| 下载速率 | 从服务器下载数据的速率 |
-| 上传速率 | 向服务器上传数据的速率 |
-| 车辆 | 已为客户端流加载的车辆数量 |
-| 车辆模型 | 已为客户端流加载的不同车辆模型种类数量 |
-| 已加载车辆模型 | (预)加载的车辆模型总数 |
-| 渲染物体数 | 当前渲染的物体数量 |
-| 已用角色槽 | 已占用的角色槽数量(NPC/玩家都会占用'角色'槽) |
-| 已用物体槽 | 已占用的物体槽数量 |
-| 步行状态同步速率 | 步行状态数据同步频率(单位:毫秒)。可在 server.cfg 中设置 |
-| 流内存使用量(同时显示总可用内存) | 当前使用的流内存容量及总可用容量 |
-| 发送缓存中的消息数 | 等待发送的网络消息数量 |
-| 已发送消息数 | 已发送的网络消息总数 |
-| 已发送字节量 | 已发送的数据总量(单位:字节) |
-| 已发送确认包 | 已发送的确认包数量(用于确认数据包接收) |
-| 发送缓存中的确认包数 | 等待发送的确认包数量 |
-| 等待确认的消息数 | 等待接收确认的消息数量 |
-| 重发消息数 | 因未收到确认而重新发送的消息数量。客户端在重新发送 109 次消息后尝试重新连接 |
-| 重发字节量 | 重新发送的数据总量(单位:字节) |
-| 丢包率 | 已发送但未被接收端收到的数据包百分比 |
-| 已接收消息数 | 从服务器接收的网络消息总数 |
-| 已接收字节量 | 已接收的数据总量(单位:字节) |
-| 已接收确认包 | 已接收的确认包数量 |
-| 重复确认包接收数 | 已接收的重复确认包数量(已确认过的确认包) |
+| 数据 | **说明** |
+| -------------------------------------------------------- | --------------------------------------------------------------------------- |
+| Download Rate | 从服务器下载数据的速率 |
+| Upload Rate | 向服务器上传数据的速率 |
+| Vehicles | 已为客户端流加载的车辆数量 |
+| Vehicle Models | 已为客户端流加载的不同车辆模型种类数量 |
+| Vehicle Models Loaded | (预)加载的车辆模型总数 |
+| RWObjects | 当前渲染的物体数量 |
+| PedSlotsUsed | 已占用的角色槽数量(NPC/玩家都会占用'角色'槽) |
+| ObjectSlotsUsed | 已占用的物体槽数量 |
+| OnFoot Send Rate | 步行状态数据同步频率(单位:毫秒)。可在 server.cfg 中设置 |
+| Streaming Mem (Memory) Used (Also shows total allowance) | 当前使用的流内存容量及总可用容量 |
+| Messages in Send buffer | 等待发送的网络消息数量 |
+| Messages sent | 已发送的网络消息总数 |
+| Btyes sent | 已发送的数据总量(单位:字节) |
+| Acks sent | 已发送的确认包数量(用于确认数据包接收) |
+| Acks in send buffer | 等待发送的确认包数量 |
+| Messages waiting for ack | 等待接收确认的消息数量 |
+| Messages resent | 因未收到确认而重新发送的消息数量。客户端在重新发送 109 次消息后尝试重新连接 |
+| Bytes resent | 重新发送的数据总量(单位:字节) |
+| Packetloss | 已发送但未被接收端收到的数据包百分比 |
+| Messages received | 从服务器接收的网络消息总数 |
+| Bytes received | 已接收的数据总量(单位:字节) |
+| Acks received | 已接收的确认包数量 |
+| Duplicate acks received | 已接收的重复确认包数量(已确认过的确认包) |
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/resources/shopnames.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/resources/shopnames.md
index 7b986f588c4..36640efb4bc 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/resources/shopnames.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/resources/shopnames.md
@@ -10,7 +10,7 @@ sidebar_label: 商店名称
:::
| 商店名称 | GXT 名称 | 说明 | 坐标 |
-| -------- | ------------- | ------------------- | --------------------------- |
+| -------- | ------------- | --------------------- | --------------------------- |
| FDPIZA | Pizza Stack | 标准披萨栈室内场景 | 374.0, -119.641, 1000.539 |
| FDCHICK | Cluckin' Bell | 标准炸鸡钟室内场景 | 368.789, -6.857, 1000.839 |
| FDBURG | Burger Shot | 标准汉堡店室内场景 | 375.566, -68.222, 1000.549 |
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/resources/skins.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/resources/skins.md
index 12fe62df23c..abcb143c747 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/resources/skins.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/resources/skins.md
@@ -1,7 +1,7 @@
---
title: 皮肤
sidebar_label: 皮肤
-description: 本页面包含《圣安地列斯多人联机》中所有可用皮肤。
+description: 本页面包含 SA-MP 中所有可用皮肤。
---
## 皮肤列表
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/resources/startingids.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/resources/startingids.md
index 0c58a28900c..31f70da618f 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/resources/startingids.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/scripting/resources/startingids.md
@@ -10,7 +10,7 @@ description: 各类实体(如物体、玩家或车辆)的ID起始编号规
| 实体类型 | 起始 ID |
| --------------------- | ------- |
| 3D 文本标签 | 0 |
-| 角色 | 0 |
+| 演员 | 0 |
| 文件句柄 | 0 |
| 帮派区域 | 0 |
| 物体 | 1 |
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/server/Installation.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/server/Installation.md
index 0352015d13d..82e00217237 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/server/Installation.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/server/Installation.md
@@ -70,10 +70,10 @@ description: 将游戏模式从 SA:MP 服务器迁移至 open.mp 服务器的指
:::
-| 插件 | OMP 兼容版本 |
-| ----------------- | ----------------------------------------------------------------- |
-| rustext | https://github.com/ziggi/rustext/releases/tag/v2.0.11 (nomemhack) |
-| keylistener | https://github.com/edgyaf/keylistener/releases/tag/1.1.2-pr |
+| 插件 | OMP 兼容版本 |
+| ----------- | ----------------------------------------------------------------- |
+| rustext | https://github.com/ziggi/rustext/releases/tag/v2.0.11 (nomemhack) |
+| keylistener | https://github.com/edgyaf/keylistener/releases/tag/1.1.2-pr |
:::warning
@@ -90,7 +90,7 @@ description: 将游戏模式从 SA:MP 服务器迁移至 open.mp 服务器的指
| sscanf | https://github.com/Y-Less/sscanf/releases/tag/v2.13.8 |
| SKY | 改用 Pawn.RakNet |
| YSF | 无需使用,open.mp 已原生支持大部分功能 |
-| FCNPC | 传统的 FCNPC 插件已被官方的 open.mp NPC 组件 取代 |
+| FCNPC | 传统的 FCNPC 插件已被官方的 open.mp NPC 组件取代 |
## 步骤 6
diff --git a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/server/config.json.md b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/server/config.json.md
index b38be043222..30c82c58281 100644
--- a/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/server/config.json.md
+++ b/frontend/i18n/zh-CN/docusaurus-plugin-content-docs/current/server/config.json.md
@@ -223,11 +223,11 @@ omp-server --default-config
## Pawn
-| 键 | 类型 | 默认值 | 只读 | 规则 | 效果 |
-| ------------------- | ------------ | ---------- | ---- | ---- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| pawn.legacy_plugins | list, string | [] | ✅ | ❌ | /plugins 文件夹中的 .dll 或 .so 文件,服务器应将其作为插件运行。插件是旨在增强游戏模式和过滤器脚本的脚本。
示例:`["mysql", "streamer"]` |
-| pawn.main_scripts | list, string | ["test 1"] | ✅ | ❌ | /gamemodes 文件夹中的 .amx 文件,服务器应将其作为游戏模式运行。 |
-| pawn.side_scripts | list, string | [] | ✅ | ❌ | /filterscripts 文件夹中的 .amx 文件,服务器应将其作为过滤器脚本运行。过滤器脚本是在游戏模式后台运行的脚本。它们用于向服务器添加额外功能而无需编辑游戏模式。如果你想将特定属性应用于多个游戏模式,这将非常有用。
示例:`["filterscripts/Race_System"]` |
+| 键 | 类型 | 默认值 | 只读 | 规则 | 效果 |
+| ------------------- | ------------ | ---------- | ---- | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| pawn.legacy_plugins | list, string | [] | ✅ | ❌ | /plugins 文件夹中的 .dll 或 .so 文件,服务器应将其作为插件运行。插件是旨在增强游戏模式和滤镜脚本的脚本。
示例:`["mysql", "streamer"]` |
+| pawn.main_scripts | list, string | ["test 1"] | ✅ | ❌ | /gamemodes 文件夹中的 .amx 文件,服务器应将其作为游戏模式运行。 |
+| pawn.side_scripts | list, string | [] | ✅ | ❌ | /filterscripts 文件夹中的 .amx 文件,服务器应将其作为滤镜脚本运行。滤镜脚本是在游戏模式后台运行的脚本。它们用于向服务器添加额外功能而无需编辑游戏模式。如果你想将特定属性应用于多个游戏模式,这将非常有用。
示例:`["filterscripts/Race_System"]` |
## RCON