302e425262
* Remove the usage of pos2str using context var * Make sure on punch and paging is working * Generate formspecs on interact, not on update * Linting and page_formspec usage * Clear metadata formspec on interact * Consolidate ordered formspec function * Reduce repetition in infotext when updating station * Formspec redo - first working version * Move largest actions to individual files * Cleanup and tested
127 lines
4.4 KiB
Lua
127 lines
4.4 KiB
Lua
local S = minetest.get_translator("travelnet")
|
|
|
|
local player_formspec_data = travelnet.player_formspec_data
|
|
|
|
travelnet.actions = {}
|
|
|
|
function travelnet.actions.navigate_page(node_info, fields, _)
|
|
local page = 1
|
|
local network = travelnet.get_network(node_info.props.owner_name, node_info.props.station_network)
|
|
local station_count = 0
|
|
for _ in pairs(network) do
|
|
station_count = station_count+1
|
|
end
|
|
local page_size = 7*3
|
|
local pages = math.ceil(station_count/page_size)
|
|
|
|
if fields.last_page then
|
|
page = pages
|
|
else
|
|
local current_page = tonumber(fields.page_number)
|
|
if current_page then
|
|
if fields.next_page then
|
|
page = math.min(current_page+1, pages)
|
|
elseif fields.prev_page then
|
|
page = math.max(current_page-1, 1)
|
|
end
|
|
end
|
|
end
|
|
return true, { formspec = travelnet.formspecs.primary, options = { page_number = page } }
|
|
end
|
|
|
|
function travelnet.actions.remove_station(node_info, _, player)
|
|
local player_name = player:get_player_name()
|
|
|
|
-- abort if protected by another mod
|
|
if minetest.is_protected(node_info.pos, player_name)
|
|
and not minetest.check_player_privs(player_name, { protection_bypass = true })
|
|
then
|
|
minetest.record_protection_violation(node_info.pos, player_name)
|
|
return false,
|
|
S("This @1 belongs to @2. You can't remove it.", node_info.props.description, node_info.props.owner_name)
|
|
end
|
|
|
|
-- players with travelnet_remove priv can dig the station
|
|
if
|
|
not minetest.check_player_privs(player_name, { travelnet_remove = true })
|
|
-- the function travelnet.allow_dig(..) may allow additional digging
|
|
and not travelnet.allow_dig(player_name, node_info.props.owner_name, node_info.props.station_network, node_info.pos)
|
|
-- the owner can remove the station
|
|
and node_info.props.owner_name ~= player_name
|
|
-- stations without owner can be removed/edited by anybody
|
|
and node_info.props.owner_name ~= ""
|
|
then
|
|
return false,
|
|
S("This @1 belongs to @2. You can't remove it.", node_info.props.description, node_info.props.owner_name)
|
|
end
|
|
|
|
-- remove station
|
|
local player_inventory = player:get_inventory()
|
|
if not player_inventory:room_for_item("main", node_info.node.name) then
|
|
return false, S("You do not have enough room in your inventory.")
|
|
end
|
|
|
|
-- give the player the box
|
|
player_inventory:add_item("main", node_info.node.name)
|
|
-- remove the box from the data structure
|
|
travelnet.remove_box(node_info.pos, nil, node_info.meta:to_table(), player)
|
|
-- remove the node as such
|
|
minetest.remove_node(node_info.pos)
|
|
|
|
return true
|
|
end
|
|
|
|
function travelnet.actions.edit_station(node_info, _, player)
|
|
local player_name = player:get_player_name()
|
|
-- abort if protected by another mod
|
|
if minetest.is_protected(node_info.pos, player_name)
|
|
and not minetest.check_player_privs(player_name, { protection_bypass=true })
|
|
then
|
|
minetest.record_protection_violation(node_info.pos, player_name)
|
|
return false, S("This @1 belongs to @2. You can't edit it.",
|
|
node_info.props.description,
|
|
tostring(node_info.props.owner_name)
|
|
)
|
|
end
|
|
|
|
return true, {
|
|
formspec = node_info.props.is_elevator
|
|
and travelnet.formspecs.edit_elevator
|
|
or travelnet.formspecs.edit_travelnet
|
|
}
|
|
end
|
|
|
|
function travelnet.actions.update_station(node_info, fields, player)
|
|
if node_info.props.is_elevator then
|
|
return travelnet.actions.update_elevator(node_info, fields, player)
|
|
else
|
|
return travelnet.actions.update_travelnet(node_info, fields, player)
|
|
end
|
|
end
|
|
|
|
function travelnet.actions.toggle_door(node_info, _, player)
|
|
travelnet.open_close_door(node_info.pos, player, "toggle")
|
|
return true
|
|
end
|
|
|
|
function travelnet.actions.instruct_player(_, _, player)
|
|
minetest.chat_send_player(player:get_player_name(), S("Please click on the target you want to travel to."))
|
|
return true
|
|
end
|
|
|
|
function travelnet.actions.end_input(_, _, player)
|
|
player_formspec_data[player:get_player_name()] = nil
|
|
return true
|
|
end
|
|
|
|
function travelnet.actions.return_to_form()
|
|
return true, { formspec = travelnet.formspecs.current }
|
|
end
|
|
|
|
travelnet.actions.repair_station = dofile(travelnet.path .. "/actions/repair_station.lua")
|
|
travelnet.actions.change_order = dofile(travelnet.path .. "/actions/change_order.lua")
|
|
travelnet.actions.add_station = dofile(travelnet.path .. "/actions/add_station.lua")
|
|
travelnet.actions.transport_player = dofile(travelnet.path .. "/actions/transport_player.lua")
|
|
travelnet.actions.update_elevator = dofile(travelnet.path .. "/actions/update_elevator.lua")
|
|
travelnet.actions.update_travelnet = dofile(travelnet.path .. "/actions/update_travelnet.lua")
|