local DSService = game:GetService('DataStoreService'):GetDataStore('WOOPPOLICE1')
local HttpService = game:GetService('HttpService')
local defaultData = {
PlayerStats = {
Name = "None",
Title = "None",
Rank = "None",
Race = "None",
Birth = "None",
Shirt = "None",
Pants = "None",
Class = "None",
Lives = 5,
Days = 0,
Money = 0,
Karma = 0,
Gender = "None",
LastRewardTick = "",
},
Skills = {
Skill1 = {
SkillEXP = 0,
SkillLevel = 1,
SkillRank = "Novice",
},
},
Equipment = {
Armor = "None",
MainHand = "None",
OffHand = "None",
Epautlet = "None",
},
Inventory = {
Tools = {},
Materials = {},
}
}
local function buildDataEntryFromFolder(folder)
local dataEntry = {}
for _, valueObject in next, folder:GetChildren() do
if valueObject:IsA("ValueBase") then
dataEntry[valueObject.Name] = {valueType = valueObject.ClassName, value = valueObject.Value}
end
end
return dataEntry
end
function unloadData(player, data)
local newDataFolder = Instance.new("Folder", player)
newDataFolder.Name = "PlayerData"
local function recursive(folder, children)
for x, y in pairs (children) do
if typeof(y) == 'table' then
local newFolder = Instance.new("Folder", folder)
newFolder.Name = x
recursive(newFolder, y)
elseif typeof(y) == 'number' then
local value = Instance.new("NumberValue", folder)
value.Name = x
value.Value = y
elseif typeof(y) == 'string' then
local value = Instance.new("StringValue", folder)
value.Name = x
value.Value = y
elseif typeof(y) == 'boolean' then
local value = Instance.new("BoolValue", folder)
value.Name = x
value.Value = y
else
local value = Instance.new("StringValue", folder)
value.Name = x
value.Value = y
end
end
end
recursive(newDataFolder, data)
end
local function savePlayerData(player)
local dataEntry = buildDataEntryFromFolder(player.PlayerData)
DSService:SetAsync(player.UserId, dataEntry)
end
local function loadPlayerData(player)
local dataEntry = DSService:GetAsync(player.UserId)
-- In case there's no data found for the player, construct the data folder from a blank template
if not dataEntry then
dataEntry = defaultData
end
unloadData(player, dataEntry)
end
game.Players.PlayerAdded:Connect(function(player)
loadPlayerData(player)
end)
game.Players.PlayerRemoving:Connect(function(player)
savePlayerData(player)
end)
Fresh data reset, it makes my folder. I change a value to see if it saves or not, I rejoin, and it makes the PlayerData folder, but nothing in it. Been working with this for 6'ish hours with so many different variations and at this point i'm just lost. Any help is VERY much appreciated.

1 comment
To clear things up you are saying it creates an accurate player data folder when it is fresh data and it only creates an empty folder after rejoining?