From 2a2d7f18755845e2c68f872918261f4526d3cafb Mon Sep 17 00:00:00 2001 From: cheapie Date: Sat, 22 Mar 2025 21:55:38 -0500 Subject: Improve robustness against players doing weird unsupported things --- drive_entity.lua | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'drive_entity.lua') diff --git a/drive_entity.lua b/drive_entity.lua index de7c43f..0ddd4c4 100644 --- a/drive_entity.lua +++ b/drive_entity.lua @@ -653,7 +653,21 @@ function celevator.drives.entity.moveto(pos,target,inspection) meta:mark_as_private({"apos","dpos","vel","maxvel","state","startpos","doorstate"}) local carid = celevator.get_meta(pos):get_int("carid") local carinfo = minetest.deserialize(celevator.storage:get_string(string.format("car%d",carid))) - if not (carinfo and carinfo.machinepos) then return end + if not (carinfo and carinfo.machinepos and celevator.get_node(carinfo.machinepos).name == "celevator:machine") then + meta:set_string("fault","nomachine") + return + end + if not carinfo.controllerpos then return end + local controllermeta = celevator.get_meta(carinfo.controllerpos) + if controllermeta:get_int("carid") ~= carid then + meta:set_string("fault","controllermismatch") + return + end + local machinemeta = celevator.get_meta(carinfo.machinepos) + if machinemeta:get_int("carid") ~= carid then + meta:set_string("fault","machinemismatch") + return + end 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)) -- cgit v1.2.3