IGNORE THIS PART I misread the original scripts.
You are relying on Values, but the Value objects have properties named Value, to return the actual amount within the value.
So instead of
game.Workspace.Cash
use game.Workspace.leaderstats.Cash.Value READ THIS PART!!!
And yes, as Disc said, you have to make sure this is from a local script, but the GUI values should never be updates based off of the amounts in the workspace, as someone can easily change their local leaderstats to show something different. You can rely on it just for the GUI, but do not rely on Values stored on the client in order to change the actual data stores or check for amount of money when making a purchase.
Important
you will have to use Remotes in order to update the Gui Locally. Or, rather, it is better practice to do so. You can’t change the server values from the client, and while you CAN change the client values from the server, it’s best to connect it with a remote.
Hey your primary issue here is you are attempting to get a value stored in ServerScriptService, from a localscript inside of a gui object. This is something you cannot do. The solution is to use a RemoteEvent to change the player Cash in their local GUI.
That isn’t true, his script in serverscriptservice makes a folder inside of the player, so in this case it can be accessed by going through the player.