Benny/gamemodes/benny/gamemode/teams.lua

152 lines
3.4 KiB
Lua

concommand.Add("b-cheat_setteam", function( ply, cmd, args )
if !ply or !ply:IsValid() then return end
if !args[1] then
print( "Needs an integer." )
for index, data in ipairs( TEAMS ) do
print( index .. " - " .. data.id )
end
else
ply:SetTeam( args[1] )
end
end)
TEAMS = {
[0] = {
name = "unassigned",
description = "unassigned",
factionid = "unassigned",
id = "UNASSIGNED",
},
{
name = "#Team.cia.Name",
description = "#Team.cia.Description",
factionid = "mp_cia",
id = "CIA",
},
{
name = "#Team.halo.Name",
description = "#Team.halo.Description",
factionid = "mp_halo",
id = "HALO",
},
{
name = "#Team.plasof.Name",
description = "#Team.plasof.Description",
factionid = "mp_plasof",
id = "PLASOF",
},
{
name = "#Team.arng.Name",
description = "#Team.arng.Description",
factionid = "mp_arng",
id = "ARNG",
},
{
name = "#Team.militia.Name",
description = "#Team.militia.Description",
factionid = "mp_militia",
id = "MILITIA",
},
{
name = "#Team.viper.Name",
description = "#Team.viper.Description",
factionid = "mp_viper",
id = "VIPER",
},
{
name = "campaign",
description = "internal campaign faction",
factionid = "campaign",
id = "CAMPAIGN",
},
}
TEAMS_IDtoTeam = {
[TEAMS[1].id] = TEAMS[1],
[TEAMS[2].id] = TEAMS[2],
[TEAMS[3].id] = TEAMS[3],
[TEAMS[4].id] = TEAMS[4],
[TEAMS[5].id] = TEAMS[5],
[TEAMS[6].id] = TEAMS[6],
}
TEAMS_FIDtoTeam = {
[TEAMS[0].factionid] = TEAMS[0],
[TEAMS[1].factionid] = TEAMS[1],
[TEAMS[2].factionid] = TEAMS[2],
[TEAMS[3].factionid] = TEAMS[3],
[TEAMS[4].factionid] = TEAMS[4],
[TEAMS[5].factionid] = TEAMS[5],
[TEAMS[6].factionid] = TEAMS[6],
}
-- Team 1 is CIA, Team 2 is HALO for now
TEAMS_Placeholder = {
[1] = "benny_playerstart_team1",
[2] = "benny_playerstart_team2",
[3] = "benny_playerstart_team3",
[4] = "benny_playerstart_team4",
[5] = "benny_playerstart_team5",
[6] = "benny_playerstart_team6",
}
TEAMS_Current = {
[1] = 1,
[2] = 2,
}
function GM:CreateTeams()
for index, data in ipairs( TEAMS ) do
team.SetUp( index, data.name, Color( 0, 0, 255 ) )
team.SetSpawnPoint( index, "benny_playerstart_team" .. index )
end
team.SetSpawnPoint( TEAM_SPECTATOR, "worldspawn" )
end
function GM:PlayerSelectSpawn( ply, transition )
if ( transition ) then return end
if BennyGame:GetType() == BG_GTYPE_MP then
local ent = self:PlayerSelectTeamSpawn( ply:Team(), ply )
if IsValid( ent ) then return ent end
end
end
function GM:PlayerSelectTeamSpawn( TeamID, ply )
local SpawnPoints = team.GetSpawnPoints( TeamID )
if ( !SpawnPoints || table.IsEmpty( SpawnPoints ) ) then return end
local ChosenSpawnPoint = nil
for i = 0, 6 do
ChosenSpawnPoint = table.Random( SpawnPoints )
if ( hook.Call( "IsSpawnpointSuitable", GAMEMODE, ply, ChosenSpawnPoint, i == 6 ) ) then
return ChosenSpawnPoint
end
end
return ChosenSpawnPoint
end
function BennyGame:BestAutoJoinTeam()
local SmallestTeam = BennyGame.TeamToFaction[math.random( 1, BennyGame.TeamCount )]
local SmallestPlayers = 1000
for id, TeamInPlayID in pairs( BennyGame.TeamsInPlay ) do
if ( id != TEAM_SPECTATOR && id != TEAM_UNASSIGNED && id != TEAM_CONNECTING ) then
local PlayerCount = team.NumPlayers( id )
if PlayerCount < SmallestPlayers or (PlayerCount == SmallestPlayers and id < SmallestTeam ) then
SmallestPlayers = PlayerCount
SmallestTeam = id
end
end
end
return SmallestTeam
end