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

Animator is not a descendant of game?

Asked by 7 years ago
Edited 7 years ago

When I do humanoid:LoadAnimation(animation), it brings the error that animator must be a descendant of game or is required to be. It also says humanoid instead sometimes. So I did the below:

while not Animator:IsDescendantOf(game) do
    wait()
end

But that creates an infinite loop after a player resets. Any solutions?

I tried a while loop until the humanoid is found in workspace but that doesn't work either.

1 answer

Log in to vote
1
Answered by 7 years ago
Edited 7 years ago

What your code snippet does is that it checks every (approx) 1/30th of a second for the Animator to be a descendant of DataModel (commonly referred to as game, due to that being the global keyword in scripts).

My solution would be to add an exception for when the character dies (note: I have not defined character. It's not possible for me to accurately get it for you based on the code provided. You will have to do that yourself):

while not Animator:IsDescendantOf(game) do --\\Start a while loop checking for the animator stuff.

    if character and character:FindFirstChild("Humanoid") then --\\If there is a humanoid & character.

        if (character.Humanoid.Health < 1) then --\\Check the health, if <1 then continue.

            break --\\Break out of the loop.

        end --\\End the statement.

    end --\\End the statement.

    wait() --\\Wait 1/30 seconds.

end --\\End the loop.

As a bonus, you could make it check every 0.5 seconds, and drastically improve performance. There's no need to check 30 times a second, that's just a waste. Learn to code cleanly & efficiently! Example code:

Instead of:

while true do --\\Start a while loop

    --\\Your code here

    wait() --\\Wait (approx) 1/30 seconds.

end --\\End the loop

You could try something like:

while true do --\\Start a while loop

    --\\Your code here

    wait(0.5) --\\Wait half a second

end --\\End the loop

In most cases the time difference wont matter, trust me. It is very uncommon to need a loop running that many times a second!

Ad

Answer this question