Well, the issue is a bit self explanatory. The script will not function. The print will output, but that's all. It's a simple script, and I'm not understanding why it's failing to function.
It's in a regular script, and is called upon whenever a value is changed.
game.Players.PlayerAdded:connect(function(player)
repeat wait() until game.Lighting.IntroCamEnd.hatremoval.Value == true -- bool value
print("Removing hats...") -- This print displays correctly.
local hats = player:GetChildren()
for i = 1, #hats do
if hats[i].ClassName == "Hat" then
hats[i]:Destroy()
end
end
end)
Thank you for reading, and like always, I look forward to finding a solution.

2 comments
Oh, I hate it when forgetting one word nullifies the use of a whole script -- I'm surprised I didn't catch it by now. And that seems like a much better method than the one I was using before, and even if not more efficient, easier to read. Thank you for the solution and tip!
you are welcome. output is helpful if you want to know what is wrong with your script: http://wiki.roblox.com/index.php?title=Output