Hi, I'm trying to make walking npcs fight enemy npcs, this was successful however there's a bug where if the enemy is already dead by the time the ally npc detects the enemy, it will freeze and be unable to do anything. How can I fix this?
I tried adding so it would detect if the humanoid WAS nil beforehand however I still encounter this problem.
local Enemies = workspace.Enemies
local Humanoid = script.Parent:WaitForChild("Humanoid")
local Self = script.Parent
local AttackEffect = script.Parent.HumanoidRootPart.ParticleEmitter
local target = nil
function FindTarget()
local maxdistance = 100
local nearesttarget = nil
for i, target in ipairs(Enemies:GetChildren()) do
local distance = (target.HumanoidRootPart.Position - Self.HumanoidRootPart.Position).Magnitude
--print(target.Name, distance)
if distance < maxdistance then
print(target.Name, "shall be initiated!")
nearesttarget = target
end
return nearesttarget
end
end
while true do
local target = FindTarget()
if target and target.Humanoid ~= nil then
Humanoid:MoveTo(target.HumanoidRootPart.Position)
Humanoid.MoveToFinished:Wait()
if target.Humanoid == nil then return end
if target.Humanoid.Health > 0 then
target.Humanoid:TakeDamage(1)
AttackEffect.Enabled = true
print(target.Humanoid.Health)
end
end
task.wait(.2)
AttackEffect.Enabled = false
end
The way it works is that it detects an enemy within it's range then pursue the enemy and damage them.

2 comments
Use target:FindFirstChildOfClass("Humanoid")
Thanks, this worked :D