I've tried multiple methods but I just can't seem to get it to work, I'd really appreciate some support.
I absolutely do not want to use the standard ROBLOX leaderboard, but the moneySystem I've put together that makes use of ScreenGuis, sorry if this is a really simple fix but I'm quite new to scripting!
bankCashGiver
local debounce = false
local playerfound = false
local player = game:GetService("Players")
--local moneyData = Instance.new("Folder",game.ReplicatedStorage)
--moneyData.Name = "MoneyData" -- Once the game starts up, there will be a folder created in ReplicatedStorage.
local cash = game:GetService("DataStoreService"):GetDataStore("MoneyData")
--local dataStoreService = game:GetService("DataStoreService"):GetDataStore("MoneyDataStore")
game.Players.PlayerAdded:Connect(function(plr)
--local plrCash = game:GetService("DataStoreService"):GetDataStore("MoneyData")
--plrCash.Name = plr.Name -- Once the game starts up, a personal data folder will be created inside of "MoneyData."
local key = "id-" .. plr.UserId -- Requires a passcode in order to change, access, or modify data.
pcall(function()
saveData = cash:GetAsync(key)
end)
if saveData then
cash.Value = saveData[1]
else
local save = {cash} -- This'll create a data table if the Player hasn't played before.
pcall(function()
cash:SetAsync(key,save)
end)
end
end)
function CreateRegion3FromPart(Part)
return Region3.new(Part.Position-(Part.Size/2),Part.Position+(Part.Size/2))
end
function GetPlayersInPart(part)
local region = CreateRegion3FromPart(part)
local partsInRegion = workspace:FindPartsInRegion3(region,nil,math.huge)
local Players = {}
for i,Part in pairs(partsInRegion) do
local player = game.Players:GetPlayerFromCharacter(Part.Parent)
if player then
for i, v in pairs(Players) do
if Players[i].Name == player.Name then
playerfound = true
end
end
if playerfound == false then
table.insert(Players,player)
end
playerfound = false
end
end
for i, v in pairs(Players) do
if Players[i].Robbing.Value == false then
game.ReplicatedStorage.ShowRobberyGUI:FireClient(Players[i])
end
Players[i].Robbing.Value = true
if Players[i].cashCollectedData.Value < 1500 then -- This is how much money the player can rob at a time.
Players[i].cashCollectedData.Value = Players[i].cashCollectedData.Value + 10 -- This is how much money the player will receive every {number} second(s).
end
end
return Players
end
while wait(1) do -- This changes how long it takes the player before the receive "Players[i].cashCollectedData.Value + {number}"
GetPlayersInPart(game.Workspace.Detector)
end
DoorDetector (whenever you leave the building it would deposit the money into the account.)
local replicatedStorage = game.ReplicatedStorage
local MoneyData = game.ReplicatedStorage:FindFirstChild("MoneyData")
game.Players.PlayerAdded:Connect(function(plr)
local MoneyData = game.ReplicatedStorage:FindFirstChild("MoneyData")
local sourcePlayer = MoneyData:FindFirstChild(plr.Name)
end)
script.Parent.Touched:Connect(function(hit)
if hit.Parent:FindFirstChild("HumanoidRootPart") then
local player = game.Players:GetPlayerFromCharacter(hit.Parent)
if player.Robbing.Value == true then
game.ReplicatedStorage.HideRobberyGUI:FireClient(player)
replicatedStorage.MoneyData.sourcePlayer.Cash.Value = replicatedStorage.MoneyData.sourcePlayer.Cash.Value + replicatedStorage.cashCollectedData.Value
replicatedStorage.cashCollectedData.Value = 0
replicatedStorage.Robbing.Value = false
end
end
end)
"Leaderboard"
game.Players.PlayerAdded:Connect(function(player)
local leaderstats = game.ReplicatedStorage:GetChildren("MoneyData")
leaderstats.Name = "MoneyData"
local money = game.ReplicatedStorage.MoneyData:GetChildren("Cash")
money.Name = "Cash"
local cc = Instance.new("IntValue", player)
cc.Name = "cashCollectedData"
local robbing = Instance.new("BoolValue", player)
robbing.Name = "Robbing"
robbing.Value = false
player.CharacterAdded:connect(function(char)
player.Robbing.Value = false
player.cashCollectedData.Value = 0
end)
end)
Actual money GUI "LocalScript"
local player = game.Players.LocalPlayer
wait() -- Allows the Client to load in before the Server interacts, avoiding any corruption/crashing.
local moneyData = game.ReplicatedStorage:WaitForChild("MoneyData")
local playerCash = moneyData:WaitForChild(player.Name)
script.Parent.cashDisplay.Text = "$ "..playerCash.Cash.Value
playerCash.Cash.Changed:connect(function()
script.Parent.cashDisplay.Text = "$ "..playerCash.Cash.Value -- Updates the GUI whenever the Player earns a new amount of cash.
end)
Any support would be heavily appreciated, been stumped for quite some time now! I should be able to provide any information if you need anything else.

3 comments
Just to clarify, you have to money stolen and when the player leaves the game, you what it to save?
Yes, once you leave the building (transparent part in the doorway) you'll receive the money and it'll save whenever the Player leaves then rejoins.
Where's the attempts and how did it not work? Also you shouldn't rely on random arbritary waits since they aren't reliable