An infinite yield basically means there is a possibility of ProximityPromptPart3 (in this case) never being found by :WaitForChild(). This warning exists to make you informed of this. If ProximityPromptPart3 was never found, the script would yield and nothing below it would run in this case.
Do note that is not an error, rather a warning. The script as you stated works, meaning that ProximityPromptPart3 was indeed found by the :WaitForChild() method.
It’s just one of roblox’s features to output a warning for debugging purposes. People have made custom libraries for their own :WaitForChild() methods which don’t output this warning.
Looking back at your code and how the game is organised, you might wanna instead call :WaitForChild() on the ‘ProximityPrompt3’ rather than the ‘ProximityPromptPart3’. Are these shops always replicated on the Workspace or do they get spawned in/deleted?