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

when i add on my game a developer product ID, and try to play i got this problem any clue?

Asked by 2 years ago
Edited 2 years ago

When i put the "Id = 1233299147;" i got this error ` " MarketplaceService:getProductInfo() failed because HTTP 400 (BadRequest) Stack Begin

Script 'Players.pukinginakatalaga.PlayerScripts.Main.Shops.Premium', Line 109 - function Build

Script 'Players.pukinginakatalaga.PlayerScripts.Main.Shops.Premium', Line 152 Stack End"`

local References = require(game:GetService("ReplicatedStorage").Utilities.Services.References)
local Utilities = References.Utilities
local Services = Utilities.Services

local Fireworks = require(Services.ServerScripts.Main.Fireworks)
local Backpacks = require(Services.ServerScripts.Main.Backpacks)
local Player = require(Services.ServerScripts.Main.Player)
local Crystals = require(Services.ServerScripts.Main.Crystals)

local Temporary = require(script.Temporary)

local Premium = {}



    function Premium:CheckProductCategory(id)
        local firework_show_name = References.SharedData.Fireworks.RespawnProductIds[id]

        local currency_name = References.SharedData.Premium:DataById(id, "Currency")

        local temporary_boost_name = References.SharedData.Premium:DataById(id, "Temporary")

        local item_name = References.SharedData.Premium:DataById(id, "Items")

        local crystal_name = References.SharedData.Premium:DataById(id, "Crystals")
        --local increase_name = References.SharedData.Premium:DataById(id, "Increase")

        if firework_show_name then
            return "Firework Show", firework_show_name
        elseif currency_name then
            return "Currency", currency_name
        elseif temporary_boost_name then
            return "Temporary", temporary_boost_name
        elseif item_name then
            return "Items", item_name
        elseif crystal_name then
            return "Crystals", crystal_name
--      elseif increase_name then
--          return "Increase", increase_name
        end
    end

    Services.Marketplace.ProcessReceipt = function(receipt_info)
        local player = Services.Players:GetPlayerByUserId(receipt_info.PlayerId)
        if not player then
            return Enum.ProductPurchaseDecision.NotProcessedYet;
        end

        local po = Player.Players[player]
        if po then
            local product_category, product_name = Premium:CheckProductCategory(receipt_info.ProductId)

            if product_category == "Firework Show" then
                -- reset player's firework show 
                Fireworks.Shows:ResetShowTaken(po, product_name);
                return Enum.ProductPurchaseDecision.PurchaseGranted;
            elseif product_category == "Currency" then
                local currency_data = References.SharedData.Premium.Currency[product_name]
                local amount = currency_data.Amount
                local currency = currency_data.Type
                po:Reward(currency, amount, true) -- reward the currency, ignoring multipliers.
                return Enum.ProductPurchaseDecision.PurchaseGranted;
            elseif product_category == "Temporary" then
                local product_data = References.SharedData.Premium.Temporary[product_name]
                if product_data then
                    local val_name = product_data.ValueName
                    local misc_val = po:GetDataValue("Misc", val_name) or po:MakeDataValue("Misc", val_name, 0)
                    misc_val.Value = misc_val.Value + product_data.Amount -- add the time to the value


                    po:UpdateMultipliers() -- update multipliers.

                    if val_name == "Walk Fast Temporary" then
                        References.RemoteEvents.ForceSetting:FireClient(po.Player, "Fast Walk", true)
                    end
                    return Enum.ProductPurchaseDecision.PurchaseGranted;
                end
            elseif product_category == "Items" then
                local product_data = References.SharedData.Premium.Items[product_name]
                if product_data then
                    for i=1,#product_data.UnlocksItems do
                        local item_data = product_data.UnlocksItems[i]
                        local item_category = item_data.Category
                        local item_name = item_data.Name

                        if item_category and item_name then
                            po:UnlockItem(item_category, item_name, item_data.SetCurrentOnPurchase)
                            return Enum.ProductPurchaseDecision.PurchaseGranted;
                        end
                    end
                end
            elseif product_category == "Crystals" then
                local product_data = References.SharedData.Premium.Crystals[product_name]
                if product_data then
                    if Crystals.OpenPremium(po.Player, product_data.CrystalType) then
                        return Enum.ProductPurchaseDecision.PurchaseGranted;
                    end
                end

--          elseif product_category == "Increase" then
--              local product_data = References.SharedData.Premium.Increase[product_name]
--              if product_data then
--                  local amount = product_data.Amount
--                  local data_val = po:GetDataValue(product_data.DataCategory, product_data.ValueName) or po:MakeDataValue(product_data.DataCategory, product_data.ValueName, 0)
--                  data_val.Name = product_data.ValueName
--                  data_val.Value = data_val.Value + amount;
--                  return Enum.ProductPurchaseDecision.PurchaseGranted;
--              end
            end
        end
        return Enum.ProductPurchaseDecision.NotProcessedYet
    end

    function Premium:HandleNewGamePass(po, gamepass_name, gamepass_data)
        local misc_val = po:GetDataValue("Misc", gamepass_name) or po:MakeDataValue("Misc", gamepass_name, true)
        misc_val.Value = true

        if gamepass_data.ForceSetting then
            References.RemoteEvents.ForceSetting:FireClient(po.Player, gamepass_data.ForceSetting, true)
        end

        local is_infinite_multiplier = gamepass_data.IsInfiniteMultiplier
        local is_item = gamepass_data.UnlocksItems
        local is_vip = gamepass_name == "V.I.P"
        if is_infinite_multiplier then
            po:UpdateMultipliers() -- update the player's current multipliers.
            if gamepass_name == "Walk Fast" then
                References.RemoteEvents.ForceSetting:FireClient(po.Player, "Fast Walk", true)
            end
        end
        if is_item then
            for i=1,#is_item do
                local item_data = is_item[i]
                local item_name = item_data.Name;
                local item_category = item_data.Category;
                po:UnlockItem(item_category, item_name, item_data.SetCurrentOnPurchase)
                if item_category == "Backpacks" then
                    Backpacks:Give(po)
                end
            end
        end
        if is_vip then
            po:SetChatTags()
        end
    end

    Services.Marketplace.PromptGamePassPurchaseFinished:Connect(function(player, id, was_purchased)
        if player and id and was_purchased then
            local po = Player.Players[player]
            if po then
                local gamepass_name, gamepass_data = References.SharedData.Premium:DataById(id, "Game Passes")
                Premium:HandleNewGamePass(po, gamepass_name, gamepass_data)             
            end
        end
    end)

        -- when players join they get processed through this, which will handle gamepasses purchased out of game.
    function Premium.UpdateGamepassValues(player)
        if player then
            local p_data = player:WaitForChild("Data")
            local misc = p_data:WaitForChild("Misc")
            local po = Player.Players[player] -- will be valid as we are waiting for player.Data.Misc which is only parented after po is loaded.
            if po then
                delay(3, function()
                    for name, data in pairs(References.SharedData.Premium["Game Passes"]) do
                        local player_owns_gamepass = Services.Marketplace:UserOwnsGamePassAsync(player.UserId, data.Id)
                        if player_owns_gamepass then
                            local gamepass_name, gamepass_data = References.SharedData.Premium:DataById(data.Id, "Game Passes")
                            Premium:HandleNewGamePass(po, gamepass_name, gamepass_data) 
                        end
                    end
                end)
            end
        end
    end

    Services.Players.PlayerAdded:Connect(Premium.UpdateGamepassValues)

return Premium

Answer this question