Devproducts not changing

I have a “ProductServer” script under serverscriptservice with product id’s for each devproduct, however for some reason if i try changing the id’s to a new devproduct, the old one still seems to stay and it doesn’t change. I’m not entirely what is causing this as i am not a very experienced programmar.

The script:

local PS = game:GetService("Players")
local MS = game:GetService("MarketplaceService")
local SS = game:GetService("ServerStorage")
local RS = game:GetService("ReplicatedStorage")
local SSS = game:GetService("ServerScriptService")

local ServerModules = SS:WaitForChild("ServerModules")
local Events = RS:WaitForChild("Events")

local GetDataEvent = RS:WaitForChild("GetData")

local ServerData = require(ServerModules.ServerData)
local GameData = require(RS:WaitForChild("GameData"))
local PetManipulator = require(SSS:WaitForChild("Server").PetManipulator)

local productIDs = {}
local GamepassFunctions = {}

local productsData = {
	["1"] = {Amount = 1000,Multiplier = .025},
	["2"] = {Amount = 5000,Multiplier = .05},
	["3"] = {Amount = 15000,Multiplier = .1},
	["4"] = {Amount = 35000,Multiplier = .25},
	["5"] = {Amount = 50000,Multiplier = .5},
	["6"] = {Amount = 100000,Multiplier = 1},
}

function ChoosePet(PetTable)
	local Table = {}
	for i,v in pairs(PetTable) do
		for _ = 1,v.Chance*1000 do
			table.insert(Table,i)
		end
	end
	return PetTable[Table[math.random(1,#Table)]].Name
end

local function HatchEgg(Player,IncName)
	local Data = ServerData.PlayerData(Player) if not Data then return end
	local IncData = GameData.Incubators[IncName] if not IncData then return end
	local PetTable = {}
	local ShinyTable = {}

	local ChosenPet = ChoosePet(IncData.Pets)
	local IsShiny = math.random(1,5) == 1
	
	ShinyTable[1] = IsShiny
	
	PetManipulator.GivePet(Player,ChosenPet,IsShiny,Data)
	table.insert(PetTable,ChosenPet)

	Events.DoClientEffect:FireClient(Player,"PetHatch",PetTable,5,IncData.EggImage or "",ShinyTable)
	RS:WaitForChild("GetData"):InvokeClient(Player,"Pets",Data.Pets)
end

productIDs[1236607375] = function(Player,Data)
	HatchEgg(Player,"Dominus Egg")
end

productIDs[1236607333] = function(Player,Data)
	HatchEgg(Player,"Angel Egg")
end

productIDs[1236608012] = function(Player,Data)
	-- Gem1
	Data.Gems += productsData["1"].Amount + (Data.TotalGems*productsData["1"].Multiplier)
	GetDataEvent:InvokeClient(Player,"Gems",Data.Gems)
end

productIDs[1236586113] = function(Player,Data)
	-- Gem2
	Data.Gems += productsData["2"].Amount + (Data.TotalGems*productsData["2"].Multiplier)
	GetDataEvent:InvokeClient(Player,"Gems",Data.Gems)
end

productIDs[1236586138] = function(Player,Data)
	-- Gem3
	Data.Gems += productsData["3"].Amount + (Data.TotalGems*productsData["3"].Multiplier)
	GetDataEvent:InvokeClient(Player,"Gems",Data.Gems)
end

productIDs[1236586151] = function(Player,Data)
	-- Gem4
	Data.Gems += productsData["4"].Amount + (Data.TotalGems*productsData["4"].Multiplier)
	GetDataEvent:InvokeClient(Player,"Gems",Data.Gems)
end

productIDs[1236586193] = function(Player,Data)
	-- Gem5
	Data.Gems += productsData["5"].Amount + (Data.TotalGems*productsData["5"].Multiplier)
	GetDataEvent:InvokeClient(Player,"Gems",Data.Gems)
end

productIDs[1236586238] = function(Player,Data)
	-- Gem6
	Data.Gems += productsData["6"].Amount + (Data.TotalGems*productsData["6"].Multiplier)
	GetDataEvent:InvokeClient(Player,"Gems",Data.Gems)
end

productIDs[1236586280] = function(Player,Data)
	-- Coin1
	Data.Coins += productsData["1"].Amount + (Data.TotalCoins*productsData["1"].Multiplier)
	GetDataEvent:InvokeClient(Player,"Coins",Data.Coins)
end

productIDs[1236586298] = function(Player,Data)
	-- Coin2
	Data.Coins += productsData["2"].Amount + (Data.TotalCoins*productsData["2"].Multiplier)
	GetDataEvent:InvokeClient(Player,"Coins",Data.Coins)
end

productIDs[1236586323] = function(Player,Data)
	-- Coin3
	Data.Coins += productsData["3"].Amount + (Data.TotalCoins*productsData["3"].Multiplier)
	GetDataEvent:InvokeClient(Player,"Coins",Data.Coins)
end

productIDs[1236586351] = function(Player,Data)
	-- Coin4
	Data.Coins += productsData["4"].Amount + (Data.TotalCoins*productsData["4"].Multiplier)
	GetDataEvent:InvokeClient(Player,"Coins",Data.Coins)
end

productIDs[1236586371] = function(Player,Data)
	-- Coin5
	Data.Coins += productsData["5"].Amount + (Data.TotalCoins*productsData["5"].Multiplier)
	GetDataEvent:InvokeClient(Player,"Coins",Data.Coins)
end

productIDs[1236586391] = function(Player,Data)
	-- Coin6
	Data.Coins += productsData["6"].Amount + (Data.TotalCoins*productsData["6"].Multiplier)
	GetDataEvent:InvokeClient(Player,"Coins",Data.Coins)
end

productIDs[1113494541] = function(Player,Data)
	-- BrainsBoost1
	local PotionData = GameData.Potions["Brains Boost1"] if not PotionData then return end
	Data.Potions[PotionData.Affect].Time += PotionData.Duration

	GetDataEvent:InvokeClient(Player,"Potions",Data.Potions)
	GetDataEvent:InvokeClient(Player,"Skulls",Data.Skulls)
end

productIDs[1113494645] = function(Player,Data)
	-- BrainsBoost2
	local PotionData = GameData.Potions["Brains Boost2"] if not PotionData then return end
	Data.Potions[PotionData.Affect].Time += PotionData.Duration

	GetDataEvent:InvokeClient(Player,"Potions",Data.Potions)
	GetDataEvent:InvokeClient(Player,"Skulls",Data.Skulls)
end

productIDs[1113494766] = function(Player,Data)
	-- GemsBoost1
	local PotionData = GameData.Potions["Gems Boost1"] if not PotionData then return end
	Data.Potions[PotionData.Affect].Time += PotionData.Duration

	GetDataEvent:InvokeClient(Player,"Potions",Data.Potions)
	GetDataEvent:InvokeClient(Player,"Skulls",Data.Skulls)
end

productIDs[1113494907] = function(Player,Data)
	-- GemsBoost2
	local PotionData = GameData.Potions["Gems Boost2"] if not PotionData then return end
	Data.Potions[PotionData.Affect].Time += PotionData.Duration

	GetDataEvent:InvokeClient(Player,"Potions",Data.Potions)
	GetDataEvent:InvokeClient(Player,"Skulls",Data.Skulls)
end

productIDs[1119701326] = function(Player,Data)
	-- Aura Crate 2
	local CrateData = GameData.Crates["Aura Chest 2"] if not CrateData then return end
	
	local function RollAura()
		local Chances = {}
		for Name,Chance in pairs(CrateData.Auras) do
			for i = 1,Chance*10 do
				table.insert(Chances,Name)
			end
		end
		return Chances[math.random(1,#Chances)]
	end

	local function GetOtherAuras()
		local t = {}
		for i,v in pairs(CrateData.Auras) do
			table.insert(t,i)
		end
		return t
	end

	local Aura = RollAura()

	if table.find(Data.Auras,Aura) == nil then
		table.insert(Data.Auras,Aura)
	end

	GetDataEvent:InvokeClient(Player,"Skulls",Data.Skulls)
	GetDataEvent:InvokeClient(Player,"Auras",Data.Auras)
	GetDataEvent:InvokeClient(Player,"EquippedAura",Data.EquippedAura)
	Events.DoClientEffect:FireClient(Player,"OpenCrate",Aura,GetOtherAuras())
end

productIDs[1119701888] = function(Player,Data)
	-- Aura Crate 3
	local CrateData = GameData.Crates["Aura Chest 3"] if not CrateData then return end

	local function RollAura()
		local Chances = {}
		for Name,Chance in pairs(CrateData.Auras) do
			for i = 1,Chance*10 do
				table.insert(Chances,Name)
			end
		end
		return Chances[math.random(1,#Chances)]
	end

	local function GetOtherAuras()
		local t = {}
		for i,v in pairs(CrateData.Auras) do
			table.insert(t,i)
		end
		return t
	end

	local Aura = RollAura()

	if table.find(Data.Auras,Aura) == nil then
		table.insert(Data.Auras,Aura)
	end

	GetDataEvent:InvokeClient(Player,"Skulls",Data.Skulls)
	GetDataEvent:InvokeClient(Player,"Auras",Data.Auras)
	GetDataEvent:InvokeClient(Player,"EquippedAura",Data.EquippedAura)
	Events.DoClientEffect:FireClient(Player,"OpenCrate",Aura,GetOtherAuras())
end

GamepassFunctions["+5Pets"] = function(Player,Data)
	Data.EquippedPets += 5
	GetDataEvent:InvokeClient(Player,"EquippedPets",Data.EquippedPets)
end

GamepassFunctions["+2Pets"] = function(Player,Data)
	Data.EquippedPets += 2
	GetDataEvent:InvokeClient(Player,"EquippedPets",Data.EquippedPets)
end

GamepassFunctions["InfinitePets"] = function(Player,Data)
	Data.EquippedPets = math.huge
	GetDataEvent:InvokeClient(Player,"EquippedPets",Data.EquippedPets)
end

GamepassFunctions["+25Inventory"] = function(Player,Data)
	Data.InventoryPets += 25
	GetDataEvent:InvokeClient(Player,"InventoryPets",Data.InventoryPets)
end

GamepassFunctions["+100Inventory"] = function(Player,Data)
	Data.InventoryPets += 100
	GetDataEvent:InvokeClient(Player,"InventoryPets",Data.InventoryPets)
end

GamepassFunctions["+500Inventory"] = function(Player,Data)
	Data.InventoryPets += 500
	GetDataEvent:InvokeClient(Player,"InventoryPets",Data.InventoryPets)
end

GamepassFunctions["Vip"] = function(Player,Data)
	local Root = Player.Character:WaitForChild("HumanoidRootPart")
	local VIPParticles = RS:WaitForChild("Clones"):WaitForChild("VIPParticles"):Clone()
	local VIPBil = RS:WaitForChild("Clones"):WaitForChild("VipBil"):Clone()

	VIPParticles.Parent = Root
	VIPBil.Parent = Root
end
	
local function GetGamepassById(Id)
	for i,v in pairs(GameData.GamePasses) do
		if v and v == Id then
			return i
		end
	end
end

local function processReceipt(receiptInfo)
	local player = PS:GetPlayerByUserId(receiptInfo.PlayerId) if not player then warn("processing Receit didnt find player") return Enum.ProductPurchaseDecision.NotProcessedYet end
	local Data = ServerData.PlayerData(player) if not Data then warn(player.Name,player.UserId.." tried to make a purchase without Data") return end
	local PurchaseFunction = productIDs[receiptInfo.ProductId] if not PurchaseFunction then warn("no function linked to purchaseId: "..receiptInfo.ProductId) return Enum.ProductPurchaseDecision.NotProcessedYet end

	Data.RobuxSpent = Data.RobuxSpent + tonumber(receiptInfo.CurrencySpent)
	print(player.Name,player.UserId.." was charged "..tonumber(receiptInfo.CurrencySpent).." Robux for "..receiptInfo.ProductId)
	PurchaseFunction(player,Data)
	
	return Enum.ProductPurchaseDecision.PurchaseGranted
end

local function GamePassPurchased(Player,GamePassId,Purchased)
	if Purchased == false then return end

	local Name = GetGamepassById(GamePassId) if not Name then warn(tostring(GamePassId).." Not found in GameData") return end
	local Data = ServerData.PlayerData(Player) if not Data then warn(tostring(Player.Name).." has completed a purchase without valid Data") return end

	table.insert(Data.Gamepasses,Name)

	if GamepassFunctions[Name] then
		GamepassFunctions[Name](Player,Data)
	end
end

MS.PromptGamePassPurchaseFinished:Connect(GamePassPurchased)
MS.ProcessReceipt = processReceipt

2 Likes

your meant to put the product ids in here

local productIDs = {}

like this

local productIDs = {1224324234,1241241421,124124124124,124124124124}

and then call them like

productIDs[1]

which will mean the first ID in the table

productIDs[2]

and this will mean the second and so forth

id say duplicate ur script though first and disable one just as a back up incase im wrong because this is a HUGEEE script and u dont want to have to back track (just back up ur script in anyway u want)

1 Like

You defined the dictionaries as strings, so the math random won’t work, if you define it as numbers like

[1] = stuffetc

It should fix your problem.

1 Like

I agree. The productIds should be a table and then you use an array to figure out the position in the table.