Everytime I add a new pet into my game, i get the error "Data is not a valid member of player, it randomly goes away usually but its annoying how do i fix that?
script:
local Players = game:GetService("Players")
local Datastore = game:GetService("DataStoreService"):GetDataStore("PlayerData")
local RS = game:GetService("ReplicatedStorage")
function getLevel(totalXP)
local Increment = 0
local RequiredXP = 100
for i = 0, RS.Pets.Settings.MaxPetLevel.Value do
RequiredXP = 100 + (25*i)
if totalXP >= (100*i) + Increment then
if i ~= RS.Pets.Settings.MaxPetLevel.Value then
if totalXP < ((100*i) + Increment) + RequiredXP then
return i
end
else
return i
end
end
Increment = Increment+(i*25)
end
end
Players.PlayerRemoving:Connect(function(plr)
local Pets = plr.Pets
local Data = plr.Data
local PetData = {}
local PlayerData = {}
for _,PetObject in pairs(Pets:GetChildren()) do
PetData[#PetData + 1] = {
Name = PetObject.Name,
TotalXP = PetObject.TotalXP.Value,
Equipped = PetObject.Equipped.Value,
PetID = PetObject.PetID.Value,
Multiplier1 = PetObject.Multiplier1.Value,
Multiplier2 = PetObject.Multiplier2.Value,
Type = PetObject.Type.Value
}
end
for _,DataValue in pairs(Data:GetChildren()) do
PlayerData[#PlayerData + 1] = {
Name = DataValue.Name,
ClassName = DataValue.ClassName,
Value = DataValue.Value
}
end
Datastore:SetAsync(plr.UserId, {["PetData"] = PetData, ["PlayerData"] = PlayerData})
end)
Players.PlayerAdded:Connect(function(plr)
local Pets = Instance.new("Folder")
local Data = Instance.new("Folder")
local SavedData = Datastore:GetAsync(plr.UserId)
Pets.Name = "Pets"
Data.Name = "Data"
if SavedData ~= nil then
local PetData = SavedData.PetData
local PlayerData = SavedData.PlayerData
for i,v in pairs(PetData) do
local PetObject = RS.Pets.PetFolderTemplate:Clone()
local Settings = RS.Pets.Models:FindFirstChild(v.Name).Settings
local TypeNumber = RS.Pets.CraftingTiers:FindFirstChild(v.Type).Value
local Level = getLevel(v.TotalXP)
PetObject.Name = v.Name
PetObject.Equipped.Value = v.Equipped
PetObject.TotalXP.Value = v.TotalXP
PetObject.Multiplier1.Value = Settings.Multiplier1.Value * (RS.Pets.Settings.CraftMultiplier.Value ^ TypeNumber) + (Settings.LevelIncrement.Value * Level)
PetObject.Multiplier2.Value = Settings.Multiplier2.Value * (RS.Pets.Settings.CraftMultiplier.Value ^ TypeNumber) + (Settings.LevelIncrement.Value * Level)
PetObject.PetID.Value = v.PetID
PetObject.Type.Value = v.Type
PetObject.Parent = Pets
end
for i,v in pairs(script.Data:GetChildren()) do
local DataValue = v:Clone()
local DataTable = nil
DataValue.Parent = Data
for i,v in pairs(PlayerData) do
if v.Name == DataValue.Name then
DataTable = v
end
end
if DataTable ~= nil then
if DataValue.Name == "MaxStorage" or v.Name == "MaxEquipped" then
DataValue.Value = RS.Pets.Settings:FindFirstChild("Default".. DataValue.Name).Value
else
DataValue.Value = DataTable.Value
end
else
if DataValue.Name == "MaxStorage" or v.Name == "MaxEquipped" then
DataValue.Value = RS.Pets.Settings:FindFirstChild("Default".. DataValue.Name).Value
end
end
end
else
for i,v in pairs(script.Data:GetChildren()) do
local DataValue = v:Clone()
DataValue.Parent = Data
if DataValue.Name == "MaxStorage" or v.Name == "MaxEquipped" then
DataValue.Value = RS.Pets.Settings:FindFirstChild("Default".. DataValue.Name).Value
end
end
end
game.Players.PlayerRemoving:Connect(function(player)
Datastore:SetAsync(player.UserId, player:FindFirstChild("Value").Value)
end)
Pets.Parent = plr
Data.Parent = plr
end)
