From 28f08be995d1a6662893858a2532dc7e19d9c0ee Mon Sep 17 00:00:00 2001 From: Rui914 Date: Wed, 9 Sep 2015 06:29:36 +0900 Subject: [PATCH] Tweaks sethome --- mods/sethome/init.lua | 94 +++++++++++++++++++++---------------------- 1 file changed, 45 insertions(+), 49 deletions(-) diff --git a/mods/sethome/init.lua b/mods/sethome/init.lua index 590086b4..de694ada 100644 --- a/mods/sethome/init.lua +++ b/mods/sethome/init.lua @@ -2,64 +2,60 @@ local homes_file = minetest.get_worldpath() .. "/homes" local homepos = {} local function loadhomes() - local input = io.open(homes_file, "r") - if input then + local input = io.open(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("*l") - homepos[name:sub(2)] = {x = x, y = y, z = z} - until input:read(0) == nil - io.close(input) - else - homepos = {} - end + local x = input:read("*n") + if not x then + break + end + local y = input:read("*n") + local z = input:read("*n") + local name = input:read("*l") + homepos[name:sub(2)] = vector.new(x, y, z) + until not input:read(0) + io.close(input) + end end loadhomes() +minetest.register_on_shutdown(function() + local output = io.open(homes_file, "w") + for i, v in pairs(homepos) do + output:write(v.x.." "..v.y.." "..v.z.." "..i.."\n") + end + io.close(output) +end) + 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) - local player = minetest.get_player_by_name(name) - if player == nil then - -- just a check to prevent the server crashing - return false - end - if homepos[player:get_player_name()] then - player:setpos(homepos[player:get_player_name()]) - minetest.chat_send_player(name, "Teleported to home!") - else - minetest.chat_send_player(name, "Set a home using /sethome") - end - end, + description = "Teleport you to your home point", + privs = {home=true}, + func = function(name) + local player = minetest.get_player_by_name(name) + if not player then + return false + end + if homepos[name] then + player:setpos(homepos[name]) + return "Teleported to home!" + else + return "Set a home using /sethome" + end + end }) minetest.register_chatcommand("sethome", { - description = "Set your home point", - privs = {home=true}, - func = function(name) - local player = minetest.get_player_by_name(name) - local pos = player:getpos() - homepos[player:get_player_name()] = pos - minetest.chat_send_player(name, "Home set!") - changed = true - if changed then - local output = io.open(homes_file, "w") - for i, v in pairs(homepos) do - output:write(v.x.." "..v.y.." "..v.z.." "..i.."\n") - end - io.close(output) - changed = false - end - end, + description = "Set your home point", + privs = {home=true}, + func = function(name) + local player = minetest.get_player_by_name(name) + if not player then + return false + end + homepos[name] = player:getpos() + return "Home set!" + end })