So I made this datastore script that is working usually 90% of the time. However, there is occasional times where the data doesn’t load/save correctly and your stats are reset. Any way I can solve this?
local players = game:GetService("Players")
local dataStoreService = game:GetService("DataStoreService")
local runService = game:GetService("RunService")
local storage = game:GetService("ReplicatedStorage")
local DataStore = dataStoreService:GetDataStore("RankedModeSettings")
local settingsData = {
FOV = 70;
ELO = 0;
};
local playersavetable = {};
local function loadSettings(player)
local Stats = Instance.new("Folder")
Stats.Name = "Stats"
Stats.Parent = player
for statname, statvalue in pairs(settingsData) do
if type(statvalue) == 'number' then
local intvalue = Instance.new("IntValue")
intvalue.Name = statname
intvalue.Value = statvalue
intvalue.Parent = Stats
elseif type(statvalue) == 'boolean' then
local boolvalue = Instance.new("BoolValue")
boolvalue.Name = statname
boolvalue.Value = statvalue
boolvalue.Parent = Stats
elseif type(statvalue) == 'string' then
local stringvalue = Instance.new("StringValue")
stringvalue.Name = statname
stringvalue.Value = statvalue
stringvalue.Parent = Stats
end
end
end
local function loadData(Player)
local Data
local s, e = pcall(function()
Data = DataStore:GetAsync('UserId: ' .. Player.UserId)
end)
if s then
print('Getting ' ..Player.Name.."'s data was successful")
else
warn('Something went wrong when loading data' ..Player.Name.."'s data")
end
if Data then
for statname, statvalue in pairs(Data) do
Player.Stats[statname].Value = statvalue
end
print("Data has been loaded.")
else
print(Player.Name..' has no data! Generating new data.')
end
end
local function saveData(Player)
local Data = {}
for _, stat in pairs(Player.Stats:GetChildren()) do
Data[stat.Name] = stat.Value
end
local s, e = pcall(function()
DataStore:SetAsync('UserId: ' .. Player.UserId, Data)
end)
if s then
print(Player.Name.."'s data has been successfuly saved!")
else
warn("Something went wrong while saving " ..Player.Name.." 's data")
end
end
players.PlayerAdded:Connect(function(Player)
playersavetable[Player] = tick()
loadSettings(Player)
loadData(Player)
end)
players.PlayerRemoving:Connect(function(Player)
saveData(Player)
end)