80 lines
2.0 KiB
Lua
80 lines
2.0 KiB
Lua
sethome = {}
|
|
|
|
-- Intllib
|
|
local S = intllib.make_gettext_pair()
|
|
|
|
sethome.set = function(name, pos)
|
|
local player = minetest.get_player_by_name(name)
|
|
if not player or not minetest.is_valid_pos(pos) then
|
|
return false
|
|
end
|
|
player:set_attribute("sethome:home", minetest.pos_to_string(pos))
|
|
return true -- if the file doesn't exist - don't return an error.
|
|
end
|
|
|
|
sethome.get = function(name)
|
|
local player = minetest.get_player_by_name(name)
|
|
local pos = minetest.string_to_pos(player:get_attribute("sethome:home"))
|
|
if pos then
|
|
return pos
|
|
end
|
|
end
|
|
|
|
sethome.go = function(name)
|
|
local pos = sethome.get(name)
|
|
local player = minetest.get_player_by_name(name)
|
|
if player and pos then
|
|
player:set_pos(pos)
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
local function green(str)
|
|
return minetest.colorize("#7CFC00",str)
|
|
end
|
|
|
|
local function red(str)
|
|
return minetest.colorize("#FF0000",str)
|
|
end
|
|
|
|
minetest.register_chatcommand("home", {
|
|
description = "Teleport you to your home point",
|
|
func = function(name)
|
|
if sethome.go(name) then
|
|
return true, green(S("Teleported to home!"))
|
|
end
|
|
return false, red(S("Set a home using /sethome"))
|
|
end,
|
|
})
|
|
|
|
minetest.register_chatcommand("sethome", {
|
|
description = "Set your home point",
|
|
func = function(name)
|
|
name = name or "" -- fallback to blank name if nil
|
|
local player = minetest.get_player_by_name(name)
|
|
if player and sethome.set(name, player:get_pos()) then
|
|
return true, green(S("Home set!"))
|
|
end
|
|
return false, red(S("Player not found!"))
|
|
end,
|
|
})
|
|
|
|
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|
if not player or not player:is_player() then
|
|
return
|
|
end
|
|
local player_name = player:get_player_name()
|
|
if fields.sethome_set then
|
|
sethome.set(player_name, player:get_pos())
|
|
minetest.chat_send_player(player_name, green(S("Home set!")))
|
|
elseif fields.sethome_go then
|
|
if sethome.go(player_name) then
|
|
sethome.go(player_name)
|
|
minetest.chat_send_player(player_name, green(S("Teleported to home!")))
|
|
else
|
|
minetest.chat_send_player(player_name, red(S("Home is not set!")))
|
|
end
|
|
end
|
|
end)
|