Refactor code to make more vars changable
parent
504d677c29
commit
9b6cd0c304
46
init.lua
46
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,
|
||||
|
|
Loading…
Reference in New Issue