#DataStore not saving

1 messages · Page 1 of 1 (latest)

dusty gulch
#

local Players = game:GetService("Players")
local DataStoreService = game:GetService("DataStoreService")

local statsStore = DataStoreService:GetDataStore("PlayerStatsStore")
local Ownership = require(game:GetService("ReplicatedStorage"):WaitForChild("CharacterOwnership"))

local DEFAULTS = {
playerStats = {
Time = "0h, 0m, 0s"
},
leaderstats = {
Cheddar = 0,
Chance = 0,
},
survivorStats = {
SurvivorWins = 0,
SurvivorLoses = 0,
ObjectiveCompleted = 0,
survivorEquipped = "Template"
},
killerStats = {
KillerWins = 0,
KillerLosses = 0,
TotalKills = 0,
killerEquipped = "Template"
},
currencyStats = {
Cheddar = 0,
NetWorth = 0,
RobuxSpent = 0
}
}

local function deepCopy(tbl)
local copy = {}
for k,v in pairs(tbl) do
if type(v) == "table" then
copy[k] = deepCopy(v)
else
copy[k] = v
end
end
return copy
end

#

local function setupStats(data, player)
for category, defaults in pairs(DEFAULTS) do
local folder = Instance.new("Folder")
folder.Name = category
folder.Parent = player

    data[category] = data[category] or {}

    for statName, default in pairs(defaults) do
        local valueType = type(default) == "number" and "IntValue" or "StringValue"
        local stat = Instance.new(valueType)
        stat.Name = statName
        stat.Value = data[category][statName] ~= nil and data[category][statName] or default
        stat.Parent = folder
    end
end

end

local function gatherStats(player)
local data = {}
for category, defaults in pairs(DEFAULTS) do
local folder = player:FindFirstChild(category)
data[category] = {}
for statName, _ in pairs(defaults) do
local stat = folder and folder:FindFirstChild(statName)
data[category][statName] = stat and stat.Value or defaults[statName]
end
end
return data
end
local function savePlayerData(player)
if not player then return end

local data = gatherStats(player)

local success, err = pcall(function()
    statsStore:UpdateAsync(player.UserId, function(oldData)
        -- Replace old data with new data, or return new data if no old data
        return data
    end)
end)
#

if success then
print("[✅ DataStore Saved]", player.Name)
else
warn("[❌ DataStore Save Failed]", player.Name, err)
end

Ownership.Save(player)

end

Players.PlayerAdded:Connect(function(player)
local success, result = pcall(function()
return statsStore:GetAsync(player.UserId)
end)

local data
if success and typeof(result) == "table" then
    print("[📦 Data Loaded]", player.Name)
    data = result
else
    warn("[ℹ️ Using Defaults or New Data]", player.Name, result)
    data = deepCopy(DEFAULTS)
end

setupStats(data, player)
Ownership.Load(player)

local killerStats = player:WaitForChild("killerStats")
local survivorStats = player:WaitForChild("survivorStats")
killerStats.killerEquipped.Value = Ownership.GetEquipped(player, "Killers")
survivorStats.survivorEquipped.Value = Ownership.GetEquipped(player, "Survivors")

end)
Players.PlayerRemoving:Connect(savePlayerData)

-- Auto-save every 60 seconds
task.spawn(function()
while true do
task.wait(60)
for _, player in ipairs(Players:GetPlayers()) do
savePlayerData(player)
end
end
end)

-- Save all players on server shutdown
game:BindToClose(function()
for _, player in ipairs(Players:GetPlayers()) do
savePlayerData(player)
end
end)

#

--------------------------------------- The top and the bottom area combined is the script

#

This script is server in serverscriptservice

burnt flame
#

add me to the game and ill help u fix it