Overriding Command Access (SourceMod)/zh

From AlliedModders Wiki
Jump to: navigation, search
Language: English  • русский • 中文

这个文章介绍了如何在不改变插件源代码的情况下,去改变标志或者任何控制语句的权限。权限既可以是全局的,也可以是给特定的组员的。

介绍

重写权限是SourceMod管理系统中最为有力的特性之一。这能让你高效地:

  • 在不更改插件源码的前提下更改管理命令的权限
  • 不更改源码的情况下更改整个用户组的命令权限
  • 创建自定义权限级别
  • 无视命令的标志,允许或拒绝任何玩家或组的访问权限

当你更改了一个SourceMod成员的权限,你就完成了"重写"这一动作。重写是一条字符串。如果这个字符串与命令名匹配,那么这个命令的权限将会从这条重写中继承(而不是代码中)。

这个概念重要在于:

  • 重写能改变一条命令的权限。
  • 重写能被当作自定义的访问权限标志。

例如,一个插件需要等级“g”才能使用sm_map命令。然而,重写可以对特定的组直接同意或者拒绝这条命令的使用,也可以把默认需要的等级改为“k”。

更有意思的事,一个插件可以要求使用特殊的菜单选项必须有权限访问sm_map指令。在这种情况下,用户必须有sm_map的权限,而不是一个硬编码的标志。

最后一个例子,一个插件可能要求用户必须有权限访问plugin_crab_usage,然而这完全不是一个命令。这意味着插件要求的只是默认权限,用户爱怎么重写怎么重写。这也暗示着重写是和命令无关的。但是,命令本身会从同名的重写中继承权限要求。

更改重写文件不会立刻生效,你可以使用"sm_reloadadmins"指令来刷新。

重写方法

重写有两种方法:重写指令和重写组。重写命令基于命令会自动继承同名的重写提供的权限要求。重写组则导致一个用户组有这个命令的权限。

例如,如果一个重写为sm_map<tt>,任何<tt>sm_map<tt>的指令都会继承重写中的权限要求。 如果一个重写组为<tt>CSDM,任何标记权限组为"CSDM"的成员都会获得该权限。

全局设置

全局权限重写配置文件为configs/admin_overrides.cfg。格式如下:

Overrides
{
	"[名字]"	"[标志]"
	"@[用户组]"	"[标志]"
	/* ... */
}

用户组会以“@”开头,例如:

Overrides
{
	"sm_map"	"k"	//Change "sm_map" to the "k" flag.
	"@CSDM"		"m"	//Change all CSDM commands to the "m" flag.
	"sm_chat"	""	//Allow anyone to use "sm_chat"空则代表不需要权限
}

注意,如果你给一堆权限要求,那么客户端就必须有所有需要的权限了,而不是任意一个。(例如"abc"需要你有三个权限,而不是任意一个)

组配置

Group overrides are given on an allow or deny basis. That is, rather than changing flags per-group, the override is simply whether it is allowed or denied to members of that group.

更多内容请参考增加用户组.