On spawn, most of the time, the donation board thinks that the player donated 5 robux even though there is no "5 Robux" donation button and the player didn't donate anything? What? What is happening here? Also sometimes the leaderboard would say the player didn't donate anything if didn't donate but when it updates it says the player donated 5 robux, but anyways here are the scripts:
The leaderstats (or hiddenstats) script: (ServerScriptService)
local DataStoreService = game:GetService("DataStoreService") local DonationDataStore = DataStoreService:GetDataStore("Donation") game.Players.PlayerAdded:Connect(function(player) local hiddenstats = Instance.new("Folder") hiddenstats.Name = "hiddenstats" hiddenstats.Parent = player local Donation = Instance.new("IntValue", hiddenstats) Donation.Name = "Donation" Donation.Value = DonationDataStore:GetAsync(player.UserId) or 0 end) game.Players.PlayerRemoving:Connect(function(Player) DonationDataStore:SetAsync(Player.UserId, Player.hiddenstats.Donation.Value) end)
The donation board script: (StarterGui)
local lbData = game:GetService("DataStoreService"):GetOrderedDataStore("Board") function AddCommas(num) return tostring(math.floor(num)):reverse():gsub("(%d%d%d)","%1,"):gsub(",(%-?)$","%1"):reverse() end function Update() local frames = script.Parent.ScrollingFrame:GetChildren() for v,v in pairs(frames) do if v:IsA("Frame") then v:Destroy() end end for _,plr in next, game:GetService("Players"):GetPlayers() do pcall(function() lbData:UpdateAsync(plr.UserId, function() return plr:FindFirstChild("hiddenstats"):WaitForChild("Donation").Value end) end) end local data = lbData:GetSortedAsync(false,10) local page = data:GetCurrentPage() for rank, info in next, page do local frame = script.Parent.Sample:Clone() frame.Visible = true local plrName = game:GetService("Players"):GetNameFromUserIdAsync(info.key) frame:WaitForChild("Place").Text = "#"..rank if rank == 1 then print("gold") frame.BackgroundColor3 = Color3.new(0.941176, 0.737255, 0) elseif rank == 2 then print("silver") frame.BackgroundColor3 = Color3.new(0.784314, 0.784314, 0.784314) elseif rank == 3 then print("bronze") frame.BackgroundColor3 = Color3.new(0.764706, 0.560784, 0.313725) else print("white") frame.BackgroundColor3 = Color3.new(1, 1, 1) end frame.Username.Text = plrName frame.Amount.Text = AddCommas(info.value) frame.Visible = true frame.Parent = script.Parent.ScrollingFrame end end while true do Update() wait(15) end
The robux button script: (10 robux button as an example) (LocalScript) (StarterGui)
local TService = game:GetService("TweenService") local Part = script.Parent local TInfo = TweenInfo.new( 2, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut, math.huge, true, 0 ) local ButtonInfo = { ImageColor3 = Color3.fromRGB(99, 122, 255) } local Tween = TService:Create(Part, TInfo, ButtonInfo) Tween:Play() local Player = game.Players.LocalPlayer local MarketPlaceService = game:GetService("MarketplaceService") local PurchaseButton = script.Parent.Parent PurchaseButton.MouseButton1Click:Connect(function() MarketPlaceService:PromptProductPurchase(Player, 1193184814) end)
Process Receipt script: (ServerScriptService)
local MarketplaceService = game:GetService("MarketplaceService") local DataStoreService = game:GetService("DataStoreService") local Players = game:GetService("Players") local purchaseHistoryStore = DataStoreService:GetDataStore("PurchaseHistory") local productFunctions = {} productFunctions[1193184814] = function(receipt, player) local stats = player:FindFirstChild("hiddenstats") local donation = stats and stats:FindFirstChild("Donation") if donation then donation.Value = donation.Value + 10 return true end end productFunctions[1193184916] = function(receipt, player) local stats = player:FindFirstChild("hiddenstats") local donation = stats and stats:FindFirstChild("Donation") if donation then donation.Value = donation.Value + 25 return true end end productFunctions[1193185042] = function(receipt, player) local stats = player:FindFirstChild("hiddenstats") local donation = stats and stats:FindFirstChild("Donation") if donation then donation.Value = donation.Value + 50 return true end end productFunctions[1193185371] = function(receipt, player) local stats = player:FindFirstChild("hiddenstats") local donation = stats and stats:FindFirstChild("Donation") if donation then donation.Value = donation.Value + 100 return true end end productFunctions[1193185511] = function(receipt, player) local stats = player:FindFirstChild("hiddenstats") local donation = stats and stats:FindFirstChild("Donation") if donation then donation.Value = donation.Value + 200 return true end end productFunctions[1193185552] = function(receipt, player) local stats = player:FindFirstChild("hiddenstats") local donation = stats and stats:FindFirstChild("Donation") if donation then donation.Value = donation.Value + 500 return true end end productFunctions[1193185580] = function(receipt, player) local stats = player:FindFirstChild("hiddenstats") local donation = stats and stats:FindFirstChild("Donation") if donation then donation.Value = donation.Value + 1000 return true end end productFunctions[1193185622] = function(receipt, player) local stats = player:FindFirstChild("hiddenstats") local donation = stats and stats:FindFirstChild("Donation") if donation then donation.Value = donation.Value + 2000 return true end end local function processReceipt(receiptInfo) local playerProductKey = receiptInfo.PlayerId .. "_" .. receiptInfo.PurchaseId local purchased = false local success, errorMessage = pcall(function() purchased = purchaseHistoryStore:GetAsync(playerProductKey) end) if success and purchased then return Enum.ProductPurchaseDecision.PurchaseGranted elseif not success then error("Data store error:" .. errorMessage) end local player = Players:GetPlayerByUserId(receiptInfo.PlayerId) if not player then return Enum.ProductPurchaseDecision.NotProcessedYet end local handler = productFunctions[receiptInfo.ProductId] local success, result = pcall(handler, receiptInfo, player) if not success or not result then warn("Error occurred while processing a product purchase") print("\nProductId:", receiptInfo.ProductId) print("\nPlayer:", player) return Enum.ProductPurchaseDecision.NotProcessedYet end local success, errorMessage = pcall(function() purchaseHistoryStore:SetAsync(playerProductKey, true) end) if not success then error("Cannot save purchase data: " .. errorMessage) end return Enum.ProductPurchaseDecision.PurchaseGranted end MarketplaceService.ProcessReceipt = processReceipt
For anyone thinking that there is some code that adds 5 donation points, I tried my hardest to find it and there are NO signs of it.