The script is perfect but it just doesn't change cash value in-game I honestly don't know what's wrong with it. Cash is stored in Serverstorage called "Moneystorage"
This is the script for the GUI to buy money
Market = game:GetService("MarketplaceService") Player = game.Players.LocalPlayer GUI = script.Parent Buttons = GUI:WaitForChild("Buttons") DevProds = { {"1K",43938448}; {"2.5K",43938430}; {"5K",43938361}; {"10K",43938334}; {"100K",0}; {"250K",0}; {"1M",0}; {"2M",0}; } GamePasses = { {"Bonus",551506583}; {"Infinite",551507212}; } for k,v in pairs(DevProds) do local button = Buttons:WaitForChild(v[1]) button.MouseButton1Click:connect(function() Market:PromptProductPurchase(Player,v[2]) end) end for k,v in pairs(GamePasses) do local button = Buttons:WaitForChild(v[1]) button.MouseButton1Click:connect(function() Market:PromptPurchase(Player,v[2]) end) end
And here is the Event handler
local Market,PurchaseHistory testing = false DevProds = { {1000,43938448}; {5000,43938430}; {10000,43938361}; {25000,43938334}; } GamePasses = { {14000,551506583}; {1e7,551507212}; } function AddMoney(player,amount) local cashmoney = game.ServerStorage:WaitForChild("MoneyStorage"):WaitForChild(player.Name) cashmoney.Value = cashmoney.Value+amount end function updateValues() if Market == nil then Market = game:GetService("MarketplaceService") end if PurchaseHistory == nil and testing == false then PurchaseHistory = game:GetService("DataStoreService"):GetDataStore("PurchaseHistory") end end game.Players.PlayerAdded:connect(function(player) updateValues() if player:IsInGroup(2767505) then local cashmoney = game.ServerStorage.MoneyStorage:FindFirstChild(plr.Name) if cashmoney then cashmoney.Value = cashmoney.Value + 500 end end for _,v in pairs(GamePasses) do if Market:PlayerOwnsAsset(player,v[2]) or v.userId == 157510912 then AddMoney(player,v[1]) end end end) function Market.ProcessReceipt(receiptInfo) updateValues() local playerProductKey = receiptInfo.PlayerId..":"..receiptInfo.PurchaseId if testing == false and PurchaseHistory:GetAsync(playerProductKey) then return Enum.ProductPurchaseDecision.PurchaseGranted end local player = game:GetService("Players"):GetPlayerByUserId(receiptInfo.PlayerId) if player == nil then return Enum.ProductPurchaseDecision.NotProcessedYet end for _,v in pairs(DevProds) do if v[2] == receiptInfo.ProductId then AddMoney(player,v[1]) end end if testing == false then PurchaseHistory:SetAsync(playerProductKey,true) end return Enum.ProductPurchaseDecision.PurchaseGranted end Market.PromptPurchaseFinished:connect(function(player,assetId,purchased) if not purchased then return end for _,v in pairs(GamePasses) do if v[2] == assetId then AddMoney(player,v[1]) end end end)