Mobs: Stop following if target is dead

This commit is contained in:
Wuzzy 2024-03-20 15:31:47 +01:00
parent 12b19c641b
commit 1cfd850e23
3 changed files with 14 additions and 3 deletions

View File

@ -440,6 +440,9 @@ rp_mobs.microtasks.walk_straight_towards = function(walk_speed, target_type, tar
if not tpos then if not tpos then
return true return true
end end
if target:get_hp() == 0 or target._dying then
return true
end
else else
minetest.log("error", "[rp_mobs] Incorrect target_type provided in rp_mobs.microtask.walk_straight_towards!") minetest.log("error", "[rp_mobs] Incorrect target_type provided in rp_mobs.microtask.walk_straight_towards!")
return true return true

View File

@ -85,9 +85,13 @@ rp_mobs_mobs.create_player_attack_decider = function()
if mob._temp_custom_state.follow_player then if mob._temp_custom_state.follow_player then
local playername = mob._temp_custom_state.follow_player local playername = mob._temp_custom_state.follow_player
local player = minetest.get_player_by_name(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 mob._temp_custom_state.attack_target = player
else
mob._temp_custom_state.attack_target = nil
end end
else
mob._temp_custom_state.attack_target = nil
end end
end, end,
is_finished = function() is_finished = function()

View File

@ -255,7 +255,7 @@ rp_mobs_mobs.microtask_player_find_follow = function(view_range)
local objs = minetest.get_objects_inside_radius(s, view_range) local objs = minetest.get_objects_inside_radius(s, view_range)
for o=1, #objs do for o=1, #objs do
local obj = objs[o] local obj = objs[o]
if obj:is_player() then if obj:is_player() and obj:get_hp() > 0 then
local player = obj local player = obj
p = player:get_pos() p = player:get_pos()
dist = vector.distance(s, p) 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() mob._temp_custom_state.follow_player = closest_player:get_player_name()
end end
else 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) local player = minetest.get_player_by_name(mob._temp_custom_state.follow_player)
if player then if player then
local p = player:get_pos() local p = player:get_pos()
@ -278,7 +278,11 @@ rp_mobs_mobs.microtask_player_find_follow = function(view_range)
-- Out of range -- Out of range
if dist > view_range then if dist > view_range then
mob._temp_custom_state.follow_player = nil mob._temp_custom_state.follow_player = nil
elseif player:get_hp() == 0 then
mob._temp_custom_state.follow_player = nil
end end
else
mob._temp_custom_state.follow_player = nil
end end
end end
end, end,