-- Variables
local dss = game:GetService("DataStoreService")
local PDs = dss:GetDataStore("PetData")
local serverStorage = game:GetService("ServerStorage")
local cameraFolder = serverStorage:FindFirstChild("Cameras")
-- Equips
local function equipPet(player,pet)
local char = player.Character
if pet ~= nil and char ~= nil then
if char:FindFirstChild(player.Name.."'s pet") then char[player.Name.."'s pet"]:destroy() end
if char.HumanoidRootPart:FindFirstChild("AttachmentCharacter") then
char.HumanoidRootPart:FindFirstChild("AttachmentCharacter"):destroy()
end
pet.Name = player.Name.."'s pet"
pet:SetPrimaryPartCFrame(char.HumanoidRootPart.CFrame)
local modelSize = pet.PrimaryPart.Size
local AttachmentChar = Instance.new("Attachment")
AttachmentChar.Visible = false
AttachmentChar.Name = "Attachment Character"
AttachmentChar.Parent = char.HumanoidRootPart
AttachmentChar.Position = Vector3.new(1,1,0) + modelSize
local attachmentPet = Instance.new("Attachment")
attachmentPet.Visible = false
AttachmentChar.Name = "Attachment Pet"
attachmentPet.Parent = pet.PrimaryPart
local alignedPosition = Instance.new("AlignPosition")
alignedPosition.MaxForce = 25000
alignedPosition.Attachment0 = attachmentPet
alignedPosition.Attachment1 = AttachmentChar
alignedPosition.Responsiveness = 25
alignedPosition.Parent = pet
local alignedOrientation = Instance.new("AlignOrientation")
alignedOrientation.MaxTorque = 25000
alignedOrientation.Attachment0 = attachmentPet
alignedOrientation.Attachment1 = AttachmentChar
alignedOrientation.Responsiveness = 25
alignedOrientation.Parent = pet
pet.Parent = char
end
end
-- leaderstats
game.Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local Cash = Instance.new("IntValue")
Cash.Name = "Cash"
Cash.Value = 0
Cash.Parent = leaderstats
local Gems = Instance.new("IntValue")
Gems.Name = "Gems"
Gems.Value = 0
Gems.Parent = leaderstats
local Followers = Instance.new("NumberValue")
Followers.Name = "Followers"
Followers.Parent = leaderstats
local inventory = Instance.new("Folder")
inventory.Name = "PetInventory"
inventory.Parent = player
local equippedPets = Instance.new("StringValue")
equippedPets.Name = "Equipped"
equippedPets.Parent = player
local dataFolder = Instance.new("Folder")
dataFolder.Name = player.Name
dataFolder.Parent = serverStorage.RemoteData
local playerData = Instance.new("Folder")
playerData.Name = player.Name
playerData.Parent = serverStorage.PlayerData
local cameraInventory = Instance.new("Folder")
cameraInventory.Name = "Inventory"
cameraInventory.Parent = playerData
local Debounce = Instance.new("BoolValue")
Debounce.Name = "Debounce"
Debounce.Parent = dataFolder
player.CharacterAdded:connect(function(Char)
if game.ReplicatedStorage:WaitForChild("Pets"):FindFirstChild(equippedPets.Value) then
equipPet(player,game.ReplicatedStorage:WaitForChild("Pets"):FindFirstChild(equippedPets.Value):Clone())
end
end)
equippedPets.Changed:connect(function()
if equippedPets.Value ~= nil then
if game.ReplicatedStorage:WaitForChild("Pets"):FindFirstChild(equippedPets.Value) then
equipPet(player,game.ReplicatedStorage:WaitForChild("Pets"):FindFirstChild(equippedPets.Value):Clone())
end
end
end)
local data = PDs:GetAsync(player.UserId.."-pet")
if data then
for i, petName in pairs(data) do
if game.ReplicatedStorage:WaitForChild("Pets"):FindFirstChild(petName) then
local Stringval = Instance.new("StringValue")
Stringval.Name = petName
Stringval.Parent = player.PetInventory
end
end
game.ReplicatedStorage.SendData:FireClient(player,data)
else
print("No data detected.")
end
local equippedPetsData = PDs:GetAsync(player.UserId.."-equipped")
local CoinsData = PDs:GetAsync(player.UserId.."-coins")
local GemData = PDs:GetAsync(player.UserId.."-gems")
local followerData = PDs:GetAsync(player.UserId.."-followers")
--local CameraData = PDs:GetAsync(player.UserId.."-cam")
local backpack = player:WaitForChild("Backpack")
local staterGear = player:WaitForChild("StarterGear")
local CameraData = PDs:GetAsync(player.UserId.."-cam")
if CameraData then
print("000")
for _, v in pairs(CameraData) do
print(111)
if cameraFolder:FindFirstChild(v) then
print("211")
local kameraKlone = game.ServerStorage.Cameras[v]:Clone()
kameraKlone.Parent = player.StarterGear
print("Cameras loaded!")
else
warn("No data was sent, Error 554")
end
end
else
warn("Cannot find data. Error 111")
end
if CoinsData then
Cash.Value = CoinsData
end
if followerData then
Followers.Value = followerData
end
if GemData then
Gems.Value = GemData
end
if equippedPetsData then
equippedPets.Value = equippedPetsData
game.ReplicatedStorage.SetEquippedPet:FireClient(player,equippedPetsData)
end
end)
-- Saves
local function saveData(player)
if player:FindFirstChild("PetInventory") then
local Inventory = {}
for i, v in pairs(player.PetInventory:GetChildren()) do
table.insert(Inventory,v.Name)
end
local success, errorMsg = pcall(function()
PDs:SetAsync(player.UserId.."-pet",Inventory)
end)
if success then
print("Data Saved!")
else
print("Error: "..errorMsg)
end
end
if player:FindFirstChild("Equipped") then
if player.Equipped.Value ~= nil then
print("1")
local success, errorMsg = pcall(function()
PDs:SetAsync(player.UserId.."-equipped",player.Equipped.Value)
print("2")
end)
end
end
if player.leaderstats:FindFirstChild("Cash") then
if player.leaderstats.Cash.Value ~= nil then
local success, errorMsg = pcall(function()
PDs:SetAsync(player.UserId.."-coins",player.leaderstats.Cash.Value)
end)
end
end
if player.leaderstats:FindFirstChild("Followers") then
if player.leaderstats.Followers.Value ~= nil then
local success, errorMsg = pcall(function()
PDs:SetAsync(player.UserId.."-followers",player.leaderstats.Followers.Value)
end)
end
end
if player.leaderstats:FindFirstChild("Gems") then
if player.leaderstats.Gems.Value ~= nil then
local success, errorMsg = pcall(function()
PDs:SetAsync(player.UserId.."-gems",player.leaderstats.Gems.Value)
end)
end
end
end
-- tool saves
game.Players.PlayerRemoving:Connect(function(player)
local Cameraz = game.ServerStorage.PlayerData[player.Name].Inventory:GetChildren()
local CameraTable = {}
for _,v in pairs(player.StarterGear:GetChildren())do
if v then
table.insert(Cameraz,v.Name)
print(707)
end
end
wait()
for _,v in pairs(Cameraz)do
if v then
print(v)
table.insert(CameraTable,v.Name)
print(554)
end
end
PDs:SetAsync(player.UserId.."-cam",CameraTable)
print("Cameras saved!")
end)
-- saves incase servers fail
game:BindToClose(function()
for i, player in pairs(game.Players:GetPlayers()) do
saveData(player)
end
end)
-- more equip stuff
game.ReplicatedStorage.EquippedPet.OnServerEvent:connect(function(player,petName)
local pet = game.ReplicatedStorage.Pets:FindFirstChild(petName)
if pet and player.PetInventory:FindFirstChild(petName) then
player.Equipped.Value = petName
end
end)
game.ReplicatedStorage.UnEquippedPet.OnServerEvent:connect(function(player)
player.Equipped.Value = ""
if player.char:FindFirstChild(player.Name.."'s pet") then
player.char[player.Name.."'s pet"]:destroy()
end
if player.char.HumanoidRootPart:FindFirstChild("AttachmentChar") then
player.char.HumanoidRootPart:FindFirstChild("AttachmentChar"):Destroy()
end
end)
