diff --git a/scripts/mp/_patches.gsc b/scripts/mp/_patches.gsc index 13c8954..d43f862 100644 --- a/scripts/mp/_patches.gsc +++ b/scripts/mp/_patches.gsc @@ -2,9 +2,104 @@ 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] ) )