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
