I have recently switched datastore scripts within a game, changing the first script below to the second.
First:
game.Players.PlayerAdded:Connect(function(player)
local playerData = leaderstatsData:GetAsync(player.UserId) --A
local playerData2 = leaderstatsData2:GetAsync(player.UserId) --B
local playerData3 = leaderstatsData3:GetAsync(player.UserId) --C
if not playerData then --A
playerData = {
Credits = 300
}
leaderstatsData:SetAsync(player.UserId, playerData)
end
if not playerData2 then --B
playerData2 = {
Playtime = 0
}
leaderstatsData2:SetAsync(player.UserId, playerData2)
end
if not playerData3 then --C
playerData3 = {
["Prizes Won"] = 0
}
leaderstatsData3:SetAsync(player.UserId, playerData3)
end
player.leaderstats.Credits.Value = playerData.Credits --A
player.leaderstats.Playtime.Value = playerData2.Playtime --B
player.leaderstats["Prizes Won"].Value = playerData3["Prizes Won"] --C
end)
game.Players.PlayerRemoving:Connect(function(player)
local playerData = { --A
Credits = player.leaderstats.Credits.Value
}
leaderstatsData:SetAsync(player.UserId, playerData)
local playerData2 = { --B
Playtime = player.leaderstats.Playtime.Value
}
leaderstatsData2:SetAsync(player.UserId, playerData2)
local playerData3 = { --C
["Prizes Won"] = player.leaderstats["Prizes Won"].Value
}
leaderstatsData3:SetAsync(player.UserId, playerData3)
end)
Second:
local DataStoreService = game:GetService("DataStoreService")
local leaderstatsData = DataStoreService:GetDataStore("LeaderstatsData")
local defaultData = {
Credits = 300,
Playtime = 0,
PrizesWon = 0
}
game.Players.PlayerAdded:Connect(function(player)
local success, playerData = pcall(function()
return leaderstatsData:GetAsync("SaveKey_" .. player.UserId)
end)
if not success or not playerData then
playerData = defaultData
end
player:WaitForChild("leaderstats").Credits.Value = playerData.Credits
player.leaderstats.Playtime.Value = playerData.Playtime
player.leaderstats["Prizes Won"].Value = playerData.PrizesWon
end)
game.Players.PlayerRemoving:Connect(function(player)
local playerData = {
Credits = player.leaderstats.Credits.Value,
Playtime = player.leaderstats.Playtime.Value,
PrizesWon = player.leaderstats["Prizes Won"].Value
}
local success, errorMessage = pcall(function()
leaderstatsData:SetAsync("SaveKey_" .. player.UserId, playerData)
end)
if not success then
warn("Failed to save data for player", player.UserId, errorMessage)
end
end)
task.spawn(function()
while true do
task.wait(60)
for _, player in pairs(game.Players:GetPlayers()) do
local playerData = {
Credits = player.leaderstats.Credits.Value,
Playtime = player.leaderstats.Playtime.Value,
PrizesWon = player.leaderstats["Prizes Won"].Value
}
pcall(function()
leaderstatsData:SetAsync("SaveKey_" .. player.UserId, playerData)
end)
end
end
end)
Some players may have data in the original datastore which needs to be transferred over to the new datastore. How would I go about doing this?
Thank You