I’m having a problem where some players are being given multiple weapons, instead of just 1
This is what I do to organise the teams
local function putInTeam(player)
local RedTeamPlayerCount = #Teams.Red:GetPlayers()
local BlueTeamPlayerCount = #Teams.Blue:GetPlayers()
if BlueTeamPlayerCount < RedTeamPlayerCount then
player.Team = Teams.Blue
elseif RedTeamPlayerCount < BlueTeamPlayerCount then
player.Team = Teams.Red
else
local CoinFlip = math.random()
if CoinFlip < 0.5 then
player.Team = Teams.Red
else
player.Team = Teams.Blue
end
end
table.insert(Settings.ACTIVE_PLAYERS, player)
ClassesManager:GiveClass(player)
MapManager:ToMap(player)
end
function TeamsManager:OrganizeTeams()
for _, player in pairs(Players:GetPlayers()) do
if not player then return end
putInTeam(player)
end
end
function TeamsManager:NewPlayerTeam(player) -- Fires when a player joins mid round
if not player then return end
putInTeam(player)
end
And then the class stuff
local function giveWeapon(player, class)
local User = PlayerData[player.UserId]
if not User then return end
local EquippedWeapon = User.Classes[class].Equipped.Weapon
local Weapon = Classes[class].Weapons:FindFirstChild(EquippedWeapon):Clone()
Weapon.Parent = player.Backpack
end
function ClassesManager:GiveClass(player)
local User = PlayerData[player.UserId]
if not User then return end
giveWeapon(player, User.EquippedClass)
end
It seems to always give 1 player multiple weapons. Tested with 2 players, 1 player got the 2 weapons, tested with 3 players, 1 got 2 weapons, etc. So is there something I’m doing wrong in terms of getting their teams?
Upon further testing, I added print(player) at the end of the putInTeams function, and this is what I got with 3 players
Player2
So for some reason, Player2 an Player3 are going thru twice??
EDIT I believe the problem occurs if a player joins mid game. So looking at this in particular
local function putInTeam(player)
local RedTeamPlayerCount = #Teams.Red:GetPlayers()
local BlueTeamPlayerCount = #Teams.Blue:GetPlayers()
if BlueTeamPlayerCount < RedTeamPlayerCount then
player.Team = Teams.Blue
elseif RedTeamPlayerCount < BlueTeamPlayerCount then
player.Team = Teams.Red
else
local CoinFlip = math.random()
if CoinFlip < 0.5 then
player.Team = Teams.Red
else
player.Team = Teams.Blue
end
end
table.insert(Settings.ACTIVE_PLAYERS, player)
ClassesManager:GiveClass(player)
print('Given player team', player, player.Team)
MapManager:ToMap(player)
end
function TeamsManager:NewPlayerTeam(player) -- Fires when a player joins mid round
if not player then return end
print('New player joined', player)
putInTeam(player)
end
MORE EDITS A new problem
Given player team Player2 Blue
It’s putting player2 in blue, player1 in red, then putting player2 in red?? New player joined Player2 should NOT be firing, as they have already been added into the game, so why is it redoing them?