i have tried everything but for some reason this doesn't work... does anyone know the problem? i got this from the wiki, because i am so bad at scripting :/
local MarketplaceService = game:GetService("MarketplaceService") local PurchaseHistory = game:GetService("DataStoreService"):GetDataStore("PurchaseHistory") local Products = { [] = function(receipt,player) local stage = player.leaderstats.Stage.Value if stage < 250 then player.leaderstats.Stage.Value = player.leaderstats.Stage.Value + 1 end player.Character.Head:Destroy() end; [] = function(receipt,player) local stage = player.leaderstats.Stage.Value if stage < 250 then player.leaderstats.Stage.Value = player.leaderstats.Stage.Value + 5 end player.Character.Head:Destroy() end; [] = function(receipt,player) local stage = player.leaderstats.Stage.Value if stage < 250 then player.leaderstats.Stage.Value = player.leaderstats.Stage.Value + 10 end player.Character.Head:Destroy() end; } -- set MarketplaceService.ProcessReceipt to this function -- (this is the same as doing: MarketplaceService.ProcessReceipt = function(recei... ) Off = false function MarketplaceService.ProcessReceipt(receiptInfo) if not Off then Off = true local playerProductKey = receiptInfo.PlayerId .. ":" .. receiptInfo.PurchaseId if PurchaseHistory:GetAsync(playerProductKey) then Off = false return Enum.ProductPurchaseDecision.PurchaseGranted --We already granted it. end end function MarketplaceService.ProcessReceipt(receiptInfo) local playerProductKey = receiptInfo.PlayerId .. ":" .. receiptInfo.PurchaseId if PurchaseHistory:GetAsync(playerProductKey) then return Enum.ProductPurchaseDecision.PurchaseGranted --We already granted it. end -- find the player based on the PlayerId in receiptInfo local player,handler -- handler is used a few lines lower for k,v in ipairs(game:GetService("Players"):GetPlayers()) do if v.userId == receiptInfo.PlayerId then player = v break -- we found him, no need to search further end end -- player left? not sure if it can happen, but to be sure, don't process it if not player then return Enum.ProductPurchaseDecision.NotProcessedYet end for productId,func in pairs(Products) do if productId == receiptInfo.ProductId then handler = func break -- found our handler end end -- apparently it's not our responsibility to handle this purchase -- if this happens, you should probably check your productIds etc -- let's just assume this is ment behavior, and let the purchase go through if not handler then return Enum.ProductPurchaseDecision.PurchaseGranted end -- call it safely with pcall, to catch any error local suc,err = pcall(handler,receiptInfo,player) if not suc then warn("An error occured while processing a product purchase") print("\t ProductId:",receiptInfo.ProductId,"\n","Player:",player) print("\t Error message:",err) -- log it to the output return Enum.ProductPurchaseDecision.NotProcessedYet end -- if the function didn't error, 'err' will be whatever the function returned -- if our handler didn't return anything (or it returned false/nil), it means -- that the purchase failed for some reason, so we have to cancel it if not err then return Enum.ProductPurchaseDecision.NotProcessedYet end -- record the transaction in a Data Store suc,err = pcall(function() PurchaseHistory:SetAsync(playerProductKey, true) end) if not suc then print("An error occured while saving a product purchase") print("\t ProductId:",receiptInfo.ProductId,"\n","Player:",player) print("\t Error message:",err) -- log it to the output print("\t Handler worked fine, purchase granted") -- add a small note that the actual purchase has succeed end -- tell ROBLOX that we have successfully handled the transaction (required) return Enum.ProductPurchaseDecision.PurchaseGranted end end end