Error: ServerScriptService.EggHandler:139: attempt to index nil with 'Value' This happens every time I try to buy a pet

Edits: Changed local Currency = Data["Currency"] to local Currency = Data["Clicks"] Error After Edit: Argument 1 missing or nil on line 139

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
	Player.leaderstats:FindFirstChild(Currency).Value = 												Player.leaderstats:FindFirstChild(Currency).Value - Cost
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 = {}
Player.leaderstats:FindFirstChild(Currency).Value = 	Player.leaderstats:FindFirstChild(Currency).Value - Cost * 3
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 Player.leaderstats:FindFirstChild(Currency).Value >= Cost 		then
						if totalPets(Player) < Player.Data.MaxStorage.Value then
							local PetChosen = singleEgg(Player, Egg)
							return PetChosen
						else
							return "Error", "Not Enough Inventory Room"
						end
					else
						return "Error", "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
							return "Error", "Not Enough Inventory Room"
						end
					else
						return "Error", "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
									return "Error", "Not Enough Inventory 	Room"
								end
							else
								return "Error", "Insufficient Currency"
							end
						else
							if Player.leaderstats:FindFirstChild(Currency).Value 	>= Cost then
								if totalPets(Player) < 	Player.Data.MaxStorage.Value then
									local PetChosen = singleEgg(Player, Egg)
									return PetChosen
								else
									return "Error", "Not Enough Inventory 	Room"
								end
							else
								return "Error", "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
					return "Error", "Not Enough Inventory Room"
				end
			end
		end
	else
		return "Error", "Too far away"
	end
end
end

game.Players.PlayerAdded:Connect(function(plr)
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

2 comments

0

This error means that "leaderstats" does not contain instance that has name same to Data["Currency"]

0

Now it says Argument 1 missing or nil on line 139