mods that hopefully work for a TechAge-based pack
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
local S = minetest.get_translator("travelnet")
|
||||
|
||||
return function (node_info, fields, player)
|
||||
|
||||
local network = travelnet.get_network(node_info.props.owner_name, node_info.props.station_network)
|
||||
|
||||
if node_info.node ~= nil and node_info.props.is_elevator then
|
||||
for k,_ in pairs(network) do
|
||||
if network[k].nr == fields.target then
|
||||
fields.target = k
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local target_station = network[fields.target]
|
||||
|
||||
-- if the target station is gone
|
||||
if not target_station then
|
||||
return false, S("Station '@1' does not exist (anymore?)" ..
|
||||
" " .. "on this network.", fields.target or "?")
|
||||
end
|
||||
|
||||
local player_name = player:get_player_name()
|
||||
|
||||
if not travelnet.allow_travel(
|
||||
player_name,
|
||||
node_info.props.owner_name,
|
||||
node_info.props.station_network,
|
||||
node_info.props.station_name,
|
||||
fields.target
|
||||
) then
|
||||
return false, S("You are not allowed to travel to this station.")
|
||||
end
|
||||
|
||||
if travelnet.travelnet_sound_enabled then
|
||||
if node_info.props.is_elevator then
|
||||
minetest.sound_play("travelnet_bell", {
|
||||
pos = node_info.pos,
|
||||
gain = 0.75,
|
||||
max_hear_distance = 10
|
||||
})
|
||||
else
|
||||
minetest.sound_play("travelnet_travel", {
|
||||
pos = node_info.pos,
|
||||
gain = 0.75,
|
||||
max_hear_distance = 10
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
if travelnet.travelnet_effect_enabled then
|
||||
minetest.add_entity(vector.add(node_info.pos, { x=0, y=0.5, z=0 }), "travelnet:effect")
|
||||
end
|
||||
|
||||
-- close the doors at the sending station
|
||||
travelnet.open_close_door(node_info.pos, player, "close")
|
||||
|
||||
-- transport the player to the target location
|
||||
|
||||
-- may be 0.0 for some versions of MT 5 player model
|
||||
local player_model_bottom = tonumber(minetest.settings:get("player_model_bottom")) or -.5
|
||||
local player_model_vec = vector.new(0, player_model_bottom, 0)
|
||||
local target_pos = target_station.pos
|
||||
|
||||
local top_pos = vector.add(node_info.pos, { x=0, y=1, z=0 })
|
||||
local top_node = minetest.get_node(top_pos)
|
||||
if top_node.name ~= "travelnet:hidden_top" then
|
||||
local def = minetest.registered_nodes[top_node.name]
|
||||
if def and def.buildable_to then
|
||||
minetest.set_node(top_pos, { name="travelnet:hidden_top" })
|
||||
end
|
||||
end
|
||||
|
||||
minetest.load_area(target_pos)
|
||||
|
||||
local tnode = minetest.get_node(target_pos)
|
||||
-- check if the box has at the other end has been removed.
|
||||
if minetest.get_item_group(tnode.name, "travelnet") == 0 and minetest.get_item_group(tnode.name, "elevator") == 0 then
|
||||
-- provide information necessary to identify the removed box
|
||||
local oldmetadata = {
|
||||
fields = {
|
||||
owner = node_info.props.owner_name,
|
||||
station_name = fields.target,
|
||||
station_network = node_info.props.station_network
|
||||
}
|
||||
}
|
||||
|
||||
local success, reason = travelnet.remove_box_action(oldmetadata)
|
||||
if not success then
|
||||
return false, reason
|
||||
end
|
||||
|
||||
travelnet.remove_box_message(oldmetadata, player)
|
||||
else
|
||||
-- add player model offset
|
||||
target_pos = vector.add(target_pos, player_model_vec)
|
||||
-- add travelnet bottom plate offset
|
||||
target_pos = vector.add(target_pos, { x=0, y=0.05, z=0 })
|
||||
|
||||
player:set_pos(target_pos)
|
||||
travelnet.rotate_player(target_pos, player)
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
Reference in New Issue
Block a user