perplayer_gamemode/init.lua

83 lines
2.3 KiB
Lua

perplayer_gamemode = { users = {} }
dofile(minetest.get_modpath("perplayer_gamemode") .. "/ChatCmdBuilder.lua")
function perplayer_gamemode.is_enabled_for(name)
if perplayer_gamemode.users[name] == nil then
return minetest.settings:get_bool("creative_mode")
else
return perplayer_gamemode.users[name]
end
end
function perplayer_gamemode.set_creative(name, v)
perplayer_gamemode.users[name] = v
local player = minetest.get_player_by_name(name)
if player then
local context = sfinv.contexts[name]
context.page = sfinv.get_homepage_name(player)
sfinv.set_player_inventory_formspec(player)
end
end
if creative.is_enabled_for then
creative.is_enabled_for = perplayer_gamemode.is_enabled_for
else
for name, def in pairs(sfinv.pages) do
if #name > 9 and name:sub(1, 9) == "creative:" then
def.is_in_nav = function(self, player, context)
return perplayer_gamemode.is_enabled_for(player:get_player_name())
end
end
end
local old_homepage_name = sfinv.get_homepage_name
function sfinv.get_homepage_name(player)
if perplayer_gamemode.is_enabled_for(player:get_player_name()) then
return "creative:all"
else
return "sfinv:crafting"
end
end
end
minetest.register_privilege("gamemode", "Can set own creative mode")
minetest.register_privilege("gamemode_super", "Can set anyone's creative mode")
local function is_creative(str)
return minetest.is_yes(str) or str == "creative"
end
perplayer_gamemode.ChatCmdBuilder.new("gamemode", function(cmd)
cmd:sub(":value", function(name, value)
if minetest.check_player_privs(name, { gamemode = true }) then
local v = is_creative(value)
perplayer_gamemode.set_creative(name, v)
if v then
return true, "Turned creative mode on"
else
return true, "Turned creative mode off"
end
else
return false, "Missing privs: gamemode"
end
end)
cmd:sub(":username :value", function(name, username, value)
if minetest.check_player_privs(name, { gamemode_super = true }) then
local v = is_creative(value)
perplayer_gamemode.set_creative(username, v)
if v then
return true, "Turned creative mode on for " .. username
else
return true, "Turned creative mode off for " .. username
end
else
return false, "Missing privs: gamemode_super"
end
end)
end, {
description = "Set game mode (creative or survival)"
})