diff --git a/init.lua b/init.lua index 93be29a..d8e76fe 100644 --- a/init.lua +++ b/init.lua @@ -1,5 +1,11 @@ +local TELEPORT_MAX_DIST = 2606 -- maximum teleport distance in all directions +local TELEPORT_SHOW_MAX = 6 -- maximum teleports shown in formspec +local TELEPORT_FUEL = "default:mossycobble" -- fuel item (note: if you change this, + -- you also need to change formspec text) +local TELEPORT_INITFUEL = 30 -- initial fuel items for new teleports + local S -if minetest.translate then +if minetest.get_translator then S = minetest.get_translator("teleports") else -- Compability translator code to support MT 0.4, which doesn't support @@ -32,8 +38,6 @@ teleports.teleports = {} teleports.lastplayername ="" teleports.filename = minetest.get_worldpath() .. "/teleports.txt" -local TELEPORT_MAX_DIST = 260 - function teleports:save() local datastring = minetest.serialize(self.teleports) if not datastring then @@ -169,26 +173,18 @@ end teleports.on_receive_fields = function(pos, formname, fields, player) local meta = minetest.env:get_meta(pos); local inv = meta:get_inventory(); - local price = {name="default:mossycobble", count=1, wear=0, metadata=""} + local price = {name=TELEPORT_FUEL, count=1, wear=0, metadata=""} if fields.tp1 or fields.tp2 or fields.tp3 or fields.tp4 or fields.tp5 or fields.tp6 then if inv:contains_item("price", price) then inv:remove_item("price", price); teleports.lastplayername = "" - local available = teleports:find_nearby(pos, 6) + local available = teleports:find_nearby(pos, TELEPORT_SHOW_MAX) if player ~= nil and player:is_player() then local playerpos = player:getpos() - if fields.tp1 and #available>0 then - teleports.do_teleporting(playerpos, available[1].pos, player:get_player_name()) - elseif fields.tp2 and #available>1 then - teleports.do_teleporting(playerpos, available[2].pos, player:get_player_name()) - elseif fields.tp3 and #available>2 then - teleports.do_teleporting(playerpos, available[3].pos, player:get_player_name()) - elseif fields.tp4 and #available>3 then - teleports.do_teleporting(playerpos, available[4].pos, player:get_player_name()) - elseif fields.tp5 and #available>4 then - teleports.do_teleporting(playerpos, available[5].pos, player:get_player_name()) - elseif fields.tp6 and #available>5 then - teleports.do_teleporting(playerpos, available[6].pos, player:get_player_name()) + for i=1, TELEPORT_SHOW_MAX do + if fields["tp"..i] and #available>i-1 then + teleports.do_teleporting(playerpos, available[i].pos, player:get_player_name()) + end end end @@ -197,7 +193,7 @@ teleports.on_receive_fields = function(pos, formname, fields, player) end end teleports.allow_metadata_inventory_put = function(pos, listname, index, stack, player) - if listname=="price" and stack:get_name()=="default:mossycobble" then + if listname=="price" and stack:get_name()==TELEPORT_FUEL then return 99 else return 0 @@ -224,11 +220,13 @@ minetest.register_node("teleports:teleport", { local meta = minetest.env:get_meta(pos) local inv = meta:get_inventory() inv:set_size("price", 1) - local initialcharge = {name="default:mossycobble", count=30, wear=0, metadata=""} - inv:add_item("price", initialcharge) + if TELEPORT_INITFUEL > 0 then + local initialcharge = {name=TELEPORT_FUEL, count=TELEPORT_INITFUEL, wear=0, metadata=""} + inv:add_item("price", initialcharge) + end -- Add formspec to self - local near_teleports = teleports:find_nearby(pos, 6) + local near_teleports = teleports:find_nearby(pos, TELEPORT_SHOW_MAX) teleports.set_formspec(pos, near_teleports) local sign_pos = minetest.find_node_near(pos, 1, {"default:sign_wall_wood", "default:sign_wall_steel"}) @@ -244,7 +242,7 @@ minetest.register_node("teleports:teleport", { -- Update formspec of target teleports for n=1, #near_teleports do local pos2 = near_teleports[n].pos - local near_teleports2 = teleports:find_nearby(pos2, 6) + local near_teleports2 = teleports:find_nearby(pos2, TELEPORT_SHOW_MAX) teleports.set_formspec(pos2, near_teleports2) end @@ -253,7 +251,7 @@ minetest.register_node("teleports:teleport", { end, on_destruct = function(pos) -- Update list of teleports on destruction - local near_teleports = teleports:find_nearby(pos, 6) + local near_teleports = teleports:find_nearby(pos, TELEPORT_SHOW_MAX) for i, EachTeleport in ipairs(teleports.teleports) do if vector.equals(EachTeleport.pos, pos) then @@ -265,7 +263,7 @@ minetest.register_node("teleports:teleport", { -- Update formspecs of affected teleports for n=1, #near_teleports do local pos2 = near_teleports[n].pos - local near_teleports2 = teleports:find_nearby(pos2, 6) + local near_teleports2 = teleports:find_nearby(pos2, TELEPORT_SHOW_MAX) teleports.set_formspec(pos2, near_teleports2) end end,