Hello, so I recently found the issue to my previous topic but I’m not sure how to fix it, so basically the script tells the main module script (Shack) to spawn the player in a certain spot, the problem is when two players join the game, both players are loaded if one of them joins the game. The problem is with PlayerManater (PlayerData Module)
PlayerManager Module
local Players = game:GetService("Players")
local DataStoreService = game:GetService("DataStoreService")
local playerData = DataStoreService:GetDataStore("ShackTestCoolIKnow")
local function leaderBoardSetup(LevelsValue, ExperienceValue)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
local Levels = Instance.new("IntValue")
Levels.Name = "Level"
Levels.Value = LevelsValue
Levels.Parent = leaderstats
local Experience = Instance.new("IntValue")
Experience.Name = "Exp"
Levels.Value = ExperienceValue
return leaderstats
end
local function LoadData(Player)
local success, result = pcall(function()
return playerData:GetAsync(Player.UserId)
end)
if not success then
warn(result)
end
return success, result
end
local function SaveData(Player, Data)
local success, result = pcall(function()
playerData:SetAsync(Player.UserId, Data)
end)
if not success then
warn(result)
end
return success
end
local SessionData = {}
local playerAdded = Instance.new("BindableEvent")
local playerRemoving = Instance.new("BindableEvent")
local PlayerManager = {}
PlayerManager.PlayerAdded = playerAdded.Event
PlayerManager.PlayerRemoving = playerRemoving.Event
function PlayerManager.Start()
for _, player in ipairs(Players:GetPlayers()) do
coroutine.wrap(PlayerManager.OnPlayerAdded)(player)
end
Players.PlayerAdded:Connect(PlayerManager.OnPlayerAdded)
Players.PlayerRemoving:Connect(PlayerManager.OnPlayerRemoving)
game:BindToClose(PlayerManager.OnClose)
end
function PlayerManager.OnPlayerAdded(player)
player.CharacterAdded:Connect(function(character)
PlayerManager.OnCharacterAdded(player, character)
end)
local success, data = LoadData(player)
SessionData[player.UserId] = success and data or {
Level = 1,
Exp = 0
}
local leaderstats = leaderBoardSetup(PlayerManager.GetLevels(player), PlayerManager.GetExp(player))
leaderstats.Parent = player
playerAdded:Fire(player)
end
function PlayerManager.OnCharacterAdded(player, character)
local humanoid = character:FindFirstChild("Humanoid")
if humanoid then
humanoid.Died:Connect(function()
task.wait(3)
player:LoadCharacter()
end)
end
end
function PlayerManager.GetLevels(player)
return SessionData[player.UserId].Level
end
function PlayerManager.GetExp(player)
return SessionData[player.UserId].Exp
end
function PlayerManager.SetLevels(player, value)
if value then
SessionData[player.User.Id].Level = value
local leaderstats = player:FindFirstChild("leaderstats")
if leaderstats then
local Levels = leaderstats:FindFirstChild("Level")
if Levels then
Levels.Value = value
end
end
end
end
function PlayerManager.SetExp(player, value)
if value then
SessionData[player.UserId].Exp = value
local leaderstats = player:FindFirstChild("leaderstats")
if leaderstats then
local Experience = leaderstats:FindFirstChild("Exp")
if Experience then
Experience.Value = value
end
end
end
end
function PlayerManager.OnPlayerRemoving(player)
SaveData(player, SessionData[player.UserId])
playerRemoving:Fire(player)
end
function PlayerManager.OnClose()
for _, player in ipairs(Players:GetPlayers()) do
PlayerManager.OnPlayerRemoving(player)()
end
end
return PlayerManager
Server Script
local Playerss = game:GetService("Players")
local ServerScriptService = game:GetService("ServerScriptService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
ReplicatedStorage.Events.Load.Initiate.OnServerEvent:Connect(function(plr, employeesJob)
local PlayerManager = require(ServerScriptService.Data.PlayerManager)
local ShackModule = require(ServerScriptService.Modules.Shack)
local spawnLocations = game.Workspace.JobSpawns
PlayerManager.Start()
PlayerManager.PlayerAdded:Connect(function()
print("Welcome to Burger Shack!")
local newPlayerJob = ShackModule.New(plr, employeesJob)
plr.Team = employeesJob
newPlayerJob:Init()
task.wait(3)
local function changedJob()
local newJob = plr.Team
newPlayerJob:JobChanged(newJob)
end
plr:GetPropertyChangedSignal("Team"):Connect(changedJob)
end)
end)