From 09b26fd0bba9a93bdd40d08ab4bd7f64fe2280e9 Mon Sep 17 00:00:00 2001 From: Beha Date: Thu, 9 Mar 2017 09:55:38 -0500 Subject: failsafes --- init.lua | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'init.lua') diff --git a/init.lua b/init.lua index 5d7a1db..d08d18d 100644 --- a/init.lua +++ b/init.lua @@ -21,6 +21,19 @@ minetest.register_globalstep(function(dtime) lastpp[p:get_player_name()] = pos end end + for motor,obj in pairs(boxes) do + local keep = false + local pos = obj:getpos() + for _,object in ipairs(minetest.get_objects_inside_radius(pos, 4)) do + if object.is_player and object:is_player() then + keep = true + break + end + end + if not keep then + boxes[motor] = false + end + end end) minetest.register_on_leaveplayer(function(player) if lastpp[player:get_player_name()] and vector.distance(lastpp[player:get_player_name()], player:getpos()) < 20 then @@ -137,14 +150,17 @@ local function unbuild(pos, add) end end end - minetest.after(0.01, function(p2) + minetest.after(0.01, function(p2, add) + if not p2 or not add then + return + end p2.y = p2.y + add local motorhash = locate_motor(p2) build_motor(motorhash) if boxes[motorhash] and p2.y >= boxes[motorhash]:getpos().y then boxes[motorhash] = nil end - end, table.copy(pos)) + end, table.copy(pos), add) end minetest.register_node("elevator:motor", { @@ -552,6 +568,7 @@ local box_entity = { if not boxes[self.motor] then minetest.get_player_by_name(self.attached):set_eye_offset({x=0, y=0, z=0},{x=0, y=0, z=0}) self.object:remove() + boxes[self.motor] = nil return end local pos = self.object:getpos() -- cgit v1.2.3