forked from mtcontrib/pipeworks
teleport_tube.lua: add checks for hash collisions in positions table
This commit is contained in:
parent
57fc8c67f8
commit
91bd0c7e98
@ -50,6 +50,11 @@ local function read_tube_db()
|
|||||||
return tp_tube_db
|
return tp_tube_db
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- debug formatter for coordinates used below
|
||||||
|
local fmt = function(pos)
|
||||||
|
return pos.x..", "..pos.y..", "..pos.z
|
||||||
|
end
|
||||||
|
|
||||||
-- updates or adds a tube
|
-- updates or adds a tube
|
||||||
local function set_tube(pos, channel, can_receive)
|
local function set_tube(pos, channel, can_receive)
|
||||||
local tubes = tp_tube_db or read_tube_db()
|
local tubes = tp_tube_db or read_tube_db()
|
||||||
@ -63,6 +68,19 @@ local function set_tube(pos, channel, can_receive)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- we haven't found any tp tube to update, so lets add it
|
-- we haven't found any tp tube to update, so lets add it
|
||||||
|
-- but sanity check that the hash has not already been inserted.
|
||||||
|
-- if so, complain very loudly and refuse the update so the player knows something is amiss.
|
||||||
|
-- to catch regressions of https://github.com/minetest-mods/pipeworks/issues/166
|
||||||
|
local existing = tp_tube_db[hash]
|
||||||
|
if existing ~= nil then
|
||||||
|
local e = "error"
|
||||||
|
minetest.log(e, "pipeworks teleport tube update refused due to position hash collision")
|
||||||
|
minetest.log(e, "collided hash: "..hash)
|
||||||
|
minetest.log(e, "tried-to-place tube: "..fmt(pos))
|
||||||
|
minetest.log(e, "existing tube: "..fmt(existing))
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
tp_tube_db[hash] = {x=pos.x,y=pos.y,z=pos.z,channel=channel,cr=can_receive}
|
tp_tube_db[hash] = {x=pos.x,y=pos.y,z=pos.z,channel=channel,cr=can_receive}
|
||||||
save_tube_db()
|
save_tube_db()
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user