diff --git a/mods/rp_mobs/task_templates.lua b/mods/rp_mobs/task_templates.lua index 3d632e84..ebdd38b1 100644 --- a/mods/rp_mobs/task_templates.lua +++ b/mods/rp_mobs/task_templates.lua @@ -440,6 +440,9 @@ rp_mobs.microtasks.walk_straight_towards = function(walk_speed, target_type, tar if not tpos then return true end + if target:get_hp() == 0 or target._dying then + return true + end else minetest.log("error", "[rp_mobs] Incorrect target_type provided in rp_mobs.microtask.walk_straight_towards!") return true diff --git a/mods/rp_mobs_mobs/attack.lua b/mods/rp_mobs_mobs/attack.lua index 8002d757..f82bb4c9 100644 --- a/mods/rp_mobs_mobs/attack.lua +++ b/mods/rp_mobs_mobs/attack.lua @@ -85,9 +85,13 @@ rp_mobs_mobs.create_player_attack_decider = function() if mob._temp_custom_state.follow_player then local playername = mob._temp_custom_state.follow_player local player = minetest.get_player_by_name(mob._temp_custom_state.follow_player) - if player and player:is_player() then + if player and player:is_player() and player:get_hp() > 0 then mob._temp_custom_state.attack_target = player + else + mob._temp_custom_state.attack_target = nil end + else + mob._temp_custom_state.attack_target = nil end end, is_finished = function() diff --git a/mods/rp_mobs_mobs/shared.lua b/mods/rp_mobs_mobs/shared.lua index c4ff4f98..8a45a540 100644 --- a/mods/rp_mobs_mobs/shared.lua +++ b/mods/rp_mobs_mobs/shared.lua @@ -255,7 +255,7 @@ rp_mobs_mobs.microtask_player_find_follow = function(view_range) local objs = minetest.get_objects_inside_radius(s, view_range) for o=1, #objs do local obj = objs[o] - if obj:is_player() then + if obj:is_player() and obj:get_hp() > 0 then local player = obj p = player:get_pos() dist = vector.distance(s, p) @@ -270,7 +270,7 @@ rp_mobs_mobs.microtask_player_find_follow = function(view_range) mob._temp_custom_state.follow_player = closest_player:get_player_name() end else - -- Unfollow player if out of view range + -- Unfollow player if out of view range, dead or gone local player = minetest.get_player_by_name(mob._temp_custom_state.follow_player) if player then local p = player:get_pos() @@ -278,7 +278,11 @@ rp_mobs_mobs.microtask_player_find_follow = function(view_range) -- Out of range if dist > view_range then mob._temp_custom_state.follow_player = nil + elseif player:get_hp() == 0 then + mob._temp_custom_state.follow_player = nil end + else + mob._temp_custom_state.follow_player = nil end end end,