mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-10 10:47:58 -05:00
402 lines
13 KiB
Plaintext
402 lines
13 KiB
Plaintext
#include maps/mp/bots/_bot;
|
|
#include maps/mp/gametypes/_rank;
|
|
#include maps/mp/_utility;
|
|
|
|
init()
|
|
{
|
|
if ( !isgamerepenabled() )
|
|
{
|
|
return;
|
|
}
|
|
if ( isgamerepinitialized() )
|
|
{
|
|
return;
|
|
}
|
|
game[ "gameRepInitialized" ] = 1;
|
|
game[ "gameRep" ][ "players" ] = [];
|
|
game[ "gameRep" ][ "playerNames" ] = [];
|
|
game[ "gameRep" ][ "max" ] = [];
|
|
game[ "gameRep" ][ "playerCount" ] = 0;
|
|
gamerepinitializeparams();
|
|
}
|
|
|
|
isgamerepinitialized()
|
|
{
|
|
if ( !isDefined( game[ "gameRepInitialized" ] ) || !game[ "gameRepInitialized" ] )
|
|
{
|
|
return 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
isgamerepenabled()
|
|
{
|
|
if ( maps/mp/bots/_bot::is_bot_ranked_match() )
|
|
{
|
|
return 0;
|
|
}
|
|
if ( sessionmodeiszombiesgame() )
|
|
{
|
|
return 0;
|
|
}
|
|
if ( !level.rankedmatch )
|
|
{
|
|
return 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
gamerepinitializeparams()
|
|
{
|
|
threshold_exceeded_score = 0;
|
|
threshold_exceeded_score_per_min = 1;
|
|
threshold_exceeded_kills = 2;
|
|
threshold_exceeded_deaths = 3;
|
|
threshold_exceeded_kd_ratio = 4;
|
|
threshold_exceeded_kills_per_min = 5;
|
|
threshold_exceeded_plants = 6;
|
|
threshold_exceeded_defuses = 7;
|
|
threshold_exceeded_captures = 8;
|
|
threshold_exceeded_defends = 9;
|
|
threshold_exceeded_total_time_played = 10;
|
|
threshold_exceeded_tactical_insertion_use = 11;
|
|
threshold_exceeded_join_attempts = 12;
|
|
threshold_exceeded_xp = 13;
|
|
threshold_exceeded_splitscreen = 14;
|
|
game[ "gameRep" ][ "params" ] = [];
|
|
game[ "gameRep" ][ "params" ][ 0 ] = "score";
|
|
game[ "gameRep" ][ "params" ][ 1 ] = "scorePerMin";
|
|
game[ "gameRep" ][ "params" ][ 2 ] = "kills";
|
|
game[ "gameRep" ][ "params" ][ 3 ] = "deaths";
|
|
game[ "gameRep" ][ "params" ][ 4 ] = "killDeathRatio";
|
|
game[ "gameRep" ][ "params" ][ 5 ] = "killsPerMin";
|
|
game[ "gameRep" ][ "params" ][ 6 ] = "plants";
|
|
game[ "gameRep" ][ "params" ][ 7 ] = "defuses";
|
|
game[ "gameRep" ][ "params" ][ 8 ] = "captures";
|
|
game[ "gameRep" ][ "params" ][ 9 ] = "defends";
|
|
game[ "gameRep" ][ "params" ][ 10 ] = "totalTimePlayed";
|
|
game[ "gameRep" ][ "params" ][ 11 ] = "tacticalInsertions";
|
|
game[ "gameRep" ][ "params" ][ 12 ] = "joinAttempts";
|
|
game[ "gameRep" ][ "params" ][ 13 ] = "xp";
|
|
game[ "gameRep" ][ "ignoreParams" ] = [];
|
|
game[ "gameRep" ][ "ignoreParams" ][ 0 ] = "totalTimePlayed";
|
|
game[ "gameRep" ][ "gameLimit" ] = [];
|
|
game[ "gameRep" ][ "gameLimit" ][ "default" ] = [];
|
|
game[ "gameRep" ][ "gameLimit" ][ "tdm" ] = [];
|
|
game[ "gameRep" ][ "gameLimit" ][ "dm" ] = [];
|
|
game[ "gameRep" ][ "gameLimit" ][ "dom" ] = [];
|
|
game[ "gameRep" ][ "gameLimit" ][ "hq" ] = [];
|
|
game[ "gameRep" ][ "gameLimit" ][ "sd" ] = [];
|
|
game[ "gameRep" ][ "gameLimit" ][ "dem" ] = [];
|
|
game[ "gameRep" ][ "gameLimit" ][ "ctf" ] = [];
|
|
game[ "gameRep" ][ "gameLimit" ][ "koth" ] = [];
|
|
game[ "gameRep" ][ "gameLimit" ][ "conf" ] = [];
|
|
game[ "gameRep" ][ "gameLimit" ][ "id" ][ "score" ] = threshold_exceeded_score;
|
|
game[ "gameRep" ][ "gameLimit" ][ "default" ][ "score" ] = 20000;
|
|
game[ "gameRep" ][ "gameLimit" ][ "id" ][ "scorePerMin" ] = threshold_exceeded_score_per_min;
|
|
game[ "gameRep" ][ "gameLimit" ][ "default" ][ "scorePerMin" ] = 250;
|
|
game[ "gameRep" ][ "gameLimit" ][ "dem" ][ "scorePerMin" ] = 1000;
|
|
game[ "gameRep" ][ "gameLimit" ][ "tdm" ][ "scorePerMin" ] = 700;
|
|
game[ "gameRep" ][ "gameLimit" ][ "dm" ][ "scorePerMin" ] = 950;
|
|
game[ "gameRep" ][ "gameLimit" ][ "dom" ][ "scorePerMin" ] = 1000;
|
|
game[ "gameRep" ][ "gameLimit" ][ "sd" ][ "scorePerMin" ] = 200;
|
|
game[ "gameRep" ][ "gameLimit" ][ "ctf" ][ "scorePerMin" ] = 600;
|
|
game[ "gameRep" ][ "gameLimit" ][ "hq" ][ "scorePerMin" ] = 1000;
|
|
game[ "gameRep" ][ "gameLimit" ][ "koth" ][ "scorePerMin" ] = 1000;
|
|
game[ "gameRep" ][ "gameLimit" ][ "conf" ][ "scorePerMin" ] = 1000;
|
|
game[ "gameRep" ][ "gameLimit" ][ "id" ][ "kills" ] = threshold_exceeded_kills;
|
|
game[ "gameRep" ][ "gameLimit" ][ "default" ][ "kills" ] = 75;
|
|
game[ "gameRep" ][ "gameLimit" ][ "tdm" ][ "kills" ] = 40;
|
|
game[ "gameRep" ][ "gameLimit" ][ "sd" ][ "kills" ] = 15;
|
|
game[ "gameRep" ][ "gameLimit" ][ "dm" ][ "kills" ] = 31;
|
|
game[ "gameRep" ][ "gameLimit" ][ "id" ][ "deaths" ] = threshold_exceeded_deaths;
|
|
game[ "gameRep" ][ "gameLimit" ][ "default" ][ "deaths" ] = 50;
|
|
game[ "gameRep" ][ "gameLimit" ][ "dm" ][ "deaths" ] = 15;
|
|
game[ "gameRep" ][ "gameLimit" ][ "tdm" ][ "deaths" ] = 40;
|
|
game[ "gameRep" ][ "gameLimit" ][ "id" ][ "killDeathRatio" ] = threshold_exceeded_kd_ratio;
|
|
game[ "gameRep" ][ "gameLimit" ][ "default" ][ "killDeathRatio" ] = 30;
|
|
game[ "gameRep" ][ "gameLimit" ][ "tdm" ][ "killDeathRatio" ] = 50;
|
|
game[ "gameRep" ][ "gameLimit" ][ "sd" ][ "killDeathRatio" ] = 20;
|
|
game[ "gameRep" ][ "gameLimit" ][ "id" ][ "killsPerMin" ] = threshold_exceeded_kills_per_min;
|
|
game[ "gameRep" ][ "gameLimit" ][ "default" ][ "killsPerMin" ] = 15;
|
|
game[ "gameRep" ][ "gameLimit" ][ "id" ][ "plants" ] = threshold_exceeded_plants;
|
|
game[ "gameRep" ][ "gameLimit" ][ "default" ][ "plants" ] = 10;
|
|
game[ "gameRep" ][ "gameLimit" ][ "id" ][ "defuses" ] = threshold_exceeded_defuses;
|
|
game[ "gameRep" ][ "gameLimit" ][ "default" ][ "defuses" ] = 10;
|
|
game[ "gameRep" ][ "gameLimit" ][ "id" ][ "captures" ] = threshold_exceeded_captures;
|
|
game[ "gameRep" ][ "gameLimit" ][ "default" ][ "captures" ] = 30;
|
|
game[ "gameRep" ][ "gameLimit" ][ "id" ][ "defends" ] = threshold_exceeded_defends;
|
|
game[ "gameRep" ][ "gameLimit" ][ "default" ][ "defends" ] = 50;
|
|
game[ "gameRep" ][ "gameLimit" ][ "id" ][ "totalTimePlayed" ] = threshold_exceeded_total_time_played;
|
|
game[ "gameRep" ][ "gameLimit" ][ "default" ][ "totalTimePlayed" ] = 600;
|
|
game[ "gameRep" ][ "gameLimit" ][ "dom" ][ "totalTimePlayed" ] = 600;
|
|
game[ "gameRep" ][ "gameLimit" ][ "dem" ][ "totalTimePlayed" ] = 1140;
|
|
game[ "gameRep" ][ "gameLimit" ][ "id" ][ "tacticalInsertions" ] = threshold_exceeded_tactical_insertion_use;
|
|
game[ "gameRep" ][ "gameLimit" ][ "default" ][ "tacticalInsertions" ] = 20;
|
|
game[ "gameRep" ][ "gameLimit" ][ "id" ][ "joinAttempts" ] = threshold_exceeded_join_attempts;
|
|
game[ "gameRep" ][ "gameLimit" ][ "default" ][ "joinAttempts" ] = 3;
|
|
game[ "gameRep" ][ "gameLimit" ][ "id" ][ "xp" ] = threshold_exceeded_xp;
|
|
game[ "gameRep" ][ "gameLimit" ][ "default" ][ "xp" ] = 25000;
|
|
game[ "gameRep" ][ "gameLimit" ][ "id" ][ "splitscreen" ] = threshold_exceeded_splitscreen;
|
|
game[ "gameRep" ][ "gameLimit" ][ "default" ][ "splitscreen" ] = 8;
|
|
}
|
|
|
|
gamerepplayerconnected()
|
|
{
|
|
if ( !isgamerepenabled() )
|
|
{
|
|
return;
|
|
}
|
|
name = self.name;
|
|
/#
|
|
#/
|
|
if ( !isDefined( game[ "gameRep" ][ "players" ][ name ] ) )
|
|
{
|
|
game[ "gameRep" ][ "players" ][ name ] = [];
|
|
j = 0;
|
|
while ( j < game[ "gameRep" ][ "params" ].size )
|
|
{
|
|
paramname = game[ "gameRep" ][ "params" ][ j ];
|
|
game[ "gameRep" ][ "players" ][ name ][ paramname ] = 0;
|
|
j++;
|
|
}
|
|
game[ "gameRep" ][ "players" ][ name ][ "splitscreen" ] = self issplitscreen();
|
|
game[ "gameRep" ][ "players" ][ name ][ "joinAttempts" ] = 1;
|
|
game[ "gameRep" ][ "players" ][ name ][ "connected" ] = 1;
|
|
game[ "gameRep" ][ "players" ][ name ][ "xpStart" ] = self getrankxpstat();
|
|
game[ "gameRep" ][ "playerNames" ][ game[ "gameRep" ][ "playerCount" ] ] = name;
|
|
game[ "gameRep" ][ "playerCount" ]++;
|
|
}
|
|
else
|
|
{
|
|
if ( !game[ "gameRep" ][ "players" ][ name ][ "connected" ] )
|
|
{
|
|
game[ "gameRep" ][ "players" ][ name ][ "joinAttempts" ]++;
|
|
game[ "gameRep" ][ "players" ][ name ][ "connected" ] = 1;
|
|
game[ "gameRep" ][ "players" ][ name ][ "xpStart" ] = self getrankxpstat();
|
|
}
|
|
}
|
|
}
|
|
|
|
gamerepplayerdisconnected()
|
|
{
|
|
if ( !isgamerepenabled() )
|
|
{
|
|
return;
|
|
}
|
|
name = self.name;
|
|
if ( !isDefined( game[ "gameRep" ][ "players" ][ name ] ) || !isDefined( self.pers[ "summary" ] ) )
|
|
{
|
|
return;
|
|
}
|
|
/#
|
|
#/
|
|
self gamerepupdatenonpersistentplayerinformation();
|
|
self gamerepupdatepersistentplayerinformation();
|
|
game[ "gameRep" ][ "players" ][ name ][ "connected" ] = 0;
|
|
}
|
|
|
|
gamerepupdatenonpersistentplayerinformation()
|
|
{
|
|
name = self.name;
|
|
if ( !isDefined( game[ "gameRep" ][ "players" ][ name ] ) )
|
|
{
|
|
return;
|
|
}
|
|
game[ "gameRep" ][ "players" ][ name ][ "totalTimePlayed" ] += self.timeplayed[ "total" ];
|
|
if ( isDefined( self.tacticalinsertioncount ) )
|
|
{
|
|
game[ "gameRep" ][ "players" ][ name ][ "tacticalInsertions" ] += self.tacticalinsertioncount;
|
|
}
|
|
}
|
|
|
|
gamerepupdatepersistentplayerinformation()
|
|
{
|
|
name = self.name;
|
|
if ( !isDefined( game[ "gameRep" ][ "players" ][ name ] ) )
|
|
{
|
|
return;
|
|
}
|
|
if ( game[ "gameRep" ][ "players" ][ name ][ "totalTimePlayed" ] != 0 )
|
|
{
|
|
timeplayed = game[ "gameRep" ][ "players" ][ name ][ "totalTimePlayed" ];
|
|
}
|
|
else
|
|
{
|
|
timeplayed = 1;
|
|
}
|
|
game[ "gameRep" ][ "players" ][ name ][ "score" ] = self.score;
|
|
game[ "gameRep" ][ "players" ][ name ][ "scorePerMin" ] = int( game[ "gameRep" ][ "players" ][ name ][ "score" ] / ( timeplayed / 60 ) );
|
|
game[ "gameRep" ][ "players" ][ name ][ "kills" ] = self.kills;
|
|
game[ "gameRep" ][ "players" ][ name ][ "deaths" ] = self.deaths;
|
|
if ( game[ "gameRep" ][ "players" ][ name ][ "deaths" ] != 0 )
|
|
{
|
|
game[ "gameRep" ][ "players" ][ name ][ "killDeathRatio" ] = int( ( game[ "gameRep" ][ "players" ][ name ][ "kills" ] / game[ "gameRep" ][ "players" ][ name ][ "deaths" ] ) * 100 );
|
|
}
|
|
else
|
|
{
|
|
game[ "gameRep" ][ "players" ][ name ][ "killDeathRatio" ] = game[ "gameRep" ][ "players" ][ name ][ "kills" ] * 100;
|
|
}
|
|
game[ "gameRep" ][ "players" ][ name ][ "killsPerMin" ] = int( game[ "gameRep" ][ "players" ][ name ][ "kills" ] / ( timeplayed / 60 ) );
|
|
game[ "gameRep" ][ "players" ][ name ][ "plants" ] = self.plants;
|
|
game[ "gameRep" ][ "players" ][ name ][ "defuses" ] = self.defuses;
|
|
game[ "gameRep" ][ "players" ][ name ][ "captures" ] = self.captures;
|
|
game[ "gameRep" ][ "players" ][ name ][ "defends" ] = self.defends;
|
|
game[ "gameRep" ][ "players" ][ name ][ "xp" ] = self getrankxpstat() - game[ "gameRep" ][ "players" ][ name ][ "xpStart" ];
|
|
game[ "gameRep" ][ "players" ][ name ][ "xpStart" ] = self getrankxpstat();
|
|
}
|
|
|
|
getparamvalueforplayer( playername, paramname )
|
|
{
|
|
if ( isDefined( game[ "gameRep" ][ "players" ][ playername ][ paramname ] ) )
|
|
{
|
|
return game[ "gameRep" ][ "players" ][ playername ][ paramname ];
|
|
}
|
|
/#
|
|
assertmsg( "Unknown parameter " + paramname + "for individual player" );
|
|
#/
|
|
}
|
|
|
|
isgamerepparamvalid( paramname )
|
|
{
|
|
gametype = level.gametype;
|
|
if ( !isDefined( game[ "gameRep" ] ) )
|
|
{
|
|
return 0;
|
|
}
|
|
if ( !isDefined( game[ "gameRep" ][ "gameLimit" ] ) )
|
|
{
|
|
return 0;
|
|
}
|
|
if ( !isDefined( game[ "gameRep" ][ "gameLimit" ][ gametype ] ) )
|
|
{
|
|
return 0;
|
|
}
|
|
if ( !isDefined( game[ "gameRep" ][ "gameLimit" ][ gametype ][ paramname ] ) && !isDefined( game[ "gameRep" ][ "gameLimit" ][ "default" ][ paramname ] ) )
|
|
{
|
|
return 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
isgamerepparamignoredforreporting( paramname )
|
|
{
|
|
if ( isDefined( game[ "gameRep" ][ "ignoreParams" ][ paramname ] ) )
|
|
{
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
getgamerepparamlimit( paramname )
|
|
{
|
|
gametype = level.gametype;
|
|
if ( isDefined( game[ "gameRep" ][ "gameLimit" ][ gametype ] ) )
|
|
{
|
|
if ( isDefined( game[ "gameRep" ][ "gameLimit" ][ gametype ][ paramname ] ) )
|
|
{
|
|
return game[ "gameRep" ][ "gameLimit" ][ gametype ][ paramname ];
|
|
}
|
|
}
|
|
if ( isDefined( game[ "gameRep" ][ "gameLimit" ][ "default" ][ paramname ] ) )
|
|
{
|
|
return game[ "gameRep" ][ "gameLimit" ][ "default" ][ paramname ];
|
|
}
|
|
/#
|
|
assertmsg( "Default values for parameter " + paramname + " is not defined." );
|
|
#/
|
|
}
|
|
|
|
setmaximumparamvalueforcurrentgame( paramname, value )
|
|
{
|
|
if ( !isDefined( game[ "gameRep" ][ "max" ][ paramname ] ) )
|
|
{
|
|
game[ "gameRep" ][ "max" ][ paramname ] = value;
|
|
return;
|
|
}
|
|
if ( game[ "gameRep" ][ "max" ][ paramname ] < value )
|
|
{
|
|
game[ "gameRep" ][ "max" ][ paramname ] = value;
|
|
}
|
|
}
|
|
|
|
gamerepupdateinformationforround()
|
|
{
|
|
if ( !isgamerepenabled() )
|
|
{
|
|
return;
|
|
}
|
|
players = get_players();
|
|
i = 0;
|
|
while ( i < players.size )
|
|
{
|
|
player = players[ i ];
|
|
player gamerepupdatenonpersistentplayerinformation();
|
|
i++;
|
|
}
|
|
}
|
|
|
|
gamerepanalyzeandreport()
|
|
{
|
|
if ( !isgamerepenabled() )
|
|
{
|
|
return;
|
|
}
|
|
players = get_players();
|
|
i = 0;
|
|
while ( i < players.size )
|
|
{
|
|
player = players[ i ];
|
|
player gamerepupdatepersistentplayerinformation();
|
|
i++;
|
|
}
|
|
splitscreenplayercount = 0;
|
|
i = 0;
|
|
while ( i < game[ "gameRep" ][ "playerNames" ].size )
|
|
{
|
|
playername = game[ "gameRep" ][ "playerNames" ][ i ];
|
|
j = 0;
|
|
while ( j < game[ "gameRep" ][ "params" ].size )
|
|
{
|
|
paramname = game[ "gameRep" ][ "params" ][ j ];
|
|
if ( isgamerepparamvalid( paramname ) )
|
|
{
|
|
setmaximumparamvalueforcurrentgame( paramname, getparamvalueforplayer( playername, paramname ) );
|
|
}
|
|
j++;
|
|
}
|
|
paramname = "splitscreen";
|
|
splitscreenplayercount += getparamvalueforplayer( playername, paramname );
|
|
i++;
|
|
}
|
|
setmaximumparamvalueforcurrentgame( paramname, splitscreenplayercount );
|
|
j = 0;
|
|
while ( j < game[ "gameRep" ][ "params" ].size )
|
|
{
|
|
paramname = game[ "gameRep" ][ "params" ][ j ];
|
|
if ( isgamerepparamvalid( paramname ) && game[ "gameRep" ][ "max" ][ paramname ] >= getgamerepparamlimit( paramname ) )
|
|
{
|
|
gamerepprepareandreport( paramname );
|
|
}
|
|
j++;
|
|
}
|
|
paramname = "splitscreen";
|
|
if ( game[ "gameRep" ][ "max" ][ paramname ] >= getgamerepparamlimit( paramname ) )
|
|
{
|
|
gamerepprepareandreport( paramname );
|
|
}
|
|
}
|
|
|
|
gamerepprepareandreport( paramname )
|
|
{
|
|
if ( !isDefined( game[ "gameRep" ][ "gameLimit" ][ "id" ][ paramname ] ) )
|
|
{
|
|
return;
|
|
}
|
|
if ( isgamerepparamignoredforreporting( paramname ) )
|
|
{
|
|
return;
|
|
}
|
|
gamerepthresholdexceeded( game[ "gameRep" ][ "gameLimit" ][ "id" ][ paramname ] );
|
|
}
|