Here is my code:
game.Players.PlayerRemoving:Connect(function(plr)
if plr.CanSave.Value then
local specialKey = "User_"..plr.UserId
local plrName = plr.Name
local plrInfo = game.ServerStorage:FindFirstChild(plrName):WaitForChild("PlayerInfo")
if plrInfo.OwnsTycoon.Value then
local tycoonName = plrInfo.OwnedTycoon.Value
local tycoon = game.Workspace.Tycoons:FindFirstChild(tycoonName)
local moneyToSave = plrInfo.Money.Value
local buildLevelToSave = plrInfo.BuildLevel.Value
local purchasedItemsTable = getTableForDataStore(tycoon, plrInfo)
local mainTableToSave = {moneyToSave, buildLevelToSave, purchasedItemsTable}
local success, message = pcall(function()
local encodedData = hService:JSONEncode(mainTableToSave)
mainDataStore:SetAsync(specialKey, encodedData) -- here is what I tried
end)
if success then
print(plrName.."'s data saved successfully")
else
print(plrName.."'s data failed to save successfully")
wait(15)
local maxAttemptsAllowed = 3
local saveAttempts = 0
repeat
saveAttempts = saveAttempts + 1
local success, message = pcall(function()
local encodedData = hService:JSONEncode(mainTableToSave)
mainDataStore:SetAsync(specialKey, encodedData)
end)
if success then
print(plrName.."'s data saved successfully on try "..saveAttempts)
else
print(plrName.."'s data failed to save successfully on try "..saveAttempts)
end
until success or saveAttempts == maxAttemptsAllowed
end
end
end
end)
