在本指南中,我将向你展示如何在 SourceMod 中管理用户权限。
SourceMod 是一个 MetaMod 插件,支持大多数运行在 Source 引擎上的游戏。它是一个功能强大且高度优化的平台,用于创建插件和管理服务器管理事务。SourceMod 被广泛应用于诸如 Team Fortress 2、Left 4 Dead 2 和 Counter-Strike: Source 这样的游戏中!
在运行安装了 SourceMod 的游戏服务器时,你很可能在某个时刻会想要授予自己或他人一些权限,比如踢出和封禁玩家的能力(管理员权限)。
查找 Steam ID
在给用户分配权限之前,你需要先找到他们的 Steam ID。SourceMod 支持 SteamID2(STEAM_X:X:XXXXXXXX)和 SteamID3([U:X:XXXXXX])两种格式。
如果你已连接到一台运行在 Source 引擎上的服务器,你可以在开发者控制台中执行 status 命令,以获取当前连接到服务器的玩家的 Steam ID。
否则,你可以使用诸如 Steam ID Finder 和 Steam ID I/O 这样的工具来查找 Steam ID。
标志(Flags)
要确定你想为用户分配哪些具体权限,你需要理解 SourceMod 的标志(flags)系统以及它们所提供的访问权限。每个标志都用一个单一字符来表示。
以下是 SourceMod 中可用的标志列表。
| 名称 | Flag | 用途 |
|---|---|---|
| reservation | a |
授予保留位访问权限。 |
| generic | b |
授予通用管理员权限(管理员必需)。 |
| kick | c |
授予踢出其他玩家的权限。 |
| ban | d |
授予封禁其他玩家的权限。 |
| unban | e |
授予解除封禁的权限。 |
| slay | f |
授予击杀和伤害其他玩家的权限。 |
| changemap | g |
授予更改地图或重大游戏玩法功能的权限。 |
| cvar | h |
授予更改大多数 ConVars 的权限。 |
| config | i |
授予执行配置文件的权限。 |
| chat | j |
授予特殊聊天权限。 |
| vote | k |
授予发起或创建投票的权限。 |
| password | l |
授予在服务器上设置密码的权限。 |
| rcon | m |
授予使用 RCON 命令的权限。 |
| cheats | n |
授予更改 sv_cheats ConVar 或使用作弊命令的权限。 |
| root | z |
启用所有 flags 并忽略免疫值。 |
此外,还有一些自定义标志,可供插件等使用。
| 名称 | Flag |
|---|---|
| custom1 | o |
| custom2 | p |
| custom3 | q |
| custom4 | r |
| custom5 | s |
| custom6 | t |
关于标志的更多信息,可以在这里找到。
密码
如果你愿意,可以要求特定用户在使用被分配给他们的自定义权限之前输入密码。他们每次连接到游戏服务器时都需要输入这个密码,但如果他们愿意,可以在自己那端将这一过程自动化。
首先,你需要修改 addons/sourcemod/configs/core.cfg 文件,将 PassInfoVar 这一行的值从 _password 改为一些自定义的值,比如 _test。用户需要知道他们自己的密码,以及你为 PassInfoVar 设置的值。
当用户连接到游戏服务器时,他们需要在开发者控制台中执行以下命令。
setinfo "<PassInfoVar Password>" "<User Password>"
例如:
setinfo "_test" "myCustomPass123"
如果用户想在自己那端将此过程自动化,他们需要修改 <Game Dir>/cfg/autoexec.cfg 文件,并将上面的命令添加到该文件中。
免疫(Immunity)
immunity 标志会根据客户端的免疫等级,防止管理员之间互相针对对方。
例如,如果第一个管理员的免疫等级为 20,而第二个管理员的免疫等级只有 10。那么第一个管理员可以针对第二个管理员,但第二个管理员不能针对第一个管理员。
注意 - 拥有 z 标志(root)的管理员可以针对任何玩家或管理员,不受免疫等级的限制。
管理用户权限
管理用户权限和分配标志是通过修改 addons/sourcemod/configs 目录(在 Windows 上为 addons\sourcemod\configs 文件夹)中的文件来完成的。
有两个文件可供你编辑,下面将分别说明。
使用 admins_simple.ini 文件
此文件用于快速分配用户权限。这最适合简单的配置,或想要快速给用户分配权限的情况。在此文件中分配权限时,每一行应遵循以下格式。
"<Steam ID/!IP/Steam name>" "[Immunity Level:]<Flags/@group>" ["password"]
以下是一个示例,向某用户授予 reservation、generic、kick 和 ban 标志,并设置 70 的免疫等级。
"STEAM_0:0:36969327" "70:abcd"
使用 admins.cfg 文件
使用此文件在为用户分配权限时需要输入更多行,但可能被认为更为清晰。该文件的格式使用了 SourceMod 的 KeyValues。用户应添加在 Admins 部分内。
以下是添加用户的通用格式。
"<Name>"
{
"auth" "steam"
"identity" "<Steam ID>"
"flags" "<Flags>"
"immunity" "<Immunity>"
}
以下是可以为每个用户分配的键(keys)列表。
auth- 必须是steam、name或ip之一(除非存在自定义的认证方式),用于指示 SourceMod 如何解释 identity 值。identity- 一个唯一值,配合认证方式使 SourceMod 能够找到对应的用户。password- 指定用户必须输入的密码。group- 指定该用户应继承的组名(如果存在)。可以指定多行 group。此处不应带有@符号,因为不存在歧义。flags- 该用户应获得的访问标志。immunity- 该用户应获得的免疫等级。
重新加载用户
通过上述文件为用户分配权限后,你需要重新加载管理员缓存,以使权限生效。
当地图切换或服务器重启时,缓存应会自动重新加载。你也可以使用服务器命令 sm_reloadadmins 手动重新加载缓存,这样就不必等到地图切换或服务器重启了。
另请参阅
- Adding Admins - AlliedMods 官方关于添加管理员的详细 Wiki。
- SourceBans++ - 一款广受欢迎的插件,能让管理用户、群组、封禁等操作变得更加轻松!
如果你对本指南有任何问题或反馈,请在其论坛主题这里回复!本指南会随着时间的推移不断完善和改进。
加入我们的Discord 服务器!

