62 lines
2.1 KiB
Lua
62 lines
2.1 KiB
Lua
interacthandler = {}
|
|
interacthandler.player = {}
|
|
|
|
local storage = minetest.get_mod_storage()
|
|
local oldplayers = minetest.deserialize(storage:get_string("player"))
|
|
|
|
minetest.register_on_prejoinplayer(function(name, ip)
|
|
if oldplayers and oldplayers[name] then
|
|
local privs = minetest.get_player_privs(name)
|
|
privs.interact = true
|
|
minetest.set_player_privs(name, privs)
|
|
oldplayers[name] = nil
|
|
storage:set_string("player", minetest.serialize(oldplayers))
|
|
end
|
|
end)
|
|
|
|
minetest.register_on_priv_grant(function(name, granter, priv)
|
|
if priv ~= "interact" then return end
|
|
if not granter then return end
|
|
interacthandler.player[name] = nil
|
|
storage:set_string("player", minetest.serialize(interacthandler.player))
|
|
end)
|
|
|
|
minetest.register_on_priv_revoke(function(name, revoker, priv)
|
|
if priv ~= "interact" then return end
|
|
if not revoker then return end
|
|
interacthandler.player[name] = nil
|
|
storage:set_string("player", minetest.serialize(interacthandler.player))
|
|
end)
|
|
|
|
interacthandler.revoke = function(name)
|
|
local privs = minetest.get_player_privs(name)
|
|
if not privs or (not interacthandler.player[name] and not privs.interact) then return end
|
|
if not interacthandler.player[name] then
|
|
interacthandler.player[name] = 0
|
|
end
|
|
interacthandler.player[name] = interacthandler.player[name] + 1
|
|
if interacthandler.player[name] > 0 then
|
|
privs.interact = nil
|
|
minetest.set_player_privs(name, privs)
|
|
end
|
|
storage:set_string("player", minetest.serialize(interacthandler.player))
|
|
end
|
|
|
|
interacthandler.grant = function(name, force)
|
|
local privs = minetest.get_player_privs(name)
|
|
if not privs or not interacthandler.player[name] then return end
|
|
interacthandler.player[name] = interacthandler.player[name] - 1
|
|
if interacthandler.player[name] <= 0 or force then
|
|
interacthandler.player[name] = nil
|
|
privs.interact = true
|
|
minetest.set_player_privs(name, privs)
|
|
end
|
|
if privs.interact then
|
|
interacthandler.player[name] = nil
|
|
end
|
|
storage:set_string("player", minetest.serialize(interacthandler.player))
|
|
end
|
|
|
|
minetest.register_on_leaveplayer(function(player)
|
|
interacthandler.grant(player:get_player_name(), true)
|
|
end) |