You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 11:15:03