Can someone clearly explain to me why some scripts work in play solo mode but not in public play mode?
The Client-Server model separates what runs where.
All Scripts run on the Server, all LocalScripts run on the Client.
In Play Solo mode, these are one and the same. All Scripts are effectively LocalScripts, and vice versa.
When you transition to the live model that separates the two, things break because you no longer have access to what you did before.
For this reason, you should use Test Server and Test Player (from the Server) to test your game, instead of Play Solo. It has its uses (mainly it loads faster), but because it's a different model than the Client-Server used on live ROBLOX servers, it's useless for the majority of testing.