Right now, my respawning script kind of works but it always returns an error that the script's parent (script is inside the NPC) is a nil value(line 14), which is fine since I do not want it to respawn. Anyway, even if the script's parent is not nil, it theoretically should not run anyway since the NPC's humanoid health should not be less than 1.

local once = true
local hum = script.Parent:FindFirstChild("Enemy")
local expgiven = script.Parent:WaitForChild("EXPGiven")
local awardee = script.Parent:WaitForChild("PlayerLastHit")

while once == true do
	hum.Health = hum.MaxHealth
	latest = script.Parent:Clone()
	hum.BreakJointsOnDeath = false
	once = false
end

while wait(1.5) do
	if(script.Parent.Enemy.Health < 1) then
		local playerxp = game.Players[awardee.Value].OtherStats:WaitForChild("EXP")
		local playercash = game.Players[awardee.Value].OtherStats:WaitForChild("Cash")
		playerxp.Value = playerxp.Value + expgiven.Value
		playercash.Value = playercash.Value + math.random(1,10)

		wait(10) --respawn duration after death

		local respawn = latest:Clone() ---so we can clone the not dead dummy here
		respawn.Parent = game.Workspace
		respawn:makeJoints()
		respawn.Enemy.Health = respawn.Enemy.MaxHealth
		script.Parent:Destroy()
	end
end

However here is the issue, if I change the if statement section to this instead:

while wait(1.5) do
	if(hum.Health < 1) then
		local playerxp = game.Players[awardee.Value].OtherStats:WaitForChild("EXP")
		local playercash = game.Players[awardee.Value].OtherStats:WaitForChild("Cash")
		playerxp.Value = playerxp.Value + expgiven.Value
		playercash.Value = playercash.Value + math.random(1,10)

		wait(10) --respawn duration after death

		local respawn = latest:Clone() ---so we can clone the not dead dummy here
		respawn.Parent = game.Workspace
		respawn:makeJoints()
		respawn.Enemy.Health = respawn.Enemy.MaxHealth
		script.Parent:Destroy()
	end
end

It will not return the error anymore but after 10 seconds, it would just respawn, meaning it simply ignored my if statement. Somehow, it detects that the NPC's health is lower than 1 straight after it respawned. I have tried other methods too like using the HealthChanged event but that event simply will not fire. I have set prints after it but it simply will not print the humanoid's health even after damaging it.

Please help me solve this, maybe it's just something really dumb or I got the order wrong.

4 comments

0

why is it < 1?

0

also, why are you using a infinite loop when humanoid has a built in .Died event

0

What this guys said ^^^

0

I swear I have done that and it would not print anything. That said I went back and did it again and it worked this time. Thanks