--[[ Mod Gestor para Minetest Gestor v2.0 Copyright (C) 2018 BrunoMine (https://github.com/BrunoMine) Recebeste uma cópia da GNU Lesser General Public License junto com esse software, se não, veja em . Recurso para desligamento do servidor ]] -- Tradutor de texto local S = gestor.S -- Lista de moderadores if gestor.bd.verif("staff", "list") == false then gestor.bd.salvar("staff", "list", {}) end -- Controle de acessos local acessos = {} minetest.register_on_joinplayer(function(player) acessos[player:get_player_name()] = {} end) minetest.register_on_leaveplayer(function(player) acessos[player:get_player_name()] = nil end) -- Registrar aba 'moderadores' gestor.registrar_aba("moderadores", { titulo = S("Moderadores"), get_formspec = function(name) -- Gera string dos moderadores listados local staff_list_string = "" for staff,staff_name in ipairs(gestor.bd.pegar("staff", "list")) do if staff_list_string ~= "" then staff_list_string = staff_list_string .. "," end staff_list_string = staff_list_string .. staff_name end local formspec = "label[3.5,1;"..S("Gerenciamento de Moderadores").."]" .."label[9,1;"..S("Lista de Moderadores").."]" .."textlist[9,1.5;4.5,3;staff_list;"..staff_list_string.."]" .."field[3.8,2.3;5,1;new_staff;"..S("Novo moderador")..";]" .."button[3.5,2.9;5,1;add_staff;"..S("Adicionar Moderador").."]" .."button[3.5,3.8;5,1;rem_staff;"..S("Remover Moderador").."]" .."label[3.5,5;"..S("Interditar Servidor").."]" .."checkbox[3.5,5.5;interditar;"..S("Interditar Servidor")..";"..tostring(minetest.settings:get("gestor_interditado", false)).."]" .."textarea[3.8,6.3;10.2,1;;"..S("Expulsa todos os jogadores comuns e permite apenas moderadores conectarem")..";]" .."field[3.8,7.5;7,1;aviso_interditado;"..S("Aviso de Servidor Interditado")..";"..(minetest.settings:get("gestor_aviso_interditado") or "").."]" .."button[10.5,7.2;3,1;redefinir_msg;"..S("Redefinir").."]" return formspec end, on_receive_fields = function(player, fields) local name = player:get_player_name() -- Selecionar item if fields.staff_list and table.maxn(gestor.bd.pegar("staff", "list")) > 0 then local n = string.split(fields.staff_list, ":") acessos[name].escolha = tonumber(n[2]) or 1 gestor.menu_principal(name) --Adicionar moderador elseif fields.add_staff and fields.new_staff ~= "" then local staff_list = gestor.bd.pegar("staff", "list") table.insert(staff_list, fields.new_staff) gestor.bd.salvar("staff", "list", staff_list) gestor.menu_principal(name) -- Remover moderador elseif fields.rem_staff and acessos[name].escolha then local staff_list = gestor.bd.pegar("staff", "list") table.remove(staff_list, acessos[name].escolha) gestor.bd.salvar("staff", "list", staff_list) gestor.menu_principal(name) -- Interditar elseif fields.interditar then minetest.settings:set("gestor_interditado", fields.interditar) minetest.settings:write() gestor.interditar_servidor() -- Redefir mensagem de interdição elseif fields.redefinir_msg then minetest.settings:set("gestor_aviso_interditado", fields.aviso_interditado) -- Sair elseif fields.exit then acessos[name].escolha = nil end end, }) -- Interditar_servidor gestor.interditado = minetest.settings:get_bool("gestor_interditado", false) or false gestor.interditar_servidor = function() -- Altera variavel global de controle gestor.interditado = true local staff_list = gestor.bd.pegar("staff", "list") local staff_list_i = {} for _,n in ipairs(staff_list) do staff_list_i[n] = true end -- Mensagem local msg = minetest.settings:get("gestor_aviso_interditado") or "" -- Expulsa jogadores que nao fazem parte dos moderadores for _,player in ipairs(minetest.get_connected_players()) do local name = player:get_player_name() if staff_list_i[name] == nil and minetest.check_player_privs(name, {server=true}) ~= true then minetest.kick_player(name, msg) end end end -- Evita conectarem caso esteja interditado minetest.register_on_prejoinplayer(function(name) -- Mensagem local msg = minetest.settings:get("gestor_aviso_interditado") or "" if gestor.interditado == false then return end local staff_list = gestor.bd.pegar("staff", "list") local staff_list_i = {} for _,n in ipairs(staff_list) do staff_list_i[n] = true end if staff_list_i[name] == nil and minetest.check_player_privs(name, {server=true}) ~= true then return msg end end)