Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Respawning enemy ignores if statement to check for health?

Asked by
FdPros 2
4 years ago
Edited 4 years ago

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.

0
why is it < 1? firestarroblox123 440 — 4y
0
also, why are you using a infinite loop when humanoid has a built in .Died event firestarroblox123 440 — 4y
0
What this guys said ^^^ elitekiller2342 87 — 4y
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 FdPros 2 — 4y

Answer this question