90 lines
2.8 KiB
Lua
90 lines
2.8 KiB
Lua
local S = minetest.get_translator("travelnet")
|
|
|
|
return function (node_info, fields, player)
|
|
local pos = node_info.pos
|
|
local meta = node_info.meta
|
|
local player_name = player:get_player_name()
|
|
|
|
local owner_name = node_info.props.owner_name
|
|
local station_network = node_info.props.station_network
|
|
local station_name = node_info.props.station_name
|
|
local description = node_info.props.description
|
|
|
|
if not description then
|
|
return false, S("Unknown node.")
|
|
end
|
|
|
|
if not pos or not fields or not meta or not player_name then
|
|
return false, S("Invalid data or node.")
|
|
end
|
|
|
|
-- sanitize inputs
|
|
if travelnet.is_falsey_string(fields.station_name) then
|
|
fields.station_name = S("at @1 m", tostring(pos.y))
|
|
end
|
|
|
|
-- nothing changed?
|
|
if station_name == fields.station_name then
|
|
return true, { formspecs = "primary" }
|
|
end
|
|
|
|
-- players with travelnet_remove priv can dig the station
|
|
if not minetest.get_player_privs(player_name)[travelnet.remove_priv]
|
|
-- the function travelnet.allow_dig(..) may allow additional digging
|
|
and not travelnet.allow_dig(player_name, owner_name, station_network, pos)
|
|
-- the owner can remove the station
|
|
and owner_name ~= player_name
|
|
-- stations without owner can be removed/edited by anybody
|
|
and owner_name ~= ""
|
|
then
|
|
return false, S("This @1 belongs to @2. You can't edit it.",
|
|
description,
|
|
tostring(owner_name)
|
|
)
|
|
end
|
|
|
|
local travelnets = travelnet.get_travelnets(owner_name)
|
|
local network = travelnets[station_network]
|
|
if not network then
|
|
network = {}
|
|
travelnets[station_name] = network
|
|
end
|
|
|
|
-- does a station with the new name already exist?
|
|
if network[fields.station_name] then
|
|
return false, S('Station "@1" already exists on network "@2".',
|
|
fields.station_name, station_network)
|
|
end
|
|
|
|
-- get the old station table
|
|
local old_station = network[station_name]
|
|
if not old_station then
|
|
return false, S("Station does exist.")
|
|
end
|
|
-- apply the old table to the new station
|
|
network[fields.station_name] = old_station
|
|
-- remove old station
|
|
network[station_name] = nil
|
|
-- update station name in node meta
|
|
meta:set_string("station_name", fields.station_name)
|
|
|
|
minetest.chat_send_player(player_name,
|
|
S('Station "@1" has been renamed to "@2" on network "@3".',
|
|
station_name, fields.station_name, station_network))
|
|
|
|
meta:set_string("infotext",
|
|
S("Station '@1'" .. " " ..
|
|
"on network '@2' (owned by @3)" .. " " ..
|
|
"ready for usage.",
|
|
tostring(fields.station_name), tostring(station_network), tostring(owner_name)))
|
|
|
|
-- save the updated network data in a savefile over server restart
|
|
travelnet.log("action", "renamed elevator '" .. fields.station_name .. "' on network '" .. station_network ..
|
|
"' for player '" .. owner_name .. "'")
|
|
travelnet.set_travelnets(owner_name, travelnets)
|
|
|
|
return true, { formspec = travelnet.formspecs.primary, options = {
|
|
station_name = fields.station_name
|
|
} }
|
|
end
|