Code:
//1. Put this file in the "codam" folder of the "main" server folder.
//2. Add the below line to "modlist.gsc":
//[[register]]("Alive players counter", codam\aliveplayers_counter::main);
main(phase, register)
{
codam\utils::_debug("NNNNNNNNNNNN Alive players counter/main");
switch(phase)
{
case "init": _init(register); break;
}
}
_init(register)
{
codam\utils::_debug("NNNNNNNNNNNN Alive players counter/_init");
if (isdefined(level.showaliveplayerscount))
return;
level.showaliveplayerscount = true;
if (getCvar("g_gametype") == "sd")
{
[[register]]("spawnPlayer", ::spawnPlayer, "thread");
[[register]]("gt_spawnSpectator", ::spawnSpectator, "thread");
}
}
spawnPlayer(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9)
{
codam\utils::_debug("NNNNNNNNNNNN Alive players counter/spawnPlayer");
thread hudAlivePlayersCount();
}
spawnSpectator(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9)
{
codam\utils::_debug("NNNNNNNNNNNN Alive players counter/spawnSpectator");
//Clear counter
if (isdefined(self.hud_counter_friends))
{
self.hud_counter_friends destroy();
}
if (isdefined(self.hud_counter_enemies))
{
self.hud_counter_enemies destroy();
}
}
hudAlivePlayersCount()
{
codam\utils::_debug("NNNNNNNNNNNN Alive players counter/hudAlivePlayersCount");
level endon("death");
level endon("intermission");
wait(0.05);
if (isdefined(level.gtd_call))
teams = [[level.gtd_call ]]("teamsPlaying");
if (!isdefined(teams) || (teams.size < 1))
{
teams = [];
teams[teams.size] = "allies";
teams[teams.size] = "axis";
}
iter = 0;
for (;;)
{
displayAlivePlayersCount(teams, iter);
iter = 1 - iter;
wait(0.5);
}
}
displayAlivePlayersCount(teams, iter)
{
numonteam = [];
aliveonteam = [];
players = getentarray("player", "classname");
for (i = 0; i < players.size; i++)
{
player = players[i];
team = player.sessionteam;
if (!isdefined(team) || (team == "none"))
{
team = player.pers["team"];
if (!isdefined(team))
continue;
}
if (isdefined(numonteam[team]))
numonteam[team ]++;
else
numonteam[team] = 1;
if (player.sessionstate != "playing")
continue;
if (isdefined(aliveonteam[team]))
aliveonteam[team]++;
else
aliveonteam[team] = 1;
}
for (i = 0; i < teams.size; i++)
{
teamInLoop = teams[i];
if (teamInLoop != "spectator")
{
for (ii = 0; ii < players.size; ii++)
{
player = players[ii];
player_sTeam = player.sessionteam;
if (player_sTeam != "spectator")
{
if (player_sTeam == teamInLoop)
{
//FRIENDS
if (!isdefined(player.hud_counter_friends))
{
//CREATE HUD
hud[ii] = newClientHudElem(player);
hud[ii].color = (0.6, 1, 0);
hud[ii].x = 570;
hud[ii].y = 75;
hud[ii].fontScale = 1.5;
player.hud_counter_friends = hud[ii];
}
//SET VALUE
if (isdefined(aliveonteam[teamInLoop]))
{
player.hud_counter_friends setValue(aliveonteam[teamInLoop]);
}
else
{
player.hud_counter_friends setValue(0);
}
}
else
{
//ENEMIES
if (!isdefined(player.hud_counter_enemies))
{
//CREATE HUD
hud[ii] = newClientHudElem(player);
hud[ii].color = (1, 0.2, 0);
hud[ii].x = 610;
hud[ii].y = 75;
hud[ii].fontScale = 1.5;
player.hud_counter_enemies = hud[ii];
}
//SET VALUE
if (isdefined(aliveonteam[teamInLoop]))
{
player.hud_counter_enemies setValue(aliveonteam[teamInLoop]);
}
else
{
player.hud_counter_enemies setValue(0);
}
}
}
}
}
}
return;
}