TacoServer/Classic/scripts/autoexec/GetTeamCounts.cs
2019-02-02 22:36:02 -05:00

95 lines
3 KiB
C#

// GetCounts was made to accurately keep track of how many players
// are on teams, on the server, on each team, spectator, etc.
// It runs every 2.5 seconds.
// It has since evolved into the place to inject other services
// and aspects within the server.
//
//
// To control whether the server auto resets when empty
// $Host::EmptyServerReset = 0;
package StartTeamCounts
{
function CreateServer( %mission, %missionType )
{
parent::CreateServer( %mission, %missionType );
//Call for a GetTeamCount update
GetTeamCounts( %game, %client, %respawn );
//Make sure teamchange variable is set
ResetClientChangedTeams();
//Set NBR notify varibles
ResetNBRNotify();
//Whether the server auto restarts when empty or not
$Host::Dedicated = $Host::EmptyServerReset;
}
};
// Prevent package from being activated if it is already
if (!isActivePackage(StartTeamCounts))
activatePackage(StartTeamCounts);
function GetTeamCounts( %game, %client, %respawn )
{
//Check pug password
CheckPUGpassword();
//Get teamcounts
if( $GetCountsClientTeamChange && $countdownStarted && $MatchStarted )
{
//Team Count code by Keen
$PlayerCount[0] = 0;
$PlayerCount[1] = 0;
$PlayerCount[2] = 0;
for(%i = 0; %i < ClientGroup.getCount(); %i++)
{
%client = ClientGroup.getObject(%i);
//if(!%client.isAIControlled())
$PlayerCount[%client.team]++;
}
//echo ("Clientgroup " @ ClientGroup.getCount());
//echo ("$PlayerCount[0] " @ $PlayerCount[0]);
//echo ("$PlayerCount[1] " @ $PlayerCount[1]);
//echo ("$PlayerCount[2] " @ $PlayerCount[2]);
//echo ("client.team " @ %client.team);
//Other variables
//Amount of players on teams
$TotalTeamPlayerCount = $PlayerCount[1] + $PlayerCount[2];
//Amount of all players including observers
$AllPlayerCount = $PlayerCount[1] + $PlayerCount[2] + $PlayerCount[0];
//Start Base Rape Notify
schedule(500, 0, "NBRStatusNotify");
//Start Team Balance Notify
schedule(1000, 0, "TeamBalanceNotify");
//Start AntiCloak
schedule(1500, 0, "ActivateAntiCloak");
//Set so counter wont run when it doesnt need to.
$GetCountsClientTeamChange = false;
}
//Call itself again. Every 2.5 seconds.
schedule(2500, 0, "GetTeamCounts");
}
//Run at DefaultGame::clientJoinTeam, DefaultGame::clientChangeTeam, DefaultGame::assignClientTeam in evo defaultgame.ovl
//Also Run at DefaultGame::onClientEnterObserverMode, DefaultGame::AIChangeTeam, DefaultGame::onClientLeaveGame, DefaultGame::forceObserver in evo defaultgame.ovl
//And finally GameConnection::onConnect in evo server.ovl
//Added so the bulk of GetCounts doesnt run when it doesnt need to causing unnecessary latency that may or may not have existed, but probably is good practice.
//GetCounts still runs every 2.5 seconds as it did, but whether or not someone has changed teams, joined obs, left, etc etc will decide whether or not the bulk of it runs.
//Let GetTeamCounts run if there is a Teamchange.
function ResetClientChangedTeams()
{
$GetCountsClientTeamChange = true;
}