I've Tried things and i changes a lot but its still not working, i just buy the products but don't get the money.
If i buy in-game 100 FrostyCoins/cash i will pay but i don't get the 100 Frostycoins/cash
What does i wrong?
The first 2 Scripts are from Roblox Wiki (I change somthings)
I tried all ready things.. But it not working and am search all some months for this. (Yes, My english is bad)
The Local Script is:
local buyButton = game.Workspace.Part1.SurfaceGui.a local productId = 21118799 -- when player clicks on buy brick prompt him/her to buy a product buyButton.MouseButton1Click:connect(function() game:GetService("MarketplaceService"):PromptProductPurchase(game.Players.LocalPlayer, productId) end)
The script in workspace is:
local MarketplaceService = Game:GetService("MarketplaceService") local ds = game:GetService("DataStoreService"):GetDataStore("PurchaseHistory") local productId = 21118799 -- define function that will be called when purchase finished MarketplaceService.ProcessReceipt = function(receiptInfo) -- find the player based on the PlayerId in receiptInfo for i, player in ipairs(game.Players:GetChildren()) do if player.userId == receiptInfo.PlayerId then -- check which product was purchased if receiptInfo.ProductId == productId then -- handle purchase player.leaderstats.FrostyCoins.Value = player.leaderstats.FrostyCoins.Value + 100 end end end -- record the transaction in a Data Store local playerProductKey = "player_" .. receiptInfo.PlayerId .. "_purchase_" .. receiptInfo.PurchaseId ds:IncrementAsync(playerProductKey, 1) -- tell ROBLOX that we have successfully handled the transaction return Enum.ProductPurchaseDecision.PurchaseGranted end
The Leaderboard script is:
print("LinkedLeaderboard script version 5.00 loaded") stands = {} CTF_mode = false -- I think there is something wrong with the capture the flag mode, VERY UGLY HACK is down near where it is leave false unless you can fix it. function onHumanoidDied(humanoid, player) local stats = player:findFirstChild("leaderstats") if stats ~= nil then local deaths = stats:findFirstChild("WO's") deaths.Value = deaths.Value + 1 -- do short dance to try and find the killer local killer = getKillerOfHumanoidIfStillInGame(humanoid) handleKillCount(humanoid, player) end end function onPlayerRespawn(property, player) -- need to connect to new humanoid if property == "Character" and player.Character ~= nil then local humanoid = player.Character.Humanoid local p = player local h = humanoid humanoid.Died:connect(function() onHumanoidDied(h, p) end ) end end function getKillerOfHumanoidIfStillInGame(humanoid) -- returns the player object that killed this humanoid -- returns nil if the killer is no longer in the game -- check for kill tag on humanoid - may be more than one - todo: deal with this local tag = humanoid:findFirstChild("creator") -- find player with name on tag if tag ~= nil then local killer = tag.Value if killer.Parent ~= nil then -- killer still in game return killer end end return nil end function handleKillCount(humanoid, player) local killer = getKillerOfHumanoidIfStillInGame(humanoid) if killer ~= nil then local stats = killer:findFirstChild("leaderstats") if stats ~= nil then local kills = stats:findFirstChild("KOs") local cash = stats:findFirstChild("FrostyCoins") if killer ~= player then kills.Value = kills.Value + 1 cash.Value = cash.Value + 1 -- change amount of money per kill here else kills.Value = kills.Value - 1 end end end end ----------------------------------------------- function findAllFlagStands(root) local c = root:children() for i=1,#c do if (c[i].className == "Model" or c[i].className == "Part") then findAllFlagStands(c[i]) end if (c[i].className == "FlagStand") then table.insert(stands, c[i]) end end end function hookUpListeners() for i=1,#stands do stands[i].FlagCaptured:connect(onCaptureScored) end end function onPlayerEntered(newPlayer) if CTF_mode == true then local stats = Instance.new("IntValue") stats.Name = "leaderstats" local captures = Instance.new("IntValue") captures.Name = "Captures" captures.Value = 0 captures.Parent = stats -- VERY UGLY HACK -- Will this leak threads? -- Is the problem even what I think it is (player arrived before character)? while true do if newPlayer.Character ~= nil then break end wait(5) end stats.Parent = newPlayer else local stats = Instance.new("IntValue") stats.Name = "leaderstats" local kills = Instance.new("IntValue") kills.Name = "KOs" kills.Value = 0 local cash = Instance.new("IntValue") cash.Name = "FrostyCoins" cash.Value = 0 -- starting cash here =D local deaths = Instance.new("IntValue") deaths.Name = "WO's" deaths.Value = 0 kills.Parent = stats deaths.Parent = stats cash.Parent = stats -- VERY UGLY HACK -- Will this leak threads? -- Is the problem even what I think it is (player arrived before character)? while true do if newPlayer.Character ~= nil then break end wait(5) end local humanoid = newPlayer.Character.Humanoid humanoid.Died:connect(function() onHumanoidDied(humanoid, newPlayer) end ) -- start to listen for new humanoid newPlayer.Changed:connect(function(property) onPlayerRespawn(property, newPlayer) end ) stats.Parent = newPlayer end end function onCaptureScored(player) local ls = player:findFirstChild("leaderstats") if ls == nil then return end local caps = ls:findFirstChild("Captures") if caps == nil then return end caps.Value = caps.Value + 1 end findAllFlagStands(game.Workspace) hookUpListeners() if (#stands > 0) then CTF_mode = true end game.Players.ChildAdded:connect(onPlayerEntered)
I think the problem is in the first script. Not sure if this will help but try and move the SurfaceGui to the StarterGui.
Put a LocalScript in the SurfaceGui and put the following code into it:
local sgui = script.Parent local buyButton = sgui.a local productId = 21118799 local player = game.Players.LocalPlayer sgui.Adornee = game.Workspace.Part1 -- when player clicks on buy brick prompt him/her to buy a product buyButton.MouseButton1Click:connect(function() game:GetService("MarketplaceService"):PromptProductPurchase(player, productId) end)