Hello, I need help on a Dummy NPC I'm trying to make. If there's no target in sight or the target went out of range, it would break and create a error saying: attempt to index nil with 'Health'
This was not supposed to happen because of the way I coded it, here is the code (There is only server-side code, no client code.
local Humanoid = script.Parent.Humanoid
local HumanoidRootPartDummy = script.Parent.HumanoidRootPart
local Animator = Humanoid.Animator
local Loads = {
Fire = Animator:LoadAnimation(script.Parent.Fire),
Idle = Animator:LoadAnimation(script.Parent.Idle)
}
local dmg = 7
local range = 79
function findTarget()
for i, child in pairs(workspace:GetChildren()) do
if child:IsA("Model") and child:FindFirstChild("Humanoid") and child:FindFirstChild("HumanoidRootPart") and child ~= script.Parent then
local HumanoidRootPart = child:FindFirstChild("HumanoidRootPart")
local HumanoidTarg = child:FindFirstChild("Humanoid")
local pos = (HumanoidRootPartDummy.Position - HumanoidRootPart.Position).Magnitude
if pos < range and HumanoidRootPart and HumanoidTarg then
return HumanoidRootPart, HumanoidTarg
end
end
end
end
function bulletGeneration(TargetRootPart)
local Trail = Instance.new("Beam")
local Attachment1 = Instance.new("Attachment")
local Attachment2 = Instance.new("Attachment")
Attachment1.Parent = HumanoidRootPartDummy
Attachment2.Parent = TargetRootPart
Trail.Attachment0 = Attachment1
Trail.Attachment1 = Attachment2
Trail.Enabled = true
Trail.Color = ColorSequence.new{
ColorSequenceKeypoint.new(0, Color3.new(1, 1, 1)),
ColorSequenceKeypoint.new(0.5, Color3.new(1, 0.721569, 0.270588)),
ColorSequenceKeypoint.new(1, Color3.new(1, 0.933333, 0))
}
wait(Loads.Fire.Length / 12)
Trail:Destroy()
end
while wait() do
local root, targhum = findTarget()
if targhum.Health ~= 0 and root and targhum then
Loads.Fire:Play()
targhum:TakeDamage(dmg)
script.Parent.HumanoidRootPart.CFrame = CFrame.lookAt(script.Parent.HumanoidRootPart.Position, root.Position)
wait(Loads.Fire.Length)
else
Loads.Fire:Stop()
Loads.Idle:Play()
Loads.Idle.DidLoop:Wait()
end
end
If you read this all, good job!
I tried almost everything I could, I always miss something that I somehow didn't notice so simple. But I really can't figure this one out.
Also, the BulletGeneration function isn't doing anything visual.
I stopped scripting for like 1 in a half months, so I'm a little rusty.

1 comment
Said BulletRegeneration instead of BulletGeneration, oopsie!