跳转到内容

Rust 插件入门:Oxide 和 Carbon 基础

简短回答: 在服务器上安装 Oxide 或 Carbon,然后把插件的 .cs 文件放进 oxide/plugins/ 或 carbon/plugins/。它会自己加载,不用重启,它的设置文件在第一次加载时会出现在配置文件夹里。

Rust 插件就是一个 C# 文件(.cs),由模组框架编译并运行在你的专用服务器里。插件只在服务器上运行,所以玩家不用安装任何东西。原版服务器不能运行它们:服务器上要先有 Oxide 或 Carbon。

两者加载的插件类型相同,而且一个服务器上同时只能有一个,因为两者修改的是同样的游戏文件。

  • Oxide(也叫 uMod)是历史悠久的那个。它的文件在服务器的 oxide/ 文件夹里。
  • Carbon 比较新,也能加载为 Oxide 写的插件。它的文件在 carbon/ 文件夹里。

你在 Crucible Local Server 上创建服务器时,它会替你安装其中任何一个,并在模组标签页里管理它的插件;见怎么在 Rust 服务器上安装 Carbon 或 Oxide。

内容OxideCarbon
插件(.cs)oxide/plugins/carbon/plugins/
每个插件的设置(.json)oxide/config/carbon/configs/
插件保存的数据oxide/data/carbon/data/
插件的消息,按语言oxide/lang/carbon/lang/
日志oxide/logs/carbon/logs/

这些文件夹在 RustDedicated.exe 旁边,在装了框架的服务器第一次启动时出现。插件在第一次加载时会写出它的配置文件;编辑它,然后重新加载插件。

把一个 .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 控制台指令的末尾。

把它保存为插件文件夹里的 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 文档里。

插件按游戏里的名字来指代游戏里的东西,这个站点直接从游戏里列出了它们:

  • 物品按 shortname(rifle.ak、wood):Rust 物品列表。
  • 实体按预制件路径(assets/prefabs/deployable/large wood storage/box.wooden.large.prefab):Rust 游戏参考下的预制件页面。
  • 服务器设置按 convar 名字(server.maxplayers):Rust 服务器变量。

先在你服务器的本地副本上运行它,用同样的框架和同样的地图,这样出问题的插件就不会影响到你的玩家。Crucible Local Server 在你自己的电脑上运行一个,点一下就装好了 Oxide 或 Carbon。