`wait(1)
local players = game:GetService('Players')
local dataStoreServ = game:GetService('DataStoreService')
local dataStore = dataStoreServ:GetDataStore('InstanceSave')
local rep = game:GetService('ReplicatedStorage')
local keyPrefix = "Player: "
-- Saves
local function save(player: Player)
local Skins = rep.Players:FindFirstChild(player.Name)
local skinStore = Skins:FindFirstChild(player.Name)
if not skinStore then return end
local key = keyPrefix .. tostring(player.UserId)
local data = {}
for i, obj: Instance in ipairs(rep.Players:WaitForChild(player.Name):GetChildren()) do
table.insert(data, {
obj.Name, --1
obj.Head.Material.Value,
})
end
end--Saves End
-- Loads
local function load(player: Player)
local key = keyPrefix .. tostring(player.UserId)
local success, err
local data
repeat
success, err = pcall(function()
data = dataStore:GetAsync(key)
end)
until success or not players:FindFirstChild(player.Name)
if success then
for i, obj in ipairs(data) do
local skinName = obj[1]
local skinStore = rep.Characters:FindFirstChild(skinName)
local skin = skinStore:Clone()
skin.Head.Material.Value = obj[2]
skin.Parent = rep.Players:WaitForChild(player.Name)
end
else
warn("Failed to load skins" .. tostring(err))
end
end-- Loads End
-- Signals
players.PlayerAdded:Connect(load)
players.PlayerRemoving:Connect(save)
game:BindToClose(function()
for i, plr: Player in ipairs(players:GetPlayers()) do
save(plr)
end
end)`