Minetest中玩家权限的撤销与授予问题求助
Minetest 修改玩家权限的问题与解决
问题现象
- 执行以下代码试图撤销
singleplayer的interact权限,结果玩家所有其他权限被清空,反而获得了interact权限:minetest.set_player_privs("singleplayer", {interact = false}) - 改用先获取现有权限再修改的方式,无法撤销
interact权限,甚至会给原本没有该权限的玩家自动加上:local privs = minetest.get_player_privs("singleplayer") privs.interact = false minetest.set_player_privs("singleplayer", privs) - 直接用
minetest.set_player_privs("singleplayer", {interact = true})授予权限时,虽然interact权限生效,但玩家所有其他权限会被清空。
原因分析
Minetest的minetest.set_player_privs函数逻辑是:传入的权限表中,仅值为true的权限会被保留/授予;未在表中出现的权限会被直接撤销;而值为false的权限键会被忽略,不会触发撤销操作。
另外,singleplayer作为默认管理员账号,部分版本中会自动继承默认权限,这也导致直接传入极简权限表时出现不符合预期的结果。
正确操作方法
1. 撤销interact权限(保留其他权限)
先获取玩家当前权限,删除interact对应的键,再重新设置权限:
local privs = minetest.get_player_privs("singleplayer") privs.interact = nil -- 移除该权限键,而非设为false minetest.set_player_privs("singleplayer", privs)
2. 授予interact权限(保留其他权限)
先获取现有权限,将interact设为true后再设置:
local privs = minetest.get_player_privs("singleplayer") privs.interact = true minetest.set_player_privs("singleplayer", privs)
内容的提问来源于stack exchange,提问作者Luatic
相关产品推荐
相关产品推荐

