teleport_tube.lua: fix 32-bit clamping issues on some systems for %d in string.format

Some servers running ubuntu in particular were reporting issues with teleport tubes not working.
On investigation, all tube entries were colliding as string.format("%d", ...)
was returning either -2^31 or 2^31-1 depending on system bit width,
causing hash entries to be overwritten.
This is possibly related to the use of C sprintf within lua.
Fix this by using %g instead to interpret as double without int conversion,
with a large enough number of digits such that all possible 2^48 values from
minetest.hash_node_position() can be correctly serialised.
This commit is contained in:
thetaepsilon-gamedev 2017-12-22 17:13:50 +00:00
parent a2e183c6f3
commit 57fc8c67f8

@ -4,7 +4,7 @@ local tp_tube_db = nil -- nil forces a read
local tp_tube_db_version = 2.0 local tp_tube_db_version = 2.0
local function hash(pos) local function hash(pos)
return string.format("%d", minetest.hash_node_position(pos)) return string.format("%.30g", minetest.hash_node_position(pos))
end end
local function save_tube_db() local function save_tube_db()