Okay I have hesitated to pose my question because I think is a big script to put it on scripting helpers. But I do it anyway.

The probleme is, when a player reset he don't have the good stats. If Player1 have 100 exp and 10 money and the Player2 don't have money and have 80 exp. If the Player2 reset he have now 100 exp and 10 money as Player1.. But why? I don't understant why.. So if anybody can help it's would be nice..

local DataManager = {}

--< Services
local RunService = game:GetService('RunService')
local PlayerService = game:GetService('Players')
local RStorageService = game:GetService('ReplicatedStorage')
local DataStoreService = game:GetService('DataStoreService')

--< Variables
-- Relative game variables
local PlayerData = DataStoreService:GetDataStore('PlayerData')
local SessionData = {}

local StartData = {Level = 1, Money = 0, Experience1 = 0, Experience2 = 400, Language = 1}

-- Links game variables
local Events = RStorageService.Events
local UpdateData = Events.UpdateData

-- Value game variables
local AutoSave_Interval = 60
local DataStora_Retries = 3

--< Usable module functions
local function DataStoreRetry(DataStoreFunction)
	local tries = 0
	local success = true
	local data = nil
	repeat
		tries = tries + 1
		success = pcall(function() data = DataStoreFunction() end)
		if not success then wait(1) end
	until tries == DataStora_Retries or success
	if not success then
		error('Could not access DataStore! Warn players that their data might not get saved!')
	end
	return success, data
end

local function SavePlayerData(Player)
	if SessionData[Player.UserId] then
		return DataStoreRetry(function()
			return PlayerData:SetAsync(Player.UserId, SessionData[Player.UserId])
		end)
	end
end

local function GetPlayerData(Player)
	return DataStoreRetry(function()
		return PlayerData:GetAsync(Player.UserId)
	end)
end

local function SetupPlayerData(Player)
	if not RunService:IsStudio() then
		local Success, Data = GetPlayerData(Player)
		if not Success then
			Player:Kick('Retry later (stats not found)')
		else
			if not Data then
				SessionData[Player.UserId] = StartData
				SavePlayerData(Player)
			else
				SessionData[Player.UserId] = Data
			end
		end
	else
		SessionData[Player.UserId] = StartData
	end
end

local function CheckExperience(Player)
	if SessionData[Player.UserId]['Experience1'] >= SessionData[Player.UserId]['Experience2'] then
		SessionData[Player.UserId]['Experience1'] = math.floor(SessionData[Player.UserId]['Experience1'] - SessionData[Player.UserId]['Experience2'])
		SessionData[Player.UserId]['Experience2'] = math.floor(SessionData[Player.UserId]['Experience2'] / 1.5 + 100 * (SessionData[Player.UserId]['Experience2'] / 20 * 0.02) + 204)
		SessionData[Player.UserId]['Level'] = SessionData[Player.UserId]['Level'] + 1
		SessionData[Player.UserId]['Money'] = SessionData[Player.UserId]['Money'] + (SessionData[Player.UserId]['Level'] * 10)
	end
end

--< Usable game functions
function DataManager:PlayerDataUpdate(Player)
	UpdateData:FireClient(Player, SessionData[Player.UserId])
end

function DataManager:ChangeStat(Player, isLanguage, isStat, Value, Stat, Any)
	if isLanguage then
		SessionData[Player.UserId]['Language'] = Value
	elseif isStat then
		if Any then
			SessionData[Player.UserId][Stat] = SessionData[Player.UserId][Stat] + Value
		else
			SessionData[Player.UserId][Stat] = SessionData[Player.UserId][Stat] - Value
		end
	end
	CheckExperience(Player)
	DataManager:PlayerDataUpdate(Player)
end

function DataManager:GetStat(Player, Stat)
	return SessionData[Player.UserId][Stat]
end

--< Events
PlayerService.PlayerAdded:Connect(SetupPlayerData)

PlayerService.PlayerRemoving:Connect(function(Player)
	if not RunService:IsStudio() then
		SavePlayerData(Player)
	end
	SessionData[Player.UserId] = nil -- Stop keep track of data
end)

spawn(function()
	while wait(AutoSave_Interval) do
		for player, data in pairs(SessionData) do
			SavePlayerData(player)
		end
	end
end)

return DataManager

Thank for help..

2 comments

0

Where are you testing this from?

0

hello, my name is Quentin I think you need to play in the preset values of your asset number 2 which auto generates a kind of script vector 7