Hello everyone. It’s been a WHILE since I’ve developed on Roblox, and a lot has probably changed. I’m trying to subtract money from a player’s leaderstat when a SurfaceGui’s button is pressed.
Right now, I have a LocalScript that attempts to fetch the Player and their Cash value.
local gamePrice = script.Parent:WaitForChild("Price").Value -- 500
local button = script.Parent -- a text button
button.MouseButton1Click:Connect(function()
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local money = player:WaitForChild("leaderstats"):WaitForChild("Cash") -- this all looks right, as Cash is the name for the leaderstat thingy or whatever...you get what i mean
money.Value = money.Value - gamePrice -- attempting to subtract the price of the game (500) by the player's original leaderstat
-- rest of code goes here
end)
*I tried to add comments where helpful.
BUT… this doesn’t work, and I’ve been trying to figure this out since last night. Below is what my hierarchy looks like. If it helps, the value of Price is 500.
Unfortunately, my script doesn’t work, and I’m wondering if I need to fire a Remote Event or something else so that the leaderstats update. I’ve never worked with Remote Events before, and even with the documentation, it’s all confusing to me. If anyone could explain it to me and give an EXAMPLE of code, that would be greatly appreciated.
By the way, no errors arise after pressing the button. Even when I insert a print() function to test if the button’s press was detected, it does not appear.
I am not sure, i think the Script won’t even run. Just print at the very top print(“Is Running”). If its not, then its because LocalScripts don’t run in workspace (if its in workspace)
It’s not in Workspace, the TextButton is the parent of the LocalScript. However, per your request, I followed this, and it is in fact not running. I am getting zero output from the LocalScript whatsoever. Any way to combat this?
But I can help you of solving the issue move everything (except the part) and the surfaceGUI into StarterGUI.In the SurfaceGUI, there is a property called “Adornee” set that to the part of where you want the button to be located in. Then just align with the property “Face” and then the local script should work.
I think that you would have to do this in a server script. Put this in your localscript instead:
script.Parent.MouseButton1Click:Connect(function()
game.ReplicatedStorage.RemoteEventHere:FireServer(gamePrice) --I would put the gameprice variable inside of a serverscript so that exploiters can't change it
end)
I probably messed up somewhere in the script but hopefully this helps. Remember to add a remote event into ReplicatedStorage and change its name.
Edit: i forgot that you don’t need to find the player in the server script lol
Edit 2: I just realized that this is a SurfaceGui, not a ScreenGui. Please forget that I ever made this post.
mouse button click should only be used to run a remote event to the server, as what polysaccharide did. Everything else should be run in server to change leaderboard stats and stop exploiters
Wow. Worked like a charm. Thank you (and @yoshicoolTV) for giving me this solution. @PolyLacticSugarcane, I tried your script at first as I was skeptical of this answer, but I do agree on the exploit part. I will make changes to that. Thank you all for your speedy responses
Beautiful. I chose this one because of the exploit possibility, but to all, thank you for your responses. Both worked regardless, and those solved my issue.