diff --git a/README.md b/README.md index 8d10dc7..89767b1 100644 --- a/README.md +++ b/README.md @@ -4,12 +4,13 @@ ## Minetest goes Hyperloop! -* It allows travelling from point point in seconds (900 km/h) :-) +The fast and modern way of traveling. +* Hyperloop allows travelling from point point in seconds (900 km/h) :-) * Hyperloop tubes can be build in teamwork together with other players * It can be used even on small servers (Raspberry PI) without lagging * No configuration or programming of the tube network is necessary (only the station names have to be entered) -The mod includes many different blocks for the tubes, the junctions, the stations, the pod, the ticket/booking machine and the map tool. It also includes a WiFi tube block for very large distances (admin feature). +The mod includes many different blocks for tubes, junctions, stations, elevators, ticket/booking machine, map tool, station builder, tube robot, and some signs and decoration blocks. It also includes WiFi tube blocks for very large distances (admin feature). Browse on: ![GitHub](https://github.com/joe7575/Minetest-Hyperloop) @@ -19,12 +20,23 @@ Download: ![GitHub](https://github.com/joe7575/Minetest-Hyperloop/archive/master ## Introduction -[Contruction Manual](https://github.com/joe7575/Minetest-Hyperloop/wiki) +Hyperloop is passenger transportation system for travelling through evacuated tubes my means of passenger pods. +The tubes system with all stations and pods have to be build by the players. + +The pods can reach a maximum speed of up to 900 km/h. This requires a tube system on one level. That means all stations from one network have to be on the same level. Therefore, Hyperloop provides an elevator system to reach the station in the underground or in the air, depending on the tube level. + +To build a first route with 2 station, craft and place two Hyperloop Station Blocks, add items to the Station Block to build the Station Pod, place a Booking Machines nearby both stations, and connect the stations by means of Hyperloop Tube blocks. You can use the Hyperloop Tube Robot to simplify the job. + + +**Some additional facts:** + +The tube route is automatically protected. You can dig only the ends of a tube line (head blocks). The junction block / station has to be protected manually. + +Junction and Station Blocks can connect up to four tube lines. That means you can build complex networks of tube lines. Each junction/station can be reaches from each point with one trip. ## Still To Do -* configuration settings * Admin tool to interrupt tube routes diff --git a/description.txt b/description.txt index 29e3131..e50a363 100644 --- a/description.txt +++ b/description.txt @@ -1 +1 @@ -Hyperloop Mod for faster traveling. \ No newline at end of file +Hyperloop Mod, the fast and modern way of traveling. \ No newline at end of file diff --git a/door.lua b/door.lua index 46721cd..e72ba61 100644 --- a/door.lua +++ b/door.lua @@ -17,7 +17,6 @@ local function door_on_punch(pos, node, puncher, pointed_thing) local meta = minetest.get_meta(pos) local key_str = meta:get_string("key_str") - print("punch "..key_str) if hyperloop.data.tAllStations[key_str] ~= nil then local station_name = hyperloop.data.tAllStations[key_str].station_name if station_name == nil then diff --git a/elevator.lua b/elevator.lua index 96e5689..3583a24 100644 --- a/elevator.lua +++ b/elevator.lua @@ -67,7 +67,6 @@ end local function remove_elevator_list(pos) local spos = tostring(pos.x)..":"..tostring(pos.z) hyperloop.data.tAllElevators[spos] = nil - --print(spos, dump(hyperloop.data.tAllElevators)) end -- determine the elevator floor item or create one @@ -84,7 +83,6 @@ end -- Add the given arguments to the elevator table local function add_to_elevator_list(pos, tArgs) - --print("add_to_elevator_list", dump(pos)) local floor = get_floor_item(pos) for k,v in pairs(tArgs) do floor[k] = v @@ -110,7 +108,6 @@ local function floor_list(pos) end) -- check if elevator is complete for idx,floor in ipairs(floors) do - --print(idx, #floors, floor.name, floor.up, floor.down) if idx == 1 then if floor.down == false then return {} @@ -182,7 +179,6 @@ local function remove_from_elevator_list(pos) else -- update all other elevator cars for _,floor in ipairs(get_elevator_list(pos)) do - print(_, floor.name) if floor.name ~= "" then update_formspec(floor.pos) end @@ -193,7 +189,6 @@ end function hyperloop.update_elevator(pos) local up = false local down = false - --print("update y=", pos.y) pos.y = pos.y - 1 if string.find(minetest.get_node_or_nil(pos).name, "hyperloop:shaft") then @@ -207,11 +202,9 @@ function hyperloop.update_elevator(pos) pos.y = pos.y - 2 add_to_elevator_list(pos, {up=up, down=down}) - --dbg_out("update", pos) -- update all elevator cars which are already named for _,floor in ipairs(get_elevator_list(pos)) do - print(_, floor.name) if floor.name ~= "" then update_formspec(floor.pos) end @@ -345,7 +338,6 @@ minetest.register_node("hyperloop:elevator_bottom", { -- store floor_pos (lower car block) as meta data set_floor_pos(pos, floor_pos) pos.y = pos.y - 1 - --dbg_out("after_place_node", pos) end, on_receive_fields = function(pos, formname, fields, player) @@ -359,7 +351,6 @@ minetest.register_node("hyperloop:elevator_bottom", { local floor_pos = get_floor_pos(pos) add_to_elevator_list(floor_pos, {name=floor}) hyperloop.update_elevator(floor_pos) - --dbg_out("on_receive_fields", floor_pos) -- destination selected? elseif fields.button ~= nil then local floor_pos = get_floor_pos(pos) @@ -389,12 +380,9 @@ minetest.register_node("hyperloop:elevator_bottom", { minetest.swap_node(pos, node) end pos.y = pos.y + 2 - --print("pos.y="..pos.y) minetest.remove_node(pos) pos.y = pos.y - 1 remove_from_elevator_list(pos) - --local facedir = minetest.get_meta(pos):get_int("facedir") - --door_command(pos, facedir, "open") end, }) @@ -470,7 +458,6 @@ minetest.register_node("hyperloop:elevator_door", { on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) local floor_pos = get_floor_pos(pos) local floor = get_floor_item(floor_pos) - print(dump(floor.pos), floor.facedir) door_command(floor.pos, floor.facedir, "open") end, @@ -480,31 +467,3 @@ minetest.register_node("hyperloop:elevator_door", { groups = {snappy = 3, not_in_creative_inventory=1}, }) -------------------------------------------------------- ---[[ -local pos = {x=1, y=2, z=3} -local spos = tostring(pos.x)..":"..tostring(pos.z) -hyperloop.data.tAllElevators[spos].floors = nil - -local floor = get_floor_item(pos) -dbg_out("1", pos) -add_to_elevator_list(pos, {name="test1", up=false, down=false, facedir=1, pos=pos}) -dbg_out("2", pos) -remove_from_elevator_list(pos) -dbg_out("3", pos) -add_to_elevator_list(pos, {name="test1", up=false, down=false, facedir=1, pos=pos}) -dbg_out("4", pos) -add_to_elevator_list(pos, {up=true}) -dbg_out("5", pos) -print("6: ", dump(floor_list(pos))) - -local pos2 = {x=1, y=5, z=3} -add_to_elevator_list(pos2, {name="test2", up=true, down=true, facedir=1, pos=pos2}) -dbg_out("7", pos2) -print("8: ", dump(floor_list(pos2))) - -local pos3 = {x=1, y=9, z=3} -add_to_elevator_list(pos3, {name="test3", up=false, down=true, facedir=1, pos=pos3}) -dbg_out("9", pos3) -print("10: ", dump(floor_list(pos3))) -]]-- diff --git a/init.lua b/init.lua index e7634c9..2256cfe 100755 --- a/init.lua +++ b/init.lua @@ -18,6 +18,7 @@ 2017-07-16 v0.05 Doors can be opened manually 2017-07-24 v0.06 Tubes with limited slope, elevator and deco blocks added 2017-07-28 v0.07 Slope removed, Station auto-builder added + 2017-07-29 v0.08 Signs added, tube robot added ]]-- @@ -32,12 +33,11 @@ hyperloop = { } } -hyperloop.debugging = true +hyperloop.debugging = false dofile(minetest.get_modpath("hyperloop") .. "/utils.lua") dofile(minetest.get_modpath("hyperloop") .. "/tube.lua") dofile(minetest.get_modpath("hyperloop") .. "/booking.lua") ---dofile(minetest.get_modpath("hyperloop") .. "/junction.lua") dofile(minetest.get_modpath("hyperloop") .. "/station.lua") dofile(minetest.get_modpath("hyperloop") .. "/map.lua") dofile(minetest.get_modpath("hyperloop") .. "/door.lua") diff --git a/map.lua b/map.lua index 8b65de6..c7ed8ac 100644 --- a/map.lua +++ b/map.lua @@ -30,8 +30,8 @@ local function station_list_as_string(pos) print("tAllStations="..dump(sortedList)) print("tWifi="..dump(hyperloop.data.tWifi)) end - --local tRes = {"(player distance: station name (position) seat/machine/owner => directly connected with)\n\n"} - local tRes = {"size[12,10]label[0,0;Dist.]label[0.9,0;Station]label[2.5,0;Position]label[4.2,0;State]label[5.6,0;Owner]label[7.1,0;Connected with]"} + local tRes = {"label[0,0;Dist.]label[0.9,0;Station/Junction]label[2.7,0;Position]".. + "label[4.7,0;State]label[6.2,0;Owner]label[7.8,0;Directly connected with]"} local state, owner for idx,dataSet in ipairs(sortedList) do if idx == 18 then @@ -39,10 +39,13 @@ local function station_list_as_string(pos) end local ypos = 0.2 + idx * 0.4 if dataSet.station_name ~= nil then - state = "completed" + state = "Station" + elseif dataSet.junction == true then + dataSet.station_name = "" + state = "Junction" else - dataSet.station_name = "" - state = "no Booking M." + dataSet.station_name = "" + state = "No Booking M." end if dataSet.owner ~= nil then owner = dataSet.owner @@ -51,12 +54,16 @@ local function station_list_as_string(pos) end tRes[#tRes+1] = "label[0,"..ypos..";"..dataSet.distance.." m]" tRes[#tRes+1] = "label[0.9,"..ypos..";"..dataSet.station_name.."]" - tRes[#tRes+1] = "label[2.5,"..ypos..";"..minetest.pos_to_string(dataSet.pos).."]" - tRes[#tRes+1] = "label[4.2,"..ypos..";"..state.."]" - tRes[#tRes+1] = "label[5.6,"..ypos..";"..owner.."]" - tRes[#tRes+1] = "label[7.1,"..ypos..";" - for _,s in ipairs(hyperloop.get_connections(dataSet.key_str)) do - tRes[#tRes + 1] = s + tRes[#tRes+1] = "label[2.7,"..ypos..";"..minetest.pos_to_string(dataSet.pos).."]" + tRes[#tRes+1] = "label[4.7,"..ypos..";"..state.."]" + tRes[#tRes+1] = "label[6.2,"..ypos..";"..owner.."]" + tRes[#tRes+1] = "label[7.8,"..ypos..";" + for _,key_str in ipairs(hyperloop.get_connections(dataSet.key_str)) do + if hyperloop.data.tAllStations[key_str].station_name ~= nil then + tRes[#tRes + 1] = hyperloop.data.tAllStations[key_str].station_name + else + tRes[#tRes + 1] = key_str + end tRes[#tRes + 1] = ", " end tRes[#tRes] = "]" @@ -70,11 +77,11 @@ local function map_on_use(itemstack, user) --local pos = user:get_pos() local pos = user:getpos() local sStationList = station_list_as_string(pos) - local formspec = "size[10,8]" .. default.gui_bg .. + local formspec = "size[12,10]" .. default.gui_bg .. default.gui_bg_img .. "textarea[0.5,0.5;9.5,8;text;Station List:;" .. sStationList .. "]" .. - "button_exit[4,7.5;2,1;close;Close]" + "button_exit[5,9.5;2,1;close;Close]" minetest.show_formspec(player_name, "hyperloop:station_map", formspec) return itemstack diff --git a/robot.lua b/robot.lua index b2b0444..169d40d 100644 --- a/robot.lua +++ b/robot.lua @@ -44,7 +44,9 @@ local function place_tube(pos, name, facedir, placer) if minetest.is_protected(pos, placer:get_player_name()) then hyperloop.chat(placer, "Area is protected!") return false - elseif minetest.get_node_or_nil(pos).name ~= "air" and minetest.get_node_or_nil(pos).name ~= "default:water_source" then + elseif minetest.get_node_or_nil(pos).name ~= "air" and + minetest.get_node_or_nil(pos).name ~= "default:water_source" and + minetest.get_node_or_nil(pos).name ~= "default:water_flowing" then return false end if hyperloop.scan_neighbours(pos) ~= 1 then @@ -56,25 +58,24 @@ local function place_tube(pos, name, facedir, placer) end local function move_robot(pos, inv, facedir, placer) - print("move_robot") - if get_inventory_item(inv) then - print("get_inventory_item") - -- remve robot and replace through tube - local stack = get_inventory(pos) - minetest.dig_node(pos) - place_tube(pos, "hyperloop:tube1", facedir, placer) - -- place robot on the new position - pos = hyperloop.new_pos(pos, facedir, "1F", 0) - if place_tube(pos, "hyperloop:robot", facedir, placer) then - inv = set_inventory(pos, stack) - print("set_inventory") - minetest.after(1, move_robot, pos, inv, facedir, placer) - else - pos = hyperloop.new_pos(pos, facedir, "1B", 0) - minetest.dig_node(pos) - place_tube(pos, "hyperloop:robot", facedir, placer) - stack:add_item("src", ItemStack("hyperloop:tube0")) - set_inventory(pos, stack) + if minetest.get_meta(pos):get_int("stopped") ~= 1 then + if get_inventory_item(inv) then + -- remve robot and replace through tube + local stack = get_inventory(pos) + minetest.remove_node(pos) + place_tube(pos, "hyperloop:tube1", facedir, placer) + -- place robot on the new position + pos = hyperloop.new_pos(pos, facedir, "1F", 0) + if place_tube(pos, "hyperloop:robot", facedir, placer) then + inv = set_inventory(pos, stack) + minetest.after(1, move_robot, pos, inv, facedir, placer) + else + pos = hyperloop.new_pos(pos, facedir, "1B", 0) + minetest.remove_node(pos) + place_tube(pos, "hyperloop:robot", facedir, placer) + stack:add_item("src", ItemStack("hyperloop:tube0")) + set_inventory(pos, stack) + end end end end @@ -93,12 +94,12 @@ minetest.register_node("hyperloop:robot", { description = "Hyperloop Tube Robot", tiles = { -- up, down, right, left, back, front - "hyperloop_robot.png^[transformR90]", - "hyperloop_robot.png^[transformR90]", - "hyperloop_robot.png", - "hyperloop_robot.png", "hyperloop_robot.png", "hyperloop_robot.png", + "hyperloop_robot2.png", + "hyperloop_robot2.png", + "hyperloop_robot2.png", + "hyperloop_robot2.png", }, after_place_node = function(pos, placer, itemstack, pointed_thing) @@ -126,12 +127,25 @@ minetest.register_node("hyperloop:robot", { local meta = minetest.get_meta(pos) local inv = meta:get_inventory() local facedir = meta:get_int("facedir") + meta:set_int("stopped", 0) minetest.after(1, move_robot, pos, inv, facedir, player) end, + on_punch = function(pos, node, puncher, pointed_thing) + if minetest.is_protected(pos, puncher:get_player_name()) then + return + end + local meta = minetest.get_meta(pos) + meta:set_int("stopped", 1) + end, + on_dig = function(pos, node, puncher, pointed_thing) + if minetest.is_protected(pos, puncher:get_player_name()) then + return + end local meta = minetest.get_meta(pos) local inv = meta:get_inventory() + meta:set_int("stopped", 1) if inv:is_empty("src") then minetest.node_dig(pos, node, puncher, pointed_thing) end diff --git a/seat.lua b/seat.lua index d4a812a..d8046d0 100644 --- a/seat.lua +++ b/seat.lua @@ -11,10 +11,6 @@ ]]-- ----------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------- - - local function enter_display(tStation, text) -- determine position local lcd_pos = hyperloop.new_pos(tStation.pos, tStation.facedir, "1F", 2) @@ -46,7 +42,6 @@ local function on_open_door(tArrival) minetest.after(5.0, on_final_close_door, tArrival, tArrival.facedir) end ----------------------------------------------------------------------------------------------------- local function on_arrival(tDeparture, tArrival, player, snd) -- activate display local text = " | Welcome at | | "..string.sub(tArrival.station_name, 1, 13) @@ -75,7 +70,6 @@ local function on_arrival(tDeparture, tArrival, player, snd) minetest.after(6.0, on_open_door, tArrival) end ----------------------------------------------------------------------------------------------------- local function on_travel(tDeparture, tArrival, player, atime) -- play sound and switch door state local snd = minetest.sound_play("normal2", { @@ -89,7 +83,6 @@ local function on_travel(tDeparture, tArrival, player, atime) minetest.after(atime, on_final_close_door, tDeparture) end ----------------------------------------------------------------------------------------------------- local function display_timer(pos, elapsed) -- update display with trip data local meta = minetest.get_meta(pos) @@ -119,14 +112,12 @@ local function meter_to_km(dist) end end ----------------------------------------------------------------------------------------------------- -- place the player, close the door, activate display local function on_start_travel(pos, node, clicker) -- departure data local meta = minetest.get_meta(pos) local key_str = meta:get_string("key_str") local tDeparture = hyperloop.get_station_data(key_str) - print("tDeparture: "..dump(tDeparture)) -- arrival data key_str = hyperloop.data.booking[tDeparture.key_str] if key_str == nil then @@ -134,7 +125,6 @@ local function on_start_travel(pos, node, clicker) return end local tArrival = hyperloop.get_station_data(key_str) - print("tArrival: "..dump(tArrival)) -- delete booking hyperloop.data.booking[tDeparture.key_str] = nil if tArrival == nil then @@ -180,9 +170,6 @@ local function on_start_travel(pos, node, clicker) minetest.after(4.9, on_travel, tDeparture, tArrival, clicker, atime) end - - - -- Hyperloop Seat minetest.register_node("hyperloop:seat", { description = "Hyperloop Pod Seat", diff --git a/station.lua b/station.lua index fda3137..2336ce1 100644 --- a/station.lua +++ b/station.lua @@ -56,12 +56,6 @@ - booking_pos = nil - booking_info = nil - Once a day: - for key,item in tAllStations - if node(item(pos)) ~= station - del item - - ]]-- -- Station Pod Assembly Plan @@ -143,7 +137,6 @@ function hyperloop.get_station_data(key_str) return nil end --- used for station and junction blocks local function store_station(pos, placer) local key_str = hyperloop.get_key_str(pos) local facedir = hyperloop.get_facedir(placer) @@ -159,6 +152,17 @@ local function store_station(pos, placer) } end +local function store_junction(pos, placer) + local key_str = hyperloop.get_key_str(pos) + hyperloop.data.tAllStations[key_str] = { + version=2, -- for version checks + pos=pos, -- station/junction block + routes={}, -- will be calculated later + owner=placer:get_player_name(), + junction=true, + } +end + -- used for station and junction blocks local function delete_station(pos) local key_str = hyperloop.get_key_str(pos) @@ -361,14 +365,6 @@ minetest.register_node("hyperloop:station", { hyperloop.data.change_counter = hyperloop.data.change_counter + 1 end, --- on_punch = function(pos, node, puncher, pointed_thing) --- local meta = minetest.get_meta(pos) --- local inv = meta:get_inventory() --- if inv:is_empty("src") and meta:get_int("built") ~= 1 then --- minetest.node_punch(pos, node, puncher, pointed_thing) --- end --- end, - on_dig = function(pos, node, puncher, pointed_thing) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() @@ -416,7 +412,7 @@ minetest.register_node("hyperloop:junction", { hyperloop.check_network_level(pos, placer) local meta = minetest.get_meta(pos) meta:set_string("infotext", "Position "..hyperloop.get_key_str(pos)) - store_station(pos, placer) + store_junction(pos, placer) store_routes(pos) hyperloop.data.change_counter = hyperloop.data.change_counter + 1 end, diff --git a/textures/hyperloop_robot.png b/textures/hyperloop_robot.png index 7e85e7e..892e141 100644 Binary files a/textures/hyperloop_robot.png and b/textures/hyperloop_robot.png differ diff --git a/tube.lua b/tube.lua index 9011220..9be9d3f 100644 --- a/tube.lua +++ b/tube.lua @@ -76,7 +76,7 @@ end -- Degrade one node. -- Needed when a new node is placed nearby. -function hyperloop.degrade_tupe_node(node) +function hyperloop.degrade_tupe_node(node, new_node_pos) if node.name == "hyperloop:tube0" then node.name = "hyperloop:tube1" elseif node.name == "hyperloop:tube1" then @@ -86,6 +86,9 @@ function hyperloop.degrade_tupe_node(node) else return end + -- determine the correct tube facedir + local dir = vector.subtract(node.pos, new_node_pos) + node.param2 = minetest.dir_to_facedir(dir) minetest.swap_node(node.pos, node) end @@ -150,7 +153,7 @@ local function head_node(node, old_head) node.param2 = minetest.dir_to_facedir(dir) minetest.swap_node(node.pos, node) -- degrade old head - hyperloop.degrade_tupe_node(old_head) + hyperloop.degrade_tupe_node(old_head, node.pos) return true end @@ -171,8 +174,8 @@ local function link_node(node, node1, node2) node.diggable = true minetest.swap_node(node.pos, node) -- degrade both nodes - hyperloop.degrade_tupe_node(node1) - hyperloop.degrade_tupe_node(node2) + hyperloop.degrade_tupe_node(node1, node.pos) + hyperloop.degrade_tupe_node(node2, node.pos) return true end return false diff --git a/utils.lua b/utils.lua index d8443c2..38e1cca 100644 --- a/utils.lua +++ b/utils.lua @@ -41,39 +41,6 @@ function hyperloop.chat(player, text) end end ---function hyperloop.rad_to_placedir(yaw) --- -- radiant (0..2*PI) to my placedir (0..3) from N, W, S, E --- return math.floor((yaw + PI/4) / PI * 2) % 4 ---end - ---function hyperloop.placedir_to_rad(placedir) --- -- my placedir (0..3) from N, W, S, E to radiant (0..2*PI) --- return placedir / 2 * PI ---end - ---function hyperloop.placedir_to_dir(placedir) --- -- my placedir (0..3) from N, W, S to E to dir vector --- local tbl = { --- [0] = { x=0, y=0, z=1}, --- [1] = { x=-1, y=0, z=0}, --- [2] = { x=0, y=0, z=-1}, --- [3] = { x=1, y=0, z=0}, --- } --- return tbl[placedir % 4] ---end - ----- switch from original facedir to radiant oriented placedir ---function hyperloop.facedir_to_placedir(facedir) --- local tbl = {[0]=0, [1]=3, [2]=2, [3]=1} --- return tbl[facedir] ---end - ----- switch from radiant oriented placedir to original facedir ---function hyperloop.placedir_to_facedir(placedir) --- local tbl = {[0]=0, [1]=3, [2]=2, [3]=1} --- return tbl[placedir] ---end - function hyperloop.get_facedir(placer) local lookdir = placer:get_look_dir() return core.dir_to_facedir(lookdir) @@ -84,7 +51,7 @@ function hyperloop.facedir_to_rad(facedir) return tbl[facedir] / 2 * PI end --- calculate the new pos based on the given pos, the players facedir +-- calculate the new pos based on the given pos, the players facedir, the y-offset -- and the given walk path like "3F2L" (F-orward, L-eft, R-ight, B-ack). function hyperloop.new_pos(pos, facedir, path, y_offs) local _pos = table.copy(pos) @@ -294,7 +261,6 @@ function hyperloop.is_blocked(key_str) return false else local t = hyperloop.data.tAllStations[key_str].time_blocked or 0 - print(t, minetest.get_gametime()) return t > minetest.get_gametime() end end @@ -316,7 +282,6 @@ local function convert_station_list(tAllStations) item.station_name = key end key = hyperloop.get_key_str(pos) - print(key.." = "..dump(item)) end if item.version == 2 then item.version = 3 diff --git a/wifi.lua b/wifi.lua index 496ad3a..4fbbb42 100644 --- a/wifi.lua +++ b/wifi.lua @@ -125,7 +125,7 @@ local function place_wifi_node(pos, head_node) -- update peer hyperloop.update_head_node(peer_pos, minetest.pos_to_string(pos)) -- degrade head tube to link tube - hyperloop.degrade_tupe_node(head_node) + hyperloop.degrade_tupe_node(head_node, pos) if hyperloop.debugging then print("wifi meta="..dump(minetest.get_meta(pos):to_table())) end