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