Why is my data saved every once in a while?

  1. I need help with saving data

  2. Data in the form of dictionaries is saved only once

  3. I looked for solutions in the developer center, tried JSONncode and JSONdecode (useless)

local DSS = game:GetService('DataStoreService')
local PlayerData = DSS:GetDataStore('PlayerData')
local MoneyData = DSS:GetDataStore('Coins')

local duration = 0.7
local AutoSavingDuration = 5
local function CheckMoneyData(plr:Player)
	local currency = Instance.new('NumberValue')
	currency.Name = 'bloxxercoins'
	currency.Value = 0
	currency.Parent = plr
	
	local id = plr.UserId
	local coins = ''
	local suc, msg = pcall(function()
		coins = MoneyData:GetAsync(id)
	end)
	if suc == false then
		repeat
			task.wait(1)
			coins = MoneyData:GetAsync(id)
		until type(coins) == string or coins == nil
	end
	if coins == nil then
		MoneyData:SetAsync(id, 0)
	else
		currency.Value = coins
	end
	print(coins)
end

local function SaveMoneyData(plr:Player)
	local id = plr.UserId
	local coins = plr.bloxxercoins.Value
	
	MoneyData:SetAsync(id, coins)
end
game.Players.PlayerAdded:Connect(function(plr)
	CheckMoneyData(plr)
	local inventory = script.Inventory:Clone()
	inventory.Parent = plr
	

	
	local inventoryIn = require(inventory)
	local iventoryNew = require(plr.Inventory)
	local id = plr.UserId	
	local DataDict = ''
	local function GetData()
		print(PlayerData:GetAsync(id))
		return PlayerData:GetAsync(id)
	end
	local suc, msg = pcall(function()
		DataDict = GetData()
	end)
	if suc == false then
		while true do
			local suc2, msg2 = pcall(function()
				task.wait(duration)
				DataDict = GetData()				
			end)
			if suc2 == true then
				break
			end 
		end
	end
	local function MembersCount()
			
		local count = 0
		for _, i in pairs(DataDict) do
			count += #i
			
		end
		print(DataDict)
		return count
	end
	print(MembersCount())
	
	if MembersCount() == 0 then
		PlayerData:SetAsync(id, inventoryIn)
		print(inventoryIn)
		print('sus')
	else
		iventoryNew = DataDict
	end
	
end)

game.Players.PlayerRemoving:Connect(function(plr)
	local id = plr.UserId
	print(require(plr.Inventory))
	PlayerData:SetAsync(id, require(plr.Inventory))
	local succ, msg = pcall(function()
		SaveMoneyData(plr)
	end)
	print(succ)
end)

Instead of storing it in a module script for every player why not just create 1 module script and make the player object the key for it?

1 Like

Why you require the module again you can just acces it trough calling the module variable dot path

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.