Refactor code to make more vars changable

master
Wuzzy 2020-09-08 20:16:43 +02:00
parent 504d677c29
commit 9b6cd0c304
1 changed files with 22 additions and 24 deletions

View File

@ -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,