Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

[SOLVED] Probleme with my DataManager. All players have the same stats?

I'm actually working on a project, but right on the first system, I had a frustrating problem and according to the logic, I'm pretty sure it's impossible. Every players have the same stastics. So, I guessed it was maybe the script sending the table to clients that was making failure. But, by adding a repetition, which was always returning the statistics of all the players, I noticed that my ModuleScript was changing all the statistics of all the players at the same time. Here's a GIFF of this repetition. So, the problem come from my ModuleScript "DataManager". I don't understand how this error can even be possible. I put the script down below. i'm not really expecting answers but I hope someone will know what is the problem and will tell me because it's really frustrating to work on a system that doesn't even work and with a "invisible" error...

local DataManager = {}

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

--< Relative game variables
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

--< Usable module functions
local function SetupPlayerData(Player)
	SessionData[Player] = StartData
end

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

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

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

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

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

return DataManager

1 answer

It's pretty simple... Don't make a variable to set the default data because the script use this as the table

Error version

--< Relative game variables
local SessionData = {}

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

--< Usable module functions
local function SetupPlayerData(Player)
    SessionData[Player] = StartData
end

Fixed version

--< Relative game variables
local SessionData = {}

--< Usable module functions
local function SetupPlayerData(Player)
    local StartData = {Level = 1, Money = 0, Experience1 = 0, Experience2 = 400, Language = 1}
    SessionData[Player] = StartData
end

This discussion is preserved as it was. New answers, comments, and votes are closed.