I use this
game:GetService("RunService").RenderStepped:wait()
As a wait but it only seems to work some of the time.
It's in a localscript btw so I don't think that's the problem. I keep getting the error that it can only be used in a localscript for some reason. The localscript is inside a server script that copies the script into every new player if that info helps.

2 comments
Put the whole script block that contains that line here. That line, on its own, should always work in a LocalScript.
I think it was that i wasnt putting it into backpack. It works fine now.