New: Nitro Boost our Discord server and receive full donation perks here on the website! Join the Scripting Helpers Discord Server to learn more! You can also Support on Patreon as always.
Still have questions? Join our Discord server and get real time help.
Log in to vote

How do I fix this script that checks if there is an item in a model?

Asked by
Teeter11 271 Moderation Voter
5 years ago

So I am making something that requires access to a model in the players camera. BUT there is multiple items in the characters camera and they are added without a name and I CANT CHANGE THAT!! So I made a script that checks if there is a torso in the model but I get this annoying error.

Things to note : *This is in a localscript

Here is my code:


while wait() do
    if script.Parent.WHat.LeopardFedora.Value == true then
        camitems = game.Workspace.CurrentCamera:GetChildren()
            for i = 1,#camitems do
                if camitems[i].Torso ~= nil then -- LINE 7
                    camitems[i].LeopardFedora.Transparency = 0
                if script.Parent.WHat.LeopardFedora.Value == false then
                    camitems[i].LeopardFedora.Transparency = 1

ERROR : 01:35:41.857 - Torso is not a valid member of Model 01:35:41.857 - Script 'Players.Player.PlayerGui.Main.GiveWearHat', Line 7 01:35:41.858 - Stack End

Thanks if you can help!

1 answer

Log in to vote
Answered by
Perci1 4928 Trusted Moderation Voter Community Moderator
5 years ago

Well I can't think of any situation that would prevent you from changing the Model's name, but your problem is


You're trying to check if a Torso exists, but you're already assuming it exists! camitems[i].Torso is trying to access the Torso. You don't even make it to the comparison. When you use a dot, you're making a statement. "Go to camitems[i].Torso, now." It's very direct, like an order. If it doesn't exist, however, the code can not complete your order and throws an error.

What you need is the FindFirstChild() method. It's advantage comes from the fact that it's in method form, so instead of throwing an error if the child doesn't exist, it just returns nil. Instead of, "Go get this!" you're saying something more like, "Alright, go look for this child. If he exists, bring him to me, otherwise bring me nothing."

Just remember that FindFIrstChild() will return nil at times, so it's only useful with an if statement or some other condition.

if camitems[i]:FindFirstChild("Torso") then
--Equivalent to 'if camitems[i]:FindFirstChild("Torso") ~= nil then'. Just quicker. 
thanks Teeter11 271 — 5y

Answer this question