Bugfix: Si hacías dos runas de "sethome", la segunda sobreescribía los datos de

"sethome"; pero al romper la primera, ésta borraba los datos de "sethome":
	- Se ha implementado un sistema de token. Cada runa posee un identificador único
	  que inscribe en el registro de homes. De esta manera, al destruirse la runa
	  sólo elimina el warp si su token coincide con el registrado.

-- Yawin
master
Yawin 2017-02-01 01:25:59 +01:00
parent 9f3ad200a1
commit a48f009192
1 changed files with 14 additions and 7 deletions

View File

@ -20,7 +20,8 @@ local loadHomes = function ()
x = tonumber(paramlist[2]),
y = tonumber(paramlist[3]),
z = tonumber(paramlist[4]),
}
},
token = paramlist[5],
}
table.insert(magic.playerHomes, w)
end
@ -34,7 +35,7 @@ local saveHomes = function()
return
end
for i = 1,table.getn(magic.playerHomes) do
local s = magic.playerHomes[i].player .. " " .. magic.playerHomes[i].homepos.x .. " " .. magic.playerHomes[i].homepos.y .. " " .. magic.playerHomes[i].homepos.z .. "\n"
local s = magic.playerHomes[i].player .. " " .. magic.playerHomes[i].homepos.x .. " " .. magic.playerHomes[i].homepos.y .. " " .. magic.playerHomes[i].homepos.z .. " " .. magic.playerHomes[i].token .. "\n"
fh:write(s)
end
fh:close()
@ -136,6 +137,8 @@ magic.register_recipe("home_warp",
local arrID = checkHome(player:get_player_name())
local token = node.under.x .. node.under.y .. node.under.z
if arrID == -1 then
arrID = #magic.playerHomes + 1
end
@ -143,6 +146,7 @@ magic.register_recipe("home_warp",
magic.playerHomes[arrID] = {}
magic.playerHomes[arrID].player = player:get_player_name()
magic.playerHomes[arrID].homepos = {x = node.under.x, y = node.under.y + 1, z = node.under.z}
magic.playerHomes[arrID].token = token
saveHomes()
@ -152,7 +156,8 @@ magic.register_recipe("home_warp",
minetest.set_node({x = posx + i, y = posy, z = posz + j}, {name="magic:magicalobsidian"})
local meta = minetest.get_meta({x = posx + i, y = posy, z = posz + j})
meta:set_string("referido",player:get_player_name())
meta:set_string("magic_referido",player:get_player_name())
meta:set_string("magic_token",token)
end
j = j + 1
end
@ -193,14 +198,16 @@ minetest.register_node("magic:magicalobsidian", {
local meta = minetest.env:get_meta(pos)
meta:from_table(oldmetadata)
local s = meta:get_string("referido")
local s = meta:get_string("magic_referido")
local home = checkHome(s)
if home ~= -1 then
table.remove(magic.playerHomes,home)
saveHomes()
return
if magic.playerHomes[home].token == meta:get_string("magic_token") then
table.remove(magic.playerHomes,home)
saveHomes()
end
end
return
end,
drop = "default:obsidian",