Remodelagem geral
parent
bd99318cc0
commit
8c045e6bb4
46
comandos.lua
46
comandos.lua
|
@ -10,51 +10,9 @@ minetest.register_chatcommand("gestor", {
|
|||
params = "[Nenhum]",
|
||||
description = "Abrir tela de gerenciamento",
|
||||
func = function(name)
|
||||
local player = minetest.get_player_by_name(name)
|
||||
player:set_attribute("gestor_aba", "inicio")
|
||||
minetest.after(1, gestor.menu_principal, name, true)
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
-- Comando de serializar estrutura
|
||||
minetest.register_chatcommand("serializar", {
|
||||
privs = {server=true},
|
||||
params = "[<arquivo/nome> <largura> <altura>]",
|
||||
description = "Serializa uma estrutura (recomenda-se 10 blocos de profundidade do solo da vila)",
|
||||
func = function(name, param)
|
||||
local m = string.split(param, " ")
|
||||
local param1, param2, param3 = m[1], m[2], m[3]
|
||||
if param1 then
|
||||
local player = minetest.get_player_by_name(name)
|
||||
local pos = player:getpos()
|
||||
if gestor.estruturador.salvar(pos, param1, param2, param3) then
|
||||
minetest.chat_send_player(name, "Estrutura serializada com sucesso")
|
||||
else
|
||||
minetest.chat_send_player(name, "Falha ao serializar estrutura")
|
||||
end
|
||||
else
|
||||
minetest.chat_send_player(name, "Comando invalido")
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
-- Comando de deserializar estrutura
|
||||
minetest.register_chatcommand("deserializar", {
|
||||
privs = {server=true},
|
||||
params = "[<arquivo/nome> <largura> <altura>]",
|
||||
description = "Serializa uma estrutura",
|
||||
func = function(name, param)
|
||||
local m = string.split(param, " ")
|
||||
local param1, param2, param3 = m[1], m[2], m[3]
|
||||
if param1 then
|
||||
local player = minetest.get_player_by_name(name)
|
||||
local pos = player:getpos()
|
||||
if gestor.estruturador.carregar(pos, param1, param2, param3) then
|
||||
minetest.chat_send_player(name, "Estrutura deserializada com sucesso")
|
||||
else
|
||||
minetest.chat_send_player(name, "Falha ao deserializar estrutura")
|
||||
end
|
||||
else
|
||||
minetest.chat_send_player(name, "Comando invalido")
|
||||
end
|
||||
end
|
||||
})
|
||||
|
|
|
@ -1,3 +1,2 @@
|
|||
default
|
||||
areas?
|
||||
memor
|
||||
|
|
262
estruturador.lua
262
estruturador.lua
|
@ -1,262 +0,0 @@
|
|||
--
|
||||
-- Mod gestor
|
||||
--
|
||||
-- Estruturador
|
||||
--
|
||||
|
||||
-- Diretorio do Mundo
|
||||
local worldpath = minetest.get_worldpath()
|
||||
|
||||
-- Nodes que podem ter metadados serializados
|
||||
local meta_ok = {
|
||||
"terrenos:livre",
|
||||
"default:sign_wall_wood",
|
||||
"default:sign_wall_steel",
|
||||
"bau_comunitario:bau",
|
||||
"antipvp:placa",
|
||||
"portais:bilheteria",
|
||||
"macromoney:caixa_de_banco",
|
||||
}
|
||||
|
||||
-- Assegurar pasta de estruturas
|
||||
do
|
||||
local list = minetest.get_dir_list(worldpath, true)
|
||||
local r = false
|
||||
for n, ndir in ipairs(list) do
|
||||
if ndir == "gestor" then
|
||||
r = true
|
||||
break
|
||||
end
|
||||
end
|
||||
if r == false then
|
||||
minetest.mkdir(worldpath.."/gestor")
|
||||
end
|
||||
|
||||
list = minetest.get_dir_list(worldpath.."/gestor", true)
|
||||
r = false
|
||||
for n, ndir in ipairs(list) do
|
||||
if ndir == "estruturas" then
|
||||
r = true
|
||||
break
|
||||
end
|
||||
end
|
||||
if r == false then
|
||||
minetest.mkdir(worldpath.."/gestor/estruturas")
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
-- Variavel global de estruturador
|
||||
gestor.estruturador = {}
|
||||
|
||||
|
||||
-- Arredondar posicao
|
||||
local arredondar = function(pos)
|
||||
local r = {}
|
||||
if pos.x > (math.floor(pos.x)+0.5) then
|
||||
r.x = math.ceil(pos.x)
|
||||
else
|
||||
r.x = math.floor(pos.x)
|
||||
end
|
||||
if pos.y > (math.floor(pos.y)+0.5) then
|
||||
r.y = math.ceil(pos.y)
|
||||
else
|
||||
r.y = math.floor(pos.y)
|
||||
end
|
||||
if pos.z > (math.floor(pos.z)+0.5) then
|
||||
r.z = math.ceil(pos.z)
|
||||
else
|
||||
r.z = math.floor(pos.z)
|
||||
end
|
||||
return r
|
||||
end
|
||||
|
||||
|
||||
-- Serializar estrutura
|
||||
gestor.estruturador.salvar = function(pos, nome, largura, altura, path, silencio)
|
||||
if not pos or not nome then return false end
|
||||
-- arredondar posicao
|
||||
local as = pos.x
|
||||
pos = arredondar(pos)
|
||||
|
||||
if path == nil then
|
||||
path = worldpath .. "/gestor/estruturas"
|
||||
end
|
||||
largura = largura or gestor.diretrizes.estruturas[nome][1]
|
||||
altura = altura or gestor.diretrizes.estruturas[nome][1]
|
||||
if not largura or not altura then return false end
|
||||
|
||||
-- Coordenada do extremo oposto da estrutura
|
||||
local pmax = {x=pos.x+largura, y=pos.y+altura, z=pos.z+largura}
|
||||
|
||||
-- Criar arquivo schematic
|
||||
if silencio == nil or silencio == false then minetest.chat_send_all("Criando arquivo esquematico da estrutura ...") end
|
||||
minetest.create_schematic(pos, pmax, {}, path .. "/"..nome..".mts")
|
||||
|
||||
-- Metadados de alguns nodes
|
||||
local metadados = {}
|
||||
|
||||
-- Metadados dos nodes
|
||||
metadados.nodes = {}
|
||||
|
||||
-- Armazena as dimensoes
|
||||
metadados.altura = altura
|
||||
metadados.largura = largura
|
||||
|
||||
-- Pegar nodes quem podem ter seus metadados serializados
|
||||
local nodes = minetest.find_nodes_in_area(pos, pmax, meta_ok)
|
||||
|
||||
-- Pegar metadados dos nodes encontrados
|
||||
for _,pn in ipairs(nodes) do
|
||||
-- Serializa os metadados
|
||||
local meta = minetest.get_meta(pn):to_table()
|
||||
|
||||
-- Calcula a posicao relativa a coordenada extremo-negativa
|
||||
local pr = {x=pn.x-pos.x, y=pn.y-pos.y, z=pn.z-pos.z}
|
||||
metadados.nodes[pr.x.." "..pr.y.." "..pr.z] = meta
|
||||
end
|
||||
|
||||
-- Criar arquivo de metadados
|
||||
local output = io.open(path .. "/"..nome..".meta", "w")
|
||||
|
||||
-- Serializa os metadados
|
||||
if silencio == nil or silencio == false then minetest.chat_send_all("Serializando metadados ...") end
|
||||
metadados = minetest.serialize(metadados)
|
||||
|
||||
if silencio == nil or silencio == false then minetest.chat_send_all("Escrevendo metadados serializados em arquivo ...") end
|
||||
output:write(metadados)
|
||||
io.close(output)
|
||||
|
||||
-- Estrutura serializada com sucesso
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
-- Deserializar uma estrutura
|
||||
gestor.estruturador.carregar = function(pos, nome, largura, altura, path, silencio)
|
||||
if pos == nil or nome == nil then return false end
|
||||
if silencio == nil or silencio == false then minetest.chat_send_all("Criando estrutura. Aguarde...") end
|
||||
-- Coleta de dados
|
||||
local dados = {}
|
||||
if path == nil then
|
||||
path = worldpath .. "/gestor/estruturas"
|
||||
end
|
||||
|
||||
-- Obter metadados
|
||||
local metadados = ""
|
||||
local input = io.open(path .. "/"..nome..".meta", "r")
|
||||
if input then
|
||||
metadados = input:read("*l")
|
||||
else
|
||||
return false
|
||||
end
|
||||
if not metadados then
|
||||
minetest.chat_send_all("Erro. Faltou o arquivo de metadados")
|
||||
return false
|
||||
end
|
||||
io.close(input)
|
||||
|
||||
-- Deserializar metadados
|
||||
metadados = minetest.deserialize(metadados)
|
||||
|
||||
altura = metadados.altura
|
||||
largura = metadados.largura
|
||||
|
||||
|
||||
|
||||
-- Coordenada do extremo oposto da estrutura
|
||||
local pmax = {x=pos.x+largura, y=pos.y+altura, z=pos.z+largura}
|
||||
|
||||
-- Colocar estrutura esquematica
|
||||
minetest.place_schematic(pos, path.."/"..nome..".mts", nil, nil, true)
|
||||
|
||||
-- Restaurar metadados nos nodes
|
||||
for pos_string,meta in pairs(metadados.nodes) do
|
||||
|
||||
-- Obter pos em tabela
|
||||
local pos_tb = string.split(pos_string, " ")
|
||||
pos_tb = {x=tonumber(pos_tb[1]),y=tonumber(pos_tb[2]),z=tonumber(pos_tb[3])}
|
||||
|
||||
-- Calcular pos real do node
|
||||
local pn = {x=pos.x+pos_tb.x, y=pos.y+pos_tb.y, z=pos.z+pos_tb.z}
|
||||
|
||||
-- Salva metadados
|
||||
minetest.get_meta(pn):from_table(meta)
|
||||
|
||||
end
|
||||
|
||||
-- Estrutura construida com sucesso
|
||||
if silencio == nil or silencio == false then minetest.chat_send_all("Estrutura construida. Aguarde o mapa ser renderizado.") end
|
||||
return true
|
||||
end
|
||||
|
||||
--
|
||||
-----
|
||||
--------
|
||||
-- Nodes restaurador de escadarias
|
||||
local criar_nivel_escadaria = function(pos, largura, name)
|
||||
local limx, limz = pos.x+(largura/2), pos.z+(largura/2)
|
||||
local x, z = pos.x-(largura/2), pos.z-(largura/2)
|
||||
while (x<=limx) do
|
||||
z = pos.z-(largura/2)
|
||||
while (z<=limz) do
|
||||
local npos = {x=x,y=pos.y,z=z}
|
||||
local node = minetest.get_node(npos)
|
||||
if node.name == "ignore" then
|
||||
minetest.get_voxel_manip():read_from_map(npos, npos)
|
||||
node = minetest.get_node(npos)
|
||||
end
|
||||
if node.name == "air" then
|
||||
minetest.set_node(npos, {name=name})
|
||||
end
|
||||
z=z+1
|
||||
end
|
||||
x=x+1
|
||||
end
|
||||
end
|
||||
local criar_escadaria = function(pos, node)
|
||||
local npos = {x=pos.x,y=pos.y-10,z=pos.z}
|
||||
local altura = pos.y - 8
|
||||
while altura <= pos.y do
|
||||
criar_nivel_escadaria({x=pos.x,y=altura,z=pos.z}, (math.abs(pos.y-altura)*4)+7, node)
|
||||
altura = altura + 1
|
||||
end
|
||||
end
|
||||
minetest.register_node("gestor:escadaria", {
|
||||
description = "Restaurador de escadaria",
|
||||
tiles = {
|
||||
"default_pine_wood.png",
|
||||
"default_pine_wood.png",
|
||||
"default_pine_wood.png",
|
||||
"default_pine_wood.png",
|
||||
"default_pine_wood.png",
|
||||
"default_pine_wood.png"
|
||||
},
|
||||
groups = {choppy=2,oddly_breakable_by_hand=2,wood=1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
on_rightclick = function(pos)
|
||||
local node = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z})
|
||||
criar_escadaria({x=pos.x,y=pos.y-1,z=pos.z}, node.name)
|
||||
minetest.set_node(pos, {name="air"})
|
||||
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name="air"})
|
||||
end,
|
||||
})
|
||||
-- Fim
|
||||
--------
|
||||
-----
|
||||
--
|
||||
|
||||
-- Pegar metadados da estrutura
|
||||
gestor.estruturador.get_meta = function(nome)
|
||||
local path = worldpath .. "/gestor/estruturas"
|
||||
|
||||
-- Obter metadados
|
||||
local metadados = ""
|
||||
local input = io.open(path .. "/"..nome..".meta", "r")
|
||||
if not input then return nil end
|
||||
metadados = input:read("*l")
|
||||
io.close(input)
|
||||
|
||||
return minetest.deserialize(metadados)
|
||||
end
|
11
init.lua
11
init.lua
|
@ -22,16 +22,15 @@ local modpath = minetest.get_modpath("gestor")
|
|||
gestor = {}
|
||||
|
||||
-- Banco de Dados do gestor
|
||||
gestor.bd = memor.montar_bd()
|
||||
gestor.bd = dofile(modpath.."/lib/memor.lua")
|
||||
|
||||
-- Carregar scripts
|
||||
notificar("Carregando...")
|
||||
dofile(modpath.."/diretrizes.lua")
|
||||
dofile(modpath.."/estruturador.lua")
|
||||
dofile(modpath.."/protetor.lua")
|
||||
dofile(modpath.."/lugares_avulsos.lua")
|
||||
dofile(modpath.."/vilas.lua")
|
||||
dofile(modpath.."/menu_principal.lua")
|
||||
dofile(modpath.."/comandos.lua")
|
||||
dofile(modpath.."/alerta_de_crash.lua")
|
||||
-- Recursos
|
||||
dofile(modpath.."/recursos/desligar.lua")
|
||||
dofile(modpath.."/recursos/conf.lua")
|
||||
dofile(modpath.."/recursos/alerta_de_crash.lua")
|
||||
notificar("OK")
|
||||
|
|
|
@ -0,0 +1,302 @@
|
|||
--[[
|
||||
Lib Memor para Minetest
|
||||
Memor v1.3 Copyright (C) 2017 BrunoMine (https://github.com/BrunoMine)
|
||||
|
||||
Recebeste uma cópia da GNU Lesser General
|
||||
Public License junto com esse software,
|
||||
se não, veja em <http://www.gnu.org/licenses/>.
|
||||
|
||||
Inicializador de scripts
|
||||
]]
|
||||
|
||||
local modname = minetest.get_current_modname()
|
||||
|
||||
local modpath = minetest.get_modpath(modname)
|
||||
|
||||
-- Variavel global
|
||||
local memor = {}
|
||||
|
||||
-- Rotinas de interação com arquivos
|
||||
|
||||
-- Diretorio do mundo
|
||||
local wpath = minetest.get_worldpath()
|
||||
|
||||
-- Cria um diretório na pasta do mundo
|
||||
function memor.mkdir(dir)
|
||||
if not dir then
|
||||
minetest.log("error", "[Memor] Nenhum diretorio especificado (em memor.mkdir)")
|
||||
return false
|
||||
end
|
||||
|
||||
dir = wpath.."/"..dir
|
||||
|
||||
if minetest.mkdir then
|
||||
minetest.mkdir(dir)
|
||||
else
|
||||
os.execute('mkdir "' .. dir .. '"')
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
-- Criar um arquivo com os dados serializados (Salvar)
|
||||
function memor.escrever(dir, arquivo, dados, is_text)
|
||||
|
||||
if dir == nil or arquivo == nil or dados == nil then
|
||||
minetest.log("error", "[Memor] Faltou dados (em memor.escrever)")
|
||||
return false
|
||||
end
|
||||
|
||||
if is_text ~= true then
|
||||
dados = minetest.serialize(dados)
|
||||
else
|
||||
dados = string.format(dados)
|
||||
end
|
||||
if dados == "" then
|
||||
minetest.log("error", "[Memor] Dado fornecido invalido (em memor.escrever)")
|
||||
return false
|
||||
end
|
||||
local saida = io.open(wpath .. "/" .. modname .. "/" .. dir .. "/" .. arquivo, "w")
|
||||
if saida then
|
||||
saida:write(dados)
|
||||
io.close(saida)
|
||||
return true
|
||||
end
|
||||
-- Cria diretorio (tabela) caso nao exista
|
||||
memor.mkdir(modname.."/"..dir)
|
||||
saida = io.open(wpath .. "/" .. modname .. "/" .. dir .. "/" .. arquivo, "w")
|
||||
if saida then
|
||||
saida:write(dados)
|
||||
io.close(saida)
|
||||
return true
|
||||
end
|
||||
|
||||
minetest.log("error", "[Memor] Impossivel escrever dados em "..modname.."/"..dir.."/"..arquivo.." (em memor.escrever)")
|
||||
return false
|
||||
end
|
||||
|
||||
-- Ler dados de um arquivo de memória (Carregar)
|
||||
function memor.ler(dir, arquivo, is_text)
|
||||
|
||||
if dir == nil or arquivo == nil then
|
||||
minetest.log("error", "[Memor] Faltou dados (em memor.ler)")
|
||||
return nil
|
||||
end
|
||||
|
||||
local entrada = io.open(wpath .. "/" .. modname .. "/" .. dir .. "/" .. arquivo, "r")
|
||||
if entrada ~= nil then
|
||||
local dados
|
||||
if is_text ~= true then
|
||||
dados = entrada:read("*l")
|
||||
dados = minetest.deserialize(dados)
|
||||
else
|
||||
dados = entrada:read("*a")
|
||||
dados = dados
|
||||
end
|
||||
io.close(entrada)
|
||||
return dados
|
||||
else
|
||||
minetest.log("error", "[Memor] pasta e/ou arquivo inexiste(s) (em memor.ler)")
|
||||
return nil
|
||||
end
|
||||
end
|
||||
|
||||
-- Deletar um arquivo
|
||||
function memor.deletar(dir, arquivo)
|
||||
|
||||
if not dir or not arquivo then
|
||||
minetest.log("error", "[Memor] Faltou dados (em memor.deletar)")
|
||||
return false
|
||||
end
|
||||
|
||||
os.remove(wpath .. "/" .. modname .. "/" .. dir .. "/" .. arquivo)
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
-- Deletar um diretório
|
||||
function memor.deletar_dir(dir)
|
||||
|
||||
if not dir then
|
||||
minetest.log("error", "[Memor] Faltou dados (em memor.deletar_dir)")
|
||||
return false
|
||||
end
|
||||
|
||||
local list = minetest.get_dir_list(wpath .. "/" .. modname .. "/" .. dir)
|
||||
|
||||
for n, arquivo in ipairs(list) do
|
||||
os.remove(wpath .. "/" .. modname .. "/" .. dir .. "/" .. arquivo)
|
||||
end
|
||||
|
||||
os.remove(wpath .. "/" .. modname .. "/" .. dir)
|
||||
return true
|
||||
end
|
||||
|
||||
-- Fim
|
||||
|
||||
-- Rotinas de consutas a arquivos
|
||||
|
||||
-- Verifica diretorios e corrige
|
||||
verificar = function(subdir)
|
||||
|
||||
|
||||
-- Verifica e corrige diretorio
|
||||
local list = minetest.get_dir_list(minetest.get_worldpath(), true)
|
||||
local r = false
|
||||
for n, ndir in ipairs(list) do
|
||||
if ndir == modname then
|
||||
r = true
|
||||
break
|
||||
end
|
||||
end
|
||||
-- Diretorio inexistente
|
||||
if r == false then
|
||||
memor.mkdir(modname)
|
||||
end
|
||||
|
||||
-- Verifica e corrige subdiretorio
|
||||
local list = minetest.get_dir_list(minetest.get_worldpath().."/"..modname, true)
|
||||
local r = false
|
||||
for n, ndir in ipairs(list) do
|
||||
if ndir == subdir then
|
||||
r = true
|
||||
break
|
||||
end
|
||||
end
|
||||
-- Subdiretorio inexistente
|
||||
if r == false then
|
||||
memor.mkdir(modname.."/"..subdir)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
-- Inserir dados
|
||||
memor.inserir = function(tb, index, valor, is_text)
|
||||
|
||||
-- Tenta inserir direto
|
||||
if memor.escrever(tb, index, valor, is_text) == true then return true end
|
||||
|
||||
verificar(tb)
|
||||
|
||||
if memor.escrever(tb, index, valor, is_text) then
|
||||
return true
|
||||
else
|
||||
minetest.log("error", "[Memor] Impossivel salvar dados (em memor.inserir)")
|
||||
return false
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
-- Ler dados
|
||||
memor.consultar = function(tb, index, is_text)
|
||||
|
||||
local r = memor.ler(tb, index, is_text)
|
||||
if r == nil then
|
||||
local mod = modname
|
||||
minetest.log("error", "[Memor] Registro acessado inexistente ("..dump(mod).."/"..dump(tb).."/"..dump(index)..") (em memor.consultar)")
|
||||
end
|
||||
|
||||
return r
|
||||
|
||||
end
|
||||
|
||||
|
||||
-- Verificar dados
|
||||
memor.verificar = function(subdir, arquivo)
|
||||
|
||||
local dir = modname
|
||||
|
||||
local list = minetest.get_dir_list(wpath .. "/" .. dir .. "/" .. subdir)
|
||||
local r = false
|
||||
for n, arq in ipairs(list) do
|
||||
if arq == arquivo then
|
||||
r = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if r then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
-- Listar
|
||||
memor.listar = function(subdir)
|
||||
|
||||
local dir = modname
|
||||
|
||||
if subdir then
|
||||
|
||||
local list = minetest.get_dir_list(wpath .. "/" .. dir .. "/" .. subdir)
|
||||
|
||||
if list == nil then
|
||||
minetest.log("error", "[Memor] Impossivel listar diretorio (em memor.listar)")
|
||||
return false
|
||||
else
|
||||
return list
|
||||
end
|
||||
|
||||
else
|
||||
local list = minetest.get_dir_list(wpath .. "/" .. dir)
|
||||
|
||||
if list == nil then
|
||||
minetest.log("error", "[Memor] Impossivel listar diretorio (em memor.listar)")
|
||||
return false
|
||||
else
|
||||
return list
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Fim
|
||||
|
||||
-- Montagem de banco de dados
|
||||
|
||||
bd = {}
|
||||
|
||||
-- Inserir dados comuns
|
||||
bd.salvar = function(tb, index, valor)
|
||||
return memor.inserir(tb, index, valor)
|
||||
end
|
||||
|
||||
-- Inserir textos complexos
|
||||
bd.salvar_texto = function(tb, index, valor)
|
||||
return memor.inserir(tb, index, valor, true)
|
||||
end
|
||||
|
||||
-- Consultar dados
|
||||
bd.pegar = function(tb, index)
|
||||
return memor.consultar(tb, index)
|
||||
end
|
||||
|
||||
-- Inserir dados
|
||||
bd.pegar_texto = function(tb, index, valor)
|
||||
return memor.consultar(tb, index, true)
|
||||
end
|
||||
|
||||
-- Verificar dados
|
||||
bd.verif = function(tb, index)
|
||||
return memor.verificar(tb, index)
|
||||
end
|
||||
|
||||
-- Remover dados
|
||||
bd.remover = function(tb, index)
|
||||
return memor.deletar(tb, index)
|
||||
end
|
||||
|
||||
-- Remover tabela
|
||||
bd.drop_tb = function(tb)
|
||||
return memor.deletar_dir(tb)
|
||||
end
|
||||
|
||||
-- Listar dados
|
||||
bd.listar = function(tb)
|
||||
return memor.listar(tb)
|
||||
end
|
||||
|
||||
return bd
|
||||
|
||||
-- Fim
|
|
@ -1,16 +0,0 @@
|
|||
--
|
||||
-- Mod gestor
|
||||
--
|
||||
-- Lugares avulsos (gerenciamento)
|
||||
--
|
||||
|
||||
-- Variavel global
|
||||
gestor.lugares_avulsos = {}
|
||||
|
||||
-- Definir um lugar no banco de dados (usado para inserir e editar)
|
||||
gestor.lugares_avulsos.definir = function(nome, status, texto)
|
||||
if not nome or not texto then return false end
|
||||
gestor.bd:salvar("avulsos", nome, {status=status, texto=texto})
|
||||
return true
|
||||
end
|
||||
|
|
@ -9,154 +9,57 @@
|
|||
Menu Principal (Painel do gestor)
|
||||
]]
|
||||
|
||||
local escolha_local_avulso = {}
|
||||
-- Abas registradas
|
||||
gestor.abas = {}
|
||||
|
||||
local escolha_vila = memor.online()
|
||||
|
||||
-- Caminho do mod
|
||||
local modpath = minetest.get_modpath("gestor")
|
||||
|
||||
-- Desordenar tabela
|
||||
local desordenar = function(tb)
|
||||
local ntb = {}
|
||||
for _,d in ipairs(tb) do
|
||||
ntb[d] = {}
|
||||
end
|
||||
return ntb
|
||||
end
|
||||
|
||||
-- Lista-string configurada altomaticamente
|
||||
gestor.lista_vilas = ""
|
||||
local i = 1
|
||||
while (gestor.vilas[i]~=nil) do
|
||||
gestor.lista_vilas = gestor.lista_vilas..gestor.vilas[i]
|
||||
if i < table.maxn(gestor.vilas) then gestor.lista_vilas = gestor.lista_vilas .. "," end
|
||||
i = i + 1
|
||||
-- Registrar aba
|
||||
local botoes_abas = {
|
||||
"0,1;3,1", -- 1
|
||||
"0,2;3,1", -- 2
|
||||
"0,3;3,1", -- 3
|
||||
"0,4;3,1", -- 4
|
||||
"0,5;3,1", -- 5
|
||||
"0,6;3,1", -- 6
|
||||
"0,7;3,1", -- 7
|
||||
"0,8;3,1", -- 8
|
||||
"0,9;3,1", -- 9
|
||||
}
|
||||
gestor.registrar_aba = function(name, def)
|
||||
gestor.abas[name] = def
|
||||
gestor.abas[name].formspec_button = "button["..botoes_abas[1]..";"..name..";"..def.titulo.."]"
|
||||
table.remove(botoes_abas, 1)
|
||||
end
|
||||
|
||||
-- Abrir Menu principal
|
||||
local aba = {} -- salva em que aba o jogador esta
|
||||
gestor.menu_principal = function(name, inicio)
|
||||
if inicio == true then aba[name] = "inicio" end
|
||||
gestor.menu_principal = function(name)
|
||||
local player = minetest.get_player_by_name(name)
|
||||
|
||||
-- Verifica aba em acesso
|
||||
local aba_atual = player:get_attribute("gestor_aba")
|
||||
if aba_atual == nil then
|
||||
aba_atual = "inicio"
|
||||
player:set_attribute("gestor_aba", aba_atual)
|
||||
end
|
||||
|
||||
local formspec = "size[14,11]"
|
||||
..default.gui_bg
|
||||
..default.gui_bg_img
|
||||
.."label[0,0;Gestor Administrativos do Servidor]"
|
||||
.."button[0,1;3,1;desligar;Desligar]" -- Botao 1
|
||||
.."button[0,2;3,1;lugares;Lugares]" -- Botao 2
|
||||
.."button[0,3;3,1;conf;Diretrizes]" -- Botao 3
|
||||
.."button[0,4;3,1;alerta_de_crash;Alerta de Crash]" -- Botao 4
|
||||
--.."button[0,5;3,1;;]" -- Botao 5
|
||||
--.."button[0,6;3,1;;]" -- Botao 6
|
||||
--.."button[0,7;3,1;;]" -- Botao 7
|
||||
--.."button[0,8;3,1;;]" -- Botao 8
|
||||
--.."button[0,9;3,1;;]" -- Botao 9
|
||||
|
||||
|
||||
-- Botoes de abas
|
||||
for name_aba,def in pairs(gestor.abas) do
|
||||
formspec = formspec..def.formspec_button
|
||||
end
|
||||
|
||||
--
|
||||
-- Gerando Abas
|
||||
--
|
||||
|
||||
-- Lugares
|
||||
if aba[name] == "lugares" then
|
||||
local lugares = {}
|
||||
lugares["centro"] = desordenar(minetest.get_dir_list(minetest.get_worldpath().."/gestor/centro"))
|
||||
lugares["vilas"] = desordenar(minetest.get_dir_list(minetest.get_worldpath().."/gestor/lugares"))
|
||||
lugares["avulsos"] = desordenar(minetest.get_dir_list(minetest.get_worldpath().."/gestor/avulsos"))
|
||||
local status_lugares = {}
|
||||
|
||||
-- Status e teleporte do Centro do Servidor
|
||||
if gestor.bd:verif("centro", "status") then
|
||||
status_lugares["centro"] = "Ativo"
|
||||
formspec = formspec.."button_exit[7,2.5;3,1;ir_centro;Ir para Centro]"
|
||||
formspec = formspec.."button[10,2.5;3,1;tp_centro;Redefinir pos. tp.]"
|
||||
else
|
||||
status_lugares["centro"] = "Inativo"
|
||||
end
|
||||
if aba_atual ~= "inicio" then
|
||||
|
||||
-- Preparar variaveis para Lugares avulsos
|
||||
local lista_avulsos = ""
|
||||
local desc_avulso = "Selecione um lugar \nna lista ao lado \n<<<<<<<<<<<<<\npara saber sobre"
|
||||
.."\nMaximizar a tela \najuda na leitura da \nlista e do texto"
|
||||
local n = 0
|
||||
for nome_avulso, v in pairs(lugares["avulsos"]) do
|
||||
if lista_avulsos ~= "" then lista_avulsos = lista_avulsos.."," end
|
||||
if v.status then lista_avulsos = lista_avulsos.."OK |" else lista_avulsos = lista_avulsos.."PEND. |" end
|
||||
lista_avulsos = lista_avulsos.." "..nome_avulso
|
||||
n = n + 1
|
||||
if tonumber(escolha_local_avulso[name]) == n then desc_avulso = v.texto end
|
||||
end
|
||||
if lista_avulsos == "" then lista_avulsos = "Nenhum" end
|
||||
formspec = formspec..
|
||||
"label[4,1;Lugares]"..
|
||||
-- Centro do Servidor
|
||||
"label[4,2;Centro do Servidor - Spawn ("..status_lugares["centro"]..")]"..
|
||||
"button[4,2.5;3,1;construir_centro;Constrir Aqui]"..
|
||||
-- Vilas
|
||||
"label[4,4;Vilas]"..
|
||||
"dropdown[4,4.5;4,1;vila;"..gestor.lista_vilas..";1]"..
|
||||
"button[8,4.4;2.5,1;construir_vila;Constrir Aqui]"..
|
||||
"button_exit[10.5,4.4;3.1,1;tp_vila;Definir spawn de vila]"..
|
||||
-- Lugares Avulsos
|
||||
"label[4,6;Lugares Avulsos]"..
|
||||
"textlist[4,6.5;5,4;avulsos;"..lista_avulsos.."]"..
|
||||
"textarea[9.4,6.48;4.5,4.73;desc_avulso;Sobre o lugar;"..desc_avulso.."]"
|
||||
|
||||
-- Diretrizes
|
||||
elseif aba[name] == "diretrizes" then
|
||||
|
||||
formspec = formspec
|
||||
.."label[4,1;Diretrizes]"
|
||||
.."label[4,2;Ponto de Spawn]"
|
||||
.."button_exit[4,2.4;3,1;definir_spawn;Definir Aqui]"
|
||||
.."button_exit[7,2.4;3,1;ir_spawn;Ir para Spawn]"
|
||||
.."field[4.3,4.1;3,1;slots;Limite de Jogadores;"..minetest.setting_get("max_users").."]"
|
||||
.."button_exit[7,3.8;3,1;definir_slots;Redefinir Limite]"
|
||||
|
||||
-- Alerta de crash
|
||||
elseif aba[name] == "alerta_de_crash" then
|
||||
-- Gerar formspec
|
||||
formspec = formspec .. gestor.abas[aba_atual].get_formspec(name)
|
||||
|
||||
-- Pegar dados
|
||||
local status_alerta_de_crash = minetest.setting_getbool("gestor_alerta_de_crash") or false
|
||||
local servidor_smtp = minetest.setting_get("gestor_servidor_smtp") or "-"
|
||||
local login_smtp = minetest.setting_get("gestor_login_smtp") or "-"
|
||||
local senha_login_smtp = minetest.setting_get("gestor_senha_login_smtp")
|
||||
local email_destinatario = minetest.setting_get("gestor_email_destinatario") or "-"
|
||||
local titulo = minetest.setting_get("gestor_titulo_email") or "-"
|
||||
local texto = minetest.setting_get("gestor_texto_email") or "-"
|
||||
|
||||
local status_senha = "nenhuma"
|
||||
if senha_login_smtp then
|
||||
status_senha = "salva"
|
||||
end
|
||||
|
||||
|
||||
if status_alerta_de_crash == false then
|
||||
status_alerta_de_crash = "1"
|
||||
else
|
||||
status_alerta_de_crash = "2"
|
||||
end
|
||||
|
||||
formspec = formspec
|
||||
|
||||
.."label[4,1;Alerta de Crash]"
|
||||
|
||||
-- Sistema Verificador AntiCrash
|
||||
.."label[4,2;Sistema Verificador AntiCrash]"
|
||||
.."button[4,2.6;3,1;salvar;Salvar Dados]"
|
||||
-- Sistema Notificador via Email
|
||||
.."label[4,5;Sistema Notificador via Email]"
|
||||
.."label[4,5.4;Estado]"
|
||||
|
||||
.."dropdown[4,5.8;2,1;status_email;Inativo,Ativo;"..status_alerta_de_crash.."]"
|
||||
.."field[6.3,6;4.3,1;login_smtp;Login emissor;"..login_smtp.."]"
|
||||
.."pwdfield[10.6,6;3.3,1;senha;Senha ("..status_senha..")]"
|
||||
.."field[4.3,7.2;9.6,1;servidor_smtp;Servidor SMTP de envio (host:porta);"..servidor_smtp.."]"
|
||||
.."field[4.3,8.4;5,1;titulo;Titulo da mensagem de email enviada;"..titulo.."]"
|
||||
.."field[9.3,8.4;4.6,1;email_destinatario;Email do destinatario;"..email_destinatario.."]"
|
||||
.."field[4.3,9.6;9.6,1;texto;Texto;"..texto.."]"
|
||||
.."button[4,10;5,1;testar_email;Enviar mensagem de teste]"
|
||||
|
||||
end
|
||||
|
||||
-- Exibir tela
|
||||
|
@ -167,283 +70,36 @@ end
|
|||
-- Receptor de campos
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
|
||||
-- Verifica aba em acesso
|
||||
local aba_atual = player:get_attribute("gestor_aba")
|
||||
if aba_atual == nil then
|
||||
aba_atual = "inicio"
|
||||
player:set_attribute("gestor_aba", aba_atual)
|
||||
end
|
||||
|
||||
-- Menu Principal
|
||||
if formname == "gestor:menu_principal" then
|
||||
local name = player:get_player_name()
|
||||
|
||||
--
|
||||
-- Alternar aba selecionada
|
||||
--
|
||||
|
||||
if fields.lugares then -- Lugares
|
||||
aba[name] = "lugares"
|
||||
gestor.menu_principal(name)
|
||||
return true
|
||||
elseif fields.conf then -- Diretrizes
|
||||
aba[name] = "diretrizes"
|
||||
gestor.menu_principal(name)
|
||||
return true
|
||||
elseif fields.alerta_de_crash then -- Alerta de Crash
|
||||
aba[name] = "alerta_de_crash"
|
||||
gestor.menu_principal(name)
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
-- Botao Desligar servidor
|
||||
if fields.desligar then
|
||||
minetest.show_formspec(name, "gestor:aviso_desligamento", "size[4,1.8]"..
|
||||
default.gui_bg..
|
||||
default.gui_bg_img..
|
||||
"label[0,0;Tem certeza que quer \ndesligar do servidor?]"..
|
||||
"button[0,1;2,1;cancelar;Cancelar]"..
|
||||
"button_exit[2,1;2,1;ok;Sim]"
|
||||
)
|
||||
end
|
||||
|
||||
--
|
||||
-- Recebendo campos de Abas
|
||||
--
|
||||
|
||||
-- Lugares
|
||||
if aba[name] == "lugares" then
|
||||
if fields.construir_centro then
|
||||
minetest.show_formspec(name, "gestor:aviso_construir_centro", "size[4,1.8]"..
|
||||
default.gui_bg..
|
||||
default.gui_bg_img..
|
||||
"label[0,0;Tem certeza que quer \nconstruir Centro do Servidor]"..
|
||||
"button[0,1;2,1;cancelar;Cancelar]"..
|
||||
"button_exit[2,1;2,1;ok;Sim]"
|
||||
)
|
||||
elseif fields.construir_vila then
|
||||
escolha_vila[name] = fields.vila
|
||||
minetest.show_formspec(name, "gestor:aviso_construir_vila", "size[4,4.8]"..
|
||||
default.gui_bg..
|
||||
default.gui_bg_img..
|
||||
"label[0,0;Tem certeza que quer \nconstruir essa vila?]"..
|
||||
"label[0,1;"..core.colorize("#FF0000", "Fique na faixa de altura \n") .. core.colorize("#FF0000", "maxima dos picos em volta").."]"..
|
||||
"field[0.25,3.2;4,1;nome_vila;;Nome da Vila]"..
|
||||
"label[0,2;Arquivo de midia: \n"..escolha_vila[name].."]"..
|
||||
"button[0,4;2,1;cancelar;Cancelar]"..
|
||||
"button_exit[2,4;2,1;ok;Sim]"
|
||||
)
|
||||
elseif fields.tp_vila then
|
||||
if fields.vila then
|
||||
if gestor.bd:verif("vilas", fields.vila) then
|
||||
local dados_vila = gestor.bd:pegar("vilas", fields.vila)
|
||||
gestor.bd:salvar("vilas", fields.vila, {nome=dados_vila.nome, pos=player:getpos()})
|
||||
minetest.chat_send_player(name, "Posicao de teleporte da vila "..fields.vila.." redefinido para esse local.")
|
||||
else
|
||||
minetest.chat_send_player(name, "Vila "..fields.vila.." ainda nao existe.")
|
||||
end
|
||||
else
|
||||
minetest.log("error", "Nome da vila parece inconsistente ("..dump(fields.vila)..").")
|
||||
end
|
||||
elseif fields.ir_centro then
|
||||
player:setpos(gestor.bd:pegar("centro", "pos"))
|
||||
minetest.chat_send_player(name, "Teleportado para o Centro do Servidor")
|
||||
elseif fields.tp_centro then
|
||||
gestor.bd:salvar("centro", "pos", player:getpos())
|
||||
minetest.show_formspec(name, "gestor:aviso", "size[4,1.8]"..
|
||||
default.gui_bg..
|
||||
default.gui_bg_img..
|
||||
"label[0,0;AVISO\nPosicao de teleport \ndo Centro do Servidor \nredefinido para aqui]"
|
||||
)
|
||||
minetest.after(2, gestor.menu_principal, name)
|
||||
elseif fields.avulsos then
|
||||
local n = string.split(fields.avulsos, ":")
|
||||
escolha_local_avulso[name] = n[2]
|
||||
-- Alternar aba
|
||||
for name_aba,dados in pairs(gestor.abas) do
|
||||
if fields[name_aba] then
|
||||
-- Gerar formspec
|
||||
player:set_attribute("gestor_aba", name_aba)
|
||||
gestor.menu_principal(name)
|
||||
end
|
||||
|
||||
-- Diretrizes
|
||||
elseif aba[name] == "diretrizes" then
|
||||
if fields.definir_spawn then
|
||||
local pos = player:getpos()
|
||||
minetest.setting_set("static_spawnpoint", pos.x.." "..pos.y.." "..pos.z)
|
||||
minetest.chat_send_player(name, "Spawn redefinido aqui.")
|
||||
elseif fields.ir_spawn then
|
||||
local pos = minetest.setting_get_pos("static_spawnpoint") or {x=0,y=0,z=0}
|
||||
player:setpos(pos)
|
||||
minetest.chat_send_player(name, "Teleportado para ponto de Spawn.")
|
||||
elseif fields.definir_slots then
|
||||
if tonumber(fields.slots) then
|
||||
minetest.setting_set("max_users", fields.slots)
|
||||
minetest.chat_send_player(name, "Limite de jogadores redefinido para "..fields.slots..".")
|
||||
else
|
||||
minetest.chat_send_player(name, "Digite um numero para o limite de jogadores")
|
||||
end
|
||||
end
|
||||
|
||||
-- Alerta de Crash
|
||||
elseif aba[name] == "alerta_de_crash" then
|
||||
|
||||
if fields.salvar then
|
||||
|
||||
-- Salvar todos os dados
|
||||
|
||||
-- Status de alerta de email
|
||||
if fields.status_email == "Ativo" then
|
||||
minetest.setting_setbool("gestor_alerta_de_crash", true)
|
||||
else
|
||||
minetest.setting_setbool("gestor_alerta_de_crash", false)
|
||||
end
|
||||
|
||||
-- Servidor SMTP
|
||||
if fields.servidor_smtp and fields.servidor_smtp ~= "-" then
|
||||
minetest.setting_set("gestor_servidor_smtp", fields.servidor_smtp)
|
||||
end
|
||||
|
||||
-- Login SMTP
|
||||
if fields.login_smtp and fields.login_smtp ~= "-" then
|
||||
minetest.setting_set("gestor_login_smtp", fields.login_smtp)
|
||||
end
|
||||
|
||||
-- Senha de Login SMTP
|
||||
if fields.senha and fields.senha ~= "" then
|
||||
minetest.setting_set("gestor_senha_login_smtp", fields.senha)
|
||||
end
|
||||
|
||||
-- Email do Destinatario
|
||||
if fields.email_destinatario and fields.email_destinatario ~= "-" then
|
||||
minetest.setting_set("gestor_email_destinatario", fields.email_destinatario)
|
||||
end
|
||||
|
||||
-- Titulo da mensagem de Email
|
||||
if fields.titulo and fields.titulo ~= "-" then
|
||||
minetest.setting_set("gestor_titulo_email", fields.titulo)
|
||||
end
|
||||
|
||||
-- Texto da mensagem de Email
|
||||
if fields.texto and fields.texto ~= "-" then
|
||||
minetest.setting_set("gestor_texto_email", fields.texto)
|
||||
end
|
||||
|
||||
minetest.show_formspec(name, "gestor:aviso", "size[4,1.8]"..
|
||||
default.gui_bg..
|
||||
default.gui_bg_img..
|
||||
"label[0,0;SUCESSO \nOs dados validos foram \nsalvos.]"
|
||||
)
|
||||
minetest.after(2, gestor.menu_principal, name)
|
||||
return
|
||||
|
||||
|
||||
elseif fields.testar_email then
|
||||
|
||||
if gestor.alerta_de_crash.enviar_email() then
|
||||
minetest.show_formspec(name, "gestor:aviso", "size[4,1.8]"..
|
||||
default.gui_bg..
|
||||
default.gui_bg_img..
|
||||
"label[0,0;FEITO \nComando de envio feito.\nVeja o arquivo de relatorio\ngestor_envios_de_alerta.out]"
|
||||
)
|
||||
else
|
||||
minetest.show_formspec(name, "gestor:aviso", "size[4,1.8]"..
|
||||
default.gui_bg..
|
||||
default.gui_bg_img..
|
||||
"label[0,0;FALHA \nFaltam dados para\nrealizar o comando de envio.\n]"
|
||||
)
|
||||
end
|
||||
minetest.after(2, gestor.menu_principal, name)
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--
|
||||
-- Janelas de aviso e outros
|
||||
--
|
||||
|
||||
-- Desligamento
|
||||
if formname == "gestor:aviso_desligamento" then
|
||||
local name = player:get_player_name()
|
||||
|
||||
if fields.ok then
|
||||
minetest.chat_send_all("*** Servidor desligando em 3 segundos. (Por "..name..")")
|
||||
minetest.after(3, minetest.chat_send_all, "*** Servidor Desligado")
|
||||
minetest.after(3, minetest.request_shutdown)
|
||||
end
|
||||
if fields.cancelar then
|
||||
gestor.menu_principal(name)
|
||||
end
|
||||
end
|
||||
-- Retornos para a aba registrada
|
||||
if aba_atual ~= "inicio" then
|
||||
|
||||
-- Construir Centro do Servidor
|
||||
if formname == "gestor:aviso_construir_centro" then
|
||||
local name = player:get_player_name()
|
||||
-- Retorno
|
||||
gestor.abas[aba_atual].on_receive_fields(player, fields)
|
||||
return
|
||||
end
|
||||
|
||||
if fields.ok then
|
||||
-- adquirindo dados
|
||||
local pos = player:getpos()
|
||||
local dados_estrutura = gestor.estruturador.get_meta("centro")
|
||||
if not dados_estrutura then return minetest.chat_send_player(name, "Estrutura nao encontrada") end
|
||||
local pos_c = {x=pos.x-(dados_estrutura.largura/2), y=pos.y-8, z=pos.z-(dados_estrutura.largura/2)}
|
||||
local n_spawn = {x=pos.x, y=pos.y+2, z=pos.z}
|
||||
-- Construir estrutura
|
||||
if gestor.estruturador.carregar(pos_c, "centro") == false then return minetest.chat_send_player(name, "Estrutura nao encontrada") end
|
||||
-- Proteger area da estrutura
|
||||
local resp = gestor.proteger_area(
|
||||
name, -- Quem registra
|
||||
name, -- Quem vai ser o dono
|
||||
"Centro", -- Nome(etiqueta) da area
|
||||
{x=pos.x-(dados_estrutura.largura/2)-100, y=2000, z=pos.z-(dados_estrutura.largura/2)-100}, -- um dos cantos opostos
|
||||
{x=pos.x+(dados_estrutura.largura/2)+100, y=pos.y-60, z=pos.z+(dados_estrutura.largura/2)+100} -- outro dos cantos opostos
|
||||
)
|
||||
if resp ~= true then minetest.chat_send_player(name, "Falha ao proteger: "..resp) end
|
||||
-- Salvar dados
|
||||
minetest.setting_set("static_spawnpoint", pos.x.." "..(pos.y+10).." "..pos.z)
|
||||
gestor.bd:salvar("centro", "pos", n_spawn)
|
||||
gestor.bd:salvar("centro", "status", true)
|
||||
-- Finalizando
|
||||
player:moveto(n_spawn)
|
||||
minetest.chat_send_player(name, "Centro construido e parcialmente definido. Configure a loja principal e o banco apenas. Recomendavel redefinir o spawn.")
|
||||
|
||||
end
|
||||
if fields.cancelar then
|
||||
gestor.menu_principal(name)
|
||||
end
|
||||
end
|
||||
|
||||
-- Construir vila
|
||||
if formname == "gestor:aviso_construir_vila" then
|
||||
local name = player:get_player_name()
|
||||
|
||||
if fields.ok then
|
||||
|
||||
local pos = player:getpos()
|
||||
local vila = escolha_vila[name]
|
||||
|
||||
-- Montar vila
|
||||
local r = gestor.montar_vila(pos, vila)
|
||||
if r ~= true then
|
||||
return minetest.chat_send_player(name, r)
|
||||
end
|
||||
|
||||
|
||||
local dados_estrutura = gestor.estruturador.get_meta(vila)
|
||||
local n_spawn = pos
|
||||
|
||||
-- Proteger area da estrutura
|
||||
local resp = gestor.proteger_area(
|
||||
name, -- Quem registra
|
||||
name, -- Quem vai ser o dono
|
||||
fields.vila, -- Nome(etiqueta) da area
|
||||
{x=pos.x-(dados_estrutura.largura/2)-10, y=2000, z=pos.z-(dados_estrutura.largura/2)-50}, -- um dos cantos opostos
|
||||
{x=pos.x+(dados_estrutura.largura/2)+10, y=pos.y-60, z=pos.z+(dados_estrutura.largura/2)+50} -- outro dos cantos opostos
|
||||
)
|
||||
if resp ~= true then minetest.chat_send_player(name, "Falha ao proteger: "..resp) end
|
||||
|
||||
-- Salvar dados
|
||||
gestor.bd:salvar("vilas", vila, {nome=fields.nome_vila,pos=n_spawn})
|
||||
|
||||
-- Finalizando
|
||||
player:moveto(n_spawn)
|
||||
minetest.chat_send_player(name, "*** Vila construida quase pronta. Ajuste as entradas da vila e o ponto de TP(spawn) perto da bilheteria.")
|
||||
end
|
||||
if fields.cancelar then
|
||||
gestor.menu_principal(name)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
end)
|
||||
|
||||
|
|
43
protetor.lua
43
protetor.lua
|
@ -1,43 +0,0 @@
|
|||
--
|
||||
-- Mod gestor
|
||||
--
|
||||
-- Protetor
|
||||
--
|
||||
|
||||
-- Proteger uma area
|
||||
gestor.proteger_area = function(name, PlayerName, AreaName, pos1, pos2, silencio)
|
||||
if not tostring(PlayerName) or not tostring(AreaName) then return "Faltam argumentos ou estao incorretos" end
|
||||
if not areas or not areas.add then return "Faltou mod areas" end
|
||||
local param = tostring(PlayerName).." "..tostring(AreaName)
|
||||
local found, _, ownername, areaname = param:find('^([^ ]+) (.+)$')
|
||||
|
||||
if not found then
|
||||
return "Incorrect usage, see /help set_owner"
|
||||
end
|
||||
|
||||
if pos1 and pos2 then
|
||||
pos1, pos2 = areas:sortPos(pos1, pos2)
|
||||
else
|
||||
return "Você precisa selecionar a area primeiro"
|
||||
end
|
||||
|
||||
if not areas:player_exists(ownername) then
|
||||
return "O jogador \""..ownername.."\" não existe."
|
||||
end
|
||||
|
||||
minetest.log("action", name.." runs /set_owner. Owner = "..ownername..
|
||||
" AreaName = "..areaname..
|
||||
" StartPos = "..minetest.pos_to_string(pos1)..
|
||||
" EndPos = " ..minetest.pos_to_string(pos2))
|
||||
|
||||
local id = areas:add(ownername, areaname, pos1, pos2, nil)
|
||||
areas:save()
|
||||
|
||||
if silencio == nil or silencio == false then
|
||||
minetest.chat_send_player(ownername,
|
||||
"Voce registrou essa area para o jogador #"..
|
||||
id..". Use /lista para ver as areas.")
|
||||
minetest.chat_send_player(name, "Area protected. ID: "..id)
|
||||
end
|
||||
return true
|
||||
end
|
|
@ -0,0 +1,128 @@
|
|||
--[[
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
Recurso para alerta de crash do servidor
|
||||
]]
|
||||
|
||||
-- Registrar aba 'diretrizes'
|
||||
gestor.registrar_aba("alerta_de_crash", {
|
||||
titulo = "Alerta de Crash",
|
||||
get_formspec = function(name)
|
||||
|
||||
-- Pegar dados
|
||||
local status_alerta_de_crash = minetest.setting_getbool("gestor_alerta_de_crash") or false
|
||||
local servidor_smtp = minetest.setting_get("gestor_servidor_smtp") or "-"
|
||||
local login_smtp = minetest.setting_get("gestor_login_smtp") or "-"
|
||||
local senha_login_smtp = minetest.setting_get("gestor_senha_login_smtp")
|
||||
local email_destinatario = minetest.setting_get("gestor_email_destinatario") or "-"
|
||||
local titulo = minetest.setting_get("gestor_titulo_email") or "-"
|
||||
local texto = minetest.setting_get("gestor_texto_email") or "-"
|
||||
|
||||
local status_senha = "nenhuma"
|
||||
if senha_login_smtp then
|
||||
status_senha = "salva"
|
||||
end
|
||||
|
||||
if status_alerta_de_crash == false then
|
||||
status_alerta_de_crash = "1"
|
||||
else
|
||||
status_alerta_de_crash = "2"
|
||||
end
|
||||
|
||||
formspec = "label[3.5,1;Alerta de Crash]"
|
||||
|
||||
-- Sistema Verificador AntiCrash
|
||||
.."label[3.5,2;Sistema Verificador AntiCrash]"
|
||||
.."button[3.5,2.6;3,1;salvar;Salvar Dados]"
|
||||
-- Sistema Notificador via Email
|
||||
.."label[3.5,5;Sistema Notificador via Email]"
|
||||
.."label[3.5,5.4;Estado]"
|
||||
|
||||
.."dropdown[3.5,5.8;2,1;status_email;Inativo,Ativo;"..status_alerta_de_crash.."]"
|
||||
.."field[5.8,6;4.3,1;login_smtp;Login emissor;"..login_smtp.."]"
|
||||
.."pwdfield[10.1,6;3.3,1;senha;Senha ("..status_senha..")]"
|
||||
.."field[3.8,7.2;9.6,1;servidor_smtp;Servidor SMTP de envio (host:porta);"..servidor_smtp.."]"
|
||||
.."field[3.8,8.4;5,1;titulo;Titulo da mensagem de email enviada;"..titulo.."]"
|
||||
.."field[8.8,8.4;4.6,1;email_destinatario;Email do destinatario;"..email_destinatario.."]"
|
||||
.."field[3.8,9.6;9.6,1;texto;Texto;"..texto.."]"
|
||||
.."button[3.5,10;5,1;testar_email;Enviar mensagem de teste]"
|
||||
|
||||
return formspec
|
||||
end,
|
||||
on_receive_fields = function(player, fields)
|
||||
local name = player:get_player_name()
|
||||
|
||||
if fields.salvar then
|
||||
|
||||
-- Salvar todos os dados
|
||||
|
||||
-- Status de alerta de email
|
||||
if fields.status_email == "Ativo" then
|
||||
minetest.setting_setbool("gestor_alerta_de_crash", true)
|
||||
else
|
||||
minetest.setting_setbool("gestor_alerta_de_crash", false)
|
||||
end
|
||||
|
||||
-- Servidor SMTP
|
||||
if fields.servidor_smtp and fields.servidor_smtp ~= "-" then
|
||||
minetest.setting_set("gestor_servidor_smtp", fields.servidor_smtp)
|
||||
end
|
||||
|
||||
-- Login SMTP
|
||||
if fields.login_smtp and fields.login_smtp ~= "-" then
|
||||
minetest.setting_set("gestor_login_smtp", fields.login_smtp)
|
||||
end
|
||||
|
||||
-- Senha de Login SMTP
|
||||
if fields.senha and fields.senha ~= "" then
|
||||
minetest.setting_set("gestor_senha_login_smtp", fields.senha)
|
||||
end
|
||||
|
||||
-- Email do Destinatario
|
||||
if fields.email_destinatario and fields.email_destinatario ~= "-" then
|
||||
minetest.setting_set("gestor_email_destinatario", fields.email_destinatario)
|
||||
end
|
||||
|
||||
-- Titulo da mensagem de Email
|
||||
if fields.titulo and fields.titulo ~= "-" then
|
||||
minetest.setting_set("gestor_titulo_email", fields.titulo)
|
||||
end
|
||||
|
||||
-- Texto da mensagem de Email
|
||||
if fields.texto and fields.texto ~= "-" then
|
||||
minetest.setting_set("gestor_texto_email", fields.texto)
|
||||
end
|
||||
|
||||
minetest.show_formspec(name, "gestor:aviso", "size[4,1.8]"..
|
||||
default.gui_bg..
|
||||
default.gui_bg_img..
|
||||
"label[0,0;SUCESSO \nOs dados validos foram \nsalvos.]"
|
||||
)
|
||||
minetest.after(2, gestor.menu_principal, name)
|
||||
return
|
||||
|
||||
|
||||
elseif fields.testar_email then
|
||||
|
||||
if gestor.alerta_de_crash.enviar_email() then
|
||||
minetest.show_formspec(name, "gestor:aviso", "size[4,1.8]"..
|
||||
default.gui_bg..
|
||||
default.gui_bg_img..
|
||||
"label[0,0;FEITO \nComando de envio feito.\nVeja o arquivo de relatorio\ngestor_envios_de_alerta.out]"
|
||||
)
|
||||
else
|
||||
minetest.show_formspec(name, "gestor:aviso", "size[4,1.8]"..
|
||||
default.gui_bg..
|
||||
default.gui_bg_img..
|
||||
"label[0,0;FALHA \nFaltam dados para\nrealizar o comando de envio.\n]"
|
||||
)
|
||||
end
|
||||
minetest.after(2, gestor.menu_principal, name)
|
||||
end
|
||||
end,
|
||||
})
|
|
@ -0,0 +1,287 @@
|
|||
--[[
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
Recurso para edição de diretrizes do servidor
|
||||
]]
|
||||
|
||||
-- Lista de configurações alteraveis
|
||||
local lista_configs = {
|
||||
-- Nome do servidor
|
||||
{
|
||||
name = "Nome do Servidor",
|
||||
format = "string",
|
||||
desc = "Esse nome vai ser exibido na lista de servidores publicos",
|
||||
check_value = function(value)
|
||||
return true
|
||||
end,
|
||||
get_value = function()
|
||||
return minetest.setting_get("server_name")
|
||||
end,
|
||||
set_value = function(value)
|
||||
minetest.setting_set("server_name", value)
|
||||
end,
|
||||
},
|
||||
-- Descritivo do servidor
|
||||
{
|
||||
name = "Descritivo do Servidor",
|
||||
format = "string",
|
||||
desc = "Esse texto descritivo do servidor vai ser exibido na lista de servidores publicos",
|
||||
check_value = function(value)
|
||||
return true
|
||||
end,
|
||||
get_value = function()
|
||||
return minetest.setting_get("server_description")
|
||||
end,
|
||||
set_value = function(value)
|
||||
minetest.setting_set("server_description", value)
|
||||
end,
|
||||
},
|
||||
-- Website do servidor
|
||||
{
|
||||
name = "Website do Servidor",
|
||||
format = "string",
|
||||
desc = "Precisar ser o URL do website do servidor",
|
||||
check_value = function(value)
|
||||
return true
|
||||
end,
|
||||
get_value = function()
|
||||
return minetest.setting_get("server_url")
|
||||
end,
|
||||
set_value = function(value)
|
||||
minetest.setting_set("server_url", value)
|
||||
end,
|
||||
},
|
||||
-- Endereço do servidor
|
||||
{
|
||||
name = "Endereço do Servidor",
|
||||
format = "string",
|
||||
desc = "Endereço do servidor",
|
||||
check_value = function(value)
|
||||
return true
|
||||
end,
|
||||
get_value = function()
|
||||
return minetest.setting_get("server_address")
|
||||
end,
|
||||
set_value = function(value)
|
||||
minetest.setting_set("server_address", value)
|
||||
end,
|
||||
},
|
||||
-- Porta do servidor
|
||||
{
|
||||
name = "Porta do Servidor",
|
||||
format = "int",
|
||||
desc = "Porta do servidor",
|
||||
check_value = function(value)
|
||||
return true
|
||||
end,
|
||||
get_value = function()
|
||||
return minetest.setting_get("port")
|
||||
end,
|
||||
set_value = function(value)
|
||||
minetest.setting_set("port", value)
|
||||
end,
|
||||
},
|
||||
-- Vagas/Slots
|
||||
{
|
||||
name = "Vagas",
|
||||
format = "int",
|
||||
desc = "Vagas para jogadores online"
|
||||
.."\nJogadores com o privilegio 'server' possuem vaga reservada",
|
||||
check_value = function(value)
|
||||
return true
|
||||
end,
|
||||
get_value = function()
|
||||
return minetest.setting_get("max_users")
|
||||
end,
|
||||
set_value = function(value)
|
||||
minetest.setting_set("max_users", value)
|
||||
end,
|
||||
},
|
||||
-- PvP
|
||||
{
|
||||
name = "PvP",
|
||||
format = "bool",
|
||||
desc = "Permitir que jogadores ataquem diretamente outros jogadores",
|
||||
check_value = function(value)
|
||||
return true
|
||||
end,
|
||||
get_value = function()
|
||||
return minetest.setting_get("enable_pvp")
|
||||
end,
|
||||
set_value = function(value)
|
||||
minetest.setting_set("enable_pvp", value)
|
||||
end,
|
||||
},
|
||||
-- Mensagem de bem vindo
|
||||
{
|
||||
name = "Mensagem de Bem Vindo",
|
||||
format = "string",
|
||||
desc = "Mensagem apresentada ao jogador quando conectar ao servidor",
|
||||
check_value = function(value)
|
||||
return true
|
||||
end,
|
||||
get_value = function()
|
||||
return minetest.setting_get("motd")
|
||||
end,
|
||||
set_value = function(value)
|
||||
minetest.setting_set("motd", value)
|
||||
end,
|
||||
},
|
||||
-- Mensagem de crash do servidor
|
||||
{
|
||||
name = "Mensagem de Crash",
|
||||
format = "string",
|
||||
desc = "Mensagem exibida aos jogadores que estiverem online quando o servidor parar de funcionar inesperadamente (por erros do jogo)",
|
||||
check_value = function(value)
|
||||
return true
|
||||
end,
|
||||
get_value = function()
|
||||
return minetest.setting_get("kick_msg_crash")
|
||||
end,
|
||||
set_value = function(value)
|
||||
minetest.setting_set("kick_msg_crash", value)
|
||||
end,
|
||||
},
|
||||
}
|
||||
|
||||
-- Lista de itens do menu do shop em formato de string
|
||||
local string_menu_configs = ""
|
||||
for _,d in pairs(lista_configs) do
|
||||
if string_menu_configs ~= "" then string_menu_configs = string_menu_configs .. "," end
|
||||
string_menu_configs = string_menu_configs .. d.name
|
||||
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 'diretrizes'
|
||||
gestor.registrar_aba("conf", {
|
||||
titulo = "Diretrizes",
|
||||
get_formspec = function(name)
|
||||
|
||||
local formspec = "label[3.5,1;Diretrizes]"
|
||||
.."textlist[9,1;4.5,9.8;menu;"..string_menu_configs.."]"
|
||||
--.."label[3.5,2;Ponto de Spawn]"
|
||||
--.."button_exit[3.5,2.4;3,1;definir_spawn;Definir Aqui]"
|
||||
--.."button_exit[6.5,2.4;3,1;ir_spawn;Ir para Spawn]"
|
||||
--.."field[3.8,4.1;3,1;slots;Limite de Jogadores;"..minetest.setting_get("max_users").."]"
|
||||
--.."button_exit[6.5,3.8;3,1;definir_slots;Redefinir Limite]"
|
||||
|
||||
-- Construir formulario de acordo com item escolhido
|
||||
if acessos[name].escolha then
|
||||
local escolha = lista_configs[tonumber(acessos[name].escolha)]
|
||||
|
||||
-- Formspec do item escolhido
|
||||
local form = ""
|
||||
|
||||
-- Nome
|
||||
form = form .. "label[3.5,1.5;"..escolha.name.."]"
|
||||
|
||||
-- Campo para preenchimento numero ou texto simples
|
||||
if escolha.format == "int" or escolha.format == "float" or escolha.format == "string" then
|
||||
form = form .. "field[3.8,2.3;5,1;config_label_1;;"..escolha.get_value().."]"
|
||||
|
||||
-- Botao para definir configuração
|
||||
form = form .. "button[3.5,2.8;5,1;definir;Definir]"
|
||||
|
||||
-- Texto de aviso
|
||||
if acessos[name].aviso then
|
||||
form = form .. "label[3.5,3.7;"..acessos[name].aviso.."]"
|
||||
acessos[name].aviso = nil
|
||||
end
|
||||
|
||||
-- Descritivo
|
||||
form = form .. "textarea[3.8,4.3;5,7.7;;Descritivo:\n"..escolha.desc..";]"
|
||||
end
|
||||
|
||||
-- Campo para preenchimento
|
||||
if escolha.format == "bool" then
|
||||
form = form .. "checkbox[3.5,1.8;checkbox;Ativar PvP;true]"
|
||||
|
||||
|
||||
-- Texto de aviso
|
||||
if acessos[name].aviso or 1 == 1 then
|
||||
form = form .. "label[3.5,2.6;"..acessos[name].aviso.."]"
|
||||
acessos[name].aviso = nil
|
||||
end
|
||||
|
||||
-- Descritivo
|
||||
form = form .. "textarea[3.8,3.3;5,8.7;;Descritivo:\n"..escolha.desc..";]"
|
||||
end
|
||||
|
||||
-- Insere no formspec
|
||||
formspec = formspec .. form
|
||||
end
|
||||
|
||||
return formspec
|
||||
end,
|
||||
on_receive_fields = function(player, fields)
|
||||
local name = player:get_player_name()
|
||||
|
||||
-- Salva os campos editados para reexibir
|
||||
acessos[name].config_label_1 = fields.config_label_1
|
||||
|
||||
-- Escolher um item
|
||||
if fields.menu then
|
||||
local n = string.split(fields.menu, ":")
|
||||
acessos[name].escolha = tonumber(n[2]) or 1
|
||||
gestor.menu_principal(name)
|
||||
|
||||
-- Definir valor
|
||||
elseif fields.definir then
|
||||
local escolha = lista_configs[tonumber(acessos[name].escolha)]
|
||||
|
||||
-- Valor a ser salvo
|
||||
local value = fields.config_label_1
|
||||
|
||||
-- Verificar valor
|
||||
-- Formato de numero
|
||||
if escolha.format == "int" or escolha.format == "float" then
|
||||
if tonumber(value) == nil then
|
||||
acessos[name].aviso = "Precisar ser numero"
|
||||
gestor.menu_principal(name)
|
||||
return
|
||||
else
|
||||
value = tonumber(fields.config_label_1)
|
||||
|
||||
-- Arredonda para baixo caso precise ser inteiro
|
||||
if escolha.format == "int" then
|
||||
value = math.ceil(value)
|
||||
end
|
||||
end
|
||||
|
||||
-- Outros formatos
|
||||
else
|
||||
value = fields.config_label_1
|
||||
end
|
||||
|
||||
-- Atualiza campo exibido no painel
|
||||
acessos[name].config_label_1 = value
|
||||
|
||||
-- Verificador personalizado
|
||||
local check = escolha.check_value()
|
||||
if check ~= true then
|
||||
acessos[name].aviso = check
|
||||
gestor.menu_principal(name)
|
||||
return
|
||||
end
|
||||
|
||||
-- Configurar valor
|
||||
escolha.set_value(value)
|
||||
acessos[name].aviso = "Definido"
|
||||
gestor.menu_principal(name)
|
||||
end
|
||||
end,
|
||||
})
|
|
@ -0,0 +1,28 @@
|
|||
--[[
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
Recurso para desligamento do servidor
|
||||
]]
|
||||
|
||||
-- Registrar aba 'desligar'
|
||||
gestor.registrar_aba("desligar", {
|
||||
titulo = "Desligar",
|
||||
get_formspec = function(name)
|
||||
formspec = "label[6,2;Tem certeza que quer \ndesligar do servidor?]"
|
||||
.."button_exit[6,3;4,1;ok;Confirmar]"
|
||||
return formspec
|
||||
end,
|
||||
on_receive_fields = function(player, fields)
|
||||
if fields.ok then
|
||||
local name = player:get_player_name()
|
||||
minetest.chat_send_all("*** Servidor desligando em 3 segundos. (Por "..name..")")
|
||||
minetest.after(3, minetest.chat_send_all, "*** Servidor Desligado")
|
||||
minetest.after(3, minetest.request_shutdown)
|
||||
end
|
||||
end,
|
||||
})
|
100
vilas.lua
100
vilas.lua
|
@ -1,100 +0,0 @@
|
|||
--
|
||||
-- Mod gestor
|
||||
--
|
||||
-- Vilas
|
||||
--
|
||||
|
||||
|
||||
-- Encontrar altura de um bloco alvo (em uma coluna)
|
||||
local pegar_altura_solo = function(pos, alvos, amplitude)
|
||||
if not pos then
|
||||
minetest.log("error", "[Plagen] Tabela 'pos' nula (em pegar_altura_solo)")
|
||||
return false
|
||||
end
|
||||
|
||||
local y = pos.y + amplitude
|
||||
local resp = pos.y
|
||||
while y >= pos.y - amplitude do
|
||||
if table.maxn(minetest.find_nodes_in_area({x=pos.x,y=y,z=pos.z}, {x=pos.x,y=y,z=pos.z}, alvos)) == 1 then
|
||||
resp = y
|
||||
break
|
||||
end
|
||||
y = y - 1
|
||||
end
|
||||
return resp
|
||||
end
|
||||
|
||||
|
||||
-- Comando para colocar vila
|
||||
--[[
|
||||
Esse metodo monta uma vila no mapa e retorna
|
||||
uma mensagem de erro quando ocorre alguma falha
|
||||
ou algo impede
|
||||
Retorno:
|
||||
<resp> Pode ser true (booleano) caso de tudo certo e
|
||||
uma string de mensagem de erro caso ocorra algum problema
|
||||
Argumentos:
|
||||
<>
|
||||
]]
|
||||
gestor.montar_vila = function(pos, vila)
|
||||
|
||||
-- Verificar dados
|
||||
if not pos then
|
||||
minetest.log("error", "[Plagen] Tabela 'pos' nula (em gestor.montar_vila)")
|
||||
return "Erro interno"
|
||||
end
|
||||
if not vila then
|
||||
minetest.log("error", "[Plagen] String de 'vila' nula (em gestor.montar_vila)")
|
||||
return "Erro interno"
|
||||
end
|
||||
|
||||
-- Destacar tabela pos (evitar bugs)
|
||||
pos = {x=pos.x, y=pos.y, z=pos.z}
|
||||
|
||||
-- Verificando se ja existe essa vila
|
||||
|
||||
if gestor.bd:verif("vilas", vila) then return "Vila ja existente" end
|
||||
|
||||
-- Pegar material do solo
|
||||
local p_solo = {x=pos.x, y=pos.y, z=pos.z}
|
||||
p_solo.y = pegar_altura_solo(pos, {"default:dirt", "default:desert_sand"}, 15)
|
||||
local node_solo = minetest.get_node(p_solo)
|
||||
if pos == false then return "Impossivel encontrar solo" end
|
||||
if node_solo.name == "default:dirt" then
|
||||
p_solo.y = p_solo.y + 1
|
||||
elseif node_solo.name == "default:desert_sand" then
|
||||
p_solo.y = p_solo.y
|
||||
else
|
||||
return "Solo inapropriado"
|
||||
end
|
||||
local solo = minetest.get_node({x=p_solo.x, y=p_solo.y, z=p_solo.z}).name
|
||||
local subsolo = minetest.get_node({x=p_solo.x, y=p_solo.y-1, z=p_solo.z}).name
|
||||
local rocha = "default:stone"
|
||||
local materiais = {solo=solo,subsolo=subsolo,rocha=rocha}
|
||||
if solo.name == "air" then return "Falha ao pegar solo" end
|
||||
|
||||
|
||||
-- Adquirindo dados
|
||||
|
||||
local dados = gestor.diretrizes.estruturas[vila]
|
||||
|
||||
if not dados then return "Estrutura nao encontrada" end
|
||||
|
||||
-- Planificar
|
||||
if plagen.planificar(pos, "quadrada", dados[1]+2, 15, materiais, 15, true, true) ~= true then
|
||||
return "Falha ao planificar"
|
||||
end
|
||||
|
||||
pos.y = pegar_altura_solo(pos, {solo}, 15) + 1
|
||||
|
||||
-- Variaveis auxiliares
|
||||
|
||||
local minp = {x=pos.x-(dados[1]/2), y=pos.y-dados[3], z=pos.z-(dados[1]/2)}
|
||||
|
||||
|
||||
-- Construir estrutura
|
||||
|
||||
if gestor.estruturador.carregar(minp, vila) == false then return "Estrutura nao encontrada" end
|
||||
|
||||
return true
|
||||
end
|
Loading…
Reference in New Issue