Mobs: Stop following if target is dead
This commit is contained in:
parent
12b19c641b
commit
1cfd850e23
@ -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
|
||||||
|
@ -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()
|
||||||
|
@ -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,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user