diff --git a/minetestforfun_game/mods/sethome/init.lua b/minetestforfun_game/mods/sethome/init.lua index b8696d79..d5c5794e 100644 --- a/minetestforfun_game/mods/sethome/init.lua +++ b/minetestforfun_game/mods/sethome/init.lua @@ -3,27 +3,39 @@ home = {} home.homes_file = {["real"] = minetest.get_worldpath() .. "/realhomes", ["nether"] = minetest.get_worldpath() .. "/netherhomes"} home.homepos = {["real"] = {}, ["nether"] = {}} -home.timers = {} -home.HOME_INTERVAL = 20*60 +home.g_timers = {} +home.s_timers = {} +home.GET_HOME_INTERVAL = 20*60 +home.SET_HOME_INTERVAL = 20*60 home.sethome = function(name) - local player = minetest.env:get_player_by_name(name) - local pos = player:getpos() + local player = minetest.env:get_player_by_name(name) + local pos = player:getpos() local p_status = "real" if pos.y < -19600 then p_status = "nether" end - home.homepos[p_status][player:get_player_name()] = pos - minetest.chat_send_player(name, "Home set!") - local CHANGED = true - if changed then - local output = io.open(home.homes_file[p_status], "w") - for i, v in pairs(home.homepos[p_status]) do - output:write(v.x.." "..v.y.." "..v.z.." "..i.."\n") - end - io.close(output) - changed = false - end + if home.s_timers[name] ~= nil then + local timer_player = os.difftime(os.time(),home.s_timers[name]) + if timer_player < home.SET_HOME_INTERVAL then -- less than x minutes + minetest.chat_send_player(name, "Please retry later, you used sethome last time less than ".. home.SET_HOME_INTERVAL .." seconds ago.") + minetest.chat_send_player(name, "Retry in: ".. home.SET_HOME_INTERVAL-timer_player .." seconds.") + minetest.log("action","Player ".. name .." tried to sethome within forbidden interval.") + return false + end + end + if home.homepos[p_status][player:get_player_name()] ~= pos then + home.s_timers[name] = os.time() + home.homepos[p_status][player:get_player_name()] = pos + minetest.chat_send_player(name, "Home set!") + local output = io.open(home.homes_file[p_status], "w") + for i, v in pairs(home.homepos[p_status]) do + output:write(v.x.." "..v.y.." "..v.z.." "..i.."\n") + end + io.close(output) + return true + end + return false end home.tohome = function(name) @@ -36,20 +48,20 @@ home.tohome = function(name) if player:getpos().y < -19600 then p_status = "nether" end - if home.homepos[p_status][name] then - if home.timers[name] ~= nil then - local timer_player = os.difftime(os.time(),home.timers[name]) - if timer_player < home.HOME_INTERVAL then -- less than x minutes - minetest.chat_send_player(name, "Please retry later, you used home last time less than ".. home.HOME_INTERVAL .." seconds ago.") - minetest.chat_send_player(name, "Retry in: ".. home.HOME_INTERVAL-timer_player .." seconds.") + if home.homepos[p_status][name] then + if home.g_timers[name] ~= nil then + local timer_player = os.difftime(os.time(),home.g_timers[name]) + if timer_player < home.GET_HOME_INTERVAL then -- less than x minutes + minetest.chat_send_player(name, "Please retry later, you used home last time less than ".. home.GET_HOME_INTERVAL .." seconds ago.") + minetest.chat_send_player(name, "Retry in: ".. home.GET_HOME_INTERVAL-timer_player .." seconds.") minetest.log("action","Player ".. name .." tried to teleport home within forbidden interval.") return false end end player:setpos(home.homepos[p_status][player:get_player_name()]) minetest.chat_send_player(name, "Teleported to home!") - minetest.log("action","Player ".. name .." teleported to home. Last teleportation allowed in ".. home.HOME_INTERVAL .." seconds.") - home.timers[name] = os.time() + minetest.log("action","Player ".. name .." teleported to home. Last teleportation allowed in ".. home.GET_HOME_INTERVAL .." seconds.") + home.g_timers[name] = os.time() return true else minetest.chat_send_player(name, "Set a home using /sethome") @@ -82,8 +94,6 @@ 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}, diff --git a/mods/unified_inventory/register.lua b/mods/unified_inventory/register.lua index ce9ae915..5ed24bf0 100755 --- a/mods/unified_inventory/register.lua +++ b/mods/unified_inventory/register.lua @@ -47,9 +47,10 @@ unified_inventory.register_button("home_gui_set", { image = "ui_sethome_icon.png", tooltip = S("Set home position"), action = function(player) - minetest.sound_play("dingdong", + if home.sethome(player:get_player_name()) == true then + minetest.sound_play("dingdong", {to_player=player:get_player_name(), gain = 1.0}) - home.sethome(player:get_player_name()) + end end, })