I worked out a way for the timer, here's the snippet though it is unoptimised as it is late night and my minds a little fuzzy :P
Code:
doPlaying()
{
wait 5;
level.TimerText destroy();
while(1)
{
level.playersLeft = maps\mp\gametypes\_teams::CountPlayers();
if(level.lastAlive == 0)
{
if(level.playersLeft["allies"] == 1)
{
level.lastAlive = 1;
foreach(player in level.players)
{
if(player.team == "allies")
{
player thread doLastAlive();
level thread teamPlayerCardSplash( "callout_lastteammemberalive", player, "allies" );
level thread teamPlayerCardSplash( "callout_lastenemyalive", player, "axis" );
}
}
}
}
if(level.playersLeft["allies"] == 0 || level.playersLeft["axis"] == 0)
{
level.TimerText setText("");
level thread doEnding();
return;
}
if(level.minutes == 4)
{
level thread doHumanTimer();
return;
}
wait .5;
}
}
doHumanTimer()
{
level.counter = 60;
while(level.counter > 0)
{
level.playersLeft = maps\mp\gametypes\_teams::CountPlayers();
if(level.playersLeft["allies"] == 0 || level.playersLeft["axis"] == 0)
{
level.TimerText setText("");
level thread doEnding();
return;
}
level.TimerText destroy();
level.TimerText = level createServerFontString( "objective", 1.5 );
level.TimerText setPoint( "CENTER", "CENTER", 0, -100 );
level.TimerText setText("^2Daylight approaching in: " + level.counter);
setDvar("fx_draw", 1);
wait 1;
level.counter--;
}
level.TimerText setText("");
level thread doHumanWin();
return;
}
doPlayingTimer()
{
level.minutes = 0;
level.seconds = 0;
while(1)
{
wait 1;
level.seconds++;
if(level.seconds == 60)
{
level.minutes++;
level.seconds = 0;
}
if(level.gameState == "ending")
{
return;
}
}
}
doEnding()
{
level.gameState = "ending";
notifyEnding = spawnstruct();
notifyEnding.titleText = "Round Over!";
notifyEnding.notifyText2 = "Next Round Starting Soon!";
notifyEnding.glowColor = (0.0, 0.6, 0.3);
if(level.playersLeft["allies"] == 0)
{
notifyEnding.notifyText = "Humans only survived: " + level.minutes + " minutes " + level.seconds + " seconds.";
level playSoundOnPlayers("veh_ac130_sonic_boom");
}
if(level.playersLeft["axis"] == 0)
{
notifyEnding.notifyText = "All the Zombies disappeared!";
}
wait 1;
VisionSetNaked("blacktest", 2);
foreach(player in level.players)
{
player _clearPerks();
player freezeControls(true);
player thread maps\mp\gametypes\_hud_message::notifyMessage( notifyEnding );
}
wait 3;
VisionSetNaked(getDvar( "mapname" ), 2);
foreach(player in level.players)
{
player freezeControls(false);
}
level thread doIntermission();
}
doHumanWin()
{
level.gameState = "ending";
notifyEnding = spawnstruct();
notifyEnding.titleText = "Humans Win!";
notifyEnding.notifyText2 = "Next Round Starting Soon!";
notifyEnding.glowColor = (0.0, 0.6, 0.3);
level playSoundOnPlayers("veh_ac130_sonic_boom");
notifyEnding.notifyText = "Humans have outlasted the zombie invasion!";
//if(level.minutes == 6)
//{
// notifyEnding.notifyText = "Humans have outlasted the zombie invasion!";
//}
wait 1;
VisionSetNaked("blacktest", 2);
foreach(player in level.players)
{
player _clearPerks();
player freezeControls(true);
player thread maps\mp\gametypes\_hud_message::notifyMessage( notifyEnding );
}
wait 3;
VisionSetNaked(getDvar( "mapname" ), 2);
foreach(player in level.players)
{
player freezeControls(false);
}
level thread doIntermission();
}