Adicionada opção para seguir outro jogador

master
BrunoMine 2017-10-13 19:21:47 -03:00
parent 8177a5ef30
commit a121b4127c
4 changed files with 187 additions and 6 deletions

41
check_balao_proprio.lua Normal file
View File

@ -0,0 +1,41 @@
--[[
Mod Telepro para Minetest
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/>.
Verificar balao
]]
--[[ Retorna os seguintes argumentos
1) numero do erro encontrado
0 significa que nenhum dos erros ocorreu (1, 2, 3 e etc)
1 significa falta do registro no banco de dados (jogador nao tem balao)
2 significa que o balao do jogador esta inativo/inoperante
3 significa que o jogador nao se encontra perto do bau do balao
2) String de texto referente ao problema, nil caso nenhum problema
]]
telepro.check_balao_proprio = function(player)
local name = player:get_player_name()
-- Verificar se o jogador tem um balao
if telepro.bd.verif(name, "pos") ~= true then
minetest.chat_send_player(name, "Precisas ter um balao ativo")
return 1, "Nenhum balao proprio existente"
end
-- Pega os metadados do bau
local meta = minetest.get_meta(telepro.bd.pegar(name, "pos"))
if meta:get_string("status") ~= "ativo" then
return 2, "Balao proprio inoperante"
end
-- Verificar se tem um Bau de Balao perto do jogador que pertenca a ele
if telepro.verif_prox_bau(player) == false then
return 3, "Muito distante do proprio Bau de Balao"
end
return 0
end

View File

@ -37,11 +37,14 @@ dofile(modpath.."/ir_balao.lua")
dofile(modpath.."/comum.lua")
dofile(modpath.."/reparar_balao.lua")
dofile(modpath.."/gerar_balao_aleatorio.lua")
dofile(modpath.."/check_balao_proprio.lua")
-- Interfaces
dofile(modpath.."/visitas.lua")
dofile(modpath.."/interface_bau.lua")
dofile(modpath.."/interface_jogador.lua")
-- Balao
dofile(modpath.."/balao.lua")

View File

@ -26,12 +26,13 @@ telepro.acessar_bau = function(player)
-- Exibir formulario de opcoes ao jogador
-- Cria formspec
local formspec = "size[6,4.8]"
local formspec = "size[6,5.8]"
..default.gui_bg
..default.gui_bg_img
.."image[0,0;7.3,3;telepro_intro.png]"
.."button_exit[0,3;6,1;ir_centro;Ir para Centro]"
.."button_exit[0,4;6,1;reparar;Reparar Balao]"
.."button[0,5;6,1;visitas;Receber seguidor]"
-- Exibir formspec
minetest.show_formspec(player:get_player_name(), "telepro:bau", formspec)
@ -48,11 +49,12 @@ telepro.acessar_bau_spawn = function(player)
-- Exibir formulario de opcoes ao jogador
-- Cria formspec
local formspec = "size[6,4]"
local formspec = "size[6,5]"
..default.gui_bg
..default.gui_bg_img
.."image[0,0;7.3,3;telepro_intro.png]"
.."button_exit[0,3;6,1;ir_balao;Ir para o posto de seu Balao]"
.."button[0,3;6,1;visitas;Seguir jogador]"
.."button_exit[0,4;6,1;ir_balao;Ir para o posto de seu Balao]"
-- Exibir formspec
minetest.show_formspec(player:get_player_name(), "telepro:bau_spawn", formspec)
@ -65,8 +67,12 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
-- Bau do jogador
if formname == "telepro:bau" then
-- Gerenciar visitas
if fields.visitas then
telepro.acessar_visitas(player, "proprio")
-- Botao de ir para o centro
if fields.ir_centro then
elseif fields.ir_centro then
-- Pegar nome do jogador
local name = player:get_player_name()
@ -128,9 +134,13 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
-- Bau do Spawn
elseif formname == "telepro:bau_spawn" then
-- Gerenciar visitas
if fields.visitas then
telepro.acessar_visitas(player, "centro")
-- Teleportar para o posto do balao do jogador
if fields.ir_balao then
elseif fields.ir_balao then
-- Pegar nome do jogador
local name = player:get_player_name()

127
visitas.lua Normal file
View File

@ -0,0 +1,127 @@
--[[
Mod Telepro para Minetest
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/>.
Visitas
]]
-- Acesar interface do jogador para visitas
telepro.acessar_visitas = function(player, tipo)
if not player then
minetest.log("error", "[Telepro] player == nil (em telepro.acessar_visitas)")
return false
end
local formspec
local temp = telepro.online[player:get_player_name()]
if not temp.pedidos_visita then temp.pedidos_visita = {} end
if tipo == "proprio" then
local visitas = ""
for n,v in pairs(temp.pedidos_visita) do
if visitas ~= "" then visitas = visitas .. "," end
visitas = visitas .. n
end
-- Cria formspec
formspec = "size[5,3]"
..default.gui_bg
..default.gui_bg_img
.."label[0,0;Pedidos recebidos]"
.."dropdown[0,0.5;5.25,1;visita;"..visitas..";]"
.."button[0,1.15;5,1;receber_visita;Receber seguidor]"
.."button[2,2.25;3,1;voltar;Voltar]"
elseif tipo == "centro" then
-- Cria formspec
formspec = "size[5,3]"
..default.gui_bg
..default.gui_bg_img
.."field[0.28,0.8;5,1;visitado;Seguir jogador;]"
.."button_exit[0,1.25;5,1;enviar_pedido;Enviar pedido]"
.."button[2,2.25;3,1;voltar;Voltar]"
end
-- Exibir formspec
minetest.show_formspec(player:get_player_name(), "telepro:jogador_visitas_"..tipo, formspec)
end
-- Receber botoes
minetest.register_on_player_receive_fields(function(player, formname, fields)
if formname == "telepro:jogador_visitas_centro" then
if fields.enviar_pedido and fields.visitado ~= "" then -- Jogador online
local name = player:get_player_name()
if not telepro.online[fields.visitado] then
minetest.chat_send_player(name, "\""..fields.visitado.."\" offline ou inexistente")
return
end
local temp = telepro.online[fields.visitado]
if not temp.pedidos_visita then temp.pedidos_visita = {} end
-- Insere nome na tabela de pedidos
temp.pedidos_visita[name] = true
minetest.chat_send_player(name, "Pedido enviado a \""..fields.visitado.."\". Avise para aceitar")
elseif fields.voltar then
telepro.acessar_bau_spawn(player)
return
end
elseif formname == "telepro:jogador_visitas_proprio" then
if fields.receber_visita and fields.visita ~= "" then
local name = player:get_player_name()
local temp = telepro.online[name]
-- Verifica se pedido ainda existe
if not fields.visita or not temp.pedidos_visita[fields.visita] then
minetest.chat_send_player(name, "Pedido invalido "..dump(fields.visita))
return
end
-- Verifica se o visitante ainda esta online
if not telepro.online[fields.visita] then
minetest.chat_send_player(name, "\""..fields.visita.."\" offline")
return
end
local visitante = minetest.get_player_by_name(fields.visita)
-- Verifica se visitante esta perto do balao de centro
if not minetest.find_node_near(visitante:getpos(), 25, {"telepro:bau_spawn"}) then
minetest.chat_send_player(name, "\""..fields.visita.."\" saiu de perto do balao do centro")
minetest.chat_send_player(fields.visita, "Seu pedido para seguir \""..name.."\" foi aceito mas voce se afastou do balao")
return
end
-- Teleporta jogador
visitante:setpos(player:getpos())
temp.pedidos_visita[fields.visita] = nil
minetest.chat_send_player(name, "\""..fields.visita.."\" te seguiu")
minetest.chat_send_player(fields.visita, "Voce seguiu \""..name.."\"")
elseif fields.voltar then
telepro.acessar_bau(player)
return
end
end
end)