Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Buying either gamepass gives both rewards, no clue why?

Asked by 3 years ago

So I'm following this tutorial: https://www.youtube.com/watch?v=rLGdpZ8hFkM, when I had it as 1 gamepass, it worked fine, but when I duplicated the code and added new variables, it broke. When you buy both of the gamepasses, the player gets both attributes, which gives both rewards. Any help is much appreciated.

The code related to the gamepass giver:

local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")

local gamePassId = 20255216


local function giveGolden(player)
    --Benefits
    if player.Character then
        local PlayerGui = player.PlayerGui
        PlayerGui:WaitForChild("Poop"):WaitForChild("Poop").Visible = false
        PlayerGui:WaitForChild("Poop"):WaitForChild("goldenPoop").Visible = true
    end --copy paste benefits into 2nd part
    player.CharacterAdded:Connect(function(character)
        local PlayerGui = player.PlayerGui
        PlayerGui:WaitForChild("Poop"):WaitForChild("Poop").Visible = false
        PlayerGui:WaitForChild("Poop"):WaitForChild("goldenPoop").Visible = true
    end)
end

local function onPlayerAdded(player)
    local hasGold = false

    local success, message = pcall(function()
        hasGold = MarketplaceService:UserOwnsGamePassAsync(player.UserId, gamePassId)
    end)    

    if not success then
        warn("Error while checking if player had gamepass")
        return
    end

    if hasGold then
        player:SetAttribute("GamePassFire", true)
        giveGolden(player)
    end
end

MarketplaceService.PromptGamePassPurchaseFinished:Connect(function(player, passId, wasPurchased)
    if wasPurchased and not player:GetAttribute("GamePassFire") then
        giveGolden(player)
        player:SetAttribute("GamePassFire", true)
    end
end)

Players.PlayerAdded:Connect(onPlayerAdded)



local gamePassId2 = 20293905

local function giveRainbow(player2)
    --Benefits
    if player2.Character then
        local PlayerGui = player2.PlayerGui
        PlayerGui:WaitForChild("Poop"):WaitForChild("Poop").Visible = false
        PlayerGui:WaitForChild("Poop"):WaitForChild("rainbowPoop").Visible = true
    end --copy paste benefits into 2nd part
    player2.CharacterAdded:Connect(function(character)
        local PlayerGui = player2.PlayerGui
        PlayerGui:WaitForChild("Poop"):WaitForChild("Poop").Visible = false
        PlayerGui:WaitForChild("Poop"):WaitForChild("rainbowPoop").Visible = true
    end)
end

local function onPlayerAdded2(player2)
    local hasRainbow = false

    local success2, message2 = pcall(function()
        hasRainbow = MarketplaceService:UserOwnsGamePassAsync(player2.UserId, gamePassId2)
    end)    

    if not success2 then
        warn("Error while checking if player had gamepass")
        return
    end

    if hasRainbow then
        player2:SetAttribute("GamePassFire2", true)
        giveRainbow(player2)
    end
end

MarketplaceService.PromptGamePassPurchaseFinished:Connect(function(player2, passId2, wasPurchased2)
    if wasPurchased2 and not player2:GetAttribute("GamePassFire2") then
        giveRainbow(player2)
        player2:SetAttribute("GamePassFire2", true)
    end
end)

Players.PlayerAdded:Connect(onPlayerAdded2)

1 answer

Log in to vote
0
Answered by 3 years ago

I figured this out. So basically on lines 40 and 85, if ANY gamepass was purchased, they would activate see that it was purchased and the user did not have them so it would give both. Basically, it wasn't checking to see if the correct gamepass was bought. I changed it to: if wasPurchased and passId == gamePassId and not player:GetAttribute("GamePassFire") then.

Now it'll check to see the correct pass is bought before giving any rewards.

Ad

Answer this question