It keeps getting an error attempt to index nil with 'PetId'

--[ Variables ]--

local Players = game:GetService("Players")
local replicatedStorage = game:GetService("ReplicatedStorage")
local HttpService = game:GetService("HttpService")

local Remotes = replicatedStorage:WaitForChild("Remotes")
local DataChanged = Remotes:WaitForChild("DataChanged")
local DataStore2 = require(game:GetService("ServerScriptService"):WaitForChild("Modules"):WaitForChild("DataStore2"))
local replicatedData = replicatedStorage:WaitForChild("replicatedData")
local PetModule = require(game:GetService("ServerScriptService"):WaitForChild("Modules"):WaitForChild("PetModule"))

local DataNum = replicatedStorage:WaitForChild("DataNum")

DataStore2:Combine("MainData", "Coins", "NPC Kills", "Rebirths")
DataStore2:Combine("Pets", "MaxPetStorage", "MaxPetEquipped")

--[ Player Added ]--

game.Players.PlayerAdded:Connect(function(plr)
	local CoinData = DataStore2("Coins"..DataNum.Value, plr)
	local KillsData = DataStore2("NPC Kills"..DataNum.Value, plr)
	local RebirthsData = DataStore2("Rebirths"..DataNum.Value, plr)
	local CurrentShovelData = DataStore2("CurrentShovel"..DataNum.Value, plr)
	local PetData = DataStore2("Pets"..DataNum.Value, plr)
	local MaxPetStorageData = DataStore2("MaxPetStorage"..DataNum.Value, plr)
	local MaxPetEquippedData = DataStore2("MaxPetEquipped"..DataNum.Value, plr)
	
	local playerCoins = CoinData:Get(0)
	local playerKills = KillsData:Get(0)
	local playerRebirths = RebirthsData:Get(0)
	local playerCurrentShovel = CurrentShovelData:Get("Starter Shovel")
	local playerPets = PetData:Get({})
	local playerMaxPetStorage = MaxPetStorageData:Get(100)
	local playerMaxPetEquippped = MaxPetEquippedData:Get(4)
	
	pcall(function()
		local playerDataFolder = Instance.new("Folder")
		playerDataFolder.Name = plr.UserId
		playerDataFolder.Parent = replicatedData
		
		local leaderstats = Instance.new("Folder")
		leaderstats.Name = "leaderstats"
		leaderstats.Parent = plr
		
		local Coins = Instance.new("IntValue")
		Coins.Name = "Coins"
		Coins.Parent = leaderstats
		Coins.Value = playerCoins
		
		local Kills = Instance.new("IntValue")
		Kills.Name = "NPC Kills"
		Kills.Parent = leaderstats
		Kills.Value = playerKills
		
		local Rebirths = Instance.new("IntValue")
		Rebirths.Name = "Rebirths"
		Rebirths.Parent = leaderstats
		Rebirths.Value = playerRebirths
		
		local CurrentShovel = Instance.new("StringValue")
		CurrentShovel.Name = "CurrentShovel"
		CurrentShovel.Parent = playerDataFolder
		CurrentShovel.Value = playerCurrentShovel
		
		local OwnedPets = Instance.new("Folder")
		OwnedPets.Name = "OwnedPets"
		OwnedPets.Parent = playerDataFolder
		
		local MaxPetStorage = Instance.new("NumberValue")
		MaxPetStorage.Name = "MaxPetStorage"
		MaxPetStorage.Parent = playerDataFolder
		MaxPetStorage.Value = playerMaxPetStorage
		
		local MaxPetEquipped = Instance.new("NumberValue")
		MaxPetEquipped.Name = "MaxPetEquipped"
		MaxPetEquipped.Parent = playerDataFolder
		MaxPetEquipped.Value = playerMaxPetEquippped
		
		for i,v in pairs(playerPets) do -- Already owned pets
			local Pet = Instance.new("Folder")
			Pet.Name = v
			Pet.Parent = OwnedPets
			local PetID = Instance.new("NumberValue")
			PetID.Name = "PetID"
			PetID.Parent = Pet
			PetID.Value = playerPets[v][PetID]
			local Equipped = Instance.new("BoolValue")
			Equipped.Name = "Equipped"
			Equipped.Parent = Pet
			Equipped.Value = playerPets[v][Equipped]
			local Type = Instance.new("StringValue")
			Type.Name = "Type"
			Type.Parent = Pet
			Type.Value = playerPets[v][Type]
		end
		
		CoinData:OnUpdate(function(currentAmount)
			Coins.Value = currentAmount
			
			DataChanged:FireClient(plr, "Coins", currentAmount)
		end)
		
		KillsData:OnUpdate(function(currentAmount)
			Kills.Value = currentAmount
			
			DataChanged:FireClient(plr, "Kills", currentAmount)
		end)
		
		RebirthsData:OnUpdate(function(currentAmount)
			Rebirths.Value = currentAmount
			
			DataChanged:FireClient(plr, "Rebirths", currentAmount)
		end)
		
		CurrentShovelData:OnUpdate(function(currentShovel)
			CurrentShovel.Value = currentShovel
			
			DataChanged:FireClient(plr, "CurrentShovel", currentShovel)
		end)
		
		PetData:OnUpdate(function(currentPetTable) -- When The Pets Update
			OwnedPets:ClearAllChildren()
			for i,v in pairs(currentPetTable) do
				local Pet = Instance.new("Folder")
				Pet.Name = playerPets[v]
				Pet.Parent = OwnedPets
				local PetID = Instance.new("NumberValue")
				PetID.Name = "PetID"
				PetID.Parent = Pet
				PetID.Value = playerPets[v].PetId
				local Equipped = Instance.new("BoolValue")
				Equipped.Name = "Equipped"
				Equipped.Parent = Pet
				Equipped.Value = playerPets[v].Equipped
				local Type = Instance.new("StringValue")
				Type.Name = "Type"
				Type.Parent = Pet
				Type.Value = playerPets[v].Type
			end
		end)
		
		MaxPetStorageData:OnUpdate(function(currentValue)
			MaxPetStorage.Value = currentValue
			
			DataChanged:FireClient(plr, "MaxPetStorage", currentValue)
		end)
		
		MaxPetEquippedData:OnUpdate(function(currentValue)
			MaxPetEquipped.Value = currentValue
			
			DataChanged:FireClient(plr, "MaxPetEquipped", currentValue)
		end)
	end)
end)

--[ Player Leaving ]--

game.Players.PlayerRemoving:Connect(function(plr)
	
	local playerData = replicatedData:WaitForChild(plr.UserId)
	local CoinData = DataStore2("Coins"..DataNum.Value, plr)
	local KillsData = DataStore2("NPC Kills"..DataNum.Value, plr)
	local RebirthsData = DataStore2("Rebirths"..DataNum.Value, plr)
	local CurrentShovelData = DataStore2("CurrentShovel"..DataNum.Value, plr)
	local PetData = DataStore2("Pets"..DataNum.Value, plr)
	local MaxPetStorageData = DataStore2("MaxPetStorage"..DataNum.Value, plr)
	local MaxPetEquippedData = DataStore2("MaxPetEquipped"..DataNum.Value, plr)
	
	pcall(function()
		CoinData:Save()
		KillsData:Save()
		RebirthsData:Save()
		CurrentShovelData:Save()
		PetData:Save()
		MaxPetStorageData:Save()
		MaxPetEquippedData:Save()
	end)
	
	if (playerData) then
		pcall(function()
			playerData:Destroy()
		end)
	end
end)

--[ Soft Shutdown ]--

local TeleportService = game:GetService("TeleportService")

if (game.VIPServerId ~= "" and game.VIPServerOwnerId == 0) then
	-- this is a reserved server without a VIP server owner
	local m = Instance.new("Message")
	m.Text = "This is a temporary lobby. Teleporting back in a moment."
	m.Parent = workspace
	
	local waitTime = 5
	
	Players.PlayerAdded:connect(function(player)
		wait(waitTime)
		waitTime = waitTime / 2
		TeleportService:Teleport(game.PlaceId, player)
	end)
	
	for _,player in pairs(Players:GetPlayers()) do
		TeleportService:Teleport(game.PlaceId, player)
		wait(waitTime)
		waitTime = waitTime / 2
	end
else
	game:BindToClose(function()
		if (#Players:GetPlayers() == 0) then
			return
		end
		
		if (game:GetService("RunService"):IsStudio()) then
			return
		end
		
		local m = Instance.new("Message")
		m.Text = "Rebooting servers for update. Please wait"
		m.Parent = workspace
		wait(2)
		local reservedServerCode = TeleportService:ReserveServer(game.PlaceId)
		
		for _,player in pairs(Players:GetPlayers()) do
			TeleportService:TeleportToPrivateServer(game.PlaceId, reservedServerCode, { player })
		end
		Players.PlayerAdded:connect(function(player)
			TeleportService:TeleportToPrivateServer(game.PlaceId, reservedServerCode, { player })
		end)
		while (#Players:GetPlayers() > 0) do
			wait(1)
		end	
	end)
end