Rust 插件入门:Oxide 和 Carbon 基础
简短回答: 在服务器上安装 Oxide 或 Carbon,然后把插件的 .cs 文件放进 oxide/plugins/ 或 carbon/plugins/。它会自己加载,不用重启,它的设置文件在第一次加载时会出现在配置文件夹里。
Rust 插件就是一个 C# 文件(.cs),由模组框架编译并运行在你的专用服务器里。插件只在服务器上运行,所以玩家不用安装任何东西。原版服务器不能运行它们:服务器上要先有 Oxide 或 Carbon。
Oxide 还是 Carbon
Section titled “Oxide 还是 Carbon”两者加载的插件类型相同,而且一个服务器上同时只能有一个,因为两者修改的是同样的游戏文件。
- Oxide(也叫 uMod)是历史悠久的那个。它的文件在服务器的
oxide/文件夹里。 - Carbon 比较新,也能加载为 Oxide 写的插件。它的文件在
carbon/文件夹里。
你在 Crucible Local Server 上创建服务器时,它会替你安装其中任何一个,并在模组标签页里管理它的插件;见怎么在 Rust 服务器上安装 Carbon 或 Oxide。
插件文件放哪
Section titled “插件文件放哪”| 内容 | Oxide | Carbon |
|---|---|---|
插件(.cs) | oxide/plugins/ | carbon/plugins/ |
每个插件的设置(.json) | oxide/config/ | carbon/configs/ |
| 插件保存的数据 | oxide/data/ | carbon/data/ |
| 插件的消息,按语言 | oxide/lang/ | carbon/lang/ |
| 日志 | oxide/logs/ | carbon/logs/ |
这些文件夹在 RustDedicated.exe 旁边,在装了框架的服务器第一次启动时出现。插件在第一次加载时会写出它的配置文件;编辑它,然后重新加载插件。
加载、重新加载和卸载
Section titled “加载、重新加载和卸载”把一个 .cs 文件放进插件文件夹,框架会自己编译并加载它,不用重启。改了文件它就会重新加载;删掉文件它就会卸载。服务器控制台随后会显示类似 Loaded plugin Hello World v1.0.0 by YourName 的一行,如果代码有错,则显示编译错误。
你也可以在服务器控制台或 RCON 里手动操作:
- Oxide:
oxide.load Name、oxide.reload Name、oxide.unload Name、oxide.plugins(每个也可以写成o.load、o.reload等等)。 - Carbon:
c.load Name、c.reload Name、c.unload Name、c.plugins。
Name 是不带 .cs 的文件名。运行 Oxide 的服务器会把自己标记为已修改。
大多数插件会把它们的指令放在权限后面,权限以插件命名(hello.use、kits.admin)。Oxide 一开始有两个组:每个玩家都在的 default,以及给服务器管理员的 admin。
oxide.grant user <名字或 SteamID> <permission>给一位玩家一个权限。oxide.grant group default <permission>把它给所有人。oxide.revoke把它收回,格式相同。oxide.usergroup add <名字或 SteamID> <group>把一位玩家放进一个组,oxide.group add <group>新建一个组。
每一条 Oxide 指令和它的作用,都在 Rust 控制台指令的末尾。
你的第一个插件
Section titled “你的第一个插件”把它保存为插件文件夹里的 HelloWorld.cs。它加载时往控制台写一行,每个加入的玩家写一行,并在聊天里回应 /hello。
namespace Oxide.Plugins{ [Info("Hello World", "YourName", "1.0.0")] [Description("Says hello when a player types /hello in chat.")] public class HelloWorld : RustPlugin { private void OnServerInitialized() { Puts("Hello World is running."); }
private void OnPlayerConnected(BasePlayer player) { Puts($"{player.displayName} joined."); }
[ChatCommand("hello")] private void HelloCommand(BasePlayer player, string command, string[] args) { SendReply(player, $"Hello, {player.displayName}!"); } }}每一部分的作用:
- 文件名和类名必须一致(
HelloWorld.cs,class HelloWorld)。 [Info]给出插件的标题、作者和版本,加载时控制台会显示它们。- 以 hook 命名的方法,会在游戏里发生那件事时运行:
OnServerInitialized在服务器启动完成后运行(如果已经在运行就是立刻),OnPlayerConnected在玩家加入时运行。框架按名字找到它们,所以拼错了就意味着那个方法永远不会运行,而且没有错误提示。 [ChatCommand("hello")]把一个方法变成聊天指令。Puts往服务器控制台写;SendReply给一位玩家发一条聊天消息。
同一个文件在 Carbon 上也能运行。完整的 hook 列表和每个 hook 收到什么,在 docs.oxidemod.com 的 Oxide 文档里。
插件用到的名字和 ID
Section titled “插件用到的名字和 ID”插件按游戏里的名字来指代游戏里的东西,这个站点直接从游戏里列出了它们:
- 物品按 shortname(
rifle.ak、wood):Rust 物品列表。 - 实体按预制件路径(
assets/prefabs/deployable/large wood storage/box.wooden.large.prefab):Rust 游戏参考下的预制件页面。 - 服务器设置按 convar 名字(
server.maxplayers):Rust 服务器变量。
上线之前先测试插件
Section titled “上线之前先测试插件”先在你服务器的本地副本上运行它,用同样的框架和同样的地图,这样出问题的插件就不会影响到你的玩家。Crucible Local Server 在你自己的电脑上运行一个,点一下就装好了 Oxide 或 Carbon。
