|
|
| + | {{急需改进|页面结构错乱}} |
| + | ===权限检查系统(Verbose)=== |
| + | 你曾经经历过想要找到某条命令或某种特性的使用权限,但找不到作者提供的帮助文档这种情况吗? |
| | | |
| + | 可能作者提供的帮助文档过期了,或是内含的信息不正确。可能你想要修复玩家没有正确权限的问题,或是仅仅是对插件所检查的权限感兴趣…… |
| + | |
| + | 权限检查系统能够让你监视一段时间内的权限检查操作!😄 |
| + | |
| + | ==== 如何使用本系统 ==== |
| + | |
| + | 指令的使用方法如下: |
| + | |
| + | <code>/lp verbose <on|record|off|paste> [filter]</code> |
| + | |
| + | 第一个参数会启用/禁用本系统,第二个参数设置权限筛选器。 |
| + | |
| + | {| |
| + | ! 选项 |
| + | ! 描述 |
| + | |- |
| + | | <code>on</code> |
| + | | 启用本系统,并且在设置的筛选权限被检查时会发消息提示您。 |
| + | |- |
| + | | <code>record</code> |
| + | | 与“on”的作用相同,但是您的聊天框不会收到提醒。 |
| + | |- |
| + | | <code>off</code> |
| + | | 会禁用本系统,清除内存中所有的存储记忆。 |
| + | |- |
| + | | <code>paste</code> |
| + | | 与“off”的作用相同,但是会将最先的500个结果上传到一个网页上,然后提供给你一个链接。 |
| + | |} |
| + | |
| + | ==== 筛选器 ==== |
| + | |
| + | 筛选器是用来匹配权限节点的工具,它会过滤掉你不需要的权限。它可以筛选玩家名,或更高级的东西。 |
| + | |
| + | 筛选器输入的字符能够匹配所有带有该字符的权限的开头,或是玩家的全名。 |
| + | |
| + | 你可以使用 <code>&</code> (表示 和), <code>|</code> (表示 或), 和 <code>!</code> (表示 非)来设置筛选文本,输入时也支持使用小括号 <code>( )</code> 。 |
| + | |
| + | ===== 一些使用示例 ===== |
| + | |
| + | * <code>Luck & (essentials | worldedit)</code> —— 会匹配玩家“Luck”的所有以“essentials”或“worldedit”开头的权限检查 |
| + | * <code>Luck & !anticheat</code> —— 会匹配玩家“Luck”所有不以“anticheat”为开头的权限检查 |
| + | * <code>anticheat & !anticheat.check</code> —— 会匹配所有玩家以“anticheat”开头,但不是 "anticheat.check" 权限的权限检查 |
| + | |
| + | ==== 示例 ==== |
| + | |
| + | 我使用了指令 <code>/lp verbose record Luck & minecraft</code>,这打开了权限检查系统,然后会检查 "Luck" 玩家所有以 "minecraft" 开头的权限。 |
| + | |
| + | 然后我使用了 <code>/help</code> 命令(来让服务器对我进行权限检查),然后我输入了 <code>/lp verbose paste</code>。 |
| + | |
| + | 然后插件就会将检查的结果上传,然后返回了这个链接。[https://git.io/vDUba <code>https://git.io/vDUba</code>] |
| + | |
| + | 如果你点开这个链接看看的话,你会看到检查的结果的。 😄 |
| + | |
| + | 在Metadata数据信息下面,你会看到一些有关于检查的数据。 |
| + | |
| + | 你可以注意到 <code>Count: 58 / 72</code>,这就是说在这段检查期间,共检查了72条权限,其中58条符合你设定的筛选器。 |
| + | |
| + | 那些满足筛选器的检查结果已经列出来了。 |
| + | |
| + | === 大量编辑 === |
| + | LuckPerms 提供了一个命令来帮助执行大量的权限编辑,这个命令应该小心使用,因为很容易破坏你的所有信息。 |
| + | |
| + | 在执行这个命令之前做一个备份可能是个明智的选择,或者是给你的数据库做个备份,或者使用 export 命令。 |
| + | |
| + | 命令的设计基于 SQL 格式,这意味着命令可以直接转换为一条 SQL 查询语句,或者在 YAML 或者 JSON 文本编辑。那些对 SQL 语句有经验的人可能会发现在数据库服务器直接写入查询比使用命令更简单。 |
| + | |
| + | 这些命令'''只能在控制台使用'''。这是因为这些命令可能会对你的服务器造成极大的伤害。在执行之前,你会被要求输入一个确认码,用于防止 "sudo" 来通过这些命令获得权限。 |
| + | |
| + | 命令用法如下... |
| + | |
| + | <code>/lp bulkupdate <data type> <action> [action field] [action value] [constraint...]</code> |
| + | |
| + | 一开始有点令人害怕,我知道,拆开来看... |
| + | |
| + | {| |
| + | ! 参数 |
| + | ! 描述 |
| + | |- |
| + | | <code>data type</code> |
| + | | 更改的数据 (可以是 "all", "users" 或者 "groups") |
| + | |- |
| + | | <code>action</code> |
| + | | 对数据执行的操作 (可以是 "update" 或者 "delete") |
| + | |- |
| + | | <code>action field</code> |
| + | | 只可用于 update 操作 (可以是 "permission", "server" 或 "world") |
| + | |- |
| + | | <code>action value</code> |
| + | | 替换的值,只可用于 update 操作 |
| + | |- |
| + | | <code>constraint</code> |
| + | | update 的约束 |
| + | |} |
| + | |
| + | <code>data type</code> 是最简单的,只是简单的告诉了 LuckPerms 这个操作应该影响什么数据。 |
| + | |
| + | <code>action</code> 是对数据执行的操作。可以是 "update" 或 "delete"。delete 就是简单的删除满足约束的所有的记录。Update 将会将原来的值替换为新的值。 |
| + | |
| + | <code>action field</code> 和 <code>action value</code> 参数是可选的,因为只对 update 有效。field 是用来更新的东西,而 value 是用来替换的东西。 |
| + | |
| + | <code>constraints</code> 参数与 update 的限制有关,只有权限(或者条目)匹配约束才会被影响。 |
| + | |
| + | ==== 约束 ==== |
| + | |
| + | 约束分为 3 部分,<code>field</code>, <code>comparison</code> 和 <code>value</code>。 |
| + | |
| + | 可用的 <code>fields</code> 是 <code>permission</code>, <code>server</code> 和 <code>world</code>。权限就只是存储在文件中的权限节点(记住甚至组的关系和前缀都是存储在前缀的)。server 和 world 与 permission 应用的世界和服务器有关。如果权限没有他们的值,那么就是全局。 |
| + | |
| + | <code>value</code> 部分的约束是需要的 field,用于比较。 |
| + | |
| + | 有四种比较的方式。 |
| + | |
| + | {| |
| + | ! 比较符号 |
| + | ! 比较的名称 |
| + | ! 描述 |
| + | |- |
| + | | <code>==</code> |
| + | | 等于 |
| + | | 两个值相同(忽略大小写) |
| + | |- |
| + | | <code>!=</code> |
| + | | 不等于 |
| + | | 两个值不相同(忽略大小写) |
| + | |- |
| + | | <code>~~</code> |
| + | | 相似 |
| + | | 两个值相似,与SQL的 <code>LIKE</code> 关键字相同 |
| + | |- |
| + | | <code>!~</code> |
| + | | 不相似 |
| + | | 两个值不相似,与SQL的 <code>LIKE</code> 关键字相同 |
| + | |} |
| + | |
| + | 更多的有关相似的信息可以在[https://www.w3schools.com/sql/sql_like.asp 这里]和[https://www.tutorialspoint.com/sql/sql-like-clause.htm 这里]找到。 |
| + | |
| + | 基础的大概是这样的: * <code>%</code> - 百分号代表 0 到多个字符 * <code>_</code> - 下划线代表一个字符 |
| + | |
| + | ===== 一些示例 ===== |
| + | |
| + | * <code>server ~~ hub_</code> 匹配 "hub1", "hub2", "hub3" 等 |
| + | * <code>permission !~ group.%</code> 匹配任何不以 group 开头的权限 |
| + | * <code>world == nether</code> 匹配世界名为 nether |
| + | |
| + | 当在命令中使用约束,必须使用 <code>" "</code> 引号包围。 |
| + | |
| + | ==== 命令示例 ==== |
| + | |
| + | <code>/lp bulkupdate all update permission group.mod "permission == group.moderator"</code> |
| + | |
| + | 更新所有的条目,替换所有的 "group.moderator" 为 "group.mod"(效率重命名)。 |
| + | |
| + | <code>/lp bulkupdate user delete "server ~~ hub%" "world == nether"</code> |
| + | |
| + | 删除任何分配给以 "hub" 开头的服务器,并且世界是 "nether" 的玩家的权限。 |
| + | |
| + | <code>/lp bulkupdate all delete "permission == essentials.fly"</code> |
| + | |
| + | 删除所有 "essentials.fly" 的权限 |
| + | |
| + | <code>/lp bulkupdate all update server global "server == factions"</code> |
| + | |
| + | 更改所有服务器 "factions" 条目为 "global"。 |
| + | |
| + | 希望你理解了这个意思,如果你不确定如何构建一个你想要应用的命令,请随意使用 Wiki 主界面的联系方式联系我。 |
| + | |
| + | === 即时更新权限变更 === |
| + | |
| + | ==== 介绍 ==== |
| + | |
| + | 如果你在群组服务器上运行LuckPerms的话,有时你会遇到这样的问题——你在一个服务器上做下了更改,但是这更改不会“传播”到你网络中的其他服务器中。 |
| + | |
| + | 这一页就是教你怎么修复这个问题的。 |
| + | |
| + | 当然,如果你只有一个服务器运行LuckPerms插件,或是你的服务器不使用普通的储存方法(连接到一个相同的数据库)的话,你不需要看这些。 |
| + | |
| + | ==== 同步间隔 ==== |
| + | |
| + | 你能够设置同步间隔,这会执行能够不断重复获得存储系统内的数据的任务。 |
| + | |
| + | 本选项默认的值是 '''-1''' (也就是说默认是禁用的) |
| + | |
| + | <pre class="yml">data: |
| + | |
| + | ... |
| + | |
| + | #此选项控制 LuckPerms 多长时间进行一次同步任务。 |
| + | |
| + | #同步任务将会刷新存储中的所有信息,保证插件使用的是最新的数据。 |
| + | |
| + | #这个选项默认关闭,因为大多数的用户都是不需要这个功能的,但是如果你使用远程存储,又没有设置信息服务,那么你可能将其设置为像 3 这样的数值。 |
| + | |
| + | #设置为 -1 来完全停用这个任务。 |
| + | sync-minutes: -1</pre> |
| + | 你能够将这个值改成你想要的。 |
| + | |
| + | ==== 监视文件 ==== |
| + | |
| + | 如果你使用以文件为基础的存储类型的话(JSON或YAML),LuckPerms能够监视那些数据文件的更改,然后自动检测是否做出了改变。 |
| + | |
| + | <pre class="yml">#当使用基于文件的存储系统,LuckPerms将会监视数据文件的变化,并在文件变化被检测到的时候自动规划更新数据、 |
| + | |
| + | #如果不想让这个发生,那么将此选项设置为 false。 |
| + | watch-files: true</pre> |
| + | 这也就是说你只要更改一个数据文件就好了,然后按下保存按钮,然后你的更改就会被应用到整个群组服中了。 |
| + | |
| + | ==== /lp sync ==== |
| + | |
| + | <code>/lp sync</code> 命令能够强制让插件执行一次上述提到的更新任务。 |
| + | |
| + | 能够从数据库或文件读取最新的数据信息。 |
| + | |
| + | 这个命令对于使用文件储存来说也是很有用的,因为它能够请求更新。 |
| + | |
| + | ==== 信息传递服务 ==== |
| + | |
| + | 在更改设定之后,你可以使用 <code>/lp networksync</code> 命令来让群组服中所有其他服务器应用更改。 |
| + | |
| + | ==== 当前支持 ==== |
| + | |
| + | {| |
| + | ! 服务 |
| + | ! 描述 |
| + | |- |
| + | | Bungee |
| + | | 使用插件所提供的信息传递隧道来在你的BungeeCord网络中传递更改 |
| + | |- |
| + | | Lilypad |
| + | | 使用 LilyPad 的连接子服系统来在你的LilyPad网络中传递更改 |
| + | |- |
| + | | Redis |
| + | | 使用 Redis Pub Sub 来在所有连接的服务器中传递更改 |
| + | |} |
| + | |
| + | ===== Bungee ===== |
| + | |
| + | <pre class="yml">messaging-service: bungee</pre> |
| + | 你必须在你的代理服务器上安装LuckPerms插件,然后将上述的设置在所有配置文件中都启用。本选项不支持跨BungeeCord代理服务器传递信息,在这种情况下你应该使用Redis群组服。 |
| + | |
| + | ===== LilyPad ===== |
| + | |
| + | <pre class="yml">messaging-service: lilypad</pre> |
| + | 你需要在你的服务器上安装 <code>LilyPad-Connect</code> 插件。 |
| + | |
| + | ===== Redis ===== |
| + | |
| + | <pre class="yml">messaging-service: redis |
| + | |
| + | # Settings for Redis. |
| + | # Port 6379 is used by default; set address to "host:port" if differs |
| + | redis: |
| + | enabled: true |
| + | address: localhost |
| + | password: ''</pre> |
| + | 你需要按照你服务器的实际情况来设置你的Redis群组服相关设置,然后在redis小节填写你的服务器的地址和密码。 |
| + | |
| + | 请确保你的防火墙设置设置地恰当,来防止你的Redis群组服拒绝访问。 |
| + | |
| + | === 切换存储 & 备份 === |
| + | ==== 如何做 ==== |
| + | |
| + | 切换存储是很简单的。 |
| + | |
| + | # 第一,运行 <code>/luckperms export <file></code> |
| + | # 接着,完全停止你的服务器 |
| + | # 编辑你的配置文件,更改存储类型 |
| + | # 开启你的服务器,等待数据存储的初始化 |
| + | # 接着,使用 <code>/luckperms import <file></code> |
| + | # 所有的数据已经迁移到新的数据存储中了 |
| + | |
| + | <file> 是你想用来存储/加载的文件的名称,文件位于 LuckPerms 的数据文件夹里。你可以任意命名,只要在 import 命令中正确填写。 |
| + | |
| + | ==== 备份 ==== |
| + | |
| + | 你可以使用这个特性来备份所有你的 LuckPerms 的数据,只需要运行 export 命令,将文件保存到一个安全的地方。 |
| + | |
| + | ==== 这是怎么工作的? ==== |
| + | |
| + | export 命令将所有的数据转换为一串命令,处理后将会重建你的安装,import 命令只是将每个命令运行一遍,这意味着你可以只导出/导入一小部分数据,你删掉不需要的一部分就可以了。 |
| + | |
| + | === 权限组路线 === |
| + | |
| + | 虽然其他一些插件也提供了一些相似的功能,LuckPerms 插件拥有它自己独特的权限组路线系统。 |
| + | |
| + | 请将“权限组路线”试做一种“梯子”或“晋升路线”。 |
| + | |
| + | ==== 示例 1 ==== |
| + | |
| + | 我创建了一个叫做“staff”的权限组路线,这权限树包括以下组: |
| + | |
| + | '''default :arrow_right: helper :arrow_right: mod :arrow_right: admin''' |
| + | |
| + | 然后我就能使用权限组路线来为玩家升级或降级。 |
| + | |
| + | 例如,玩家“Notch”在helper权限组里,我想将他升到“mod”组,我需要运行 |
| + | |
| + | <code>/luckperms user Notch promote staff</code> |
| + | |
| + | ==== 示例 2 ==== |
| + | |
| + | 我又为赞助商新建了一个权限组路线,包括以下组: |
| + | |
| + | '''default :arrow_right: iron :arrow_right: gold :arrow_right: diamond''' |
| + | |
| + | 当玩家购买了“权限组提升”这类的东西时,我能使用权限组路线为玩家晋升权限等级。 |
| + | |
| + | <code>/luckperms user Luck promote donator</code> |
| + | |
| + | 要想让玩家在某条权限组路线中降级的话,请使用降级命令。 |
| + | |
| + | ==== 创建权限组路线 ==== |
| + | |
| + | 请运行 <code>/luckperms createtrack <name></code> 命令,然后使用 <code>/luckperms track <name> append <group></code> 来将权限组加入路线中。 |
| + | |
| + | 帮助编辑路线的命令也还有几条,你可以在命令使用页面找到。 |
| + | |
| + | === 前缀,后缀与元数据 === |
| + | 这教程包括如何使用LuckPerms插件设置和管理玩家的前缀,后缀以及元数据。 |
| + | |
| + | 如果你已经对这些概念很熟悉了,或是只想查看本插件如何实现更改,你应该阅读[https://github.com/lucko/LuckPerms/wiki/Command-Usage#meta---lp-user-user-meta---lp-group-group-meta- 命令使用] 页面的 “section” 小节。 |
| + | |
| + | ==== 关键术语 ==== |
| + | |
| + | ===== 前缀/后缀 ===== |
| + | |
| + | Minecraft服务器上的前缀和后缀代指你聊天用户名前后的文本。 |
| + | |
| + | 举个例子,在下列的聊天中: |
| + | |
| + | <pre>[Admin] Luck the great: Hello!</pre> |
| + | 玩家的前缀是<code>"[Admin] "</code>部分,玩家的后缀是<code>" the great"</code>部分。 |
| + | |
| + | ===== 元数据 ===== |
| + | |
| + | 有时元数据指“选项”或“变量”,元数据是跟权限组有关的额外数据部分。与权限不同的是,元数据分成两部分,一部分是“关键字”,另一部分是“值”。 |
| + | |
| + | 关键字就是元数据的名字,值就是关键字所代表的数据。 |
| + | |
| + | 举个例子,我的用户有下列的元数据,这元数据代表我最多能设置5个家,然后我的用户名应该是蓝色的。 |
| + | |
| + | <pre>max-homes = 5 |
| + | username-color: blue</pre> |
| + | ==== 是谁提供了对这些的支持? ==== |
| + | |
| + | 一般来说,提供服务器管理权限的插件就有能够让你设置,管理和储存玩家的前缀,后缀和元数据的功能,这对于LuckPerms插件来说也一样。、 |
| + | |
| + | 有时,提供这些设置的权限插件也能够直接在游戏中应用这些值。但是这对于LuckPerms来说不是它能做到的任务,你需要安装另一款额外的插件来在游戏聊天中应用,关于这点我们稍后详述。 |
| + | |
| + | ==== 前缀/后缀/元数据是怎么存储的 ==== |
| + | |
| + | LuckPerms 插件将前缀和后缀转换成权限节点来存储。你可能会注意到当你给一位用户或一个权限组添加权限的恶化,他们的权限信息中会多出一条跟你设置的值相同的权限数据。为什么要这样做呢?好的,从编程的角度来说,让所有东西都储存在一个地方,用相同的格式,这样做更简单。这也意味着你能够简单的更改前缀和后缀,就像你改权限的方式一样。 |
| + | |
| + | 前缀和后缀分成了两部分 * '''Weight''' —— 这是决定着前缀和后缀优先级的数值,较大的数代表着较大的优先级。 * '''Value''' —— 这是真正的前缀的值。 |
| + | |
| + | 例如一个叫做 "[Admin] " 的前缀,优先级设置为100,转换成权限就是: <code>"prefix.100.[Admin] "</code>。 |
| + | |
| + | 对于元数据来说所使用的系统也相似,元数据组合 <code>favourite-color = red</code> ,转换成权限就是:<code>"meta.favourite-color.red"</code>. |
| + | |
| + | ==== 前缀和后缀的优先级是怎么工作的 ==== |
| + | |
| + | 前缀和后缀和权限一样,也能够继承。这意味着LuckPerms插件需要决定,当需要显示前缀或后缀时,真正为玩家显示哪一个。 |
| + | |
| + | 当另外一款插件请求玩家的前缀或后缀时,LuckPerms插件会: * 收集玩家的所有前缀与后缀,包括继承的 * 根据他们的优先级来进行分类,高的优先级数值代表高的优先级 * 然后决定出最高优先级的前缀或后缀来为玩家展示 |
| + | |
| + | 如果发现了两个相同优先级的前缀或后缀的话,最接近于用户的那一个会被使用,接近的意思就是插件在搜索继承数据时最先找到的那一个。 |
| + | |
| + | ==== 我怎么为玩家设置前缀或后缀 ==== |
| + | |
| + | 举个例子,如果我想让admin权限组的玩家拥有 "&c[Admin] " 前缀,在mod权限组的玩家拥有 "&d[Mod] " 前缀的话,我需要运行: |
| + | |
| + | * /lp creategroup admin |
| + | * /lp creategroup mod |
| + | * /lp group admin parent add mod |
| + | * /lp group admin meta addprefix 100 "&c[Admin] " |
| + | * /lp group mod meta addprefix 90 "&d[Mod] " |
| + | |
| + | 然后如果我决定想要将admin用户组的称号改为使用 "&4" 这个颜色代码的话,要想删除之前设定的值,我需要运行: * /lp group admin meta removeprefix 100 |
| + | |
| + | 这会将所有设定给admin权限组的,优先级为100的前缀全部移除,然后我就能重新设置新的前缀值了。 |
| + | |
| + | 对于临时设定用户前缀或后缀的方法和增加临时权限或临时权限组的方法差不多。 |
| + | |
| + | 所有的权限使用方法可以在[https://github.com/lucko/LuckPerms/wiki/Command-Usage#meta---lp-user-user-meta---lp-group-group-meta- '''权限使用页面''']找到。增加和移除元数据的方法也列在了那里。 |
| + | |
| + | ==== 我怎么查看一位玩家或一个用户组所有的前缀或后缀 ==== |
| + | |
| + | 解决前缀或后缀相关问题最简单的方式就是使用info命令。 |
| + | |
| + | 举个例子: <code>/lp user Luck meta info</code>。这会将用户所有的前缀,后缀和元数据,以及继承的相关信息列举出来。 |
| + | |
| + | 按照优先级来排序,所以你就能很清楚的看到目前应用的值是哪一个。 |
| + | |
| + | 另外一条有趣的命令就是玩家的全局信息命令: <code>/lp user Luck info</code>。 |
| + | |
| + | 如果玩家在服务器上在线的话,这会直接给你展示所提供给要读取LuckPerms信息的插件的前缀或后缀。 |
| + | |
| + | ==== 展示前缀和后缀 ==== |
| + | |
| + | 就像早些时候提到的那样,LuckPerms插件不会为你处理任何的聊天格式相关信息。 |
| + | |
| + | 你需要安装额外的插件来做到这个。 |
| + | |
| + | 下面为你列出了一些推荐的聊天管理插件。 |
| + | |
| + | ===== Bukkit/Spigot ===== |
| + | |
| + | LuckPerms 目前已经支持'''所有'''能够从 [https://dev.bukkit.org/projects/vault Vault] 插件读取信息的聊天管理插件了。 |
| + | |
| + | 你需要在你的服务器上安装Vault来让其工作。 |
| + | |
| + | 如果你发现某款插件所获取的数据不正确的话,请确保 <code>/vault-info</code> 插件输出的信息展示的数据是从LuckPerms插件处读取的。 |
| + | |
| + | 一些较为受欢迎的,且支持Vault的聊天管理插件包括: * [https://ci.drtshock.net/job/EssentialsX/ EssentialsXChat] —— 原来的Essentials插件的升级复刻版本。(“X” 是很重要的!) * [https://dev.bukkit.org/projects/chatex ChatEx] * [https://www.spigotmc.org/resources/deluxechat.1277/ DeluxeChat] —— 你能够使用Vault或LuckPerms所提供的Placeholder变量。 * [https://www.spigotmc.org/resources/10258/ ChatControl] —— 也支持其他选项的设置来帮助管理聊天。 |
| + | |
| + | 列举出所有可用的插件没有任何意义,再说一遍,所有支持Vault的聊天管理插件都支持LuckPerms! |
| + | |
| + | ===== BungeeCord ====== |
| + | |
| + | * [https://github.com/lucko/gChat gChat] (我写的 :wink:) |
| + | * [https://www.spigotmc.org/resources/multichat.26204/ MultiChat] |
| + | * [https://www.spigotmc.org/resources/bungee-chat.12592/ BungeeChat] |
| + | |
| + | ===== Sponge ===== |
| + | |
| + | * [http://nucleuspowered.org/ Nucleus] —— 就像是“Essentials”一样的插件,包括 [http://nucleuspowered.org/docs/modules/chat.html 聊天管理模块]. |
| + | |
| + | |
| + | === 前缀与后缀的堆叠 === |
| + | ==== 这个功能能做什么? ==== |
| + | |
| + | “元数据堆叠”特性能够让你在玩家聊天中同时展示多个前缀或后缀。 |
| + | |
| + | 你仍需要安装聊天管理类型的插件。 |
| + | |
| + | ==== 它怎么工作? ==== |
| + | |
| + | 当聊天管理类插件请求要获取玩家的前缀或后缀时,取代返回玩家最高优先级的称号,LuckPerms能够应用一些你设定的规则来一起输出多个前缀或后缀。 |
| + | |
| + | 默认的设置看起来是这样: |
| + | |
| + | <pre class="yml">meta-formatting: |
| + | prefix: |
| + | format: |
| + | - "highest" |
| + | start-spacer: "" |
| + | middle-spacer: " " |
| + | end-spacer: "" |
| + | suffix: |
| + | format: |
| + | - "highest" |
| + | start-spacer: "" |
| + | middle-spacer: " " |
| + | end-spacer: ""</pre> |
| + | 这些当前配置意味着,当请求前缀或后缀的时候,会返回最高优先级的那一个。 |
| + | |
| + | ==== 我怎么增加其他元素? ==== |
| + | |
| + | 当前支持以下元素。 |
| + | |
| + | {| |
| + | ! 元素 |
| + | ! 描述 |
| + | |- |
| + | | <code>highest</code> |
| + | | 从玩家拥有或继承的数据中选择最高优先级的值 |
| + | |- |
| + | | <code>lowest</code> |
| + | | 和上面的工作原理相同,但是它会选择最低优先级的值 |
| + | |- |
| + | | <code>highest_own</code> |
| + | | 选择最高优先级的值,但不支持继承来的值 |
| + | |- |
| + | | <code>lowest_own</code> |
| + | | 和上面的工作原理相同,但是它会选择最低优先级的值 |
| + | |- |
| + | | <code>highest_on_track_<track></code> |
| + | | 选择继承于给予的权限组路线中的权限组所提供的最高优先级的值 |
| + | |- |
| + | | <code>lowest_on_track_<track></code> |
| + | | 和上面的工作原理相同,但是它会选择最低优先级的值 |
| + | |- |
| + | | <code>highest_not_on_track_<track></code> |
| + | | 选择不继承于给予的权限组路线中的权限组所提供的最高优先级的值 |
| + | |- |
| + | | <code>lowest_not_on_track_<track></code> |
| + | | 和上面的工作原理相同,但是它会选择最低优先级的值 |
| + | |} |
| + | |
| + | ==== 一个示例 ==== |
| + | |
| + | 例如,在一个监狱服务器中,你可能有3种类型的权限组,一种是玩家“gameplay”权限组,一种是赞助商权限组,一种是管理员权限组。 |
| + | |
| + | 如果玩家在三个组中,我想要展示三个前缀,举个例子: <code>[Mine C] [Donor] [Admin] Luck: hi!</code>. |
| + | |
| + | 但是如果玩家不在管理员权限组中,我想展示: <code>[Mine C] [Donor] Luck: hi</code>. |
| + | |
| + | 使用堆叠系统这些都可以实现。每个堆叠中的“元素”都需要添加到格式节内。 |
| + | |
| + | <pre class="yml">prefix: |
| + | format: |
| + | - "highest_on_track_prison" |
| + | - "highest_on_track_donor" |
| + | - "highest_on_track_staff" |
| + | start-spacer: "" |
| + | middle-spacer: " " |
| + | end-spacer: ""</pre> |
| + | 如果玩家在该元素中没有对应的值的话,它就会被堆叠系统自动无视。 |
| + | |
| + | 你可以控制每个元素在开头,中间和结尾的分隔符,举个例子: |
| + | |
| + | <code>yml prefix: format: - "highest_on_track_prison" - "highest_on_track_donor" - "highest_on_track_staff" start-spacer: "★ " middle-spacer: " | " end-spacer: " "</code> |
| + | |
| + | ... 这样的聊天结果会是: <code>★ [Mine C] | [Donor] | [Admin] Luck: hi</code>. |
| + | |
| + | 显然你可以使用你的聊天管理插件来改变这些值,那些插件也会提供相似的选项。 |
| + | |
| + | === 高级设置 === |
| + | ==== 简介 ==== |
| + | |
| + | LuckPerm总体来说虽然是相对简单的.. 你可以利用插件的一些特点与内部规则来制定一个适合你服务器情况的高等权限系统! |
| + | |
| + | ==== 分服务器权限&分世界权限 ==== |
| + | |
| + | LuckPerm本来是针对群组服的情况来工作的, 但是你可以自定义一些只在特定子服/特定世界才生效的权限。 |
| + | |
| + | ===== 配置中一些重要的选项说明 ==== |
| + | |
| + | <pre class="yml"># The name of the server, used for server specific permissions. Set to 'global' to disable. |
| + | server: global</pre> |
| + | 该项为设置服务器的名称,如果要想设置特定服务器的权限,则需要通过修改server项来命名服务器。 如果你愿意,同一个群组服是可以一起使用相同的服务器名的。 |
| + | |
| + | <pre class="yml"># If users on this server should have their global permissions/groups applied. |
| + | include-global: true</pre> |
| + | include-global选项也是非常重要的。 |
| + | |
| + | LuckPerm有两种体现方式,一是特定服务器的权限,二则是直接应用全局权限设置。 |
| + | |
| + | 如果这个选项被设置为 false,只有指定在此服务器的权限才会被应用。 |
| + | |
| + | 如果上方的 "server" 选项设置为 global,请不要将其设置为 '''false'''。更多的有关服务器指定的权限可以在这里找到。 通过编辑更改这两个选项,你可以灵活的为每个服务器的权限组/权限做出意想不到的配合效果 |
| + | |
| + | ==== 示例 ==== |
| + | |
| + | ===== 示例 1 ===== |
| + | |
| + | <pre class="yml">server: global |
| + | include-global: true</pre> |
| + | * /luckperms user Luck set minecraft.command.gamemode true '''将应用''' |
| + | * /luckperms user Luck set minecraft.command.gamemode true factions '''不应用''' |
| + | |
| + | ===== 示例 2 ===== |
| + | |
| + | <pre class="yml">server: lobby |
| + | include-global: true</pre> |
| + | * /luckperms user Luck set minecraft.command.gamemode true '''将应用''' |
| + | * /luckperms user Luck set minecraft.command.gamemode true lobby '''将应用''' |
| + | |
| + | ===== 示例 3 ===== |
| + | |
| + | <pre class="yml">server: bungeecord |
| + | include-global: false</pre> |
| + | * /luckperms user Luck set minecraft.command.gamemode true '''不应用''' |
| + | * /luckperms user Luck set bungeecord.command.alert true bungeecord '''将应用''' |
| + | |
| + | ===== 示例 4 ===== |
| + | |
| + | <pre class="yml">server: global |
| + | include-global: false</pre> |
| + | '''没有任何权限将会应用!''' |
| + | |
| + | 如果没有设置服务器名字(server项设置为global)且全局设置未开启(include-global项设置为flase), 将不会有任何权限可以应用到服务器上! |
| + | |
| + | ==== 权限计算 ==== |
| + | |
| + | ===== 权限是根据优先级进行计算的,如下所示 ===== |
| + | |
| + | * '''服务器特定的权限是会覆盖通用/全局权限设置的''' |
| + | |
| + | 例如:有一个玩家,我们姑且叫他海螺,他拥有一个全局的“fly.use”(允许飞行)权限, 然后在“factions”这个服务器上,取消了“fly.use”权限,服务器的特定权限设置将会覆盖全局设置。 即,这个海螺在“factions”服务器上是无法使用“fly.use”权限的,他就不能够上天了, 前提是海螺现在正在“factions”服务器上。 |
| + | |
| + | * '''世界特定的权限也是会覆盖通用/全局权限设置的''' |
| + | |
| + | 例如:上文我们说的玩家“海螺”,他现在任然有一个全局的“fly.use”权限, 然后在“world_nether”(地狱)世界,取消了“fly.use”权限,世界的特定权限设置将会覆盖全局设置。 即,这个海螺在地狱就无法上天了(只要海螺在地狱世界)。 |
| + | |
| + | * '''临时权限将会覆盖非临时权限''' |
| + | |
| + | 例如:如果玩家海螺本来关闭了一个权限“test.node”, 以此为基础,服务器给海螺设置新的临时权限“test.node”, 海螺的临时权限则会覆盖本身关闭的权限,即海螺会在特定时间(临时权限)获得“test.node”权限。 |
| + | |
| + | * '''如果同时有两个节点相同、但时长不同的临时权限,时间较长的会覆盖时间较短的''' |
| + | * '''更加具体的通配符权限将覆盖不具体的通配符权限''' |
| + | |
| + | 例如:一个用户拥有权限“luckperms.''”并且设置为true,但是“luckperms.user.''”权限却设置为false, 那么所有玩家的权限都将被设置为false! 因为尽管“luckperm.''”有更加通用的通配符,但是他没有“luckperms.user.''”具体。 |
| + | |
| + | * '''继承权限将由对象自己的权限来重写''' |
| + | |
| + | 例如:一个玩家是默认权限组的成员,默认权限组有“some.thing.perm”权限, 但是这个玩家又被以用户形式给予了权限“some.thing.perm”, 继承而来的权限将会被玩家自己的权限给覆盖。 |
| + | |
| + | ==== 临时权限 ==== |
| + | |
| + | 临时权限每间隔3s会检查一遍,检查临时权限的时限是否到期, 不论同步间隔设置的怎么样,这个检查都会照常工作,这意味着你可以安全的设置临时权限在几秒后过期, 他们将会在时限到期时被删除。 |
| + | |
| + | ==== 速记权限 ==== |
| + | |
| + | LuckPerms有他自己的速记权限系统,在这一点上,它非常类似PermissionsEx, 它允许你使用速记格式来设置权限。 |
| + | |
| + | ===== 示例 ===== |
| + | |
| + | ====== 示例 1 ====== |
| + | |
| + | 使用LuckPerm的允许节点来作为例子,比如说,你想让一个用户组与用户权限设置/取消允许节点, |
| + | |
| + | 如果没有速记,你就必须键入下面四个节点。 |
| + | |
| + | <pre>luckperms.user.setpermission |
| + | luckperms.user.unsetpermission |
| + | luckperms.group.setpermission |
| + | luckperms.group.unsetpermission</pre> |
| + | 但是,你要是使用速记,你就可以应用以下节点: |
| + | |
| + | <code>luckperms.(user|group).(setpermission|unsetpermission)</code> |
| + | |
| + | 你可以使用括号来让一个节点成为一个速记的权限组,然后用 <code>|</code> 来分隔他们 |
| + | |
| + | ====== 示例 2 ====== |
| + | |
| + | 你可以使用“-”来创建字符范围,如果没有使用速记,则必须键入以下四个节点: |
| + | |
| + | <pre>coolkits.kit.a |
| + | coolkits.kit.b |
| + | coolkits.kit.c |
| + | coolkits.kit.d</pre> |
| + | 然而,使用了速记方法,你只需应用下面的节点: |
| + | |
| + | <code>coolkits.kit.(a-d)</code> |
| + | |
| + | ====== 示例 3 ====== |
| + | |
| + | 你可以使用“-”来创建字符范围,如果没有使用速记,则必须键入以下四个节点: |
| + | |
| + | <pre>prisonmines.teleport.1 |
| + | prisonmines.teleport.2 |
| + | prisonmines.teleport.3 |
| + | prisonmines.teleport.4</pre> |
| + | 不过,你只要使用速记方法,这一切都会变得简单许多!你只需要应用下面的节点: |
| + | |
| + | <code>prisonmines.teleport.(1-4)</code> |
| + | |
| + | ==== 正则表达式 ==== |
| + | |
| + | LuckPerms支持使用正则表达式来定义权限节点与服务器/世界的名字, 当使用正则表达式的时候,必须添加前缀“R=”。 所以LuckPerm才会知道将它是作为正则表达式来输出,而不是作为普通的字符串来输出。 |
| + | |
| + | 例如:你希望玩家可以创建两个组与权限系(tracks),通常只需要添加两个权限节点。 然而使用正则表达式,你只需要添加一个权限节点 <code>luckperms\.create.*</code> 。 记住,转为任何字符,例如一个点,都将作为一个节点被系统解析。 |
| + | |
| + | === 默认组 === |
| + | |
| + | 我在 LuckPerms 里处理默认和默认组的方法可能是整个插件里最不受喜爱的特性了。最新我做了一些添加/调整,做了一些替代的特性,允许最大程度的控制像其他权限插件的方法,希望这会成为插件最好的方面,而不是最差的方面。 |
| + | |
| + | ==== 从何开始 ==== |
| + | |
| + | 这是我的想法。 |
| + | |
| + | 你的服务器的用户可以分为两种。 |
| + | |
| + | # 基础玩家 |
| + | # 加入不同的组的玩家,或者有他们特别权限的玩家。 |
| + | |
| + | 你不希望浪费宝贵的硬盘空间来存储第一种玩家,你只希望存储你的职员,或者有特殊等级的玩家。平凡的"成员"就只是平凡,没有必要存储他们的信息。 |
| + | |
| + | 下一个问题是如何确定一个用户是"平凡的"或不是,想象一下情景。 |
| + | |
| + | # 默认的组设置为"默认",当玩家加入,他们被设置为"默认",并被保存。 |
| + | # 过了一会儿,你想将默认的组更改为"成员"。 |
| + | # 接着你的老的成员全部在"默认"组里,剩下的人都在"成员",这不好。 |
| + | |
| + | 甚至我们没有"平凡"的用户,这个问题依然会出现。 |
| + | |
| + | # 默认组设置为"默认" |
| + | # 你想给 "Notch" 一个特殊的 "essentials.fly" 权限,Notch 的权限被保存,标记为"默认组"的成员,有特殊的飞行权限。 |
| + | # 接着你编辑了默认的组,所有的"平凡的"成员全部进入了新的组,但是 Notch 还是默认组的。 |
| + | |
| + | 因为这个原因,我让默认的组不可配置,这让所有对我的事情都简单了 10 倍,这意味着我可以写有效率的存储系统,并且不用担心一些稀有的情况下服务器的管理员更改了默认组,但是,我知道这对一些人很反感。 |
| + | |
| + | 这对一些等级插件也有问题,如果你想要一个"主"组,并且分离"升级"组,你需要多于一个的默认组。 |
| + | |
| + | 这里是你的选项。 |
| + | |
| + | ==== 继续使用默认组,但是只是更改显示名 ==== |
| + | |
| + | 我非常推荐这个做法,因为你继续使用默认组。 |
| + | |
| + | 如果你只是想简单的更改默认组的显示名,(比如在 Vault),我推荐你配置一个 <code>group-name-rewrite</code> 规则,通过添加这些到你的 <code>config.yml</code>/<code>luckperms.conf</code> 来实现。 |
| + | |
| + | <pre class="yml"># Rewrites group names. The underlying name of the group does not change, just the output in commands / placeholders / Vault. |
| + | group-name-rewrite: |
| + | default: Member</pre> |
| + | 你也可以使用这个:https://github.com/lucko/LuckPerms/wiki/Primary-Groups |
| + | |
| + | ==== 配置继承 ==== |
| + | |
| + | 这个选项意味着所有的用户都还在"默认"的组里,但是这个默认组作为父组,这样他就可以将配置继承给不同的组。 |
| + | |
| + | <pre>/luckperms creategroup member |
| + | /luckperms group default parents add member</pre> |
| + | |
| + | ==== 配置默认分配 ==== |
| + | |
| + | 如果你有更多的特殊需要,你可以使用这个选项,但是,这将否定我们在这个页面的第一节讨论的存储空间规划,所有的用户都会被存储,无论是"平凡的"成员还是不是。 |
| + | |
| + | ===== 注意:查看 Default Assignments 章节 ===== |
| + | |
| + | 接下来的规则将会创建一个不同的默认的组。 |
| + | |
| + | <pre class="yml">default-assignments: |
| + | my-defaults-rule: |
| + | if: |
| + | has-true: <group.default> |
| + | take: |
| + | - group.default |
| + | give: |
| + | - group.member |
| + | set-primary-group: member</pre> |
| + | 放入以后,每次玩家登入时,插件会检测这个玩家是不是"默认"组的成员,如果是,插件将会把玩家从"默认"组移除,将他们添加至"成员"组,将他们的主组也设置为"成员"组。 |
| + | |
| + | 这个系统非常强力,允许你配置按你自己的需求而定的默认组,记住你可以将玩家添加至不止一个的"默认"组。 |