Projeto Iniciado
parent
109a8e6c47
commit
508980fa1b
|
@ -0,0 +1,6 @@
|
||||||
|
Mod GPS
|
||||||
|
=======
|
||||||
|
|
||||||
|
You can set some guidelines in init.lua
|
||||||
|
Podes definir algumas diretrizes em init.lua
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
default
|
||||||
|
dye
|
||||||
|
intllib?
|
|
@ -0,0 +1,267 @@
|
||||||
|
--
|
||||||
|
-- Mod GPS
|
||||||
|
--
|
||||||
|
|
||||||
|
-- Destinations set limit that a player can have on GPS
|
||||||
|
-- Definir limite de Destinos que um jogador pode ter no gps
|
||||||
|
local LIMITE = 3
|
||||||
|
|
||||||
|
-- Time (in seconds) between each check inventory to see if this with a GPS
|
||||||
|
-- Tempo (em segundos) entre cada verificacao de inventario para saber se esta com um gps
|
||||||
|
local TEMPO = 5
|
||||||
|
|
||||||
|
-- Tradutor de String
|
||||||
|
local S
|
||||||
|
if minetest.get_modpath("intllib") then
|
||||||
|
S = intllib.Getter()
|
||||||
|
else
|
||||||
|
S = function(s,a,...)if a==nil then return s end a={a,...}return s:gsub("(@?)@(%(?)(%d+)(%)?)",function(e,o,n,c)if e==""then return a[tonumber(n)]..(o==""and c or"")else return"@"..o..n..c end end) end
|
||||||
|
end
|
||||||
|
|
||||||
|
--
|
||||||
|
-----
|
||||||
|
--------
|
||||||
|
-- Banco de dados
|
||||||
|
local path = minetest.get_worldpath()
|
||||||
|
local pathbd = path .. "/gps"
|
||||||
|
|
||||||
|
-- Cria o diretorio caso nao exista ainda
|
||||||
|
local function mkdir(pathbd)
|
||||||
|
if minetest.mkdir then
|
||||||
|
minetest.mkdir(pathbd)
|
||||||
|
else
|
||||||
|
os.execute('mkdir "' .. pathbd .. '"')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
mkdir(pathbd)
|
||||||
|
|
||||||
|
local registros = {}
|
||||||
|
|
||||||
|
-- Carregar na memoria dados de um jogador
|
||||||
|
local carregar_dados = function(name)
|
||||||
|
local input = io.open(pathbd .. "/gps_"..name, "r")
|
||||||
|
if input then
|
||||||
|
registros[name] = minetest.deserialize(input:read("*l"))
|
||||||
|
io.close(input)
|
||||||
|
return true
|
||||||
|
else
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Salvar registros de trabalhos
|
||||||
|
local salvar_dados = function(name)
|
||||||
|
local output = io.open(pathbd .. "/gps_"..name, "w")
|
||||||
|
output:write(minetest.serialize(registros[name]))
|
||||||
|
io.close(output)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Tirar dados de jogadores que sairem do servidor
|
||||||
|
minetest.register_on_leaveplayer(function(player)
|
||||||
|
local name = player:get_player_name()
|
||||||
|
registros[name] = nil
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- Registra apenas novos jogadores
|
||||||
|
minetest.register_on_newplayer(function(player)
|
||||||
|
local name = player:get_player_name()
|
||||||
|
registros[name] = {
|
||||||
|
string = "",
|
||||||
|
destinos = {}
|
||||||
|
}
|
||||||
|
salvar_dados(name)
|
||||||
|
carregar_dados(player:get_player_name())
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- Carrega dados de jogadores que conectam
|
||||||
|
minetest.register_on_joinplayer(function(player)
|
||||||
|
if carregar_dados(player:get_player_name()) == false then
|
||||||
|
local name = player:get_player_name()
|
||||||
|
registros[name] = {
|
||||||
|
string = "",
|
||||||
|
destinos = {}
|
||||||
|
}
|
||||||
|
salvar_dados(name)
|
||||||
|
carregar_dados(name)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
-- Fim
|
||||||
|
--------
|
||||||
|
-----
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-----
|
||||||
|
--------
|
||||||
|
-- Craftitem
|
||||||
|
minetest.register_craftitem("gps:gps", { -- GPS
|
||||||
|
description = S("GPS"),
|
||||||
|
stack_max = 1,
|
||||||
|
inventory_image = "gps_item.png",
|
||||||
|
on_use = function(itemstack, user, pointed_thing)
|
||||||
|
local name = user:get_player_name()
|
||||||
|
local formspec = "size[5,4]"
|
||||||
|
.."bgcolor[#08080800]"
|
||||||
|
.."background[0,0;5,4;gps_bg.png;true]"
|
||||||
|
.."label[0.1,-0.1;"..S("Destinos").."]"
|
||||||
|
.."dropdown[0.1,0.4;5,1;destino;"..registros[name].string..";1]"
|
||||||
|
.."button_exit[0.1,1.1;1.7,1;ir;"..S("Localizar").."]"
|
||||||
|
.."button_exit[1.7,1.1;1.7,1;desligar;"..S("Desligar").."]"
|
||||||
|
.."button_exit[3.3,1.1;1.6,1;deletar;"..S("Deletar").."]"
|
||||||
|
.."field[0.3,2.9;5,1;nome_destino;"..S("Novo Destino")..";"..S("Nome Desse Lugar").."]"
|
||||||
|
.."button_exit[0,3.3;5,1;gravar;"..S("Gravar Novo Destino").."]"
|
||||||
|
minetest.show_formspec(name, "gps:gps", formspec)
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
minetest.register_craft({ -- Receita de GPS
|
||||||
|
output = "gps:gps",
|
||||||
|
recipe = {
|
||||||
|
{"default:steel_ingot", "dye:orange", "default:steel_ingot"},
|
||||||
|
{"default:steel_ingot", "default:diamond", "default:steel_ingot"},
|
||||||
|
{"default:stick", "default:stick", "default:stick"}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
-- Fim
|
||||||
|
--------
|
||||||
|
-----
|
||||||
|
--
|
||||||
|
|
||||||
|
-- Atualizar string
|
||||||
|
local atualizar_string = function(name)
|
||||||
|
registros[name].string = ""
|
||||||
|
local i = 0
|
||||||
|
for destino, pos in pairs(registros[name].destinos) do
|
||||||
|
if i > 0 then registros[name].string = registros[name].string .. "," end
|
||||||
|
registros[name].string = registros[name].string .. destino
|
||||||
|
i = i + 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Variavel global de waypoints
|
||||||
|
local waypoints = {}
|
||||||
|
|
||||||
|
-- Verificar Waypoint
|
||||||
|
local temporizador = 0
|
||||||
|
minetest.register_globalstep(function(dtime)
|
||||||
|
temporizador = temporizador + dtime
|
||||||
|
if temporizador >= TEMPO then
|
||||||
|
local waypoints_validos = {}
|
||||||
|
for name, waypoint in pairs(waypoints) do
|
||||||
|
local player = minetest.get_player_by_name(name)
|
||||||
|
if not player or not player:get_inventory():contains_item(player:get_wield_list(), "gps:gps") then
|
||||||
|
if player then
|
||||||
|
player:hud_remove(waypoints[name])
|
||||||
|
minetest.chat_send_player(name, S("Precisa estar com o GPS para ir ao destino."))
|
||||||
|
end
|
||||||
|
else
|
||||||
|
waypoints_validos[name] = waypoints[name]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
waypoints = waypoints_validos
|
||||||
|
temporizador = 0
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- Adicionar Waypoint
|
||||||
|
local adicionar_waypoint = function(name, destino)
|
||||||
|
local player = minetest.get_player_by_name(name)
|
||||||
|
if waypoints[name] then
|
||||||
|
player:hud_remove(waypoints[name])
|
||||||
|
end
|
||||||
|
waypoints[name] = player:hud_add({
|
||||||
|
hud_elem_type = "waypoint",
|
||||||
|
name = destino,
|
||||||
|
number = "16747520",
|
||||||
|
world_pos = registros[name].destinos[destino]
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Recebedor de campos
|
||||||
|
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||||
|
if formname == "gps:gps" then
|
||||||
|
local name = player:get_player_name()
|
||||||
|
if fields.ir then
|
||||||
|
if registros[name].destinos[fields.destino] then
|
||||||
|
adicionar_waypoint(name, fields.destino)
|
||||||
|
minetest.chat_send_player(name, S("GPS Ativado. Destino").." "..fields.destino.." "..S("localizado."))
|
||||||
|
minetest.sound_play("gps_beep", {gain = 0.15, max_hear_distance = 3, object = player})
|
||||||
|
return true
|
||||||
|
else
|
||||||
|
minetest.chat_send_player(name, S("Nenhum destino encontrado. Defina novos destinos."))
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
elseif fields.desligar then
|
||||||
|
if waypoints[name] then
|
||||||
|
player:hud_remove(waypoints[name])
|
||||||
|
end
|
||||||
|
minetest.chat_send_player(name, S("GPS desligado."))
|
||||||
|
return true
|
||||||
|
elseif fields.gravar then
|
||||||
|
if fields.nome_destino then
|
||||||
|
if not fields.nome_destino:find("{")
|
||||||
|
and not fields.nome_destino:find("}")
|
||||||
|
and not fields.nome_destino:find(",")
|
||||||
|
and not fields.nome_destino:find("\\")
|
||||||
|
and not fields.nome_destino:find("\"")
|
||||||
|
then
|
||||||
|
if fields.nome_destino == "" then
|
||||||
|
minetest.chat_send_player(name, S("Nenhum nome definido para o lugar. Digite um nome."))
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
-- verificar quantos ja tem
|
||||||
|
local total = 0
|
||||||
|
for destino, pos in pairs(registros[name].destinos) do
|
||||||
|
total = total + 1
|
||||||
|
end
|
||||||
|
if total >= LIMITE then
|
||||||
|
minetest.chat_send_player(name, S("Limite de").." "..LIMITE.." "..S("destinos no seu GPS. Delete algum dos ja existentes."))
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
registros[name].destinos[fields.nome_destino] = player:getpos()
|
||||||
|
atualizar_string(name)
|
||||||
|
salvar_dados(name)
|
||||||
|
minetest.chat_send_player(name, S("Lugar").." "..fields.nome_destino.." "..S("foi gravado no seu GPS."))
|
||||||
|
-- Caso ja tenha e esteja ativo entao ajusta o waypoint visualizado
|
||||||
|
if tonumber(waypoints[name]) and player:hud_get(waypoints[name]) then
|
||||||
|
local def = player:hud_get(waypoints[name])
|
||||||
|
if def.name == fields.nome_destino then adicionar_waypoint(name, fields.nome_destino) end
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
else
|
||||||
|
minetest.chat_send_player(name, S("Caracteres invalidos. Tente utilizar apenas letras e numeros no novo nome."))
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
else
|
||||||
|
minetest.chat_send_player(name, S("Nenhum nome especificado para o novo lugar. Defina o nome desse lugar."))
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
elseif fields.deletar then
|
||||||
|
if fields.destino and fields.destino ~= "" then
|
||||||
|
if tonumber(waypoints[name]) then
|
||||||
|
player:hud_remove(waypoints[name])
|
||||||
|
end
|
||||||
|
local destinos_restantes = {} -- realoca destinos na memoria
|
||||||
|
for destino, pos in pairs(registros[name].destinos) do
|
||||||
|
if destino ~= fields.destino then
|
||||||
|
destinos_restantes[destino] = pos
|
||||||
|
end
|
||||||
|
end
|
||||||
|
registros[name].destinos = destinos_restantes
|
||||||
|
atualizar_string(name)
|
||||||
|
salvar_dados(name)
|
||||||
|
minetest.chat_send_player(name, S("Destino").." "..fields.destino.." "..S("deletado."))
|
||||||
|
return true
|
||||||
|
else
|
||||||
|
minetest.chat_send_player(name, S("Nenhum destino para deletar."))
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- Tira waypoint quando o jogador morre
|
||||||
|
minetest.register_on_dieplayer(function(player)
|
||||||
|
if waypoints[player:get_player_name()] then
|
||||||
|
player:hud_remove(waypoints[name])
|
||||||
|
end
|
||||||
|
end)
|
|
@ -0,0 +1,48 @@
|
||||||
|
# Translated initially by BrunoMine.
|
||||||
|
# No sure correct translation.
|
||||||
|
|
||||||
|
GPS = GPS
|
||||||
|
|
||||||
|
Localizar = Locate
|
||||||
|
|
||||||
|
Destinos = Destinations
|
||||||
|
|
||||||
|
Destino = Destination
|
||||||
|
|
||||||
|
Desligar = Turn Off
|
||||||
|
|
||||||
|
Deletar = Delete
|
||||||
|
|
||||||
|
Novo Destino = New Destination
|
||||||
|
|
||||||
|
Nome Desse Lugar = Name of This Place
|
||||||
|
|
||||||
|
Gravar Novo Destino = Save New Place
|
||||||
|
|
||||||
|
Precisa estar com o GPS para ir ao destino. = You need to be with the GPS to go to the destination.
|
||||||
|
|
||||||
|
GPS Ativado. Destino = GPS Active.
|
||||||
|
# Name os destination
|
||||||
|
localizado. = located.
|
||||||
|
|
||||||
|
Nenhum destino encontrado. Defina novos destinos. = No destination found. Set a new.
|
||||||
|
|
||||||
|
GPS desligado. = GPS turned off.
|
||||||
|
|
||||||
|
Nenhum nome definido para o lugar. Digite um nome. = No name set to the place. Enter a name.
|
||||||
|
|
||||||
|
Limite de = Limit is
|
||||||
|
# Limit number of destinations
|
||||||
|
destinos no seu GPS. Delete algum dos ja existentes. = destinations. Delete any of the already existing.
|
||||||
|
|
||||||
|
Lugar = The
|
||||||
|
# Name of locate
|
||||||
|
foi gravado no seu GPS. = has been recorded in your GPS.
|
||||||
|
|
||||||
|
Caracteres invalidos. Tente utilizar apenas letras e numeros no novo nome. = Invalid characters. Try using only letters and numbers in the new name.
|
||||||
|
|
||||||
|
Nenhum nome especificado para o novo lugar. Defina o nome desse lugar. = No name specified for the new place. Set the name of this place.
|
||||||
|
|
||||||
|
deletado. = has been deleted.
|
||||||
|
|
||||||
|
Nenhum destino para deletar. = No destinations to delete.
|
|
@ -0,0 +1,48 @@
|
||||||
|
# Translated initially by BrunoMine.
|
||||||
|
# No sure correct translation.
|
||||||
|
|
||||||
|
GPS = GPS
|
||||||
|
|
||||||
|
Localizar = Locate
|
||||||
|
|
||||||
|
Destinos = Destinies
|
||||||
|
|
||||||
|
Destino = Destiny
|
||||||
|
|
||||||
|
Desligar = Turn Off
|
||||||
|
|
||||||
|
Deletar = Delete
|
||||||
|
|
||||||
|
Novo Destino = New Destiny
|
||||||
|
|
||||||
|
Nome Desse Lugar = Name of This Place
|
||||||
|
|
||||||
|
Gravar Novo Destino = Save New Place
|
||||||
|
|
||||||
|
Precisa estar com o GPS para ir ao destino. = You need to be with the GPS to go to the destiny.
|
||||||
|
|
||||||
|
GPS Ativado. Destino = GPS Active.
|
||||||
|
# Name os destiny
|
||||||
|
localizado. = located.
|
||||||
|
|
||||||
|
Nenhum destino encontrado. Defina novos destinos. = No destinies found. Set a new.
|
||||||
|
|
||||||
|
GPS desligado. = GPS turned off.
|
||||||
|
|
||||||
|
Nenhum nome definido para o lugar. Digite um nome. = No name set to the place. Enter a name.
|
||||||
|
|
||||||
|
Limite de = Limit is
|
||||||
|
# Limit number of destinies
|
||||||
|
destinos no seu GPS. Delete algum dos ja existentes. = destinies. Delete any of the already existing.
|
||||||
|
|
||||||
|
Lugar = The
|
||||||
|
# Name of locate
|
||||||
|
foi gravado no seu GPS. = has been recorded in your GPS.
|
||||||
|
|
||||||
|
Caracteres invalidos. Tente utilizar apenas letras e numeros no novo nome. = Invalid characters. Try using only letters and numbers in the new name.
|
||||||
|
|
||||||
|
Nenhum nome especificado para o novo lugar. Defina o nome desse lugar. = No name specified for the new place. Set the name of this place.
|
||||||
|
|
||||||
|
deletado. = has been deleted.
|
||||||
|
|
||||||
|
Nenhum destino para deletar. = No destinies to delete.
|
|
@ -0,0 +1,48 @@
|
||||||
|
# Translated initially by BrunoMine.
|
||||||
|
# No sure correct translation.
|
||||||
|
|
||||||
|
GPS = GPS
|
||||||
|
|
||||||
|
Localizar = Locate
|
||||||
|
|
||||||
|
Destinos = Destinies
|
||||||
|
|
||||||
|
Destino = Destiny
|
||||||
|
|
||||||
|
Desligar = Turn Off
|
||||||
|
|
||||||
|
Deletar = Delete
|
||||||
|
|
||||||
|
Novo Destino = New Destiny
|
||||||
|
|
||||||
|
Nome Desse Lugar = Name of This Place
|
||||||
|
|
||||||
|
Gravar Novo Destino = Save New Place
|
||||||
|
|
||||||
|
Precisa estar com o GPS para ir ao destino. = You need to be with the GPS to go to the destiny.
|
||||||
|
|
||||||
|
GPS Ativado. Destino = GPS Active.
|
||||||
|
# Name os destiny
|
||||||
|
localizado. = located.
|
||||||
|
|
||||||
|
Nenhum destino encontrado. Defina novos destinos. = No destinies found. Set a new.
|
||||||
|
|
||||||
|
GPS desligado. = GPS turned off.
|
||||||
|
|
||||||
|
Nenhum nome definido para o lugar. Digite um nome. = No name set to the place. Enter a name.
|
||||||
|
|
||||||
|
Limite de = Limit is
|
||||||
|
# Limit number of destinies
|
||||||
|
destinos no seu GPS. Delete algum dos ja existentes. = destinies. Delete any of the already existing.
|
||||||
|
|
||||||
|
Lugar = Locate
|
||||||
|
# Name of locate
|
||||||
|
foi gravado no seu GPS. = has been recorded in your GPS.
|
||||||
|
|
||||||
|
Caracteres invalidos. Tente utilizar apenas letras e numeros no novo nome. = Invalid characters. Try using only letters and numbers in the new name.
|
||||||
|
|
||||||
|
Nenhum nome especificado para o novo lugar. Defina o nome desse lugar. = No name specified for the new place. Set the name of this place.
|
||||||
|
|
||||||
|
deletado. = deletado.
|
||||||
|
|
||||||
|
Nenhum destino para deletar. = Nenhum destino para deletar.
|
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 2.0 KiB |
Binary file not shown.
After Width: | Height: | Size: 293 B |
Loading…
Reference in New Issue