# EggHandler problem and buying product problem

My eggHandler script for some reason blocks the purchase of other products, purchase of levels, trophies etc. And i checked this is script which affects problem, more precisely part related to the purchase of eggs with robux. Does anyone have any solution?

local TS = game:GetService(“TweenService”)
local MS = game:GetService(“MarketplaceService”)
local RS = game.ReplicatedStorage
local Library = RS.Pets
local Eggs = require(Library:WaitForChild(“Eggs”))
local RemoteEvents = RS.RemoteEvents
local EggModels = workspace.Eggs

local PlayerDebounce = {}

function ChoosePet(Egg)
local Data = Eggs[Egg]
local Pets = Data[“Pets”]
local TotalWeight = 0
for i,v in pairs(Pets) do
TotalWeight = TotalWeight + v.Rarity
end
local Chance = math.random(1,TotalWeight)
local Counter = 0
for i,v in pairs(Pets) do
Counter = Counter+v.Rarity
if Counter >= Chance then
return v.Name
end
end
end

function totalPets(Player)
local Pets = 0
for i,v in pairs(Player.Pets:GetChildren()) do
Pets = Pets + 1
end
return Pets
end

function RandomID(Player)
local Rand = math.random(2,1000000)
for i,v in pairs(Player.Pets:GetChildren()) do
if v.PetID.Value == Rand then
return RandomID()
end
end
return Rand
end

function singleEgg(Player, Egg)
local Data = Eggs[Egg]
local Cost = Data[“Cost”]
local Currency = Data[“Currency”]
local Pets = Data[“Pets”]
local PetChosen = ChoosePet(Egg)
local Settings = RS.Pets.Models:FindFirstChild(PetChosen).Settings
if Currency ~= “R\$” then
end
for i,v in pairs(PlayerDebounce) do
if v[1] == Player.Name then
v[2] = true
end
end
spawn(function()
wait(3.2)
for i,v in pairs(PlayerDebounce) do
if v[1] == Player.Name then
v[2] = false
end
end
end)
for i,v in pairs(Pets) do
if v.Name == PetChosen then
local Clone = RS.Pets.PetFolderTemplate:Clone()
Clone.PetID.Value = RandomID(Player)
Clone.Multiplier1.Value = Settings.Multiplier1.Value
Clone.Multiplier2.Value = Settings.Multiplier2.Value
Clone.Type.Value = v.Type
Clone.Parent = Player.Pets
Clone.Name = PetChosen
end
end
return PetChosen
end

function tripleEgg(Player, Egg)
local Data = Eggs[Egg]
local Cost = Data[“Cost”]
local Currency = Data[“Currency”]
local Pets = Data[“Pets”]
local PetsChosen = {}
for i,v in pairs(PlayerDebounce) do
if v[1] == Player.Name then
v[2] = true
end
end
spawn(function()
wait(3.2)
for i,v in pairs(PlayerDebounce) do
if v[1] == Player.Name then
v[2] = false
end
end
end)
for i = 1,3 do
local PetChosen = ChoosePet(Egg)
local Settings = RS.Pets.Models:FindFirstChild(PetChosen).Settings
for i,v in pairs(Pets) do
if v.Name == PetChosen then
local Clone = RS.Pets.PetFolderTemplate:Clone()
Clone.PetID.Value = RandomID(Player)
Clone.Multiplier1.Value = Settings.Multiplier1.Value
Clone.Multiplier2.Value = Settings.Multiplier2.Value
Clone.Type.Value = v.Type
Clone.Parent = Player.Pets
Clone.Name = PetChosen
PetsChosen[#PetsChosen + 1] = PetChosen
end
end
end
return PetsChosen
end

function UnboxEgg(Player, Egg, Type)
if Eggs[Egg] ~= nil then
local Data = Eggs[Egg]
local Cost = Data[“Cost”]
local Currency = Data[“Currency”]
local Pets = Data[“Pets”]
local Model = EggModels:FindFirstChild(Egg)
local Debounce = false
for i,v in pairs(PlayerDebounce) do
if v[1] == Player.Name then
Debounce = v[2]
end
end
if (Player.Character.HumanoidRootPart.Position - Model.UIanchor.Position).Magnitude <= 10 then
if not Debounce then
if Currency ~= “R\$” then
if Type == “Single” then
if totalPets(Player) < Player.Data.MaxStorage.Value then
local PetChosen = singleEgg(Player, Egg)
return PetChosen
else
CreateErrorMessageGui(Player, “Not Enough Inventory Room”)
end
else
CreateErrorMessageGui(Player, “Insufficient Currency”)
end
elseif Type == “Triple” then
if Player.leaderstats:FindFirstChild(Currency).Value >= Cost * 3 then
if totalPets(Player) < Player.Data.MaxStorage.Value - 2 then
if Player.Data.TripleEggOwned.Value == true then
local PetsChosen = tripleEgg(Player, Egg)
return PetsChosen
else
return “Error”, “Player Doesn’t Own Gamepass”
end
else
CreateErrorMessageGui(Player, “Not Enough Inventory Room”)
end
else
CreateErrorMessageGui(Player, “Insufficient Currency”)
end
elseif Type == “Auto” then
if Player.Data.AutoEggOwned.Value == true then
if Player.Data.TripleEggOwned.Value == true then
if Player.leaderstats:FindFirstChild(Currency).Value >= Cost * 3 then
if totalPets(Player) < Player.Data.MaxStorage.Value - 2 then
if Player.Data.TripleEggOwned.Value == true then
local PetsChosen = tripleEgg(Player, Egg)
return PetsChosen
else
return “Error”, “Player Doesn’t Own Gamepass”
end
else
CreateErrorMessageGui(Player, “Not Enough Inventory Room”)
end
else
CreateErrorMessageGui(Player, “Insufficient Currency”)
end
else
if totalPets(Player) < Player.Data.MaxStorage.Value then
local PetChosen = singleEgg(Player, Egg)
return PetChosen
else
CreateErrorMessageGui(Player, “Not Enough Inventory Room”)
end
else
CreateErrorMessageGui(Player, “Insufficient Currency”)
end
end
else
return “Error”, “Player Doesn’t Own Gamepass”
end
end
else
if totalPets(Player) < Player.Data.MaxStorage.Value then
return “Error”, “Robux Purchase”
else
CreateErrorMessageGui(Player, “Not Enough Inventory Room”)
return “Error”, “Not Enough Inventory Room”
end
end
end
else
return “Error”, “Too far away”
end
end
end

function CreateErrorMessageGui(Player, ErrorMessage)

``````local existingGui = Player.PlayerGui:FindFirstChild("ErrorGui")
if existingGui then
existingGui:Destroy()
end

local gui = Instance.new("ScreenGui")
gui.Name = "ErrorGui"
gui.Parent = Player.PlayerGui

local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(0, 200, 0, 100)
textLabel.Position = UDim2.new(0.5, -100, 0.5, -50)
textLabel.BackgroundColor3 = Color3.new(1, 1, 1)
textLabel.BackgroundTransparency = 1
textLabel.BorderSizePixel = 0
textLabel.Text = ErrorMessage
textLabel.Font = Enum.Font.DenkOne
textLabel.TextSize = 24
textLabel.TextColor3 = Color3.new(1, 0, 0)
textLabel.Parent = gui

wait(1)
gui:Destroy()
``````

end

PlayerDebounce[#PlayerDebounce + 1] = {plr.Name, false}
end)

game.Players.PlayerRemoving:Connect(function(plr)
for i,v in pairs(PlayerDebounce) do
if v[1] == plr.Name then
v = nil
end
end
end)

for i,v in pairs(Eggs) do
local ProductID = v[“ProductID”]
if ProductID ~= nil then
MS.ProcessReceipt = function(ReceiptInfo)
local Player = game:GetService(“Players”):GetPlayerByUserId(ReceiptInfo.PlayerId)
if ReceiptInfo.ProductId == ProductID then
spawn(function()
local Result = singleEgg(Player, i)
RS.RemoteEvents.EggOpened:InvokeClient(Player, Eggs[i], Result)
end)
return Enum.ProductPurchaseDecision.PurchaseGranted
end
end
end
end

RS.RemoteEvents.EggOpened.OnServerInvoke = UnboxEgg

Can you format your code properly? It’s unreadable, with all the missing indentations and the need to scroll across the page.