mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
222 lines
4.3 KiB
Lua
222 lines
4.3 KiB
Lua
--[[
|
|
| This file was obtained through the combined efforts
|
|
| of Madbluntz & Plymouth Antiquarian Society.
|
|
|
|
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
|
| Maloy, DrPepper10 @ RIP, Atle!
|
|
|
|
|
| Visit for more: https://plymouth.thetwilightzone.ru/
|
|
--]]
|
|
|
|
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 id,pl in ipairs( player.GetAll() ) do
|
|
if (pl:Team() == index) then
|
|
score = score + pl:Deaths()
|
|
end
|
|
end
|
|
return score
|
|
|
|
end
|
|
|
|
function TotalFrags(index)
|
|
|
|
local score = 0
|
|
for id,pl in ipairs( player.GetAll() ) do
|
|
if (pl:Team() == index) then
|
|
score = score + pl:Frags()
|
|
end
|
|
end
|
|
return score
|
|
|
|
end
|
|
|
|
function NumPlayers(index)
|
|
|
|
return #GetPlayers(index)
|
|
|
|
end
|
|
|
|
function GetPlayers(index)
|
|
|
|
local TeamPlayers = {}
|
|
|
|
for id,pl in ipairs( player.GetAll() ) do
|
|
if (IsValid(pl) and pl:Team() == index) then
|
|
table.insert(TeamPlayers, pl)
|
|
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 )
|
|
|
|
if (!TeamInfo[index]) then return DefaultColor end
|
|
return table.Copy( TeamInfo[index].Color )
|
|
|
|
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
|