TacoServer/Classic/scripts/autoexec/GetTeamCounts.cs

170 lines
4.2 KiB
C#
Raw Normal View History

2019-09-13 15:29:42 -04:00
// GetTeamCounts Script
//
// GetTeamCounts was made to accurately keep track of how many players
// are on teams, on the server, on each team, observer, etc.
// AntiTurrets, Team Balance Notify, AntiCloak, AutoBalance, Base Rape and Base Rape Notify all rely on this.
2019-02-03 02:52:11 -05:00
// It runs every 5 seconds.
2019-01-21 12:21:59 -05:00
//
2019-09-13 15:29:42 -04:00
// Whether or not a portion of the script is run or not depends on
// if a player has switched teams or not. Or if a team changing event has occurred.
// This is triggered via various event functions throughout the game.
//
2018-06-28 14:34:52 -04:00
2019-09-13 15:29:42 -04:00
// Set reset string
$GetCountsStatus = "UPDATE";
2019-04-01 16:01:02 -04:00
2018-11-10 20:52:29 -05:00
package StartTeamCounts
{
function CreateServer( %mission, %missionType )
2018-06-28 14:34:52 -04:00
{
parent::CreateServer( %mission, %missionType );
2019-01-21 12:21:59 -05:00
//Call for a GetTeamCount update
GetTeamCounts( %game, %client, %respawn );
2020-03-29 23:36:06 -04:00
// Set when server starts
// Used to reset timelimit (if voted) when map changes
$DefaultTimeLimit = $Host::TimeLimit;
// Prevent package from being activated if it is already
if (!isActivePackage(TeamCountsTriggers))
activatePackage(TeamCountsTriggers);
2018-06-28 14:34:52 -04:00
}
};
// Prevent package from being activated if it is already
if (!isActivePackage(StartTeamCounts))
activatePackage(StartTeamCounts);
function GetTeamCounts( %game, %client, %respawn )
{
switch$($GetCountsStatus)
{
case UPDATE:
//Get teamcounts
if($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]++;
}
2019-02-22 19:25:53 -05:00
//echo ("$PlayerCount[0] " @ $PlayerCount[0]);
//echo ("$PlayerCount[1] " @ $PlayerCount[1]);
//echo ("$PlayerCount[2] " @ $PlayerCount[2]);
//Amount of players on teams
$TotalTeamPlayerCount = $PlayerCount[1] + $PlayerCount[2];
//Amount of all players including observers
$AllPlayerCount = $PlayerCount[1] + $PlayerCount[2] + $PlayerCount[0];
//Difference Variables
%team1difference = $PlayerCount[1] - $PlayerCount[2];
%team2difference = $PlayerCount[2] - $PlayerCount[1];
//Start Base Rape Notify
schedule(500, 0, "NBRStatusNotify", %game);
//Start Team Balance Notify
schedule(1000, 0, "TeamBalanceNotify", %game, %team1difference, %team2difference);
//Start AntiCloak
schedule(1500, 0, "CheckAntiCloak", %game);
//Set so counter wont run when it doesnt need to.
$GetCountsStatus = "IDLE";
}
case IDLE:
//Do Nothing
2018-11-10 20:52:29 -05:00
}
if(isEventPending($GetCountsSchedule))
cancel($GetCountsSchedule);
2018-06-28 14:34:52 -04:00
2019-02-03 02:52:11 -05:00
//Call itself again. Every 5 seconds.
$GetCountsSchedule = schedule(5000, 0, "GetTeamCounts");
2018-06-28 14:34:52 -04:00
}
2018-11-10 20:52:29 -05:00
// Triggers a Full run
function ResetGetCountsStatus()
2018-11-10 20:52:29 -05:00
{
$GetCountsStatus = "UPDATE";
}
// Proper Overrides
// Events that determine a TeamGetCounts update
package TeamCountsTriggers
{
function DefaultGame::clientJoinTeam( %game, %client, %team, %respawn )
{
Parent::clientJoinTeam( %game, %client, %team, %respawn );
//Trigger GetCounts
ResetGetCountsStatus();
}
function DefaultGame::clientChangeTeam(%game, %client, %team, %fromObs, %respawned)
{
Parent::clientChangeTeam(%game, %client, %team, %fromObs, %respawned);
//Trigger GetCounts
ResetGetCountsStatus();
}
function DefaultGame::assignClientTeam(%game, %client, %respawn )
{
Parent::assignClientTeam(%game, %client, %respawn );
//Trigger GetCounts
ResetGetCountsStatus();
}
function DefaultGame::onClientEnterObserverMode( %game, %client )
{
Parent::onClientEnterObserverMode( %game, %client );
//Trigger GetCounts
ResetGetCountsStatus();
}
function DefaultGame::AIChangeTeam(%game, %client, %newTeam)
{
Parent::AIChangeTeam(%game, %client, %newTeam);
//Trigger GetCounts
ResetGetCountsStatus();
}
function GameConnection::onConnect(%client, %name, %raceGender, %skin, %voice, %voicePitch)
{
Parent::onConnect(%client, %name, %raceGender, %skin, %voice, %voicePitch);
//Reset GetCounts
ResetGetCountsStatus();
}
function DefaultGame::gameOver(%game)
{
Parent::gameOver(%game);
//Reset GetCounts
ResetGetCountsStatus();
}
function GameConnection::onDrop(%client, %reason)
{
Parent::onDrop(%client, %reason);
//Reset GetCounts
ResetGetCountsStatus();
}
};