main() { replacefunc( maps\mp\gametypes\_rank::init, ::init_stub ); replacefunc( maps\mp\gametypes\_rank::syncxpstat, ::syncxpstat_stub ); replacefunc( maps\mp\gametypes\_menus::onmenuresponse, ::onmenuresponse_stub ); if ( getdvarint( "scr_oldscavenger", 0 ) == 1 ) { replacefunc( maps\mp\gametypes\_weapons::handlescavengerbagpickup, ::handlescavengerbagpickup_stub ); } } init() { if ( getdvarint( "scr_forcerankedmatch", 0 ) == 1 ) { level.onlineGame = true; level.rankedmatch = true; /# print( "[script]: Forced ranked\n" ); #/ } } init_stub() { level.scoreinfo = []; level.xpscale = getdvarint( "scr_xpscale" ); level.xpscale = max( level.xpscale, 1 ); level.ranktable = []; level.weaponranktable = []; precacheshader( "white" ); precachestring( &"RANK_PLAYER_WAS_PROMOTED_N" ); precachestring( &"RANK_PLAYER_WAS_PROMOTED" ); precachestring( &"RANK_WEAPON_WAS_PROMOTED" ); precachestring( &"RANK_PROMOTED" ); precachestring( &"RANK_PROMOTED_WEAPON" ); precachestring( &"MP_PLUS" ); precachestring( &"RANK_ROMANI" ); precachestring( &"RANK_ROMANII" ); precachestring( &"RANK_ROMANIII" ); precachestring( &"SPLASHES_LONGSHOT" ); precachestring( &"SPLASHES_PROXIMITYASSIST" ); precachestring( &"SPLASHES_PROXIMITYKILL" ); precachestring( &"SPLASHES_EXECUTION" ); precachestring( &"SPLASHES_AVENGER" ); precachestring( &"SPLASHES_ASSISTEDSUICIDE" ); precachestring( &"SPLASHES_DEFENDER" ); precachestring( &"SPLASHES_POSTHUMOUS" ); precachestring( &"SPLASHES_REVENGE" ); precachestring( &"SPLASHES_DOUBLEKILL" ); precachestring( &"SPLASHES_TRIPLEKILL" ); precachestring( &"SPLASHES_MULTIKILL" ); precachestring( &"SPLASHES_BUZZKILL" ); precachestring( &"SPLASHES_COMEBACK" ); precachestring( &"SPLASHES_KNIFETHROW" ); precachestring( &"SPLASHES_ONE_SHOT_KILL" ); if ( level.teambased ) { maps\mp\gametypes\_rank::registerscoreinfo( "kill", 100 ); maps\mp\gametypes\_rank::registerscoreinfo( "headshot", 100 ); maps\mp\gametypes\_rank::registerscoreinfo( "assist", 20 ); maps\mp\gametypes\_rank::registerscoreinfo( "proximityassist", 20 ); maps\mp\gametypes\_rank::registerscoreinfo( "proximitykill", 20 ); maps\mp\gametypes\_rank::registerscoreinfo( "suicide", 0 ); maps\mp\gametypes\_rank::registerscoreinfo( "teamkill", 0 ); } else { maps\mp\gametypes\_rank::registerscoreinfo( "kill", 50 ); maps\mp\gametypes\_rank::registerscoreinfo( "headshot", 50 ); maps\mp\gametypes\_rank::registerscoreinfo( "assist", 0 ); maps\mp\gametypes\_rank::registerscoreinfo( "suicide", 0 ); maps\mp\gametypes\_rank::registerscoreinfo( "teamkill", 0 ); } maps\mp\gametypes\_rank::registerscoreinfo( "win", 1 ); maps\mp\gametypes\_rank::registerscoreinfo( "loss", 0.5 ); maps\mp\gametypes\_rank::registerscoreinfo( "tie", 0.75 ); maps\mp\gametypes\_rank::registerscoreinfo( "capture", 300 ); maps\mp\gametypes\_rank::registerscoreinfo( "defend", 300 ); maps\mp\gametypes\_rank::registerscoreinfo( "challenge", 2500 ); level.maxrank = int( tablelookup( "mp/rankTable.csv", 0, "maxrank", 1 ) ); level.maxprestige = int( tablelookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 ) ); var_0 = 0; var_1 = 0; for ( var_0 = 0; var_0 <= 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(); maps\mp\gametypes\_persistence::statset( "experience", var_0 ); } onmenuresponse_stub() { self endon( "disconnect" ); for (;;) { self waittill( "menuresponse", var_0, var_1 ); if ( var_1 == "back" ) { self closepopupmenu(); self closeingamemenu(); if ( maps\mp\gametypes\_menus::isoptionsmenu( var_0 ) ) { if ( self.pers["team"] == "allies" ) self openpopupmenu( game["menu_class_allies"] ); if ( self.pers["team"] == "axis" ) self openpopupmenu( game["menu_class_axis"] ); } continue; } if ( var_1 == "changeteam" ) { self closepopupmenu(); self closeingamemenu(); self openpopupmenu( game["menu_team"] ); } if ( var_1 == "changeclass_marines" ) { self closepopupmenu(); self closeingamemenu(); self openpopupmenu( game["menu_changeclass_allies"] ); continue; } if ( var_1 == "changeclass_opfor" ) { self closepopupmenu(); self closeingamemenu(); self openpopupmenu( game["menu_changeclass_axis"] ); continue; } if ( var_1 == "changeclass_marines_splitscreen" ) self openpopupmenu( "changeclass_marines_splitscreen" ); if ( var_1 == "changeclass_opfor_splitscreen" ) self openpopupmenu( "changeclass_opfor_splitscreen" ); if ( var_1 == "endgame" ) { continue; } if ( var_1 == "endround" ) { if ( !self ishost() ) { continue; } if ( !level.gameended ) level thread maps\mp\gametypes\_gamelogic::forceend(); else { self closepopupmenu(); self closeingamemenu(); self iprintln( &"MP_HOST_ENDGAME_RESPONSE" ); } continue; } if ( var_0 == game["menu_team"] ) { switch ( var_1 ) { case "allies": self [[ level.allies ]](); break; case "axis": self [[ level.axis ]](); break; case "autoassign": self [[ level.autoassign ]](); break; case "spectator": self [[ level.spectator ]](); break; } continue; } if ( var_0 == game["menu_changeclass"] || isdefined( game["menu_changeclass_defaults_splitscreen"] ) && var_0 == game["menu_changeclass_defaults_splitscreen"] || isdefined( game["menu_changeclass_custom_splitscreen"] ) && var_0 == game["menu_changeclass_custom_splitscreen"] ) { self closepopupmenu(); self closeingamemenu(); self.selectedclass = 1; self [[ level.class ]]( var_1 ); continue; } if ( var_0 == game["menu_quickcommands"] ) { maps\mp\gametypes\_quickmessages::quickcommands( var_1 ); continue; } if ( var_0 == game["menu_quickstatements"] ) { maps\mp\gametypes\_quickmessages::quickstatements( var_1 ); continue; } if ( var_0 == game["menu_quickresponses"] ) maps\mp\gametypes\_quickmessages::quickresponses( var_1 ); } } handlescavengerbagpickup_stub( var_0 ) { self endon( "death" ); level endon( "game_ended" ); assert( isdefined( var_0 ) ); self waittill( "scavenger", var_1 ); assert( isdefined ( var_1 ) ); var_1 notify( "scavenger_pickup" ); var_1 playlocalsound( "scavenger_pack_pickup" ); var_2 = var_1 getweaponslistoffhands(); foreach ( var_4 in var_2 ) { var_5 = var_1 getweaponammoclip( var_4 ); var_1 setweaponammoclip( var_4, var_5 + 1 ); } var_7 = var_1 getweaponslistprimaries(); foreach ( var_9 in var_7 ) { if ( !maps\mp\_utility::iscacprimaryweapon( var_9 ) && !level.scavenger_secondary ) continue; var_10 = var_1 getweaponammostock( var_9 ); var_11 = weaponclipsize( var_9 ); var_1 setweaponammostock( var_9, var_10 + var_11 ); } var_1 maps\mp\gametypes\_damagefeedback::updatedamagefeedback( "scavenger" ); }