2014-11-01 13:00:59 +01:00
local real_homes_file = minetest.get_worldpath ( ) .. " /real_homes "
local nether_homes_file = minetest.get_worldpath ( ) .. " /nether_homes "
local homepos = { real = { } , nether = { } }
2014-10-28 18:01:32 +01:00
local function loadhomes ( )
2014-11-01 13:00:59 +01:00
local input = io.open ( real_homes_file , " r " )
2014-10-28 18:01:32 +01:00
if input then
repeat
local x = input : read ( " *n " )
if x == nil then
break
end
local y = input : read ( " *n " )
local z = input : read ( " *n " )
local name = input : read ( " *l " )
2014-11-01 13:00:59 +01:00
homepos.real [ name : sub ( 2 ) ] = { x = x , y = y , z = z }
2014-10-28 18:01:32 +01:00
until input : read ( 0 ) == nil
io.close ( input )
else
2014-11-01 13:00:59 +01:00
homepos.real = { }
2014-10-28 18:01:32 +01:00
end
2014-11-01 13:00:59 +01:00
input = io.open ( nether_homes_file , " r " )
if input then
repeat
local x = input : read ( " *n " )
if x == nil then
break
end
local y = input : read ( " *n " )
local z = input : read ( " *n " )
local name = input : read ( " *n " )
homepos.nether [ name : sub ( 2 ) ] = { x = x , y = y , z = z }
until input : read ( 0 ) == nil
io.close ( input )
else
homepos.nether = { }
end
2014-10-28 18:01:32 +01:00
end
loadhomes ( )
minetest.register_privilege ( " home " , " Can use /sethome and /home " )
local changed = false
minetest.register_chatcommand ( " home " , {
description = " Teleport you to your home point " ,
privs = { home = true } ,
func = function ( name )
2014-11-08 16:36:02 +01:00
local player = minetest.get_player_by_name ( name )
local player_pos = player : getpos ( )
local is_player_in_nether = player_pos.y < - 19600
2014-11-01 13:00:59 +01:00
2014-10-28 18:01:32 +01:00
if player == nil then
-- just a check to prevent the server crashing
return false
end
2014-11-08 16:36:02 +01:00
if is_player_in_nether then
if homepos.nether [ name ] ~= nil then
player : setpos ( homepos.nether [ name ] )
minetest.log ( " action " , name .. " teleported with /home to " .. homepos.nether [ name ] . x .. " , " .. homepos.nether [ name ] . y .. " , " .. homepos.nether [ name ] . z .. " , in the nether. " )
core.chat_send_player ( name , " Teleported to home in the nether! " )
else
core.chat_send_player ( name , " Set a home in the nether using /sethome " )
end
else
if homepos.real [ name ] ~= nil then
player : setpos ( homepos.real [ name ] )
minetest.log ( " action " , name .. " teleported with /home to " .. homepos.real [ name ] . x .. " , " .. homepos.real [ name ] . y .. " , " .. homepos.real [ name ] . z .. " , in the real world. " )
core.chat_send_player ( name , " Teleported to home in the real world! " )
else
core.chat_send_player ( name , " Set a home in the real world using /sethome " )
2014-11-01 13:00:59 +01:00
end
2014-10-28 18:01:32 +01:00
end
end ,
} )
minetest.register_chatcommand ( " sethome " , {
description = " Set your home point " ,
privs = { home = true } ,
func = function ( name )
2014-11-08 16:36:02 +01:00
local player_pnt = minetest.get_player_by_name ( name )
local player_pos = player_pnt : getpos ( )
local player_is_in_nether = player_pos.y < - 19600
if player_is_in_nether == true then
homepos.nether [ name ] = pos
minetest.log ( " action " , name .. " set its home position to " .. player_pos.x .. " , " .. player_pos.y .. " , " .. player_pos.z .. " , in the nether. " )
core.chat_send_player ( name , " Home set in the nether! " )
2014-11-01 13:00:59 +01:00
else
2014-11-08 16:36:02 +01:00
homepos.real [ name ] = pos
minetest.log ( " action " , name .. " set its home position to " .. player_pos.x .. " , " .. player_pos.y .. " , " .. player_pos.z .. " , in the real world. " )
core.chat_send_player ( name , " Home set in the real world! " )
2014-11-01 13:00:59 +01:00
end
2014-11-08 16:36:02 +01:00
changed = true
2014-10-28 18:01:32 +01:00
if changed then
2014-11-01 14:01:46 +01:00
local output = 0
2014-11-08 16:36:02 +01:00
2014-11-01 13:00:59 +01:00
if is_in_nether then
2014-11-01 14:01:46 +01:00
output = io.open ( nether_homes_file , " w " )
2014-11-01 16:23:22 +01:00
if output == 0 then return end -- Had not open the file
for i , v in pairs ( homepos.nether ) do
output : write ( v.x .. " " .. v.y .. " " .. v.z .. " " .. i .. " \n " )
end
2014-11-01 13:00:59 +01:00
else
2014-11-01 14:01:46 +01:00
output = io.open ( real_homes_file , " w " )
2014-11-01 16:23:22 +01:00
for i , v in pairs ( homepos.real ) do
output : write ( v.x .. " " .. v.y .. " " .. v.z .. " " .. i .. " \n " )
end
2014-11-01 13:00:59 +01:00
end
2014-11-01 16:23:22 +01:00
2014-10-28 18:01:32 +01:00
io.close ( output )
changed = false
end
end ,
} )