diff options
author | cheapie <no-email-for-you@example.com> | 2023-08-18 18:15:31 -0500 |
---|---|---|
committer | cheapie <no-email-for-you@example.com> | 2023-08-18 18:15:31 -0500 |
commit | 6856fc39790ed0ec912148d7fff91a9b95808e65 (patch) | |
tree | 4acef5505564dbc4b2fd8f681daa3f4ab98ccd90 /drive_entity.lua | |
parent | e35e98148acff3c7da7b9b70619ae625fef0bbef (diff) | |
download | celevator-6856fc39790ed0ec912148d7fff91a9b95808e65.tar celevator-6856fc39790ed0ec912148d7fff91a9b95808e65.tar.gz celevator-6856fc39790ed0ec912148d7fff91a9b95808e65.tar.bz2 celevator-6856fc39790ed0ec912148d7fff91a9b95808e65.tar.xz celevator-6856fc39790ed0ec912148d7fff91a9b95808e65.zip |
Assorted bug fixes
Diffstat (limited to 'drive_entity.lua')
-rw-r--r-- | drive_entity.lua | 23 |
1 files changed, 20 insertions, 3 deletions
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)) |