了解Minetest的特权机制

Minetest Game有特权 (Privileges) 的设计,规定每个玩家可以做的事情,包括使用命令的权限。

在单人模式下,玩家预设只能走路、挖掘节点。需要使用命令给自己特权,才可以飞行、跑步、穿墙,否则会出现「没有xx权限」。

玩其他子游戏也一样,需要使用命令才能获得所有特权。

权限在多人游戏十分有用,给予全部特权,玩家可以指定多个管理员;给予部份特权,可以避免玩家破坏建筑。

特权种类可藉由模组扩充。

1. Minetest Game自带的特权

特权 说明
interact 玩家可以破坏节点,放置节点,跟节点互动,攻击其他玩家。
give 使用/give和/giveme命令的权限。
teleport 使用/teleport命令的权限。
bring 使用/teleport指令,并将其他玩家传送到身边的权限。
fast 玩家可以跑步。
fly 玩家可以飞行。
noclip 玩家可以穿墙。
shout 玩家可以聊天。
settime 使用/time命令的权限。
privs 使用/grant和/revoke命令的权限。
basic_privs 可修改其他玩家shout和interact的权限,可查看线上拥有特定权限玩家的列表。
kick 使用/kick命令的权限。
ban 使用/ban和/unban命令的权限。
rollback 使用/rollback命令的权限。
protection_bypass 玩家可以开启受保护的节点,例如上锁箱子和钢门。
server 使用/shutdown, /clearobjects, /set等管理伺服器命令的权限。
debug 存取游戏除错功能的权限。
home 使用/home和/sethome命令的权限。
password 使用/setpassword和/clearpassword命令的权限。
creative 玩家可以使用创造模式物品栏。

2. Minetest Game玩家默认的特权

单人模式中,玩家预设的名字叫做singleplayer。玩家一进入世界,会自动取得interact、shout、privs、basic_privs这些基本特权,这些特权无法撤销。如果是其他玩家连线加入,同样也是取得这些基本特权。

多人游戏中由minetest.conf指定的管理员玩家会自动拥有所有特权,这些特权无法撤销。

3. Minetest Game特权相关命令

在多人游戏中,管理员玩家可以给予、撤销特权。

命令 功能
/privs <玩家名> 显示玩家拥有的特权,无输入名字则为自己
/haspriv <特权> 显示拥有该特权的玩家
/grant <玩家名> <特权> 给予玩家指定特权
/grant <玩家名> all 给予玩家所有特权
/grantme <特权> 给予自己指定特权
/grantme all 给予自己所有特权
/revoke <玩家名> <特权> 撤销玩家指定特权
/revoke <玩家名> all 撤销玩家全部特权
/revokeme <特权> 撤销自己指定特权
/revokeme all 撤销自己全部特权

使用例:

单人模式给予自己所有特权:

/grantme all

给予叫做player1的玩家飞行特权:

/grant player1 fly

给予playerB玩家所有特权:

/grant playerB all

撤销playerC玩家破坏节点的权限:

/remove playerC interact

参考资料

2 个赞
1 个赞

basic_privs 的定義有誤。

  1. 根據/builtin/game/chat.lua:200,擁有此權限的用戶有權查看在線玩家中擁有特定權限的玩家列表。
  2. 根據/games/devtest/mods/unittests/init.lua:188,在 devtest 遊戲中,擁有此權限的用戶有權運行程序調試和測試。
  3. 根據/builtin/settingtypes.txt:648/doc/lua_api.txt:4759-4760以及/builtin/game/chat.lua:246-247,在預設情況下,擁有此權限的用戶有權修改其他玩家的 interactshout 權限。

參考git版本號:de8ce9a8ff999c7ab9562528a972d5426a9f7cec

懂了,谢谢。

谢谢提醒,已修正。