diff --git a/tesseract.lua b/tesseract.lua index 2c284a2..e792f8b 100644 --- a/tesseract.lua +++ b/tesseract.lua @@ -327,10 +327,12 @@ local function translocate(pos, node, clicker, itemstack, pointed_thing) if not (id and tonumber(id)) then return end + local pair = fun_caves.db.translocators[tonumber(id)] if not pair or #pair < 2 then return end + local pos2 if minetest.serialize(pair[2]) == minetest.serialize(pos) then pos2 = table.copy(pair[1]) @@ -359,19 +361,22 @@ local function trans_place(itemstack, placer, pointed_thing) end local data = minetest.deserialize(itemstack:get_metadata()) - if not (data and data.id) then + if not (data and data.id and tonumber(data.id)) then return end + local player_name = placer:get_player_name() if not data.owner or data.owner == '' then data.owner = player_name end + local pos = pointed_thing.above local pair = fun_caves.db.translocators[tonumber(data.id)] if not pair or #pair > 1 then print('* Fun Caves: high error in translocator storage') return end + local ret, place_good = minetest.item_place_node(itemstack, placer, pointed_thing) if place_good then pair[#pair+1] = pos @@ -395,23 +400,25 @@ local function trans_dig(pos, node, digger) local meta = minetest.get_meta(pos) local id = meta:get_string('id') local owner = meta:get_string('owner') + if owner == '' then + owner = player_name + end local data = { id = id, owner = owner } - if not (data and data.id) or (data.owner ~= '' and data.owner ~= player_name) then + if not (data and data.id and data.owner == player_name) then local privs = minetest.check_player_privs(player_name, {server=true}) if privs then minetest.remove_node(pos) end return end - if data.owner == '' then - data.owner = player_name - end + local pair = fun_caves.db.translocators[tonumber(data.id)] if not pair or #pair < 1 then print('* Fun Caves: low error in translocator storage') minetest.remove_node(pos) return end + local inv = digger:get_inventory() local item = ItemStack(node.name) local data_str = minetest.serialize(data) @@ -419,6 +426,7 @@ local function trans_dig(pos, node, digger) if not inv:add_item('main', item) then return end + minetest.remove_node(pos) if #pair > 1 and minetest.serialize(pair[2]) == minetest.serialize(pos) then table.remove(pair, 2)