1
0
mirror of https://github.com/sys4-fr/server-nalc.git synced 2024-10-03 18:00:29 +02:00
server-nalc/minetestforfun_game/mods/h2omes/init.lua

239 lines
6.8 KiB
Lua

h2omes = {}
h2omes.homes = {} -- table players home
h2omes.path = minetest.get_worldpath() .. "/h2omes/"
minetest.mkdir(h2omes.path)
h2omes.time = 2 * 60 --MFF 04/05/2016 2 minutes plus 20 minutes
h2omes.have_nether = false -- nether mod
if (minetest.get_modpath("nether") ~= nil) then
h2omes.have_nether = true
end
function h2omes.check(name)
if h2omes.homes[name] == nil then
h2omes.homes[name] = {["home"] = {}, ["pit"] = {}}
end
end
--function save_homes
function h2omes.save_homes(name)
local file = h2omes.path..name
local input, err = io.open(file, "w")
if input then
input:write(minetest.serialize(h2omes.homes[name]))
input:close()
else
minetest.log("error", "open(" .. file .. ", 'w') failed: " .. err)
end
end
--function load_homes
function h2omes.load_homes(name)
h2omes.check(name)
local file = h2omes.path..name
local input, err = io.open(file, "r")
if input then
local data = minetest.deserialize(input:read())
io.close(input)
if data and type(data) == "table" then
if data.home then
if data.home.real then
h2omes.homes[name].home.real = data.home.real
end
if data.home.nether then
h2omes.homes[name].home.nether = data.home.nether
end
end
if data.pit then
if data.pit.real then
h2omes.homes[name].pit.real = data.pit.real
end
if data.pit.nether then
h2omes.homes[name].pit.nether = data.pit.nether
end
end
end
end
end
--function set_homes
function h2omes.set_home(name, home_type, pos)
h2omes.check(name)
if not pos then
local player = minetest.get_player_by_name(name)
if not player then return end
pos = player:getpos()
end
if not pos then return false end
if pos.y < -19600 and h2omes.have_nether then
h2omes.homes[name][home_type].nether = pos
else
h2omes.homes[name][home_type].real = pos
end
minetest.chat_send_player(name, home_type.." set!")
minetest.sound_play("dingdong",{to_player=name, gain = 1.0})
h2omes.save_homes(name)
return true
end
--function get_homes
function h2omes.get_home(name, home_type)
h2omes.check(name)
local player = minetest.get_player_by_name(name)
if not player then return nil end
local pos = player:getpos()
if not pos then return nil end
local status = "real"
if pos.y < -19600 and h2omes.have_nether then
status = "nether"
end
if h2omes.homes[name][home_type][status] then
return h2omes.homes[name][home_type][status]
end
return nil
end
--function to_homes
function h2omes.to_home(name, home_type)
h2omes.check(name)
local player = minetest.get_player_by_name(name)
if not player then return false end
local pos = player:getpos()
if not pos then return false end
local status = "real"
if pos.y < -19600 and h2omes.have_nether then
status = "nether"
end
if h2omes.homes[name][home_type][status] then
player:setpos(h2omes.homes[name][home_type][status])
minetest.chat_send_player(name, "Teleported to "..home_type.."!")
minetest.sound_play("teleport", {to_player=name, gain = 1.0})
return true
end
return false
end
function h2omes.show_formspec_home(name)
local formspec = {"size[6,7]label[2.1,0;Home Settings]"}
--home
table.insert(formspec, "label[2.5,1;HOME]")
local home = h2omes.get_home(name, "home")
table.insert(formspec, "button[0.5,2;1.5,1;set_home;Set Home]")
if home then
table.insert(formspec, string.format("label[2,1.5;x:%s, y:%s, z:%s]", math.floor(home.x), math.floor(home.y), math.floor(home.z) ))
table.insert(formspec, "button_exit[4,2;1.5,1;to_home;To Home]")
else
table.insert(formspec, "label[2.3,1.5;Home no set]")
end
--pit
table.insert(formspec, "label[2.5,3;PIT]")
local pit = h2omes.get_home(name, "pit")
table.insert(formspec, "button[0.5,4;1.5,1;set_pit;Set Pit]")
if pit then
table.insert(formspec, string.format("label[2,3.5;x:%s, y:%s, z:%s]", math.floor(pit.x), math.floor(pit.y), math.floor(pit.z) ))
table.insert(formspec, "button_exit[4,4;1.5,1;to_pit;To Pit]")
else
table.insert(formspec, "label[2.3,3.5;Pit no set]")
end
table.insert(formspec, "button_exit[2.3,6.3;1.5,1;close;Close]")
minetest.show_formspec(name, "h2omes:formspec", table.concat(formspec))
end
minetest.register_on_player_receive_fields(function(player, formname, fields)
local name = player:get_player_name()
if not name or name == "" then return end
if formname == "h2omes:formspec" then
if fields["set_home"] then
--h2omes.set_home(name, "home")
action_timers.wrapper(name, "sethome", "sethome_" .. name, h2omes.time, h2omes.set_home, {name, "home"})
h2omes.show_formspec_home(name)
elseif fields["set_pit"] then
--h2omes.set_home(name, "pit")
action_timers.wrapper(name, "sethome", "sethome_" .. name, h2omes.time, h2omes.set_home, {name, "pit"})
h2omes.show_formspec_home(name)
elseif fields["to_home"] then
--h2omes.to_home(name, "home")
action_timers.wrapper(name, "tohome", "tohome_" .. name, h2omes.time, h2omes.to_home, {name, "home"})
elseif fields["to_pit"] then
--h2omes.to_home(name, "pit")
action_timers.wrapper(name, "tohome", "tohome_" .. name, h2omes.time, h2omes.to_home, {name, "pit"})
end
end
end)
minetest.register_on_joinplayer(function(player)
local name = player:get_player_name()
if not name or name == "" then return end
h2omes.load_homes(name)
end)
minetest.register_on_leaveplayer(function(player)
local name = player:get_player_name()
if not name or name == "" then return end
h2omes.homes[name] = nil
end)
minetest.register_privilege("home", "Can use /sethome, /home, /setpit and /pit")
minetest.register_chatcommand("home", {
description = "Teleport you to your home point",
privs = {home=true},
func = function (name, params)
if not h2omes.get_home(name, "home") then
minetest.chat_send_player(name, "Set a home using /sethome")
return false
end
--h2omes.to_home(name, "home")
return action_timers.wrapper(name, "tohome", "tohome_" .. name, h2omes.time, h2omes.to_home, {name, "home"})
end,
})
minetest.register_chatcommand("sethome", {
description = "Set your home point",
privs = {home=true},
func = function (name, params)
--h2omes.set_home(name, "home")
return action_timers.wrapper(name, "sethome", "sethome_" .. name, h2omes.time, h2omes.set_home, {name, "home"})
end,
})
minetest.register_chatcommand("pit", {
description = "Teleport you to your pit point",
privs = {home=true},
func = function (name, params)
if not h2omes.get_home(name, "pit") then
minetest.chat_send_player(name, "Set a pit using /setpit")
return false
end
--h2omes.to_home(name, "pit")
return action_timers.wrapper(name, "tohome", "tohome_" .. name, h2omes.time, h2omes.to_home, {name, "pit"})
end,
})
minetest.register_chatcommand("setpit", {
description = "Set your pit point",
privs = {home=true},
func = function (name, params)
--h2omes.set_home(name, "pit")
return action_timers.wrapper(name, "sethome", "sethome_" .. name, h2omes.time, h2omes.set_home, {name, "pit"})
end,
})
minetest.log("action","[h2omes] Loaded.")