add a teleport button for people with teleport priv

This commit is contained in:
whosit 2023-07-27 06:42:06 +03:00
parent 4c5437da71
commit f43ff56fb1

View File

@ -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