Initial commit
This commit is contained in:
223
lua/includes/modules/team.lua
Normal file
223
lua/includes/modules/team.lua
Normal file
@@ -0,0 +1,223 @@
|
||||
module( "team", package.seeall )
|
||||
|
||||
local TeamInfo = {}
|
||||
local DefaultColor = Color( 255, 255, 100, 255 )
|
||||
|
||||
TeamInfo[TEAM_CONNECTING] = { Name = "Joining/Connecting", Color = DefaultColor, Score = 0, Joinable = false }
|
||||
TeamInfo[TEAM_UNASSIGNED] = { Name = "Unassigned", Color = DefaultColor, Score = 0, Joinable = false }
|
||||
TeamInfo[TEAM_SPECTATOR] = { Name = "Spectator", Color = DefaultColor, Score = 0, Joinable = true }
|
||||
|
||||
--[[------------------------------------------------------------
|
||||
|
||||
Call this to set up your team. It should be called in
|
||||
a shared file. This system assumes that your teams are
|
||||
static. If you want to have dynamic teams you need to
|
||||
code this yourself.
|
||||
|
||||
id should be a number. It's best to do something like
|
||||
|
||||
TEAM_TERRORISTS = 2
|
||||
|
||||
at the top of your code somewhere so you can reference
|
||||
teams via a variable rather than a number.
|
||||
|
||||
--------------------------------------------------------------]]
|
||||
function SetUp( id, name, color, joinable )
|
||||
|
||||
if ( joinable == nil ) then joinable = true end
|
||||
|
||||
TeamInfo[id] = { Name = name, Color = color, Score = 0, Joinable = joinable }
|
||||
|
||||
end
|
||||
|
||||
|
||||
function GetAllTeams()
|
||||
|
||||
return TeamInfo -- copyof?
|
||||
|
||||
end
|
||||
|
||||
function Valid( id )
|
||||
|
||||
if ( !TeamInfo[id] ) then return false end
|
||||
return true
|
||||
|
||||
end
|
||||
|
||||
function Joinable( id )
|
||||
|
||||
if ( !TeamInfo[id] ) then return false end
|
||||
return TeamInfo[id].Joinable
|
||||
|
||||
end
|
||||
|
||||
function GetSpawnPoint( id )
|
||||
|
||||
if ( !TeamInfo[id] ) then return end
|
||||
return TeamInfo[id].SpawnPointTable
|
||||
|
||||
end
|
||||
|
||||
function GetSpawnPoints( id )
|
||||
|
||||
if ( IsTableOfEntitiesValid( TeamInfo[id].SpawnPoints ) ) then return TeamInfo[id].SpawnPoints end
|
||||
|
||||
local SpawnPointTable = team.GetSpawnPoint( id )
|
||||
if ( !SpawnPointTable ) then return end
|
||||
|
||||
TeamInfo[id].SpawnPoints = {}
|
||||
|
||||
for k, entname in pairs( SpawnPointTable ) do
|
||||
|
||||
TeamInfo[id].SpawnPoints = table.Add( TeamInfo[id].SpawnPoints, ents.FindByClass( entname ) )
|
||||
|
||||
end
|
||||
|
||||
return TeamInfo[id].SpawnPoints
|
||||
|
||||
end
|
||||
|
||||
function SetSpawnPoint( id, ent_name )
|
||||
|
||||
if ( !TeamInfo[id] ) then return end
|
||||
if ( !istable( ent_name ) ) then ent_name = { ent_name } end
|
||||
|
||||
TeamInfo[id].SpawnPointTable = ent_name
|
||||
|
||||
end
|
||||
|
||||
function SetClass( id, classtable )
|
||||
|
||||
if ( !TeamInfo[id] ) then return end
|
||||
if ( !istable( classtable ) ) then classtable = { classtable } end
|
||||
|
||||
TeamInfo[id].SelectableClasses = classtable
|
||||
|
||||
end
|
||||
|
||||
function GetClass( id )
|
||||
|
||||
if ( !TeamInfo[id] ) then return end
|
||||
return TeamInfo[id].SelectableClasses
|
||||
|
||||
end
|
||||
|
||||
function TotalDeaths( index )
|
||||
|
||||
local score = 0
|
||||
|
||||
for _, ply in ipairs(player.GetAll()) do
|
||||
if ( ply:Team() == index ) then
|
||||
score = score + ply:Deaths()
|
||||
end
|
||||
end
|
||||
|
||||
return score
|
||||
|
||||
end
|
||||
|
||||
function TotalFrags( index )
|
||||
|
||||
local score = 0
|
||||
|
||||
for _, ply in ipairs(player.GetAll()) do
|
||||
if ( ply:Team() == index ) then
|
||||
score = score + ply:Frags()
|
||||
end
|
||||
end
|
||||
|
||||
return score
|
||||
|
||||
end
|
||||
|
||||
function NumPlayers( index )
|
||||
|
||||
local players = 0
|
||||
|
||||
for _, ply in ipairs(player.GetAll()) do
|
||||
if ( ply:Team() == index ) then
|
||||
players = players + 1
|
||||
end
|
||||
end
|
||||
|
||||
return players
|
||||
|
||||
end
|
||||
|
||||
function GetPlayers( index )
|
||||
|
||||
local TeamPlayers = {}
|
||||
|
||||
for _, ply in ipairs(player.GetAll()) do
|
||||
if ( ply:Team() == index ) then
|
||||
table.insert(TeamPlayers, ply)
|
||||
end
|
||||
end
|
||||
|
||||
return TeamPlayers
|
||||
|
||||
end
|
||||
|
||||
function GetScore( index )
|
||||
|
||||
return GetGlobalInt( "Team." .. tostring( index ) .. ".Score", 0 )
|
||||
|
||||
end
|
||||
|
||||
function GetName( index )
|
||||
|
||||
if ( !TeamInfo[index] ) then return "" end
|
||||
return TeamInfo[index].Name
|
||||
|
||||
end
|
||||
|
||||
function SetColor( index, color )
|
||||
|
||||
if ( !TeamInfo[ index ] ) then return false end
|
||||
TeamInfo[ index ].Color = color
|
||||
|
||||
return color
|
||||
|
||||
end
|
||||
|
||||
function GetColor( index )
|
||||
|
||||
local color = TeamInfo[index] && TeamInfo[index].Color || DefaultColor
|
||||
return Color( color.r, color.g, color.b, color.a )
|
||||
|
||||
end
|
||||
|
||||
function SetScore( index, score )
|
||||
|
||||
return SetGlobalInt( "Team." .. tostring( index ) .. ".Score", score )
|
||||
|
||||
end
|
||||
|
||||
function AddScore(index, score)
|
||||
|
||||
SetScore( index, GetScore( index ) + score )
|
||||
|
||||
end
|
||||
|
||||
function BestAutoJoinTeam()
|
||||
|
||||
local SmallestTeam = TEAM_UNASSIGNED
|
||||
local SmallestPlayers = 1000
|
||||
|
||||
for id, tm in pairs( team.GetAllTeams() ) do
|
||||
|
||||
if ( id != TEAM_SPECTATOR && id != TEAM_UNASSIGNED && id != TEAM_CONNECTING && tm.Joinable ) then
|
||||
|
||||
local PlayerCount = team.NumPlayers( id )
|
||||
if ( PlayerCount < SmallestPlayers || (PlayerCount == SmallestPlayers && id < SmallestTeam ) ) then
|
||||
SmallestPlayers = PlayerCount
|
||||
SmallestTeam = id
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
return SmallestTeam
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user