Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

Infinite yield possible on 'ServerStorage:WaitForChild("zombieradio") help me please ?

I have the problem with the attack of my zombie can you help me please here is the script:

local rarm = script.Parent:WaitForChild("Right Arm")
	local larm = script.Parent:WaitForChild("Left Arm")
	 
	function dmg(hit)
		    if hit.Parent ~= nil then
			        local hum = hit.Parent:findFirstChild("Humanoid")
			        if hum ~= nil then
				            hum.Health = hum.Health -10
				        end
			    end
		end
	 
	rarm.Touched:connect(dmg)
	larm.Touched:connect(dmg)

Thanks

1 comment

0

I don't see zombieradio anywhere

1 answer

The function <Object>:WaitForChild(<thing>,<timeout>) as you can see it has two arguments One for the name of the object you're looking for and a timeout (in seconds). So if you have no timeout in your script's it will hang for a while until the timeout error Infinite yield is thrown.

The proper way to use the function is as follows:

--Wrong way (kinda)

local rarm = script.Parent:WaitForChild("Right Arm") -- this will hang the script if it cannot find an object named "Right Arm", Though if it finds it then it will continue as normal!

local larm = script.Parent:WaitForChild("Left Arm") -- this will hang the script if it cannot find an object named "Left Arm", Though if it finds it then it will continue as normal!

    function dmg(hit)
            if hit.Parent ~= nil then
                    local hum = hit.Parent:findFirstChild("Humanoid")
                    if hum ~= nil then
                            hum.Health = hum.Health -10
                        end
                end
        end

    rarm.Touched:connect(dmg)
    larm.Touched:connect(dmg)

Correct Way:

local rarm = script.Parent:WaitForChild("Right Arm",10) -- this will suspend the script until the object("Right Arm") appears in script.Parent. If it doesn't find it after 10 secs it will make this equal nil

local larm = script.Parent:WaitForChild("Left Arm",10)  -- this will suspend the script until the object("Left Arm") appears in script.Parent. If it doesn't find it after 10 secs it will make this equal nil
    function dmg(hit)
            if hit.Parent ~= nil then
                    local hum = hit.Parent:findFirstChild("Humanoid")
                    if hum ~= nil then
                            hum.Health = hum.Health -10
                        end
                end
        end
--// if any of the above checks come back nil, this table will be filled with nil's and since you cannot have a nil property of a table the length of the table will be less than the number of checks!
local ChkTable = {rarm,larm}
if(#ChkTable < 2) then
	if(rarm == nil) then	warn("Error: Right Arm is nil!") end
	if(larm == nil) then	warn("Error: Left Arm is nil!") end
	error("Error: Something went wrong with WaitForChild() Checks as not all objects are found in the check table!")
end
    rarm.Touched:connect(dmg)
    larm.Touched:connect(dmg)

ask if your unsure on anything and Hope this helps! :)

This discussion is preserved as it was. New answers, comments, and votes are closed.