From 72435933e43529557b0dccbf4d94627bca12a133 Mon Sep 17 00:00:00 2001 From: the-real-herowl Date: Sat, 15 Jun 2024 03:51:03 +0200 Subject: [PATCH] Add defensive check (#4437) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This fixes #4436 and possible other unnoticed crashes by adding a defensive check. Reviewed-on: https://git.minetest.land/VoxeLibre/VoxeLibre/pulls/4437 Reviewed-by: Mikita Wiśniewski Co-authored-by: the-real-herowl Co-committed-by: the-real-herowl --- mods/ENTITIES/mcl_mobs/combat.lua | 45 ++++++++++++++++--------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/combat.lua b/mods/ENTITIES/mcl_mobs/combat.lua index d9df817e4..608209ee2 100644 --- a/mods/ENTITIES/mcl_mobs/combat.lua +++ b/mods/ENTITIES/mcl_mobs/combat.lua @@ -802,34 +802,37 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir) end -- alert others to the attack - local objs = minetest.get_objects_inside_radius(hitter:get_pos(), self.view_range) - local obj = nil + local alert_pos = hitter:get_pos() + if alert_pos then + local objs = minetest.get_objects_inside_radius(alert_pos, self.view_range) + local obj = nil - for n = 1, #objs do + for n = 1, #objs do - obj = objs[n]:get_luaentity() + obj = objs[n]:get_luaentity() - if obj then - -- only alert members of same mob or friends - if obj.group_attack - and obj.state ~= "attack" - and obj.owner ~= name then - if obj.name == self.name then - obj:do_attack(hitter) - elseif type(obj.group_attack) == "table" then - for i=1, #obj.group_attack do - if obj.group_attack[i] == self.name then - obj._aggro = true - obj:do_attack(hitter) - break + if obj then + -- only alert members of same mob or friends + if obj.group_attack + and obj.state ~= "attack" + and obj.owner ~= name then + if obj.name == self.name then + obj:do_attack(hitter) + elseif type(obj.group_attack) == "table" then + for i=1, #obj.group_attack do + if obj.group_attack[i] == self.name then + obj._aggro = true + obj:do_attack(hitter) + break + end end end end - end - -- have owned mobs attack player threat - if obj.owner == name and obj.owner_loyal then - obj:do_attack(self.object) + -- have owned mobs attack player threat + if obj.owner == name and obj.owner_loyal then + obj:do_attack(self.object) + end end end end