add a teleport button for people with teleport priv
This commit is contained in:
parent
4c5437da71
commit
f43ff56fb1
45
init.lua
45
init.lua
@ -297,8 +297,16 @@ local function show_basic_dialog(itemstack, player)
|
||||
field_color,
|
||||
"button_exit[0.5,1.7;1.5,0.5;set_recent;copy:]",
|
||||
dropdown_recent,
|
||||
"button_exit[3,2.7;3,0.8;save;save]",
|
||||
"button_exit[8,2.7;3,0.8;close;close]"}
|
||||
}
|
||||
if minetest.check_player_privs(player, "teleport") then
|
||||
table.insert(formspec, "button_exit[2.5,2.7;3,0.8;save;save]")
|
||||
table.insert(formspec, "button_exit[6,2.7;2,0.8;teleport;teleport]")
|
||||
table.insert(formspec, "button_exit[8.5,2.7;3,0.8;close;close]")
|
||||
else
|
||||
table.insert(formspec, "button_exit[3,2.7;3,0.8;save;save]")
|
||||
table.insert(formspec, "button_exit[8,2.7;3,0.8;close;close]")
|
||||
end
|
||||
|
||||
compass_dialog_context[player_name] = {
|
||||
-- save index to check if player switched the item before formspec is shown
|
||||
wield_index = player:get_wield_index(),
|
||||
@ -344,7 +352,11 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if formname ~= "waypoint_compass:basic" then
|
||||
return
|
||||
end
|
||||
if fields.save or fields.set_recent or (fields.key_enter_field and fields.quit) then
|
||||
if fields.save or
|
||||
fields.set_recent or
|
||||
(fields.key_enter_field and fields.quit) or
|
||||
fields.teleport
|
||||
then
|
||||
local dialog_context = compass_dialog_context[player:get_player_name()]
|
||||
if not dialog_context then
|
||||
-- should not happen normally
|
||||
@ -360,9 +372,11 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
-- Prevent overwriting random item if user switched before
|
||||
-- formspec appeared.
|
||||
if compass_item:get_name() ~= "waypoint_compass:compass" then
|
||||
-- compass has disappeared
|
||||
minetest.chat_send_player(player:get_player_name(),
|
||||
"What happened to your compass?")
|
||||
else
|
||||
-- set new compass meta
|
||||
local meta = compass_item:get_meta()
|
||||
|
||||
local color = tonumber("0x"..fields.color, 16)
|
||||
@ -393,6 +407,25 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
set_compass_meta_label(meta, label)
|
||||
|
||||
inventory:set_stack(wield_list, wield_index, compass_item)
|
||||
|
||||
if fields.teleport then
|
||||
-- teleport button
|
||||
if minetest.check_player_privs(player, "teleport") then
|
||||
local meta = compass_item:get_meta()
|
||||
local pos = get_compass_meta_pos(meta)
|
||||
|
||||
-- use API function to make it overridable
|
||||
waypoint_compass.teleport(player, pos)
|
||||
|
||||
minetest.log("action","[MOD] waypoint_compass: " ..
|
||||
player:get_player_name() ..
|
||||
" teleported to " .. minetest.pos_to_string(pos))
|
||||
else
|
||||
minetest.log("warning","[MOD] waypoint_compass: " ..
|
||||
player:get_player_name() ..
|
||||
" tried to teleport without teleport priv")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- assume dialog is closed and reset context
|
||||
@ -616,6 +649,12 @@ end
|
||||
waypoint_compass={}
|
||||
|
||||
|
||||
-- Basic function that can be overridable with something smarter
|
||||
function waypoint_compass.teleport(player, pos)
|
||||
player:set_pos(pos)
|
||||
end
|
||||
|
||||
|
||||
function waypoint_compass.make_compass(pos, owner_name, label, color)
|
||||
return make_compass(pos,owner_name, label, color)
|
||||
end
|
||||
|
||||
Loading…
Reference in New Issue
Block a user