From 6856fc39790ed0ec912148d7fff91a9b95808e65 Mon Sep 17 00:00:00 2001 From: cheapie Date: Fri, 18 Aug 2023 18:15:31 -0500 Subject: Assorted bug fixes --- drive_entity.lua | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'drive_entity.lua') diff --git a/drive_entity.lua b/drive_entity.lua index 6f4f988..74e58c8 100644 --- a/drive_entity.lua +++ b/drive_entity.lua @@ -208,7 +208,9 @@ function celevator.drives.entity.step(dtime) local origin = minetest.string_to_pos(meta:get_string("origin")) if not origin then minetest.log("error","[celevator] [entity drive] Invalid origin for drive at "..minetest.pos_to_string(pos)) + meta:set_string("fault","badorigin") table.remove(entitydrives_running,i) + return end if state == "start" then sound = true @@ -370,7 +372,7 @@ function celevator.drives.entity.getstatus(pos,call2) return celevator.drives.null.get_status(pos,true) elseif node.name ~= "celevator:drive" then minetest.log("error","[celevator] [entity drive] Could not load drive status at "..minetest.pos_to_string(pos)) - return + return {fault = "metaload"} else local meta = minetest.get_meta(pos) local ret = {} @@ -380,6 +382,8 @@ function celevator.drives.entity.getstatus(pos,call2) ret.maxvel = tonumber(meta:get_string("maxvel")) or 0.2 ret.state = meta:get_string("state") ret.doorstate = meta:get_string("doorstate") + ret.fault = meta:get_string("fault") + if ret.fault == "" then ret.fault = nil end return ret end end @@ -387,11 +391,20 @@ end function celevator.drives.entity.movedoors(drivepos,direction) local drivehash = minetest.hash_node_position(drivepos) local entitydrives_running = minetest.deserialize(celevator.storage:get_string("entitydrives_running")) or {} + local drivemeta = minetest.get_meta(drivepos) for _,hash in pairs(entitydrives_running) do - if drivehash == hash then return end + if drivehash == hash then + minetest.log("error","[celevator] [entity drive] Attempted to open doors while drive at "..minetest.pos_to_string(drivepos).." was still moving") + drivemeta:set_string("fault","doorinterlock") + return + end end - local drivemeta = minetest.get_meta(drivepos) local origin = minetest.string_to_pos(drivemeta:get_string("origin")) + if not origin then + minetest.log("error","[celevator] [entity drive] Invalid origin for drive at "..minetest.pos_to_string(drivepos)) + drivemeta:set_string("fault","badorigin") + return + end local apos = tonumber(drivemeta:get_string("apos")) or 0 local carpos = vector.add(origin,vector.new(0,apos,0)) local carnode = minetest.get_node(carpos) @@ -411,6 +424,10 @@ function celevator.drives.entity.movedoors(drivepos,direction) end end +function celevator.drives.entity.resetfault(pos) + minetest.get_meta(pos):set_string("fault","") +end + local function carsearch(pos) for i=1,500,1 do local searchpos = vector.subtract(pos,vector.new(0,i,0)) -- cgit v1.2.3