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
