12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- local S = minetest.get_translator("travelnet")
- return function (node_info, fields, player)
- local player_name = player:get_player_name()
- -- does the player want to move this station one position up in the list?
- -- only the owner and players with the travelnet_attach priv can change the order of the list
- -- Note: With elevators, only the "G"(round) marking is actually moved
- if fields and (fields.move_up or fields.move_down)
- and not travelnet.is_falsey_string(node_info.props.owner_name)
- and (
- (node_info.props.owner_name == player_name)
- or (minetest.get_player_privs(player_name)[travelnet.attach_priv])
- )
- then
- local travelnets = travelnet.get_travelnets(node_info.props.owner_name)
- local network = travelnets[node_info.props.station_network]
- if not network then
- return false, S("This station does not have a network.")
- end
- local stations = travelnet.get_ordered_stations(
- node_info.props.owner_name,
- node_info.props.station_network,
- node_info.props.is_elevator
- )
- local current_pos = -1
- for index, k in ipairs(stations) do
- if k == node_info.props.station_name then
- current_pos = index
- break
- end
- end
- local swap_with_pos
- if fields.move_up then
- swap_with_pos = current_pos-1
- else
- swap_with_pos = current_pos+1
- end
- -- handle errors
- if swap_with_pos < 1 then
- return false, S("This station is already the first one on the list.")
- elseif swap_with_pos > #stations then
- return false, S("This station is already the last one on the list.")
- else
- local current_station = stations[current_pos]
- local swap_with_station = stations[swap_with_pos]
- -- swap the actual data by which the stations are sorted
- local old_timestamp = network[swap_with_station].timestamp
- network[swap_with_station].timestamp = network[current_station].timestamp
- network[current_station].timestamp = old_timestamp
- -- for elevators, only the "G"(round) marking is moved; no point in swapping stations
- if not node_info.props.is_elevator then
- -- actually swap the stations
- stations[swap_with_pos] = current_station
- stations[current_pos] = swap_with_station
- end
- -- store the changed order
- travelnet.log("action", "saving changed order for network '" .. node_info.props.station_network ..
- "' player '" .. node_info.props.owner_name .. "'")
- travelnet.set_travelnets(node_info.props.owner_name, travelnets)
- return true, { formspec = travelnet.formspecs.primary }
- end
- end
- return false, S("This @1 belongs to @2. You can't edit it.",
- node_info.props.description,
- tostring(node_info.props.owner_name)
- )
- end
|