iw6-mod/data/scripts/mp/_patches.gsc
2025-02-20 05:51:12 -05:00

111 lines
3.7 KiB
Plaintext

#include common_scripts\utility;
main()
{
replacefunc( maps\mp\gametypes\_rank::init, ::init_stub );
replacefunc( maps\mp\gametypes\_rank::syncxpstat, ::syncxpstat_stub );
replacefunc( common_scripts\utility::set_trigger_flag_permissions, ::set_trigger_flag_permissions_stub );
}
init_stub()
{
level.scoreinfo = [];
level.xpscale = getdvarint( "scr_xpscale" );
level.xpscale = max( level.xpscale, 1 );
level.teamxpscale["axis"] = 1;
level.teamxpscale["allies"] = 1;
level.ranktable = [];
level.weaponranktable = [];
level.maxrank = int( tablelookup( "mp/rankTable.csv", 0, "maxrank", 1 ) );
level.maxprestige = int( tablelookup( "mp/rankTable.csv", 0, "maxprestige", 1 ) );
level.maxforbotmatch = getdvarint( "max_xp_per_match", 0 );
var_0 = 0;
var_1 = 0;
for ( var_0 = 0; var_0 <= min( 10, level.maxprestige ); var_0++ )
{
for ( var_1 = 0; var_1 <= level.maxrank; var_1++ )
precacheshader( tablelookup( "mp/rankIconTable.csv", 0, var_1, var_0 + 1 ) );
}
var_2 = 0;
for ( var_3 = tablelookup( "mp/rankTable.csv", 0, var_2, 1 ); isdefined( var_3 ) && var_3 != ""; var_3 = tablelookup( "mp/rankTable.csv", 0, var_2, 1 ) )
{
level.ranktable[var_2][1] = tablelookup( "mp/rankTable.csv", 0, var_2, 1 );
level.ranktable[var_2][2] = tablelookup( "mp/rankTable.csv", 0, var_2, 2 );
level.ranktable[var_2][3] = tablelookup( "mp/rankTable.csv", 0, var_2, 3 );
level.ranktable[var_2][7] = tablelookup( "mp/rankTable.csv", 0, var_2, 7 );
precachestring( tablelookupistring( "mp/rankTable.csv", 0, var_2, 16 ) );
var_2++;
}
var_4 = int( tablelookup( "mp/weaponRankTable.csv", 0, "maxrank", 1 ) );
for ( var_5 = 0; var_5 < var_4 + 1; var_5++ )
{
level.weaponranktable[var_5][1] = tablelookup( "mp/weaponRankTable.csv", 0, var_5, 1 );
level.weaponranktable[var_5][2] = tablelookup( "mp/weaponRankTable.csv", 0, var_5, 2 );
level.weaponranktable[var_5][3] = tablelookup( "mp/weaponRankTable.csv", 0, var_5, 3 );
}
maps\mp\gametypes\_missions::buildchallegeinfo();
level thread maps\mp\gametypes\_rank::patientzerowaiter();
level thread maps\mp\gametypes\_rank::onplayerconnect();
}
syncxpstat_stub()
{
var_0 = maps\mp\gametypes\_rank::getrankxp();
var_1 = self.pers["activeSquadMember"];
/#
// Attempt to catch xp regression
old_xp = self getrankedplayerdata( "squadMembers", var_1, "squadMemXP" );
assert( var_0 >= old_xp, "Attempted XP regression in syncXPStat - " + old_xp + " -> " + var_0 + " for player " + self.name );
#/
self setrankedplayerdata( "squadMembers", var_1, "squadMemXP", var_0 );
self setrankedplayerdata( "experience", var_0 );
if ( var_0 >= maps\mp\gametypes\_rank::getrankinfomaxxp( level.maxrank ) )
{
var_3 = self getrankedplayerdata( "characterXP", var_1 );
if ( var_3 == 0 )
{
var_4 = getsystemtime();
self setrankedplayerdata( "characterXP", var_1, var_4 );
var_5 = self getrankedplayerdatareservedint( "prestigeLevel" );
var_6 = var_5 + 1;
self setrankedplayerdatareservedint( "prestigeLevel", var_6 );
self setrank( level.maxrank, var_6 );
thread maps\mp\gametypes\_hud_message::splashnotifyurgent( "prestige" + var_6 );
var_7 = self.pers["team"];
for ( var_8 = 0; var_8 < level.players.size; var_8++ )
{
var_9 = level.players[var_8];
var_10 = var_9.pers["team"];
if ( isdefined( var_10 ) && var_9 != self )
{
if ( var_10 == var_7 )
var_9 iprintln( &"RANK_PLAYER_WAS_PROMOTED", self, &"MPUI_PRESTIGE" );
}
}
}
}
}
set_trigger_flag_permissions_stub( var_0 )
{
if ( !isdefined( level.trigger_flags ) || !isdefined( level.trigger_flags[var_0] ) )
return;
level.trigger_flags[var_0] = array_removeundefined( level.trigger_flags[var_0] );
array_thread( level.trigger_flags[var_0], ::update_trigger_based_on_flags );
}