summaryrefslogtreecommitdiff
path: root/drive_entity.lua
diff options
context:
space:
mode:
authorcheapie <no-email-for-you@example.com>2023-08-18 18:15:31 -0500
committercheapie <no-email-for-you@example.com>2023-08-18 18:15:31 -0500
commit6856fc39790ed0ec912148d7fff91a9b95808e65 (patch)
tree4acef5505564dbc4b2fd8f681daa3f4ab98ccd90 /drive_entity.lua
parente35e98148acff3c7da7b9b70619ae625fef0bbef (diff)
downloadcelevator-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.lua23
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))