So I have Guns for for classes that are Team-Specific Colored. Is there any way to get the Player's Team?

Here's the LeaderBoard script I'm using (It's the Default Roblox-Made CTF one)

--------------------
--| WaitForChild |--
--------------------

-- Waits for parent.child to exist, then returns it
local function WaitForChild(parent, childName)
	assert(parent, "ERROR: WaitForChild: parent is nil")
	while not parent:FindFirstChild(childName) do parent.ChildAdded:wait() end
	return parent[childName]
end

-----------------
--| Variables |--
-----------------

local RbxUtility = LoadLibrary('RbxUtility')

local PlayersService = Game:GetService('Players')

local Set = WaitForChild(script, 'Set')
local Apply = WaitForChild(script, 'Apply')
local GetPlayerScore = WaitForChild(script, 'GetPlayerScore')
local SetPlayerScore = WaitForChild(script, 'SetPlayerScore')
local IncreasePlayerScore = WaitForChild(script, 'IncreasePlayerScore')
local GetHighestScoringPlayer = WaitForChild(script, 'GetHighestScoringPlayer')
local GetSerialized = WaitForChild(script, 'GetSerialized')
local SetSerialized = WaitForChild(script, 'SetSerialized')

local MasterStatsTable = {}

-------------------------
--| Utility Functions |--
-------------------------

-- Gives player the stats in statsTable
local function SetOrCreatePlayerStats(player, statsTable)
	local leaderstats = player:FindFirstChild('leaderstats')
	if not leaderstats then
		leaderstats = Instance.new('Model')
		leaderstats.Name = 'leaderstats'
		leaderstats.Parent = player
	end
	for stat, statValue in pairs(statsTable) do
		local statName = statValue.Name or stat -- Fall back on the stat's index as its name if it has no Name property
		local value = statValue.Value or 0
		local currentStat = leaderstats:FindFirstChild(statName)
		if not currentStat then
			currentStat = Instance.new('IntValue')
			currentStat.Name = statName
			currentStat.Parent = leaderstats
		end
		currentStat.Value = value
	end
end

-- Returns a table of player's stats
local function GetPlayerStats(player)
	local statsTable = {}
	local leaderstats = player:FindFirstChild('leaderstats')
	if leaderstats then
		for _, stat in pairs(leaderstats:GetChildren()) do
			statsTable[stat.Name] = {Name = stat.Name, Value = stat.Value}
		end
	end
	return statsTable
end

-- Returns player's value for score
local function GetPlayerScoreValue(player, score)
	if not player or not score then print("ERROR: Empty parameter(s)") return end
	local leaderstats = player:FindFirstChild('leaderstats')
	if leaderstats then
		local scoreObject = leaderstats:FindFirstChild(score)
		if scoreObject then
			return scoreObject.Value
		end
	end
	return nil
end

-- Returns the player with userId == playerId
local function FindPlayerById(playerId)
	if not playerId then return nil end
	for _, player in pairs(PlayersService:GetPlayers()) do
		if player.userId == playerId then
			return player
		end
	end
	return nil
end

--------------------------
--| Bindable Functions |--
--------------------------

-- Set: Sets MasterStatsTable to newStatsTable and gives all players the new stats
Set.OnInvoke = function(newStatsTable)
	MasterStatsTable = newStatsTable
	for _, player in pairs(PlayersService:GetPlayers()) do
		while player:FindFirstChild('leaderstats') do
			player.leaderstats:Destroy()
		end
		SetOrCreatePlayerStats(player, MasterStatsTable)
	end
end

-- Apply: Applies MasterStatsTable to player
Apply.OnInvoke = function(player)
	SetOrCreatePlayerStats(player, MasterStatsTable)
end

-- GetPlayerScore: [See GetPlayerScoreValue]
GetPlayerScore.OnInvoke = GetPlayerScoreValue

-- SetPlayerScore: Sets player's score to value
SetPlayerScore.OnInvoke = function(player, score, value)
	if not player or not score or not value then print("ERROR: Empty parameter(s)") return end
	local leaderstats = player:FindFirstChild('leaderstats')
	if leaderstats then
		local scoreObject = leaderstats:FindFirstChild(score)
		if scoreObject then
			scoreObject.Value = value
		end
	end
end

-- IncreasePlayerScore: Increases player's score by amount
IncreasePlayerScore.OnInvoke = function(player, score, amount)
	if not player or not score or not amount then print("ERROR: Empty parameter(s)") return end
	local leaderstats = player:FindFirstChild('leaderstats')
	if leaderstats then
		local scoreObject = leaderstats:FindFirstChild(score)
		if scoreObject then
			scoreObject.Value = scoreObject.Value + amount
		end
	end
end

-- GetHighestScoringPlayer: Returns the player with the highest value for score, along with the value
GetHighestScoringPlayer.OnInvoke = function(score)
	if not score then print("ERROR: Empty parameter(s)") return end
	local highestScoringPlayer = nil
	local highestScore = 0
	for _, player in pairs(PlayersService:GetPlayers()) do
		local playerScore = GetPlayerScoreValue(player, score)
		if playerScore then
			if not highestScoringPlayer or playerScore > highestScore then
				highestScoringPlayer = player
				highestScore = playerScore
			end
		end
	end
	return highestScoringPlayer, highestScore
end

-- GetSerialized: Returns a serialized string of all players' stats
GetSerialized.OnInvoke = function()
	local allLeaderStats = {}
	for _, player in pairs(PlayersService:GetPlayers()) do
		table.insert(allLeaderStats, player.userId, GetPlayerStats(player))
	end
	return RbxUtility:EncodeJSON(allLeaderStats)
end

-- SetSerialized: Takes a serialized string of all players' stats and applies the stats to all players
SetSerialized.OnInvoke = function(statsString)
	if not statsString then print("ERROR: Empty parameter") return end
	local newLeaderStats = RbxUtility:DecodeJSON(statsString)
	if newLeaderStats then
		for playerId, statsTable in pairs(newLeaderStats) do
			local player = FindPlayerById(tonumber(playerId))
			if player then
				SetOrCreatePlayerStats(player, statsTable)
			else
				print("Player with userId =", playerId, "no longer exists in the server.")
			end
		end
	end
end