Hello, its been a while since I entered this site, but that's not important, since I'm stuck in a problem related to Data Stores.
So recently, I've kind of discovered by myself on how to save stats to Data Stores even with FilteringEnabled, it worked manually, but I want it so save/load automatically.
It worked with loading data, but for saving? Nah, won't work.
Heres the client sided script. (LocalScript, located on StarterGui)
local player = game.Players.LocalPlayer
local loadingevent = game.ReplicatedStorage:WaitForChild("LoadingEvent")
local savingalertevent = game.ReplicatedStorage:WaitForChild("SavingAlertEvent")
local savingevent = game.ReplicatedStorage:WaitForChild("SavingEvent")
loadingevent.OnClientEvent:connect(function(callname, datavalue, dataname)
print(callname, datavalue, dataname)
if callname == "DataLoading" then
local lead = player:FindFirstChild("leaderstats")
if lead then
local valuetype = lead:FindFirstChild(dataname)
if valuetype then
valuetype.Value = datavalue
local ddd = player:FindFirstChild("DataLoaded")
if ddd then
ddd.Value = true
print("yes yes true")
end
end
end
end
end)
--[
game.Players.PlayerRemoving:connect(function(p)
local thing = p:FindFirstChild("DataLoaded")
if thing and thing.Value == true then
local leader = p:FindFirstChild("leaderstats")
if leader then
local stats = leader:GetChildren()
for i = 1, #stats do
savingevent:FireServer("SaveGame", player.Name, stats[i].Name, stats[i].Value)
print("saved")
end
end
end
end)
--]]
-- Scrapped off junk
--[[
savingalertevent.OnClientEvent:connect(function(callname, statname)
print(callname, statname)
if callname == "DataSaving" then
local lead = player:FindFirstChild("leaderstats")
if lead then
local valuefind = lead:FindFirstChild(statname)
if valuefind then
savingevent:FireServer("SaveGame", player.Name, valuefind.Name, valuefind.Value)
end
end
end
end)
--]]
Now, here's the code from the server sided script. (Script, located on ServerScriptService)
function datastoreloadingfunc(player, leader)
local stats = leader:GetChildren()
for i = 1, #stats do
local statvalue = datastore:GetAsync(stats[i].Name)
loadingevent:FireClient(player, "DataLoading", statvalue, stats[i].Name)
end
end
game.Players.PlayerAdded:connect(function(p)
local leader = Instance.new("Folder", p)
leader.Name = "leaderstats"
local stat = Instance.new("NumberValue", leader)
stat.Name = "Points"
local dataloaded = Instance.new("BoolValue", p)
dataloaded.Name = "DataLoaded"
datastoreloadingfunc(p, leader)
end)
savingevents.OnServerEvent:connect(function(player, callname, playername, statname, statvalue)
print(player, callname, playername, statname, statvalue)
if callname == "SaveGame" then
print("Saving... "..statvalue.." "..statvalue)
datastore:SetAsync(statname, statvalue)
print("Saved "..statvalue.." "..statvalue)
end
end)
Answers would be appreciated, thanks in advance.

2 comments
You should put your localscript in starterPlayer. I think ReplicatedFirst objects get destroyed once the player is loaded, it's ment for custom loading screens.
Placing it on StarterPlayer just disables the localscript from activating, but placing it on StarterPack/Gui solves the problem.