106 lines
3.4 KiB
Lua
106 lines
3.4 KiB
Lua
local S = minetest.get_translator("elevator")
|
|
|
|
local elevator_form_name = "elevator:show"
|
|
|
|
-- minetest.chat_send_player is sometimes not so well visible
|
|
function elevator.show_message(pos, player_name, title, message)
|
|
if not pos or not player_name or not message then
|
|
return
|
|
end
|
|
local formspec = ([[
|
|
size[8,3]
|
|
label[3,0;%s]
|
|
textlist[0,0.5;8,1.5;;%s;]
|
|
button_exit[3.5,2.5;1.0,0.5;back;%s]
|
|
button_exit[6.8,2.5;1.0,0.5;station_exit;%s]
|
|
field[20,20;0.1,0.1;pos2str;Pos;%s]
|
|
]]):format(
|
|
minetest.formspec_escape(title or S("Error")),
|
|
minetest.formspec_escape(message or "- nothing -"),
|
|
S("Back"),
|
|
S("Exit"),
|
|
minetest.pos_to_string(pos)
|
|
)
|
|
minetest.show_formspec(player_name, elevator_form_name, formspec)
|
|
end
|
|
|
|
-- show the player the formspec they would see when right-clicking the node;
|
|
-- needs to be simulated this way as calling on_rightclick would not do
|
|
function elevator.show_current_formspec(pos, meta, player_name)
|
|
if not pos or not meta or not player_name then
|
|
return
|
|
end
|
|
-- we need to supply the position of the elevator box
|
|
local formspec = meta:get_string("formspec") ..
|
|
("field[20,20;0.1,0.1;pos2str;Pos;%s]"):format(minetest.pos_to_string(pos))
|
|
-- show the formspec manually
|
|
minetest.show_formspec(player_name, elevator_form_name, formspec)
|
|
end
|
|
|
|
-- a player clicked on something in the formspec hse was manually shown
|
|
-- (back from help page, moved elevator up or down etc.)
|
|
function elevator.form_input_handler(player, formname, fields)
|
|
if formname ~= elevator_form_name then return end
|
|
if fields and fields.pos2str then
|
|
local pos = minetest.string_to_pos(fields.pos2str)
|
|
if not pos then
|
|
return
|
|
end
|
|
|
|
-- back button leads back to the main menu
|
|
if fields.back and fields.back ~= "" then
|
|
return elevator.show_current_formspec(pos,
|
|
minetest.get_meta(pos), player:get_player_name())
|
|
end
|
|
return elevator.on_receive_fields(pos, formname, fields, player)
|
|
end
|
|
end
|
|
|
|
-- most formspecs the elevator uses are stored in the elevator node itself,
|
|
-- but some may require some "back"-button functionality (i.e. help page,
|
|
-- move up/down etc.)
|
|
minetest.register_on_player_receive_fields(elevator.form_input_handler)
|
|
|
|
|
|
function elevator.reset_formspec(meta)
|
|
if not meta then return end
|
|
|
|
meta:set_string("infotext", S("elevator-box (unconfigured)"))
|
|
meta:set_string("station_name", "")
|
|
meta:set_string("station_network","")
|
|
meta:set_string("owner", "")
|
|
|
|
-- some players seem to be confused with entering network names at first; provide them
|
|
-- with a default name
|
|
local default_network = "net1"
|
|
|
|
-- request initinal data
|
|
meta:set_string("formspec",
|
|
([[
|
|
size[10,6.0]
|
|
label[2.0,0.0;--> %s <--]
|
|
button_exit[8.0,0.0;2.2,0.7;station_dig;%s]
|
|
field[0.3,1.2;9,0.9;station_name;%s:;]
|
|
label[0.3,1.5;%s]
|
|
field[0.3,2.8;9,0.9;station_network;%s;%s]
|
|
label[0.3,3.1;%s]
|
|
field[0.3,4.4;9,0.9;owner;%s;]
|
|
label[0.3,4.7;%s]
|
|
button_exit[3.8,5.3;1.7,0.7;station_set;%s]
|
|
button_exit[6.3,5.3;1.7,0.7;station_exit;%s]
|
|
]]):format(
|
|
S("Configure this elevator station"),
|
|
S("Remove station"),
|
|
S("Name of this station"),
|
|
S("How do you call this place here? Example: \"my first house\", \"mine\", \"shop\"..."),
|
|
S("Assign to Network:"),
|
|
default_network,
|
|
S("You can have more than one network. If unsure, use \"@1\".", default_network),
|
|
S("Owned by:"),
|
|
S("Unless you know what you are doing, leave this empty."),
|
|
S("Save"),
|
|
S("Exit")
|
|
)
|
|
)
|
|
end
|