// IW6 GSC SOURCE // Generated by https://github.com/xensik/gsc-tool exploder_sound() { if ( isdefined( self.script_delay ) ) wait( self.script_delay ); self playsound( level.scr_sound[self.script_sound] ); } _beginlocationselection( var_0, var_1, var_2, var_3 ) { self beginlocationselection( var_1, var_2, var_3 ); self.selectinglocation = 1; self setblurforplayer( 10.3, 0.3 ); thread endselectiononaction( "cancel_location" ); thread endselectiononaction( "death" ); thread endselectiononaction( "disconnect" ); thread endselectiononaction( "used" ); thread endselectiononaction( "weapon_change" ); self endon( "stop_location_selection" ); thread endselectiononendgame(); thread endselectiononemp(); if ( isdefined( var_0 ) && self.team != "spectator" ) { if ( isdefined( self.streakmsg ) ) self.streakmsg destroy(); if ( self issplitscreenplayer() ) { self.streakmsg = maps\mp\gametypes\_hud_util::createfontstring( "default", 1.3 ); self.streakmsg maps\mp\gametypes\_hud_util::setpoint( "CENTER", "CENTER", 0, -98 ); } else { self.streakmsg = maps\mp\gametypes\_hud_util::createfontstring( "default", 1.6 ); self.streakmsg maps\mp\gametypes\_hud_util::setpoint( "CENTER", "CENTER", 0, -190 ); } var_4 = getkillstreakname( var_0 ); self.streakmsg settext( var_4 ); } } stoplocationselection( var_0, var_1 ) { if ( !isdefined( var_1 ) ) var_1 = "generic"; if ( !var_0 ) { self setblurforplayer( 0, 0.3 ); self endlocationselection(); self.selectinglocation = undefined; if ( isdefined( self.streakmsg ) ) self.streakmsg destroy(); } self notify( "stop_location_selection", var_1 ); } endselectiononemp() { self endon( "stop_location_selection" ); for (;;) { level waittill( "emp_update" ); if ( !isemped() ) continue; thread stoplocationselection( 0, "emp" ); return; } } endselectiononaction( var_0 ) { self endon( "stop_location_selection" ); self waittill( var_0 ); thread stoplocationselection( var_0 == "disconnect", var_0 ); } endselectiononendgame() { self endon( "stop_location_selection" ); level waittill( "game_ended" ); thread stoplocationselection( 0, "end_game" ); } isattachment( var_0 ) { if ( is_aliens() ) var_1 = tablelookup( "mp/alien/alien_attachmentTable.csv", 4, var_0, 0 ); else var_1 = tablelookup( "mp/attachmentTable.csv", 4, var_0, 0 ); if ( isdefined( var_1 ) && var_1 != "" ) return 1; else return 0; } getattachmenttype( var_0 ) { if ( is_aliens() ) var_1 = tablelookup( "mp/alien/alien_attachmentTable.csv", 4, var_0, 2 ); else var_1 = tablelookup( "mp/attachmentTable.csv", 4, var_0, 2 ); return var_1; } delaythread( var_0, var_1, var_2, var_3, var_4, var_5, var_6 ) { thread delaythread_proc( var_1, var_0, var_2, var_3, var_4, var_5, var_6 ); } delaythread_proc( var_0, var_1, var_2, var_3, var_4, var_5, var_6 ) { wait( var_1 ); if ( !isdefined( var_2 ) ) thread [[ var_0 ]](); else if ( !isdefined( var_3 ) ) thread [[ var_0 ]]( var_2 ); else if ( !isdefined( var_4 ) ) thread [[ var_0 ]]( var_2, var_3 ); else if ( !isdefined( var_5 ) ) thread [[ var_0 ]]( var_2, var_3, var_4 ); else if ( !isdefined( var_6 ) ) thread [[ var_0 ]]( var_2, var_3, var_4, var_5 ); else thread [[ var_0 ]]( var_2, var_3, var_4, var_5, var_6 ); } array_contains_index( var_0, var_1 ) { foreach ( var_4, var_3 in var_0 ) { if ( var_4 == var_1 ) return 1; } return 0; } getplant() { var_0 = self.origin + ( 0, 0, 10 ); var_1 = 11; var_2 = anglestoforward( self.angles ); var_2 = var_2 * var_1; var_3[0] = var_0 + var_2; var_3[1] = var_0; var_4 = bullettrace( var_3[0], var_3[0] + ( 0, 0, -18 ), 0, undefined ); if ( var_4["fraction"] < 1 ) { var_5 = spawnstruct(); var_5.origin = var_4["position"]; var_5.angles = orienttonormal( var_4["normal"] ); return var_5; } var_4 = bullettrace( var_3[1], var_3[1] + ( 0, 0, -18 ), 0, undefined ); if ( var_4["fraction"] < 1 ) { var_5 = spawnstruct(); var_5.origin = var_4["position"]; var_5.angles = orienttonormal( var_4["normal"] ); return var_5; } var_3[2] = var_0 + ( 16, 16, 0 ); var_3[3] = var_0 + ( 16, -16, 0 ); var_3[4] = var_0 + ( -16, -16, 0 ); var_3[5] = var_0 + ( -16, 16, 0 ); var_6 = undefined; var_7 = undefined; for ( var_8 = 0; var_8 < var_3.size; var_8++ ) { var_4 = bullettrace( var_3[var_8], var_3[var_8] + ( 0, 0, -1000 ), 0, undefined ); if ( !isdefined( var_6 ) || var_4["fraction"] < var_6 ) { var_6 = var_4["fraction"]; var_7 = var_4["position"]; } } if ( var_6 == 1 ) var_7 = self.origin; var_5 = spawnstruct(); var_5.origin = var_7; var_5.angles = orienttonormal( var_4["normal"] ); return var_5; } orienttonormal( var_0 ) { var_1 = ( var_0[0], var_0[1], 0 ); var_2 = length( var_1 ); if ( !var_2 ) return ( 0, 0, 0 ); var_3 = vectornormalize( var_1 ); var_4 = var_0[2] * -1; var_5 = ( var_3[0] * var_4, var_3[1] * var_4, var_2 ); var_6 = vectortoangles( var_5 ); return var_6; } deleteplacedentity( var_0 ) { var_1 = getentarray( var_0, "classname" ); for ( var_2 = 0; var_2 < var_1.size; var_2++ ) var_1[var_2] delete(); } playsoundonplayers( var_0, var_1, var_2 ) { if ( level.splitscreen ) { if ( isdefined( level.players[0] ) ) level.players[0] playlocalsound( var_0 ); } else if ( isdefined( var_1 ) ) { if ( isdefined( var_2 ) ) { for ( var_3 = 0; var_3 < level.players.size; var_3++ ) { var_4 = level.players[var_3]; if ( var_4 issplitscreenplayer() && !var_4 issplitscreenplayerprimary() ) continue; if ( isdefined( var_4.pers["team"] ) && var_4.pers["team"] == var_1 && !isexcluded( var_4, var_2 ) ) var_4 playlocalsound( var_0 ); } return; } for ( var_3 = 0; var_3 < level.players.size; var_3++ ) { var_4 = level.players[var_3]; if ( var_4 issplitscreenplayer() && !var_4 issplitscreenplayerprimary() ) continue; if ( isdefined( var_4.pers["team"] ) && var_4.pers["team"] == var_1 ) var_4 playlocalsound( var_0 ); } return; } else if ( isdefined( var_2 ) ) { for ( var_3 = 0; var_3 < level.players.size; var_3++ ) { if ( level.players[var_3] issplitscreenplayer() && !level.players[var_3] issplitscreenplayerprimary() ) continue; if ( !isexcluded( level.players[var_3], var_2 ) ) level.players[var_3] playlocalsound( var_0 ); } } else { for ( var_3 = 0; var_3 < level.players.size; var_3++ ) { if ( level.players[var_3] issplitscreenplayer() && !level.players[var_3] issplitscreenplayerprimary() ) continue; level.players[var_3] playlocalsound( var_0 ); } } } sortlowermessages() { for ( var_0 = 1; var_0 < self.lowermessages.size; var_0++ ) { var_1 = self.lowermessages[var_0]; var_2 = var_1.priority; for ( var_3 = var_0 - 1; var_3 >= 0 && var_2 > self.lowermessages[var_3].priority; var_3-- ) self.lowermessages[var_3 + 1] = self.lowermessages[var_3]; self.lowermessages[var_3 + 1] = var_1; } } addlowermessage( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 ) { var_10 = undefined; foreach ( var_12 in self.lowermessages ) { if ( var_12.name == var_0 ) { if ( var_12.text == var_1 && var_12.priority == var_3 ) return; var_10 = var_12; break; } } if ( !isdefined( var_10 ) ) { var_10 = spawnstruct(); self.lowermessages[self.lowermessages.size] = var_10; } var_10.name = var_0; var_10.text = var_1; var_10.time = var_2; var_10.addtime = gettime(); var_10.priority = var_3; var_10.showtimer = var_4; var_10.shouldfade = var_5; var_10.fadetoalpha = var_6; var_10.fadetoalphatime = var_7; var_10.hidewhenindemo = var_8; var_10.hidewheninmenu = var_9; sortlowermessages(); } removelowermessage( var_0 ) { if ( isdefined( self.lowermessages ) ) { for ( var_1 = self.lowermessages.size; var_1 > 0; var_1-- ) { if ( self.lowermessages[var_1 - 1].name != var_0 ) continue; var_2 = self.lowermessages[var_1 - 1]; for ( var_3 = var_1; var_3 < self.lowermessages.size; var_3++ ) { if ( isdefined( self.lowermessages[var_3] ) ) self.lowermessages[var_3 - 1] = self.lowermessages[var_3]; } self.lowermessages[self.lowermessages.size - 1] = undefined; } sortlowermessages(); } } getlowermessage() { if ( !isdefined( self.lowermessages ) ) return undefined; return self.lowermessages[0]; } setlowermessage( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 ) { if ( !isdefined( var_3 ) ) var_3 = 1; if ( !isdefined( var_2 ) ) var_2 = 0; if ( !isdefined( var_4 ) ) var_4 = 0; if ( !isdefined( var_5 ) ) var_5 = 0; if ( !isdefined( var_6 ) ) var_6 = 0.85; if ( !isdefined( var_7 ) ) var_7 = 3.0; if ( !isdefined( var_8 ) ) var_8 = 0; if ( !isdefined( var_9 ) ) var_9 = 1; addlowermessage( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 ); updatelowermessage(); } updatelowermessage() { if ( !isdefined( self ) ) return; var_0 = getlowermessage(); if ( !isdefined( var_0 ) ) { if ( isdefined( self.lowermessage ) && isdefined( self.lowertimer ) ) { self.lowermessage.alpha = 0; self.lowertimer.alpha = 0; } } else { self.lowermessage settext( var_0.text ); self.lowermessage.alpha = 0.85; self.lowertimer.alpha = 1; self.lowermessage.hidewhenindemo = var_0.hidewhenindemo; self.lowermessage.hidewheninmenu = var_0.hidewheninmenu; if ( var_0.shouldfade ) { self.lowermessage fadeovertime( min( var_0.fadetoalphatime, 60 ) ); self.lowermessage.alpha = var_0.fadetoalpha; } if ( var_0.time > 0 && var_0.showtimer ) self.lowertimer settimer( max( var_0.time - ( gettime() - var_0.addtime ) / 1000, 0.1 ) ); else { if ( var_0.time > 0 && !var_0.showtimer ) { self.lowertimer settext( "" ); self.lowermessage fadeovertime( min( var_0.time, 60 ) ); self.lowermessage.alpha = 0; thread clearondeath( var_0 ); thread clearafterfade( var_0 ); return; } self.lowertimer settext( "" ); } } } clearondeath( var_0 ) { self notify( "message_cleared" ); self endon( "message_cleared" ); self endon( "disconnect" ); level endon( "game_ended" ); self waittill( "death" ); clearlowermessage( var_0.name ); } clearafterfade( var_0 ) { wait( var_0.time ); clearlowermessage( var_0.name ); self notify( "message_cleared" ); } clearlowermessage( var_0 ) { removelowermessage( var_0 ); updatelowermessage(); } clearlowermessages() { for ( var_0 = 0; var_0 < self.lowermessages.size; var_0++ ) self.lowermessages[var_0] = undefined; if ( !isdefined( self.lowermessage ) ) return; updatelowermessage(); } printonteam( var_0, var_1 ) { foreach ( var_3 in level.players ) { if ( var_3.team != var_1 ) continue; var_3 iprintln( var_0 ); } } printboldonteam( var_0, var_1 ) { for ( var_2 = 0; var_2 < level.players.size; var_2++ ) { var_3 = level.players[var_2]; if ( isdefined( var_3.pers["team"] ) && var_3.pers["team"] == var_1 ) var_3 iprintlnbold( var_0 ); } } printboldonteamarg( var_0, var_1, var_2 ) { for ( var_3 = 0; var_3 < level.players.size; var_3++ ) { var_4 = level.players[var_3]; if ( isdefined( var_4.pers["team"] ) && var_4.pers["team"] == var_1 ) var_4 iprintlnbold( var_0, var_2 ); } } printonteamarg( var_0, var_1, var_2 ) { for ( var_3 = 0; var_3 < level.players.size; var_3++ ) { var_4 = level.players[var_3]; if ( isdefined( var_4.pers["team"] ) && var_4.pers["team"] == var_1 ) var_4 iprintln( var_0, var_2 ); } } printonplayers( var_0, var_1 ) { var_2 = level.players; for ( var_3 = 0; var_3 < var_2.size; var_3++ ) { if ( isdefined( var_1 ) ) { if ( isdefined( var_2[var_3].pers["team"] ) && var_2[var_3].pers["team"] == var_1 ) var_2[var_3] iprintln( var_0 ); continue; } var_2[var_3] iprintln( var_0 ); } } printandsoundoneveryone( var_0, var_1, var_2, var_3, var_4, var_5, var_6 ) { var_7 = isdefined( var_4 ); var_8 = 0; if ( isdefined( var_5 ) ) var_8 = 1; if ( level.splitscreen || !var_7 ) { for ( var_9 = 0; var_9 < level.players.size; var_9++ ) { var_10 = level.players[var_9]; var_11 = var_10.team; if ( isdefined( var_11 ) ) { if ( var_11 == var_0 && isdefined( var_2 ) ) { var_10 iprintln( var_2, var_6 ); continue; } if ( var_11 == var_1 && isdefined( var_3 ) ) var_10 iprintln( var_3, var_6 ); } } if ( var_7 ) level.players[0] playlocalsound( var_4 ); } else if ( var_8 ) { for ( var_9 = 0; var_9 < level.players.size; var_9++ ) { var_10 = level.players[var_9]; var_11 = var_10.team; if ( isdefined( var_11 ) ) { if ( var_11 == var_0 ) { if ( isdefined( var_2 ) ) var_10 iprintln( var_2, var_6 ); var_10 playlocalsound( var_4 ); continue; } if ( var_11 == var_1 ) { if ( isdefined( var_3 ) ) var_10 iprintln( var_3, var_6 ); var_10 playlocalsound( var_5 ); } } } } else { for ( var_9 = 0; var_9 < level.players.size; var_9++ ) { var_10 = level.players[var_9]; var_11 = var_10.team; if ( isdefined( var_11 ) ) { if ( var_11 == var_0 ) { if ( isdefined( var_2 ) ) var_10 iprintln( var_2, var_6 ); var_10 playlocalsound( var_4 ); continue; } if ( var_11 == var_1 ) { if ( isdefined( var_3 ) ) var_10 iprintln( var_3, var_6 ); } } } } } printandsoundonteam( var_0, var_1, var_2 ) { foreach ( var_4 in level.players ) { if ( var_4.team != var_0 ) continue; var_4 printandsoundonplayer( var_1, var_2 ); } } printandsoundonplayer( var_0, var_1 ) { self iprintln( var_0 ); self playlocalsound( var_1 ); } _playlocalsound( var_0 ) { if ( level.splitscreen && self getentitynumber() != 0 ) return; self playlocalsound( var_0 ); } dvarintvalue( var_0, var_1, var_2, var_3 ) { var_0 = "scr_" + level.gametype + "_" + var_0; if ( getdvar( var_0 ) == "" ) { setdvar( var_0, var_1 ); return var_1; } var_4 = getdvarint( var_0 ); if ( var_4 > var_3 ) var_4 = var_3; else if ( var_4 < var_2 ) var_4 = var_2; else return var_4; setdvar( var_0, var_4 ); return var_4; } dvarfloatvalue( var_0, var_1, var_2, var_3 ) { var_0 = "scr_" + level.gametype + "_" + var_0; if ( getdvar( var_0 ) == "" ) { setdvar( var_0, var_1 ); return var_1; } var_4 = getdvarfloat( var_0 ); if ( var_4 > var_3 ) var_4 = var_3; else if ( var_4 < var_2 ) var_4 = var_2; else return var_4; setdvar( var_0, var_4 ); return var_4; } play_sound_on_tag( var_0, var_1 ) { if ( isdefined( var_1 ) ) playsoundatpos( self gettagorigin( var_1 ), var_0 ); else playsoundatpos( self.origin, var_0 ); } getotherteam( var_0 ) { if ( level.multiteambased ) { } if ( var_0 == "allies" ) return "axis"; else if ( var_0 == "axis" ) return "allies"; else return "none"; } wait_endon( var_0, var_1, var_2, var_3 ) { self endon( var_1 ); if ( isdefined( var_2 ) ) self endon( var_2 ); if ( isdefined( var_3 ) ) self endon( var_3 ); wait( var_0 ); } initpersstat( var_0 ) { if ( !isdefined( self.pers[var_0] ) ) self.pers[var_0] = 0; } getpersstat( var_0 ) { return self.pers[var_0]; } incpersstat( var_0, var_1, var_2 ) { if ( isdefined( self ) && isdefined( self.pers ) && isdefined( self.pers[var_0] ) ) { self.pers[var_0] = self.pers[var_0] + var_1; if ( !isdefined( var_2 ) || var_2 == 0 ) maps\mp\gametypes\_persistence::statadd( var_0, var_1 ); } } setpersstat( var_0, var_1 ) { self.pers[var_0] = var_1; } initplayerstat( var_0, var_1 ) { if ( !isdefined( self.stats["stats_" + var_0] ) ) { if ( !isdefined( var_1 ) ) var_1 = 0; self.stats["stats_" + var_0] = spawnstruct(); self.stats["stats_" + var_0].value = var_1; } } incplayerstat( var_0, var_1 ) { if ( isagent( self ) || isbot( self ) ) return; var_2 = self.stats["stats_" + var_0]; var_2.value = var_2.value + var_1; } setplayerstat( var_0, var_1 ) { var_2 = self.stats["stats_" + var_0]; var_2.value = var_1; var_2.time = gettime(); } getplayerstat( var_0 ) { return self.stats["stats_" + var_0].value; } getplayerstattime( var_0 ) { return self.stats["stats_" + var_0].time; } setplayerstatifgreater( var_0, var_1 ) { var_2 = getplayerstat( var_0 ); if ( var_1 > var_2 ) setplayerstat( var_0, var_1 ); } setplayerstatiflower( var_0, var_1 ) { var_2 = getplayerstat( var_0 ); if ( var_1 < var_2 ) setplayerstat( var_0, var_1 ); } updatepersratio( var_0, var_1, var_2 ) { if ( !rankingenabled() ) return; var_3 = maps\mp\gametypes\_persistence::statget( var_1 ); var_4 = maps\mp\gametypes\_persistence::statget( var_2 ); if ( var_4 == 0 ) var_4 = 1; maps\mp\gametypes\_persistence::statset( var_0, int( var_3 * 1000 / var_4 ) ); } updatepersratiobuffered( var_0, var_1, var_2 ) { if ( !rankingenabled() ) return; var_3 = maps\mp\gametypes\_persistence::statgetbuffered( var_1 ); var_4 = maps\mp\gametypes\_persistence::statgetbuffered( var_2 ); if ( var_4 == 0 ) var_4 = 1; maps\mp\gametypes\_persistence::statsetbuffered( var_0, int( var_3 * 1000 / var_4 ) ); } waittillslowprocessallowed( var_0 ) { if ( level.lastslowprocessframe == gettime() ) { if ( isdefined( var_0 ) && var_0 ) { while ( level.lastslowprocessframe == gettime() ) wait 0.05; } else { wait 0.05; if ( level.lastslowprocessframe == gettime() ) { wait 0.05; if ( level.lastslowprocessframe == gettime() ) { wait 0.05; if ( level.lastslowprocessframe == gettime() ) wait 0.05; } } } } level.lastslowprocessframe = gettime(); } waitfortimeornotify( var_0, var_1 ) { self endon( var_1 ); wait( var_0 ); } isexcluded( var_0, var_1 ) { for ( var_2 = 0; var_2 < var_1.size; var_2++ ) { if ( var_0 == var_1[var_2] ) return 1; } return 0; } leaderdialog( var_0, var_1, var_2, var_3, var_4 ) { var_5 = game["dialog"][var_0]; if ( !isdefined( var_5 ) ) return; var_6 = game["voice"]["allies"] + var_5; var_7 = game["voice"]["axis"] + var_5; queuedialog( var_6, var_7, var_0, 2, var_1, var_2, var_3, var_4 ); } leaderdialogonplayers( var_0, var_1, var_2, var_3 ) { foreach ( var_5 in var_1 ) var_5 leaderdialogonplayer( var_0, var_2, undefined, var_3 ); } leaderdialogonplayer( var_0, var_1, var_2, var_3 ) { if ( !isdefined( game["dialog"][var_0] ) ) return; var_4 = self.pers["team"]; if ( isdefined( var_4 ) && ( var_4 == "axis" || var_4 == "allies" ) ) { var_5 = game["voice"][var_4] + game["dialog"][var_0]; self queuedialogforplayer( var_5, var_0, 2, var_1, var_2, var_3 ); } } getnextrelevantdialog() { for ( var_0 = 0; var_0 < self.leaderdialogqueue.size; var_0++ ) { if ( issubstr( self.leaderdialogqueue[var_0], "losing" ) ) { if ( self.team == "allies" ) { if ( issubstr( level.axiscapturing, self.leaderdialogqueue[var_0] ) ) return self.leaderdialogqueue[var_0]; else common_scripts\utility::array_remove( self.leaderdialogqueue, self.leaderdialogqueue[var_0] ); } else if ( issubstr( level.alliescapturing, self.leaderdialogqueue[var_0] ) ) return self.leaderdialogqueue[var_0]; else common_scripts\utility::array_remove( self.leaderdialogqueue, self.leaderdialogqueue[var_0] ); continue; } return level.alliescapturing[self.leaderdialogqueue]; } } orderonqueueddialog() { self endon( "disconnect" ); var_0 = []; var_0 = self.leaderdialogqueue; for ( var_1 = 0; var_1 < self.leaderdialogqueue.size; var_1++ ) { if ( issubstr( self.leaderdialogqueue[var_1], "losing" ) ) { for ( var_2 = var_1; var_2 >= 0; var_2-- ) { if ( !issubstr( self.leaderdialogqueue[var_2], "losing" ) && var_2 != 0 ) continue; if ( var_2 != var_1 ) { arrayinsertion( var_0, self.leaderdialogqueue[var_1], var_2 ); common_scripts\utility::array_remove( var_0, self.leaderdialogqueue[var_1] ); break; } } } } self.leaderdialogqueue = var_0; } updatemainmenu() { if ( self.pers["team"] == "spectator" ) self setclientdvar( "g_scriptMainMenu", game["menu_team"] ); else self setclientdvar( "g_scriptMainMenu", game["menu_class_" + self.pers["team"]] ); } updateobjectivetext() { if ( self.pers["team"] == "spectator" ) self setclientdvar( "cg_objectiveText", "" ); else { if ( getwatcheddvar( "scorelimit" ) > 0 && !isobjectivebased() ) { if ( isdefined( getobjectivescoretext( self.pers["team"] ) ) ) { if ( level.splitscreen ) { self setclientdvar( "cg_objectiveText", getobjectivescoretext( self.pers["team"] ) ); return; } self setclientdvar( "cg_objectiveText", getobjectivescoretext( self.pers["team"] ), getwatcheddvar( "scorelimit" ) ); return; return; } return; } if ( isdefined( getobjectivetext( self.pers["team"] ) ) ) self setclientdvar( "cg_objectiveText", getobjectivetext( self.pers["team"] ) ); } } setobjectivetext( var_0, var_1 ) { game["strings"]["objective_" + var_0] = var_1; } setobjectivescoretext( var_0, var_1 ) { game["strings"]["objective_score_" + var_0] = var_1; } setobjectivehinttext( var_0, var_1 ) { game["strings"]["objective_hint_" + var_0] = var_1; } getobjectivetext( var_0 ) { return game["strings"]["objective_" + var_0]; } getobjectivescoretext( var_0 ) { return game["strings"]["objective_score_" + var_0]; } getobjectivehinttext( var_0 ) { return game["strings"]["objective_hint_" + var_0]; } gettimepassed() { if ( !isdefined( level.starttime ) || !isdefined( level.discardtime ) ) return 0; if ( level.timerstopped ) return level.timerpausetime - level.starttime - level.discardtime; else return gettime() - level.starttime - level.discardtime; } gettimepassedpercentage() { return gettimepassed() / ( gettimelimit() * 60 * 1000 ) * 100; } getsecondspassed() { return gettimepassed() / 1000; } getminutespassed() { return getsecondspassed() / 60; } clearkillcamstate() { self.forcespectatorclient = -1; self.killcamentity = -1; self.archivetime = 0; self.psoffsettime = 0; self.spectatekillcam = 0; } isinkillcam() { return self.spectatekillcam; } isvalidclass( var_0 ) { return isdefined( var_0 ) && var_0 != ""; } getvalueinrange( var_0, var_1, var_2 ) { if ( var_0 > var_2 ) return var_2; else if ( var_0 < var_1 ) return var_1; else return var_0; } waitfortimeornotifies( var_0 ) { var_1 = gettime(); var_2 = ( gettime() - var_1 ) / 1000; if ( var_2 < var_0 ) { wait( var_0 - var_2 ); return var_0; } else return var_2; } logxpgains() { if ( !isdefined( self.xpgains ) ) return; var_0 = getarraykeys( self.xpgains ); for ( var_1 = 0; var_1 < var_0.size; var_1++ ) { var_2 = self.xpgains[var_0[var_1]]; if ( !var_2 ) continue; self logstring( "xp " + var_0[var_1] + ": " + var_2 ); } } registerroundswitchdvar( var_0, var_1, var_2, var_3 ) { registerwatchdvarint( "roundswitch", var_1 ); var_0 = "scr_" + var_0 + "_roundswitch"; level.roundswitchdvar = var_0; level.roundswitchmin = var_2; level.roundswitchmax = var_3; level.roundswitch = getdvarint( var_0, var_1 ); if ( level.roundswitch < var_2 ) level.roundswitch = var_2; else if ( level.roundswitch > var_3 ) level.roundswitch = var_3; } registerroundlimitdvar( var_0, var_1 ) { registerwatchdvarint( "roundlimit", var_1 ); } registernumteamsdvar( var_0, var_1 ) { registerwatchdvarint( "numTeams", var_1 ); } registerwinlimitdvar( var_0, var_1 ) { registerwatchdvarint( "winlimit", var_1 ); } registerscorelimitdvar( var_0, var_1 ) { registerwatchdvarint( "scorelimit", var_1 ); } registertimelimitdvar( var_0, var_1 ) { registerwatchdvarfloat( "timelimit", var_1 ); setdvar( "ui_timelimit", gettimelimit() ); } registerhalftimedvar( var_0, var_1 ) { registerwatchdvarint( "halftime", var_1 ); setdvar( "ui_halftime", gethalftime() ); } registernumlivesdvar( var_0, var_1 ) { registerwatchdvarint( "numlives", var_1 ); } setovertimelimitdvar( var_0 ) { setdvar( "overtimeTimeLimit", var_0 ); } get_damageable_player( var_0, var_1 ) { var_2 = spawnstruct(); var_2.isplayer = 1; var_2.isadestructable = 0; var_2.entity = var_0; var_2.damagecenter = var_1; return var_2; } get_damageable_sentry( var_0, var_1 ) { var_2 = spawnstruct(); var_2.isplayer = 0; var_2.isadestructable = 0; var_2.issentry = 1; var_2.entity = var_0; var_2.damagecenter = var_1; return var_2; } get_damageable_grenade( var_0, var_1 ) { var_2 = spawnstruct(); var_2.isplayer = 0; var_2.isadestructable = 0; var_2.entity = var_0; var_2.damagecenter = var_1; return var_2; } get_damageable_mine( var_0, var_1 ) { var_2 = spawnstruct(); var_2.isplayer = 0; var_2.isadestructable = 0; var_2.entity = var_0; var_2.damagecenter = var_1; return var_2; } get_damageable_player_pos( var_0 ) { return var_0.origin + ( 0, 0, 32 ); } getstancecenter() { if ( self getstance() == "crouch" ) var_0 = self.origin + ( 0, 0, 24 ); else if ( self getstance() == "prone" ) var_0 = self.origin + ( 0, 0, 10 ); else var_0 = self.origin + ( 0, 0, 32 ); return var_0; } get_damageable_grenade_pos( var_0 ) { return var_0.origin; } getdvarvec( var_0 ) { var_1 = getdvar( var_0 ); if ( var_1 == "" ) return ( 0, 0, 0 ); var_2 = strtok( var_1, " " ); if ( var_2.size < 3 ) return ( 0, 0, 0 ); setdvar( "tempR", var_2[0] ); setdvar( "tempG", var_2[1] ); setdvar( "tempB", var_2[2] ); return ( getdvarfloat( "tempR" ), getdvarfloat( "tempG" ), getdvarfloat( "tempB" ) ); } strip_suffix( var_0, var_1 ) { if ( var_0.size <= var_1.size ) return var_0; if ( getsubstr( var_0, var_0.size - var_1.size, var_0.size ) == var_1 ) return getsubstr( var_0, 0, var_0.size - var_1.size ); return var_0; } _takeweaponsexcept( var_0 ) { var_1 = self getweaponslistall(); foreach ( var_3 in var_1 ) { if ( var_3 == var_0 ) continue; else self takeweapon( var_3 ); } } savedata() { var_0 = spawnstruct(); var_0.offhandclass = self getoffhandsecondaryclass(); var_0.actionslots = self.saved_actionslotdata; var_0.currentweapon = self getcurrentweapon(); var_1 = self getweaponslistall(); var_0.weapons = []; foreach ( var_3 in var_1 ) { if ( weaponinventorytype( var_3 ) == "exclusive" ) continue; if ( weaponinventorytype( var_3 ) == "altmode" ) continue; var_4 = spawnstruct(); var_4.name = var_3; var_4.clipammor = self getweaponammoclip( var_3, "right" ); var_4.clipammol = self getweaponammoclip( var_3, "left" ); var_4.stockammo = self getweaponammostock( var_3 ); if ( isdefined( self.throwinggrenade ) && self.throwinggrenade == var_3 ) var_4.stockammo--; var_0.weapons[var_0.weapons.size] = var_4; } self.script_savedata = var_0; } restoredata() { var_0 = self.script_savedata; self setoffhandsecondaryclass( var_0.offhandclass ); foreach ( var_2 in var_0.weapons ) { _giveweapon( var_2.name, int( tablelookup( "mp/camoTable.csv", 1, self.loadoutprimarycamo, 0 ) ) ); self setweaponammoclip( var_2.name, var_2.clipammor, "right" ); if ( issubstr( var_2.name, "akimbo" ) ) self setweaponammoclip( var_2.name, var_2.clipammol, "left" ); self setweaponammostock( var_2.name, var_2.stockammo ); } foreach ( var_6, var_5 in var_0.actionslots ) _setactionslot( var_6, var_5.type, var_5.item ); if ( self getcurrentweapon() == "none" ) { var_2 = var_0.currentweapon; if ( var_2 == "none" ) var_2 = common_scripts\utility::getlastweapon(); self setspawnweapon( var_2 ); self switchtoweapon( var_2 ); } } _setactionslot( var_0, var_1, var_2 ) { self.saved_actionslotdata[var_0].type = var_1; self.saved_actionslotdata[var_0].item = var_2; self setactionslot( var_0, var_1, var_2 ); } isfloat( var_0 ) { if ( int( var_0 ) != var_0 ) return 1; return 0; } registerwatchdvarint( var_0, var_1 ) { var_2 = "scr_" + level.gametype + "_" + var_0; level.watchdvars[var_2] = spawnstruct(); level.watchdvars[var_2].value = getdvarint( var_2, var_1 ); level.watchdvars[var_2].type = "int"; level.watchdvars[var_2].notifystring = "update_" + var_0; } registerwatchdvarfloat( var_0, var_1 ) { var_2 = "scr_" + level.gametype + "_" + var_0; level.watchdvars[var_2] = spawnstruct(); level.watchdvars[var_2].value = getdvarfloat( var_2, var_1 ); level.watchdvars[var_2].type = "float"; level.watchdvars[var_2].notifystring = "update_" + var_0; } registerwatchdvar( var_0, var_1 ) { var_2 = "scr_" + level.gametype + "_" + var_0; level.watchdvars[var_2] = spawnstruct(); level.watchdvars[var_2].value = getdvar( var_2, var_1 ); level.watchdvars[var_2].type = "string"; level.watchdvars[var_2].notifystring = "update_" + var_0; } setoverridewatchdvar( var_0, var_1 ) { var_0 = "scr_" + level.gametype + "_" + var_0; level.overridewatchdvars[var_0] = var_1; } getwatcheddvar( var_0 ) { var_0 = "scr_" + level.gametype + "_" + var_0; if ( isdefined( level.overridewatchdvars ) && isdefined( level.overridewatchdvars[var_0] ) ) return level.overridewatchdvars[var_0]; return level.watchdvars[var_0].value; } updatewatcheddvars() { while ( game["state"] == "playing" ) { var_0 = getarraykeys( level.watchdvars ); foreach ( var_2 in var_0 ) { if ( level.watchdvars[var_2].type == "string" ) var_3 = getproperty( var_2, level.watchdvars[var_2].value ); else if ( level.watchdvars[var_2].type == "float" ) var_3 = getfloatproperty( var_2, level.watchdvars[var_2].value ); else var_3 = getintproperty( var_2, level.watchdvars[var_2].value ); if ( var_3 != level.watchdvars[var_2].value ) { level.watchdvars[var_2].value = var_3; level notify( level.watchdvars[var_2].notifystring, var_3 ); } } wait 1.0; } } isroundbased() { if ( !level.teambased ) return 0; if ( getwatcheddvar( "winlimit" ) != 1 && getwatcheddvar( "roundlimit" ) != 1 ) return 1; if ( level.gametype == "sr" || level.gametype == "sd" || level.gametype == "siege" ) return 1; return 0; } isfirstround() { if ( !level.teambased ) return 1; if ( getwatcheddvar( "roundlimit" ) > 1 && game["roundsPlayed"] == 0 ) return 1; if ( getwatcheddvar( "winlimit" ) > 1 && game["roundsWon"]["allies"] == 0 && game["roundsWon"]["axis"] == 0 ) return 1; return 0; } islastround() { if ( !level.teambased ) return 1; if ( getwatcheddvar( "roundlimit" ) > 1 && game["roundsPlayed"] >= getwatcheddvar( "roundlimit" ) - 1 ) return 1; if ( getwatcheddvar( "winlimit" ) > 1 && game["roundsWon"]["allies"] >= getwatcheddvar( "winlimit" ) - 1 && game["roundsWon"]["axis"] >= getwatcheddvar( "winlimit" ) - 1 ) return 1; return 0; } wasonlyround() { if ( !level.teambased ) return 1; if ( isdefined( level.onlyroundoverride ) ) return 0; if ( getwatcheddvar( "winlimit" ) == 1 && hitwinlimit() ) return 1; if ( getwatcheddvar( "roundlimit" ) == 1 ) return 1; return 0; } waslastround() { if ( level.forcedend ) return 1; if ( !level.teambased ) return 1; if ( hitroundlimit() || hitwinlimit() ) return 1; return 0; } hittimelimit() { if ( getwatcheddvar( "timelimit" ) <= 0 ) return 0; var_0 = maps\mp\gametypes\_gamelogic::gettimeremaining(); if ( var_0 > 0 ) return 0; return 1; } hitroundlimit() { if ( getwatcheddvar( "roundlimit" ) <= 0 ) return 0; return game["roundsPlayed"] >= getwatcheddvar( "roundlimit" ); } hitscorelimit() { if ( isobjectivebased() ) return 0; if ( getwatcheddvar( "scorelimit" ) <= 0 ) return 0; if ( level.teambased ) { if ( game["teamScores"]["allies"] >= getwatcheddvar( "scorelimit" ) || game["teamScores"]["axis"] >= getwatcheddvar( "scorelimit" ) ) return 1; } else { for ( var_0 = 0; var_0 < level.players.size; var_0++ ) { var_1 = level.players[var_0]; if ( isdefined( var_1.score ) && var_1.score >= getwatcheddvar( "scorelimit" ) ) return 1; } } return 0; } hitwinlimit() { if ( getwatcheddvar( "winlimit" ) <= 0 ) return 0; if ( !level.teambased ) return 1; if ( getroundswon( "allies" ) >= getwatcheddvar( "winlimit" ) || getroundswon( "axis" ) >= getwatcheddvar( "winlimit" ) ) return 1; return 0; } getscorelimit() { if ( isroundbased() ) { if ( getwatcheddvar( "roundlimit" ) ) return getwatcheddvar( "roundlimit" ); else return getwatcheddvar( "winlimit" ); } else return getwatcheddvar( "scorelimit" ); } getroundswon( var_0 ) { return game["roundsWon"][var_0]; } isobjectivebased() { return level.objectivebased; } gettimelimit() { if ( inovertime() && ( !isdefined( game["inNukeOvertime"] ) || !game["inNukeOvertime"] ) ) { var_0 = int( getdvar( "overtimeTimeLimit" ) ); if ( isdefined( var_0 ) ) { return var_0; return; } return 1; return; } else if ( isdefined( level.dd ) && level.dd && isdefined( level.bombexploded ) && level.bombexploded > 0 ) return getwatcheddvar( "timelimit" ) + level.bombexploded * level.ddtimetoadd; else return getwatcheddvar( "timelimit" ); } gethalftime() { if ( inovertime() ) return 0; else if ( isdefined( game["inNukeOvertime"] ) && game["inNukeOvertime"] ) return 0; else return getwatcheddvar( "halftime" ); } inovertime() { return isdefined( game["status"] ) && game["status"] == "overtime"; } gamehasstarted() { if ( isdefined( level.gamehasstarted ) ) return level.gamehasstarted; if ( level.teambased ) return level.hasspawned["axis"] && level.hasspawned["allies"]; return level.maxplayercount > 1; } getaverageorigin( var_0 ) { var_1 = ( 0, 0, 0 ); if ( !var_0.size ) return undefined; foreach ( var_3 in var_0 ) var_1 = var_1 + var_3.origin; var_5 = int( var_1[0] / var_0.size ); var_6 = int( var_1[1] / var_0.size ); var_7 = int( var_1[2] / var_0.size ); var_1 = ( var_5, var_6, var_7 ); return var_1; } getlivingplayers( var_0 ) { var_1 = []; foreach ( var_3 in level.players ) { if ( !isalive( var_3 ) ) continue; if ( level.teambased && isdefined( var_0 ) ) { if ( var_0 == var_3.pers["team"] ) var_1[var_1.size] = var_3; continue; } var_1[var_1.size] = var_3; } return var_1; } setusingremote( var_0 ) { if ( isdefined( self.carryicon ) ) self.carryicon.alpha = 0; self.usingremote = var_0; common_scripts\utility::_disableoffhandweapons(); self notify( "using_remote" ); } getremotename() { return self.usingremote; } freezecontrolswrapper( var_0 ) { if ( isdefined( level.hostmigrationtimer ) ) { self.hostmigrationcontrolsfrozen = 1; self freezecontrols( 1 ); return; } self freezecontrols( var_0 ); self.controlsfrozen = var_0; } clearusingremote() { if ( isdefined( self.carryicon ) ) self.carryicon.alpha = 1; self.usingremote = undefined; common_scripts\utility::_enableoffhandweapons(); var_0 = self getcurrentweapon(); if ( var_0 == "none" || iskillstreakweapon( var_0 ) ) { var_1 = common_scripts\utility::getlastweapon(); if ( isreallyalive( self ) ) { if ( !self hasweapon( var_1 ) ) var_1 = maps\mp\killstreaks\_killstreaks::getfirstprimaryweapon(); self switchtoweapon( var_1 ); } } freezecontrolswrapper( 0 ); self notify( "stopped_using_remote" ); } isusingremote() { return isdefined( self.usingremote ); } isrocketcorpse() { return isdefined( self.isrocketcorpse ) && self.isrocketcorpse; } queuecreate( var_0 ) { if ( !isdefined( level.queues ) ) level.queues = []; level.queues[var_0] = []; } queueadd( var_0, var_1 ) { level.queues[var_0][level.queues[var_0].size] = var_1; } queueremovefirst( var_0 ) { var_1 = undefined; var_2 = []; foreach ( var_4 in level.queues[var_0] ) { if ( !isdefined( var_4 ) ) continue; if ( !isdefined( var_1 ) ) { var_1 = var_4; continue; } var_2[var_2.size] = var_4; } level.queues[var_0] = var_2; return var_1; } _giveweapon( var_0, var_1, var_2 ) { if ( !isdefined( var_1 ) ) var_1 = -1; if ( issubstr( var_0, "_akimbo" ) || isdefined( var_2 ) && var_2 == 1 ) self giveweapon( var_0, var_1, 1 ); else self giveweapon( var_0, var_1, 0 ); } perksenabled() { return getdvarint( "scr_game_perks" ) == 1; } _hasperk( var_0 ) { var_1 = self.perks; if ( !isdefined( var_1 ) ) return 0; if ( isdefined( var_1[var_0] ) ) return 1; return 0; } giveperk( var_0, var_1 ) { if ( issubstr( var_0, "specialty_weapon_" ) ) { _setperk( var_0, var_1 ); return; } _setperk( var_0, var_1 ); _setextraperks( var_0 ); } giveperkequipment( var_0, var_1 ) { if ( var_0 == "none" || var_0 == "specialty_null" ) self setoffhandprimaryclass( "none" ); else { self.primarygrenade = var_0; if ( issubstr( var_0, "_mp" ) ) { switch ( var_0 ) { case "mortar_shelljugg_mp": case "mortar_shell_mp": case "frag_grenade_mp": self setoffhandprimaryclass( "frag" ); break; case "throwingknifejugg_mp": case "throwingknife_mp": self setoffhandprimaryclass( "throwingknife" ); break; case "thermobaric_grenade_mp": case "motion_sensor_mp": case "emp_grenade_mp": case "flash_grenade_mp": case "trophy_mp": self setoffhandprimaryclass( "flash" ); break; case "concussion_grenade_mp": case "smoke_grenadejugg_mp": case "smoke_grenade_mp": self setoffhandprimaryclass( "smoke" ); break; default: self setoffhandprimaryclass( "other" ); break; } _giveweapon( var_0, 0 ); self givestartammo( var_0 ); _setperk( var_0, var_1 ); return; } _setperk( var_0, var_1 ); } } giveperkoffhand( var_0, var_1 ) { if ( var_0 == "none" || var_0 == "specialty_null" ) self setoffhandsecondaryclass( "none" ); else { self.secondarygrenade = var_0; if ( issubstr( var_0, "_mp" ) ) { switch ( var_0 ) { case "mortar_shelljugg_mp": case "mortar_shell_mp": case "frag_grenade_mp": self setoffhandsecondaryclass( "frag" ); break; case "throwingknifejugg_mp": case "throwingknife_mp": self setoffhandsecondaryclass( "throwingknife" ); break; case "thermobaric_grenade_mp": case "motion_sensor_mp": case "emp_grenade_mp": case "flash_grenade_mp": case "trophy_mp": self setoffhandsecondaryclass( "flash" ); break; case "concussion_grenade_mp": case "smoke_grenadejugg_mp": case "smoke_grenade_mp": self setoffhandsecondaryclass( "smoke" ); break; default: self setoffhandsecondaryclass( "other" ); break; } _giveweapon( var_0, 0 ); switch ( var_0 ) { case "concussion_grenade_mp": case "smoke_grenade_mp": case "thermobaric_grenade_mp": case "motion_sensor_mp": case "emp_grenade_mp": case "flash_grenade_mp": case "trophy_mp": self setweaponammoclip( var_0, 1 ); break; default: self givestartammo( var_0 ); break; } _setperk( var_0, var_1 ); return; } _setperk( var_0, var_1 ); } } _setperk( var_0, var_1 ) { self.perks[var_0] = 1; self.perksperkname[var_0] = var_0; self.perksuseslot[var_0] = var_1; var_2 = level.perksetfuncs[var_0]; if ( isdefined( var_2 ) ) self thread [[ var_2 ]](); self setperk( var_0, !isdefined( level.scriptperks[var_0] ), var_1 ); } _setextraperks( var_0 ) { if ( var_0 == "specialty_stun_resistance" ) giveperk( "specialty_empimmune", 0 ); if ( var_0 == "specialty_hardline" ) giveperk( "specialty_assists", 0 ); if ( var_0 == "specialty_incog" ) { giveperk( "specialty_spygame", 0 ); giveperk( "specialty_coldblooded", 0 ); giveperk( "specialty_noscopeoutline", 0 ); giveperk( "specialty_heartbreaker", 0 ); } if ( var_0 == "specialty_blindeye" ) giveperk( "specialty_noplayertarget", 0 ); if ( var_0 == "specialty_sharp_focus" ) giveperk( "specialty_reducedsway", 0 ); if ( var_0 == "specialty_quickswap" ) giveperk( "specialty_fastoffhand", 0 ); } _unsetperk( var_0 ) { self.perks[var_0] = undefined; self.perksperkname[var_0] = undefined; self.perksuseslot[var_0] = undefined; if ( isdefined( level.perkunsetfuncs[var_0] ) ) self thread [[ level.perkunsetfuncs[var_0] ]](); self unsetperk( var_0, !isdefined( level.scriptperks[var_0] ) ); } _unsetextraperks( var_0 ) { if ( var_0 == "specialty_bulletaccuracy" ) _unsetperk( "specialty_steadyaimpro" ); if ( var_0 == "specialty_coldblooded" ) _unsetperk( "specialty_heartbreaker" ); if ( var_0 == "specialty_fasterlockon" ) _unsetperk( "specialty_armorpiercing" ); if ( var_0 == "specialty_heartbreaker" ) _unsetperk( "specialty_empimmune" ); if ( var_0 == "specialty_rollover" ) _unsetperk( "specialty_assists" ); } _clearperks() { foreach ( var_2, var_1 in self.perks ) { if ( isdefined( level.perkunsetfuncs[var_2] ) ) self [[ level.perkunsetfuncs[var_2] ]](); } self.perks = []; self.perksperkname = []; self.perksuseslot = []; self clearperks(); } quicksort( var_0 ) { return quicksortmid( var_0, 0, var_0.size - 1 ); } quicksortmid( var_0, var_1, var_2 ) { var_3 = var_1; var_4 = var_2; if ( var_2 - var_1 >= 1 ) { var_5 = var_0[var_1]; while ( var_4 > var_3 ) { while ( var_0[var_3] <= var_5 && var_3 <= var_2 && var_4 > var_3 ) var_3++; while ( var_0[var_4] > var_5 && var_4 >= var_1 && var_4 >= var_3 ) var_4--; if ( var_4 > var_3 ) var_0 = swap( var_0, var_3, var_4 ); } var_0 = swap( var_0, var_1, var_4 ); var_0 = quicksortmid( var_0, var_1, var_4 - 1 ); var_0 = quicksortmid( var_0, var_4 + 1, var_2 ); } else return var_0; return var_0; } swap( var_0, var_1, var_2 ) { var_3 = var_0[var_1]; var_0[var_1] = var_0[var_2]; var_0[var_2] = var_3; return var_0; } _suicide() { if ( isusingremote() && !isdefined( self.fauxdead ) ) thread maps\mp\gametypes\_damage::playerkilled_internal( self, self, self, 10000, "MOD_SUICIDE", "frag_grenade_mp", ( 0, 0, 0 ), "none", 0, 1116, 1 ); else if ( !isusingremote() && !isdefined( self.fauxdead ) ) self suicide(); } isreallyalive( var_0 ) { if ( isalive( var_0 ) && !isdefined( var_0.fauxdead ) ) return 1; return 0; } waittill_any_timeout_pause_on_death_and_prematch( var_0, var_1, var_2, var_3, var_4, var_5 ) { var_6 = spawnstruct(); if ( isdefined( var_1 ) ) thread common_scripts\utility::waittill_string_no_endon_death( var_1, var_6 ); if ( isdefined( var_2 ) ) thread common_scripts\utility::waittill_string_no_endon_death( var_2, var_6 ); if ( isdefined( var_3 ) ) thread common_scripts\utility::waittill_string_no_endon_death( var_3, var_6 ); if ( isdefined( var_4 ) ) thread common_scripts\utility::waittill_string_no_endon_death( var_4, var_6 ); if ( isdefined( var_5 ) ) thread common_scripts\utility::waittill_string_no_endon_death( var_5, var_6 ); var_6 thread _timeout_pause_on_death_and_prematch( var_0, self ); var_6 waittill( "returned", var_7 ); var_6 notify( "die" ); return var_7; } _timeout_pause_on_death_and_prematch( var_0, var_1 ) { self endon( "die" ); for ( var_2 = 0.05; var_0 > 0; var_0 = var_0 - var_2 ) { if ( isplayer( var_1 ) && !isreallyalive( var_1 ) ) var_1 waittill( "spawned_player" ); if ( getomnvar( "ui_prematch_period" ) ) level waittill( "prematch_over" ); wait( var_2 ); } self notify( "returned", "timeout" ); } playdeathsound() { var_0 = randomintrange( 1, 8 ); var_1 = "generic"; if ( self hasfemalecustomizationmodel() ) var_1 = "female"; if ( self.team == "axis" ) self playsound( var_1 + "_death_russian_" + var_0 ); else self playsound( var_1 + "_death_american_" + var_0 ); } rankingenabled() { if ( !isplayer( self ) ) return 0; return level.rankedmatch && !self.usingonlinedataoffline; } privatematch() { return level.onlinegame && getdvarint( "xblive_privatematch" ); } matchmakinggame() { return level.onlinegame && !getdvarint( "xblive_privatematch" ); } setaltsceneobj( var_0, var_1, var_2, var_3 ) { } endsceneondeath( var_0 ) { self endon( "altscene" ); var_0 waittill( "death" ); self notify( "end_altScene" ); } getgametypenumlives() { return getwatcheddvar( "numlives" ); } givecombathigh( var_0 ) { self.combathigh = var_0; } arrayinsertion( var_0, var_1, var_2 ) { if ( var_0.size != 0 ) { for ( var_3 = var_0.size; var_3 >= var_2; var_3-- ) var_0[var_3 + 1] = var_0[var_3]; } var_0[var_2] = var_1; } getproperty( var_0, var_1 ) { var_2 = var_1; var_2 = getdvar( var_0, var_1 ); return var_2; } getintproperty( var_0, var_1 ) { var_2 = var_1; var_2 = getdvarint( var_0, var_1 ); return var_2; } getfloatproperty( var_0, var_1 ) { var_2 = var_1; var_2 = getdvarfloat( var_0, var_1 ); return var_2; } ischangingweapon() { return isdefined( self.changingweapon ); } killshouldaddtokillstreak( var_0 ) { if ( var_0 == "venomxgun_mp" || var_0 == "venomxproj_mp" ) return 1; if ( _hasperk( "specialty_explosivebullets" ) ) return 0; if ( isdefined( self.isjuggernautrecon ) && self.isjuggernautrecon == 1 ) return 0; var_1 = self.pers["killstreaks"]; if ( isdefined( level.killstreakweildweapons[var_0] ) && isdefined( self.streaktype ) && self.streaktype != "support" ) { for ( var_2 = 1; var_2 < 4; var_2++ ) { if ( isdefined( var_1[var_2] ) && isdefined( var_1[var_2].streakname ) && var_1[var_2].streakname == level.killstreakweildweapons[var_0] && isdefined( var_1[var_2].lifeid ) && var_1[var_2].lifeid == self.pers["deaths"] ) return streakshouldchain( level.killstreakweildweapons[var_0] ); } return 0; } return !iskillstreakweapon( var_0 ); } streakshouldchain( var_0 ) { var_1 = maps\mp\killstreaks\_killstreaks::getstreakcost( var_0 ); var_2 = maps\mp\killstreaks\_killstreaks::getnextstreakname(); var_3 = maps\mp\killstreaks\_killstreaks::getstreakcost( var_2 ); return var_1 < var_3; } isjuggernaut() { if ( isdefined( self.isjuggernaut ) && self.isjuggernaut == 1 ) return 1; if ( isdefined( self.isjuggernautdef ) && self.isjuggernautdef == 1 ) return 1; if ( isdefined( self.isjuggernautgl ) && self.isjuggernautgl == 1 ) return 1; if ( isdefined( self.isjuggernautrecon ) && self.isjuggernautrecon == 1 ) return 1; if ( isdefined( self.isjuggernautmaniac ) && self.isjuggernautmaniac == 1 ) return 1; if ( isdefined( self.isjuggernautlevelcustom ) && self.isjuggernautlevelcustom == 1 ) return 1; return 0; } iskillstreakweapon( var_0 ) { if ( !isdefined( var_0 ) ) return 0; if ( var_0 == "none" ) return 0; if ( isdestructibleweapon( var_0 ) ) return 0; if ( isbombsiteweapon( var_0 ) ) return 0; if ( issubstr( var_0, "killstreak" ) ) return 1; if ( issubstr( var_0, "cobra" ) ) return 1; if ( issubstr( var_0, "remote_tank_projectile" ) ) return 1; if ( issubstr( var_0, "artillery_mp" ) ) return 1; if ( issubstr( var_0, "harrier" ) ) return 1; var_1 = strtok( var_0, "_" ); var_2 = 0; foreach ( var_4 in var_1 ) { if ( var_4 == "mp" ) { var_2 = 1; break; } } if ( !var_2 ) var_0 = var_0 + "_mp"; if ( isdefined( level.killstreakweildweapons[var_0] ) ) return 1; if ( maps\mp\killstreaks\_killstreaks::isairdropmarker( var_0 ) ) return 1; var_6 = weaponinventorytype( var_0 ); if ( isdefined( var_6 ) && var_6 == "exclusive" ) return 1; return 0; } isdestructibleweapon( var_0 ) { if ( !isdefined( var_0 ) ) return 0; switch ( var_0 ) { case "barrel_mp": case "destructible": case "destructible_car": case "destructible_toy": return 1; } return 0; } isbombsiteweapon( var_0 ) { if ( !isdefined( var_0 ) ) return 0; switch ( var_0 ) { case "bomb_site_mp": case "briefcase_bomb_mp": return 1; } return 0; } isenvironmentweapon( var_0 ) { if ( !isdefined( var_0 ) ) return 0; if ( var_0 == "turret_minigun_mp" ) return 1; if ( issubstr( var_0, "_bipod_" ) ) return 1; return 0; } isjuggernautweapon( var_0 ) { if ( !isdefined( var_0 ) ) return 0; switch ( var_0 ) { case "iw6_mariachimagnum_mp_akimbo": case "iw6_predatorcannon_mp": case "iw6_axe_mp": case "iw6_riotshieldjugg_mp": case "iw6_knifeonlyjugg_mp": case "iw6_p226jugg_mp": case "iw6_magnumjugg_mp": case "iw6_minigunjugg_mp": case "smoke_grenadejugg_mp": case "throwingknifejugg_mp": case "mortar_shelljugg_mp": return 1; } return 0; } getweaponclass( var_0 ) { var_1 = getbaseweaponname( var_0 ); if ( is_aliens() ) var_2 = tablelookup( "mp/alien/mode_string_tables/alien_statstable.csv", 4, var_1, 2 ); else var_2 = tablelookup( "mp/statstable.csv", 4, var_1, 2 ); if ( var_2 == "" ) { var_3 = strip_suffix( var_0, "_mp" ); if ( is_aliens() ) var_2 = tablelookup( "mp/alien/mode_string_tables/alien_statstable.csv", 4, var_3, 2 ); else var_2 = tablelookup( "mp/statstable.csv", 4, var_3, 2 ); } if ( isenvironmentweapon( var_0 ) ) var_2 = "weapon_mg"; else if ( !is_aliens() && iskillstreakweapon( var_0 ) ) var_2 = "killstreak"; else if ( var_0 == "none" ) var_2 = "other"; else if ( var_2 == "" ) var_2 = "other"; return var_2; } getweaponattachmentarrayfromstats( var_0 ) { var_0 = getbaseweaponname( var_0 ); if ( !isdefined( level.weaponattachments[var_0] ) ) { var_1 = []; for ( var_2 = 0; var_2 <= 19; var_2++ ) { var_3 = tablelookup( "mp/statsTable.csv", 4, var_0, 10 + var_2 ); if ( var_3 == "" ) break; var_1[var_1.size] = var_3; } level.weaponattachments[var_0] = var_1; } return level.weaponattachments[var_0]; } getweaponattachmentfromstats( var_0, var_1 ) { var_0 = getbaseweaponname( var_0 ); return tablelookup( "mp/statsTable.csv", 4, var_0, 10 + var_1 ); } attachmentscompatible( var_0, var_1 ) { var_0 = attachmentmap_tobase( var_0 ); var_1 = attachmentmap_tobase( var_1 ); var_2 = 1; if ( var_0 == var_1 ) var_2 = 0; else if ( var_0 != "none" && var_1 != "none" ) { var_3 = tablelookuprownum( "mp/attachmentcombos.csv", 0, var_1 ); if ( tablelookup( "mp/attachmentcombos.csv", 0, var_0, var_3 ) == "no" ) var_2 = 0; } return var_2; } getbaseweaponname( var_0 ) { var_1 = strtok( var_0, "_" ); if ( var_1[0] == "iw5" || var_1[0] == "iw6" ) var_0 = var_1[0] + "_" + var_1[1]; else if ( var_1[0] == "alt" ) var_0 = var_1[1] + "_" + var_1[2]; return var_0; } getbaseperkname( var_0 ) { if ( isendstr( var_0, "_ks" ) ) var_0 = getsubstr( var_0, 0, var_0.size - 3 ); return var_0; } getvalidextraammoweapons() { var_0 = []; var_1 = self getweaponslistprimaries(); foreach ( var_3 in var_1 ) { var_4 = weaponclass( var_3 ); if ( !iskillstreakweapon( var_3 ) && var_4 != "grenade" && var_4 != "rocketlauncher" ) var_0[var_0.size] = var_3; } return var_0; } riotshield_hasweapon() { var_0 = 0; var_1 = self getweaponslistprimaries(); foreach ( var_3 in var_1 ) { if ( maps\mp\gametypes\_weapons::isriotshield( var_3 ) ) { var_0 = 1; break; } } return var_0; } riotshield_hastwo() { var_0 = 0; var_1 = self getweaponslistprimaries(); foreach ( var_3 in var_1 ) { if ( maps\mp\gametypes\_weapons::isriotshield( var_3 ) ) var_0++; if ( var_0 == 2 ) break; } return var_0 == 2; } riotshield_attach( var_0, var_1 ) { var_2 = undefined; if ( var_0 ) { self.riotshieldmodel = var_1; var_2 = "tag_weapon_right"; } else { self.riotshieldmodelstowed = var_1; var_2 = "tag_shield_back"; } self attachshieldmodel( var_1, var_2 ); self.hasriotshield = riotshield_hasweapon(); } riotshield_detach( var_0 ) { var_1 = undefined; var_2 = undefined; if ( var_0 ) { var_1 = self.riotshieldmodel; var_2 = "tag_weapon_right"; } else { var_1 = self.riotshieldmodelstowed; var_2 = "tag_shield_back"; } self detachshieldmodel( var_1, var_2 ); if ( var_0 ) self.riotshieldmodel = undefined; else self.riotshieldmodelstowed = undefined; self.hasriotshield = riotshield_hasweapon(); } riotshield_move( var_0 ) { var_1 = undefined; var_2 = undefined; var_3 = undefined; if ( var_0 ) { var_3 = self.riotshieldmodel; var_1 = "tag_weapon_right"; var_2 = "tag_shield_back"; } else { var_3 = self.riotshieldmodelstowed; var_1 = "tag_shield_back"; var_2 = "tag_weapon_right"; } self moveshieldmodel( var_3, var_1, var_2 ); if ( var_0 ) { self.riotshieldmodelstowed = var_3; self.riotshieldmodel = undefined; } else { self.riotshieldmodel = var_3; self.riotshieldmodelstowed = undefined; } } riotshield_clear() { self.hasriotshieldequipped = 0; self.hasriotshield = 0; self.riotshieldmodelstowed = undefined; self.riotshieldmodel = undefined; } riotshield_getmodel() { return common_scripts\utility::ter_op( isjuggernaut(), "weapon_riot_shield_jug_iw6", "weapon_riot_shield_iw6" ); } outlineenableforall( var_0, var_1, var_2, var_3 ) { var_4 = level.players; var_5 = maps\mp\gametypes\_outline::outlinecolorindexmap( var_1 ); var_6 = maps\mp\gametypes\_outline::outlineprioritygroupmap( var_3 ); return maps\mp\gametypes\_outline::outlineenableinternal( var_0, var_5, var_4, var_2, var_6, "ALL" ); } outlineenableforteam( var_0, var_1, var_2, var_3, var_4 ) { var_5 = getteamarray( var_2, 0 ); var_6 = maps\mp\gametypes\_outline::outlinecolorindexmap( var_1 ); var_7 = maps\mp\gametypes\_outline::outlineprioritygroupmap( var_4 ); return maps\mp\gametypes\_outline::outlineenableinternal( var_0, var_6, var_5, var_3, var_7, "TEAM", var_2 ); } outlineenableforplayer( var_0, var_1, var_2, var_3, var_4 ) { var_5 = maps\mp\gametypes\_outline::outlinecolorindexmap( var_1 ); var_6 = maps\mp\gametypes\_outline::outlineprioritygroupmap( var_4 ); if ( isagent( var_2 ) ) return maps\mp\gametypes\_outline::outlinegenerateuniqueid(); return maps\mp\gametypes\_outline::outlineenableinternal( var_0, var_5, [ var_2 ], var_3, var_6, "ENTITY" ); } outlinedisable( var_0, var_1 ) { maps\mp\gametypes\_outline::outlinedisableinternal( var_0, var_1 ); } playsoundinspace( var_0, var_1 ) { playsoundatpos( var_1, var_0 ); } limitdecimalplaces( var_0, var_1 ) { var_2 = 1; for ( var_3 = 0; var_3 < var_1; var_3++ ) var_2 = var_2 * 10; var_4 = var_0 * var_2; var_4 = int( var_4 ); var_4 = var_4 / var_2; return var_4; } rounddecimalplaces( var_0, var_1, var_2 ) { if ( !isdefined( var_2 ) ) var_2 = "nearest"; var_3 = 1; for ( var_4 = 0; var_4 < var_1; var_4++ ) var_3 = var_3 * 10; var_5 = var_0 * var_3; if ( var_2 == "up" ) var_6 = ceil( var_5 ); else if ( var_2 == "down" ) var_6 = floor( var_5 ); else var_6 = var_5 + 0.5; var_5 = int( var_6 ); var_5 = var_5 / var_3; return var_5; } playerforclientid( var_0 ) { foreach ( var_2 in level.players ) { if ( var_2.clientid == var_0 ) return var_2; } return undefined; } isrested() { if ( !rankingenabled() ) return 0; return self getrankedplayerdata( "restXPGoal" ) > self getrankedplayerdata( "experience" ); } stringtofloat( var_0 ) { var_1 = strtok( var_0, "." ); var_2 = int( var_1[0] ); if ( isdefined( var_1[1] ) ) { var_3 = 1; for ( var_4 = 0; var_4 < var_1[1].size; var_4++ ) var_3 = var_3 * 0.1; var_2 = var_2 + int( var_1[1] ) * var_3; } return var_2; } setselfusable( var_0 ) { self makeusable(); foreach ( var_2 in level.players ) { if ( var_2 != var_0 ) { self disableplayeruse( var_2 ); continue; } self enableplayeruse( var_2 ); } } maketeamusable( var_0 ) { self makeusable(); thread _updateteamusable( var_0 ); } _updateteamusable( var_0 ) { self endon( "death" ); for (;;) { foreach ( var_2 in level.players ) { if ( var_2.team == var_0 ) { self enableplayeruse( var_2 ); continue; } self disableplayeruse( var_2 ); } level waittill( "joined_team" ); } } makeenemyusable( var_0 ) { self makeusable(); thread _updateenemyusable( var_0 ); } _updateenemyusable( var_0 ) { self endon( "death" ); var_1 = var_0.team; for (;;) { if ( level.teambased ) { foreach ( var_3 in level.players ) { if ( var_3.team != var_1 ) { self enableplayeruse( var_3 ); continue; } self disableplayeruse( var_3 ); } } else { foreach ( var_3 in level.players ) { if ( var_3 != var_0 ) { self enableplayeruse( var_3 ); continue; } self disableplayeruse( var_3 ); } } level waittill( "joined_team" ); } } initgameflags() { if ( !isdefined( game["flags"] ) ) game["flags"] = []; } gameflaginit( var_0, var_1 ) { game["flags"][var_0] = var_1; } gameflag( var_0 ) { return game["flags"][var_0]; } gameflagset( var_0 ) { game["flags"][var_0] = 1; level notify( var_0 ); } gameflagclear( var_0 ) { game["flags"][var_0] = 0; } gameflagwait( var_0 ) { while ( !gameflag( var_0 ) ) level waittill( var_0 ); } isprimarydamage( var_0 ) { if ( var_0 == "MOD_RIFLE_BULLET" || var_0 == "MOD_PISTOL_BULLET" ) return 1; return 0; } isbulletdamage( var_0 ) { var_1 = "MOD_RIFLE_BULLET MOD_PISTOL_BULLET MOD_HEAD_SHOT"; if ( issubstr( var_1, var_0 ) ) return 1; return 0; } isfmjdamage( var_0, var_1, var_2 ) { return isdefined( var_2 ) && var_2 _hasperk( "specialty_bulletpenetration" ) && isdefined( var_1 ) && isbulletdamage( var_1 ); } initlevelflags() { if ( !isdefined( level.levelflags ) ) level.levelflags = []; } levelflaginit( var_0, var_1 ) { level.levelflags[var_0] = var_1; } levelflag( var_0 ) { return level.levelflags[var_0]; } levelflagset( var_0 ) { level.levelflags[var_0] = 1; level notify( var_0 ); } levelflagclear( var_0 ) { level.levelflags[var_0] = 0; level notify( var_0 ); } levelflagwait( var_0 ) { while ( !levelflag( var_0 ) ) level waittill( var_0 ); } levelflagwaitopen( var_0 ) { while ( levelflag( var_0 ) ) level waittill( var_0 ); } initglobals() { if ( !isdefined( level.global_tables ) ) { level.global_tables["killstreakTable"] = spawnstruct(); level.global_tables["killstreakTable"].path = "mp/killstreakTable.csv"; level.global_tables["killstreakTable"].index_col = 0; level.global_tables["killstreakTable"].ref_col = 1; level.global_tables["killstreakTable"].name_col = 2; level.global_tables["killstreakTable"].desc_col = 3; level.global_tables["killstreakTable"].kills_col = 4; level.global_tables["killstreakTable"].earned_hint_col = 5; level.global_tables["killstreakTable"].sound_col = 6; level.global_tables["killstreakTable"].earned_dialog_col = 7; level.global_tables["killstreakTable"].allies_dialog_col = 8; level.global_tables["killstreakTable"].enemy_dialog_col = 9; level.global_tables["killstreakTable"].enemy_use_dialog_col = 10; level.global_tables["killstreakTable"].weapon_col = 11; level.global_tables["killstreakTable"].score_col = 12; level.global_tables["killstreakTable"].icon_col = 13; level.global_tables["killstreakTable"].overhead_icon_col = 14; level.global_tables["killstreakTable"].dpad_icon_col = 15; level.global_tables["killstreakTable"].unearned_icon_col = 16; level.global_tables["killstreakTable"].all_team_steak_col = 17; } } iskillstreakdenied() { return isemped() || isairdenied(); } isemped() { if ( self.team == "spectator" ) return 0; if ( level.teambased ) return level.teamemped[self.team] || isdefined( self.empgrenaded ) && self.empgrenaded || level.teamnukeemped[self.team]; else return isdefined( level.empplayer ) && level.empplayer != self || isdefined( self.empgrenaded ) && self.empgrenaded || isdefined( level.nukeinfo.player ) && self != level.nukeinfo.player && level.teamnukeemped[self.team]; } isairdenied() { if ( self.team == "spectator" ) return 0; if ( level.teambased ) return level.teamairdenied[self.team]; else return isdefined( level.airdeniedplayer ) && level.airdeniedplayer != self; } isnuked() { if ( self.team == "spectator" ) return 0; return isdefined( self.nuked ); } getplayerforguid( var_0 ) { foreach ( var_2 in level.players ) { if ( var_2.guid == var_0 ) return var_2; } return undefined; } teamplayercardsplash( var_0, var_1, var_2, var_3 ) { if ( level.hardcoremode && !is_aliens() ) return; foreach ( var_5 in level.players ) { if ( isdefined( var_2 ) && var_5.team != var_2 ) continue; if ( !isplayer( var_5 ) ) continue; var_5 thread maps\mp\gametypes\_hud_message::playercardsplashnotify( var_0, var_1, var_3 ); } } iscacprimaryweapon( var_0 ) { switch ( getweaponclass( var_0 ) ) { case "weapon_shotgun": case "weapon_lmg": case "weapon_dmr": case "weapon_sniper": case "weapon_riot": case "weapon_assault": case "weapon_smg": return 1; default: return 0; } } iscacsecondaryweapon( var_0 ) { switch ( getweaponclass( var_0 ) ) { case "weapon_machine_pistol": case "weapon_pistol": case "weapon_projectile": return 1; default: return 0; } } getlastlivingplayer( var_0 ) { var_1 = undefined; foreach ( var_3 in level.players ) { if ( isdefined( var_0 ) && var_3.team != var_0 ) continue; if ( !isreallyalive( var_3 ) && !var_3 maps\mp\gametypes\_playerlogic::mayspawn() ) continue; if ( isdefined( var_3.switching_teams ) && var_3.switching_teams ) continue; var_1 = var_3; } return var_1; } getpotentiallivingplayers() { var_0 = []; foreach ( var_2 in level.players ) { if ( !isreallyalive( var_2 ) && !var_2 maps\mp\gametypes\_playerlogic::mayspawn() ) continue; var_0[var_0.size] = var_2; } return var_0; } waittillrecoveredhealth( var_0, var_1 ) { self endon( "death" ); self endon( "disconnect" ); var_2 = 0; if ( !isdefined( var_1 ) ) var_1 = 0.05; if ( !isdefined( var_0 ) ) var_0 = 0; for (;;) { if ( self.health != self.maxhealth ) var_2 = 0; else var_2 = var_2 + var_1; wait( var_1 ); if ( self.health == self.maxhealth && var_2 >= var_0 ) break; } return; } enableweaponlaser() { if ( !isdefined( self.weaponlasercalls ) ) self.weaponlasercalls = 0; self.weaponlasercalls++; self laseron(); } disableweaponlaser() { self.weaponlasercalls--; if ( self.weaponlasercalls == 0 ) { self laseroff(); self.weaponlasercalls = undefined; } } attachmentmap_tounique( var_0, var_1 ) { var_2 = var_0; var_1 = getbaseweaponname( var_1 ); if ( isdefined( level.attachmentmap_basetounique[var_1] ) && isdefined( level.attachmentmap_basetounique[var_1][var_0] ) ) var_2 = level.attachmentmap_basetounique[var_1][var_0]; else { if ( is_aliens() ) var_3 = tablelookup( "mp/alien/mode_string_tables/alien_statstable.csv", 4, var_1, 2 ); else var_3 = tablelookup( "mp/statstable.csv", 4, var_1, 2 ); if ( isdefined( level.attachmentmap_basetounique[var_3] ) && isdefined( level.attachmentmap_basetounique[var_3][var_0] ) ) var_2 = level.attachmentmap_basetounique[var_3][var_0]; } return var_2; } attachmentperkmap( var_0 ) { var_1 = undefined; if ( isdefined( level.attachmentmap_attachtoperk[var_0] ) ) var_1 = level.attachmentmap_attachtoperk[var_0]; return var_1; } weaponperkmap( var_0 ) { var_1 = undefined; if ( isdefined( level.weaponmap_toperk[var_0] ) ) var_1 = level.weaponmap_toperk[var_0]; return var_1; } isattachmentsniperscopedefault( var_0, var_1 ) { var_2 = strtok( var_0, "_" ); return isattachmentsniperscopedefaulttokenized( var_2, var_1 ); } isattachmentsniperscopedefaulttokenized( var_0, var_1 ) { var_2 = 0; if ( var_0.size && isdefined( var_1 ) ) { var_3 = 0; if ( var_0[0] == "alt" ) var_3 = 1; if ( var_0.size >= 3 + var_3 && ( var_0[var_3] == "iw5" || var_0[var_3] == "iw6" ) ) { if ( weaponclass( var_0[var_3] + "_" + var_0[var_3 + 1] + "_" + var_0[var_3 + 2] ) == "sniper" ) var_2 = var_0[var_3 + 1] + "scope" == var_1; } } return var_2; } getnumdefaultattachments( var_0 ) { if ( weaponclass( var_0 ) == "sniper" ) { var_1 = getweaponattachments( var_0 ); foreach ( var_3 in var_1 ) { if ( isattachmentsniperscopedefault( var_0, var_3 ) ) return 1; } } else if ( isstrstart( var_0, "iw6_dlcweap02" ) ) { var_1 = getweaponattachments( var_0 ); foreach ( var_3 in var_1 ) { if ( var_3 == "dlcweap02scope" ) return 1; } } return 0; } getweaponattachmentsbasenames( var_0 ) { var_1 = getweaponattachments( var_0 ); foreach ( var_4, var_3 in var_1 ) var_1[var_4] = attachmentmap_tobase( var_3 ); return var_1; } getattachmentlistbasenames() { var_0 = []; var_1 = 0; if ( is_aliens() ) var_2 = tablelookup( "mp/alien/alien_attachmentTable.csv", 0, var_1, 5 ); else var_2 = tablelookup( "mp/attachmentTable.csv", 0, var_1, 5 ); while ( var_2 != "" ) { if ( !common_scripts\utility::array_contains( var_0, var_2 ) ) var_0[var_0.size] = var_2; var_1++; if ( is_aliens() ) { var_2 = tablelookup( "mp/alien/alien_attachmentTable.csv", 0, var_1, 5 ); continue; } var_2 = tablelookup( "mp/attachmentTable.csv", 0, var_1, 5 ); } return var_0; } getattachmentlistuniqenames() { var_0 = []; var_1 = 0; if ( is_aliens() ) var_2 = tablelookup( "mp/alien/alien_attachmentTable.csv", 0, var_1, 4 ); else var_2 = tablelookup( "mp/attachmentTable.csv", 0, var_1, 4 ); while ( var_2 != "" ) { var_0[var_0.size] = var_2; var_1++; if ( is_aliens() ) { var_2 = tablelookup( "mp/alien/alien_attachmentTable.csv", 0, var_1, 4 ); continue; } var_2 = tablelookup( "mp/attachmentTable.csv", 0, var_1, 4 ); } return var_0; } buildattachmentmaps() { var_0 = getattachmentlistuniqenames(); level.attachmentmap_uniquetobase = []; foreach ( var_2 in var_0 ) { if ( is_aliens() ) var_3 = tablelookup( "mp/alien/alien_attachmentTable.csv", 4, var_2, 5 ); else var_3 = tablelookup( "mp/attachmenttable.csv", 4, var_2, 5 ); if ( var_2 == var_3 ) continue; level.attachmentmap_uniquetobase[var_2] = var_3; } var_5 = []; var_6 = 1; if ( is_aliens() ) var_7 = tablelookupbyrow( "mp/alien/alien_attachmentmap.csv", var_6, 0 ); else var_7 = tablelookupbyrow( "mp/attachmentmap.csv", var_6, 0 ); while ( var_7 != "" ) { var_5[var_5.size] = var_7; var_6++; if ( is_aliens() ) { var_7 = tablelookupbyrow( "mp/alien/alien_attachmentmap.csv", var_6, 0 ); continue; } var_7 = tablelookupbyrow( "mp/attachmentmap.csv", var_6, 0 ); } var_8 = []; var_9 = 1; if ( is_aliens() ) var_10 = tablelookupbyrow( "mp/alien/alien_attachmentmap.csv", 0, var_9 ); else var_10 = tablelookupbyrow( "mp/attachmentmap.csv", 0, var_9 ); while ( var_10 != "" ) { var_8[var_10] = var_9; var_9++; if ( is_aliens() ) { var_10 = tablelookupbyrow( "mp/alien/alien_attachmentmap.csv", 0, var_9 ); continue; } var_10 = tablelookupbyrow( "mp/attachmentmap.csv", 0, var_9 ); } level.attachmentmap_basetounique = []; foreach ( var_7 in var_5 ) { foreach ( var_15, var_13 in var_8 ) { if ( is_aliens() ) var_14 = tablelookup( "mp/alien/alien_attachmentmap.csv", 0, var_7, var_13 ); else var_14 = tablelookup( "mp/attachmentmap.csv", 0, var_7, var_13 ); if ( var_14 == "" ) continue; if ( !isdefined( level.attachmentmap_basetounique[var_7] ) ) level.attachmentmap_basetounique[var_7] = []; level.attachmentmap_basetounique[var_7][var_15] = var_14; } } level.attachmentmap_attachtoperk = []; foreach ( var_18 in var_0 ) { if ( is_aliens() ) var_19 = tablelookup( "mp/alien/alien_attachmenttable.csv", 4, var_18, 12 ); else var_19 = tablelookup( "mp/attachmenttable.csv", 4, var_18, 12 ); if ( var_19 == "" ) continue; level.attachmentmap_attachtoperk[var_18] = var_19; } } buildweaponperkmap() { level.weaponmap_toperk = []; if ( is_aliens() ) return; for ( var_0 = 0; tablelookup( "mp/statstable.csv", 0, var_0, 0 ) != ""; var_0++ ) { var_1 = tablelookup( "mp/statstable.csv", 0, var_0, 5 ); if ( var_1 != "" ) { var_2 = tablelookup( "mp/statstable.csv", 0, var_0, 4 ); if ( var_2 != "" ) level.weaponmap_toperk[var_2] = var_1; } } } attachmentmap_tobase( var_0 ) { if ( isdefined( level.attachmentmap_uniquetobase[var_0] ) ) var_0 = level.attachmentmap_uniquetobase[var_0]; return var_0; } weaponmap( var_0 ) { if ( isdefined( var_0 ) ) { switch ( var_0 ) { case "semtexproj_mp": var_0 = "iw6_mk32_mp"; break; case "iw6_maawshoming_mp": case "iw6_maawschild_mp": var_0 = "iw6_maaws_mp"; break; case "iw6_knifeonlyfast_mp": var_0 = "iw6_knifeonly_mp"; break; case "iw6_pdwauto_mp": var_0 = "iw6_pdw_mp"; default: break; } } return var_0; } weaponhasintegratedsilencer( var_0 ) { return var_0 == "iw6_vks" || var_0 == "iw6_k7" || var_0 == "iw6_honeybadger"; } weaponisfiretypeburst( var_0 ) { if ( weaponhasintegratedfiretypeburst( var_0 ) ) return 1; else return weaponhasattachment( var_0, "firetypeburst" ); } weaponhasintegratedfiretypeburst( var_0 ) { var_1 = getbaseweaponname( var_0 ); if ( var_1 == "iw6_pdw" ) return 1; else if ( var_1 == "iw6_msbs" ) { var_2 = getweaponattachmentsbasenames( var_0 ); foreach ( var_4 in var_2 ) { if ( var_4 == "firetypeauto" || var_4 == "firetypesingle" ) return 0; } return 1; } else return 0; } weaponhasintegratedgrip( var_0 ) { return var_0 == "iw6_g28"; } weaponhasintegratedfmj( var_0 ) { return var_0 == "iw6_cbjms"; } weaponhasintegratedtrackerscope( var_0 ) { var_1 = getbaseweaponname( var_0 ); if ( var_1 == "iw6_dlcweap03" ) { var_2 = getweaponattachments( var_0 ); foreach ( var_4 in var_2 ) { if ( isstrstart( var_4, "dlcweap03" ) ) return 1; } } return 0; } weaponhasattachment( var_0, var_1 ) { var_2 = getweaponattachmentsbasenames( var_0 ); foreach ( var_4 in var_2 ) { if ( var_4 == var_1 ) return 1; } return 0; } weapongetnumattachments( var_0 ) { var_1 = getnumdefaultattachments( var_0 ); var_2 = getweaponattachments( var_0 ); return var_2.size - var_1; } isplayerads() { return self playerads() > 0.5; } _objective_delete( var_0 ) { objective_delete( var_0 ); if ( !isdefined( level.reclaimedreservedobjectives ) ) { level.reclaimedreservedobjectives = []; level.reclaimedreservedobjectives[0] = var_0; } else level.reclaimedreservedobjectives[level.reclaimedreservedobjectives.size] = var_0; } touchingbadtrigger( var_0 ) { var_1 = getentarray( "trigger_hurt", "classname" ); foreach ( var_3 in var_1 ) { if ( self istouching( var_3 ) && ( level.mapname != "mp_mine" || var_3.dmg > 0 ) ) return 1; } var_5 = getentarray( "radiation", "targetname" ); foreach ( var_3 in var_5 ) { if ( self istouching( var_3 ) ) return 1; } if ( isdefined( var_0 ) && var_0 == "gryphon" ) { var_8 = getentarray( "gryphonDeath", "targetname" ); foreach ( var_3 in var_8 ) { if ( self istouching( var_3 ) ) return 1; } } return 0; } setthirdpersondof( var_0 ) { if ( var_0 ) self setdepthoffield( 0, 110, 512, 4096, 6, 1.8 ); else self setdepthoffield( 0, 0, 512, 512, 4, 0 ); } killtrigger( var_0, var_1, var_2 ) { var_3 = spawn( "trigger_radius", var_0, 0, var_1, var_2 ); for (;;) { var_3 waittill( "trigger", var_4 ); if ( !isplayer( var_4 ) ) continue; var_4 suicide(); } } findisfacing( var_0, var_1, var_2 ) { var_3 = cos( var_2 ); var_4 = anglestoforward( var_0.angles ); var_5 = var_1.origin - var_0.origin; var_4 = var_4 * ( 1, 1, 0 ); var_5 = var_5 * ( 1, 1, 0 ); var_5 = vectornormalize( var_5 ); var_4 = vectornormalize( var_4 ); var_6 = vectordot( var_5, var_4 ); if ( var_6 >= var_3 ) return 1; else return 0; } drawline( var_0, var_1, var_2, var_3 ) { var_4 = int( var_2 * 20 ); for ( var_5 = 0; var_5 < var_4; var_5++ ) wait 0.05; } drawsphere( var_0, var_1, var_2, var_3 ) { var_4 = int( var_2 * 20 ); for ( var_5 = 0; var_5 < var_4; var_5++ ) wait 0.05; } setrecoilscale( var_0, var_1 ) { if ( !isdefined( var_0 ) ) var_0 = 0; if ( !isdefined( self.recoilscale ) ) self.recoilscale = var_0; else self.recoilscale = self.recoilscale + var_0; if ( isdefined( var_1 ) ) { if ( isdefined( self.recoilscale ) && var_1 < self.recoilscale ) var_1 = self.recoilscale; var_2 = 100 - var_1; } else var_2 = 100 - self.recoilscale; if ( var_2 < 0 ) var_2 = 0; if ( var_2 > 100 ) var_2 = 100; if ( var_2 == 100 ) { self player_recoilscaleoff(); return; } self player_recoilscaleon( var_2 ); } cleanarray( var_0 ) { var_1 = []; foreach ( var_4, var_3 in var_0 ) { if ( !isdefined( var_3 ) ) continue; var_1[var_1.size] = var_0[var_4]; } return var_1; } notusableforjoiningplayers( var_0 ) { self notify( "notusablejoiningplayers" ); self endon( "death" ); level endon( "game_ended" ); var_0 endon( "disconnect" ); var_0 endon( "death" ); self endon( "notusablejoiningplayers" ); for (;;) { level waittill( "player_spawned", var_1 ); if ( isdefined( var_1 ) && var_1 != var_0 ) self disableplayeruse( var_1 ); } } isstrstart( var_0, var_1 ) { return getsubstr( var_0, 0, var_1.size ) == var_1; } disableallstreaks() { level.killstreaksdisabled = 1; } enableallstreaks() { level.killstreaksdisabled = undefined; } validateusestreak( var_0, var_1 ) { if ( isdefined( var_0 ) ) var_2 = var_0; else { var_3 = self.pers["killstreaks"]; var_2 = var_3[self.killstreakindexweapon].streakname; } if ( isdefined( level.killstreaksdisabled ) && level.killstreaksdisabled ) return 0; if ( !self isonground() && ( isridekillstreak( var_2 ) || iscarrykillstreak( var_2 ) ) ) return 0; if ( isusingremote() ) return 0; if ( isdefined( self.selectinglocation ) ) return 0; if ( shouldpreventearlyuse( var_2 ) && level.killstreakrounddelay ) { if ( level.graceperiod - level.ingraceperiod < level.killstreakrounddelay ) { if ( !( isdefined( var_1 ) && var_1 ) ) self iprintlnbold( &"KILLSTREAKS_UNAVAILABLE_FOR_N", level.killstreakrounddelay - ( level.graceperiod - level.ingraceperiod ) ); return 0; } } if ( isdefined( self.nuked ) && self.nuked && isemped() ) { if ( iskillstreakaffectedbyemp( var_2 ) ) { if ( !( isdefined( var_1 ) && var_1 ) ) self iprintlnbold( &"KILLSTREAKS_UNAVAILABLE_FOR_N_WHEN_NUKE", level.nukeemptimeremaining ); return 0; } } if ( isemped() ) { if ( iskillstreakaffectedbyemp( var_2 ) ) { if ( !( isdefined( var_1 ) && var_1 ) ) self iprintlnbold( &"KILLSTREAKS_UNAVAILABLE_WHEN_JAMMED" ); return 0; } } if ( isairdenied() ) { if ( isflyingkillstreak( var_2 ) && var_2 != "air_superiority" ) { if ( !( isdefined( var_1 ) && var_1 ) ) self iprintlnbold( &"KILLSTREAKS_UNAVAILABLE_WHEN_AA" ); return 0; } } if ( self isusingturret() && ( isridekillstreak( var_2 ) || iscarrykillstreak( var_2 ) ) ) { if ( !( isdefined( var_1 ) && var_1 ) ) self iprintlnbold( &"KILLSTREAKS_UNAVAILABLE_USING_TURRET" ); return 0; } if ( isdefined( self.laststand ) && !_hasperk( "specialty_finalstand" ) ) { if ( !isdefined( level.allowlaststandai ) || !level.allowlaststandai || var_2 != "agent" ) { if ( !( isdefined( var_1 ) && var_1 ) ) self iprintlnbold( &"KILLSTREAKS_UNAVAILABLE_IN_LASTSTAND" ); return 0; } } if ( !common_scripts\utility::isweaponenabled() ) return 0; if ( isdefined( level.civilianjetflyby ) && isflyingkillstreak( var_2 ) ) { if ( !( isdefined( var_1 ) && var_1 ) ) self iprintlnbold( &"KILLSTREAKS_CIVILIAN_AIR_TRAFFIC" ); return 0; } return 1; } isridekillstreak( var_0 ) { switch ( var_0 ) { case "ac130": case "ca_a10_strafe": case "odin_assault": case "odin_support": case "drone_hive": case "heli_pilot": case "vanguard": return 1; default: return 0; } } iscarrykillstreak( var_0 ) { switch ( var_0 ) { case "ims": case "deployable_exp_ammo": case "deployable_grenades": case "deployable_ammo": case "deployable_vest": case "gl_turret": case "minigun_turret": case "sentry_gl": case "sentry": return 1; default: return 0; } } shouldpreventearlyuse( var_0 ) { switch ( var_0 ) { case "uav_3dping": case "jammer": case "recon_agent": case "ball_drone_radar": case "aa_launcher": case "uplink_support": case "ball_drone_backup": case "guard_dog": case "uplink": case "ims": case "deployable_ammo": case "deployable_vest": case "air_superiority": case "sentry": return 0; default: return !isstrstart( var_0, "airdrop_" ); } } iskillstreakaffectedbyemp( var_0 ) { switch ( var_0 ) { case "zerosub_level_killstreak": case "dome_seekers": case "recon_agent": case "guard_dog": case "deployable_ammo": case "deployable_vest": case "agent": return 0; default: return 1; } } iskillstreakaffectedbyjammer( var_0 ) { return iskillstreakaffectedbyemp( var_0 ) && !isflyingkillstreak( var_0 ); } isflyingkillstreak( var_0 ) { switch ( var_0 ) { case "airdrop_juggernaut_maniac": case "airdrop_assault": case "heli_sniper": case "airdrop_juggernaut_recon": case "airdrop_juggernaut": case "airdrop_sentry_minigun": case "ac130": case "ca_a10_strafe": case "odin_assault": case "odin_support": case "drone_hive": case "heli_pilot": case "vanguard": case "air_superiority": case "helicopter": return 1; default: return 0; } } isallteamstreak( var_0 ) { var_1 = getkillstreakallteamstreak( var_0 ); if ( !isdefined( var_1 ) ) return 0; if ( int( var_1 ) == 1 ) return 1; return 0; } getkillstreakrownum( var_0 ) { return tablelookuprownum( level.global_tables["killstreakTable"].path, level.global_tables["killstreakTable"].ref_col, var_0 ); } getkillstreakindex( var_0 ) { var_1 = tablelookup( level.global_tables["killstreakTable"].path, level.global_tables["killstreakTable"].ref_col, var_0, level.global_tables["killstreakTable"].index_col ); if ( var_1 == "" ) var_2 = -1; else var_2 = int( var_1 ); return var_2; } getkillstreakreference( var_0 ) { return tablelookup( level.global_tables["killstreakTable"].path, level.global_tables["killstreakTable"].ref_col, var_0, level.global_tables["killstreakTable"].ref_col ); } getkillstreakreferencebyweapon( var_0 ) { return tablelookup( level.global_tables["killstreakTable"].path, level.global_tables["killstreakTable"].weapon_col, var_0, level.global_tables["killstreakTable"].ref_col ); } getkillstreakname( var_0 ) { return tablelookupistring( level.global_tables["killstreakTable"].path, level.global_tables["killstreakTable"].ref_col, var_0, level.global_tables["killstreakTable"].name_col ); } getkillstreakdescription( var_0 ) { return tablelookupistring( level.global_tables["killstreakTable"].path, level.global_tables["killstreakTable"].ref_col, var_0, level.global_tables["killstreakTable"].desc_col ); } getkillstreakkills( var_0 ) { return tablelookup( level.global_tables["killstreakTable"].path, level.global_tables["killstreakTable"].ref_col, var_0, level.global_tables["killstreakTable"].kills_col ); } getkillstreakearnedhint( var_0 ) { return tablelookupistring( level.global_tables["killstreakTable"].path, level.global_tables["killstreakTable"].ref_col, var_0, level.global_tables["killstreakTable"].earned_hint_col ); } getkillstreaksound( var_0 ) { return tablelookup( level.global_tables["killstreakTable"].path, level.global_tables["killstreakTable"].ref_col, var_0, level.global_tables["killstreakTable"].sound_col ); } getkillstreakearneddialog( var_0 ) { return tablelookup( level.global_tables["killstreakTable"].path, level.global_tables["killstreakTable"].ref_col, var_0, level.global_tables["killstreakTable"].earned_dialog_col ); } getkillstreakalliesdialog( var_0 ) { return tablelookup( level.global_tables["killstreakTable"].path, level.global_tables["killstreakTable"].ref_col, var_0, level.global_tables["killstreakTable"].allies_dialog_col ); } getkillstreakenemydialog( var_0 ) { return tablelookup( level.global_tables["killstreakTable"].path, level.global_tables["killstreakTable"].ref_col, var_0, level.global_tables["killstreakTable"].enemy_dialog_col ); } getkillstreakenemyusedialog( var_0 ) { return int( tablelookup( level.global_tables["killstreakTable"].path, level.global_tables["killstreakTable"].ref_col, var_0, level.global_tables["killstreakTable"].enemy_use_dialog_col ) ); } getkillstreakweapon( var_0 ) { return tablelookup( level.global_tables["killstreakTable"].path, level.global_tables["killstreakTable"].ref_col, var_0, level.global_tables["killstreakTable"].weapon_col ); } getkillstreakscore( var_0 ) { return tablelookup( level.global_tables["killstreakTable"].path, level.global_tables["killstreakTable"].ref_col, var_0, level.global_tables["killstreakTable"].score_col ); } getkillstreakicon( var_0 ) { return tablelookup( level.global_tables["killstreakTable"].path, level.global_tables["killstreakTable"].ref_col, var_0, level.global_tables["killstreakTable"].icon_col ); } getkillstreakoverheadicon( var_0 ) { return tablelookup( level.global_tables["killstreakTable"].path, level.global_tables["killstreakTable"].ref_col, var_0, level.global_tables["killstreakTable"].overhead_icon_col ); } getkillstreakdpadicon( var_0 ) { return tablelookup( level.global_tables["killstreakTable"].path, level.global_tables["killstreakTable"].ref_col, var_0, level.global_tables["killstreakTable"].dpad_icon_col ); } getkillstreakunearnedicon( var_0 ) { return tablelookup( level.global_tables["killstreakTable"].path, level.global_tables["killstreakTable"].ref_col, var_0, level.global_tables["killstreakTable"].unearned_icon_col ); } getkillstreakallteamstreak( var_0 ) { return tablelookup( level.global_tables["killstreakTable"].path, level.global_tables["killstreakTable"].ref_col, var_0, level.global_tables["killstreakTable"].all_team_streak_col ); } currentactivevehiclecount( var_0 ) { if ( !isdefined( var_0 ) ) var_0 = 0; var_1 = var_0; if ( isdefined( level.helis ) ) var_1 = var_1 + level.helis.size; if ( isdefined( level.littlebirds ) ) var_1 = var_1 + level.littlebirds.size; if ( isdefined( level.ugvs ) ) var_1 = var_1 + level.ugvs.size; return var_1; } maxvehiclesallowed() { return 8; } incrementfauxvehiclecount() { level.fauxvehiclecount++; } decrementfauxvehiclecount() { level.fauxvehiclecount--; var_0 = currentactivevehiclecount(); if ( var_0 > level.fauxvehiclecount ) level.fauxvehiclecount = var_0; if ( level.fauxvehiclecount < 0 ) level.fauxvehiclecount = 0; } lightweightscalar() { return 1.07; } allowteamchoice() { if ( level.gametype == "cranked" ) return level.teambased; var_0 = int( tablelookup( "mp/gametypesTable.csv", 0, level.gametype, 4 ) ); return var_0; } allowclasschoice() { var_0 = int( tablelookup( "mp/gametypesTable.csv", 0, level.gametype, 5 ) ); return var_0; } showfakeloadout() { if ( level.gametype == "sotf" || level.gametype == "sotf_ffa" || level.gametype == "gun" || level.gametype == "infect" ) return 1; if ( level.gametype == "horde" && !matchmakinggame() && issplitscreen() ) return 0; if ( level.gametype == "horde" && level.currentroundnumber == 0 ) return 1; return 0; } setfakeloadoutweaponslot( var_0, var_1 ) { var_2 = getbaseweaponname( var_0 ); var_3 = []; if ( var_2 != "iw6_knifeonly" && var_2 != "iw6_knifeonlyfast" ) var_3 = getweaponattachments( var_0 ); var_4 = "ui_fakeloadout_weapon" + var_1; if ( isdefined( var_2 ) ) { var_5 = tablelookuprownum( "mp/statsTable.csv", 4, var_2 ); self setclientomnvar( var_4, var_5 ); } else self setclientomnvar( var_4, -1 ); for ( var_6 = 0; var_6 < 3; var_6++ ) { var_7 = var_4 + "_attach" + ( var_6 + 1 ); var_8 = -1; if ( isdefined( var_3[var_6] ) ) { if ( !isattachmentsniperscopedefault( var_0, var_3[var_6] ) ) var_8 = tablelookuprownum( "mp/attachmentTable.csv", 4, var_3[var_6] ); } self setclientomnvar( var_7, var_8 ); } } isbuffunlockedforweapon( var_0, var_1 ) { var_2 = 4; var_3 = 0; var_4 = 4; var_5 = self getrankedplayerdata( "weaponRank", var_1 ); var_6 = int( tablelookup( "mp/weaponRankTable.csv", var_3, getweaponclass( var_1 ), var_4 ) ); var_7 = tablelookup( "mp/weaponRankTable.csv", var_6, var_0, var_2 ); if ( var_7 != "" ) { if ( var_5 >= int( var_7 ) ) return 1; } return 0; } isbuffequippedonweapon( var_0, var_1 ) { if ( isdefined( self.loadoutprimary ) && self.loadoutprimary == var_1 ) { if ( isdefined( self.loadoutprimarybuff ) && self.loadoutprimarybuff == var_0 ) return 1; } else if ( isdefined( self.loadoutsecondary ) && self.loadoutsecondary == var_1 ) { if ( isdefined( self.loadoutsecondarybuff ) && self.loadoutsecondarybuff == var_0 ) return 1; } return 0; } setcommonrulesfrommatchrulesdata( var_0 ) { var_1 = getmatchrulesdata( "commonOption", "timeLimit" ); setdynamicdvar( "scr_" + level.gametype + "_timeLimit", var_1 ); registertimelimitdvar( level.gametype, var_1 ); var_2 = getmatchrulesdata( "commonOption", "scoreLimit" ); setdynamicdvar( "scr_" + level.gametype + "_scoreLimit", var_2 ); registerscorelimitdvar( level.gametype, var_2 ); var_3 = getmatchrulesdata( "commonOption", "numLives" ); setdynamicdvar( "scr_" + level.gametype + "_numLives", var_3 ); registernumlivesdvar( level.gametype, var_3 ); setdynamicdvar( "scr_player_maxhealth", getmatchrulesdata( "commonOption", "maxHealth" ) ); setdynamicdvar( "scr_player_healthregentime", getmatchrulesdata( "commonOption", "healthRegen" ) ); level.matchrules_damagemultiplier = 0; level.matchrules_vampirism = 0; setdynamicdvar( "scr_game_spectatetype", getmatchrulesdata( "commonOption", "spectateModeAllowed" ) ); setdynamicdvar( "scr_game_allowkillcam", getmatchrulesdata( "commonOption", "showKillcam" ) ); setdynamicdvar( "scr_game_forceuav", getmatchrulesdata( "commonOption", "radarAlwaysOn" ) ); setdynamicdvar( "scr_" + level.gametype + "_playerrespawndelay", getmatchrulesdata( "commonOption", "respawnDelay" ) ); setdynamicdvar( "scr_" + level.gametype + "_waverespawndelay", getmatchrulesdata( "commonOption", "waveRespawnDelay" ) ); setdynamicdvar( "scr_player_forcerespawn", getmatchrulesdata( "commonOption", "forceRespawn" ) ); level.matchrules_allowcustomclasses = getmatchrulesdata( "commonOption", "allowCustomClasses" ); level.supportintel = getmatchrulesdata( "commonOption", "allowIntel" ); setdynamicdvar( "scr_game_hardpoints", getmatchrulesdata( "commonOption", "allowKillstreaks" ) ); setdynamicdvar( "scr_game_perks", getmatchrulesdata( "commonOption", "allowPerks" ) ); setdynamicdvar( "g_hardcore", getmatchrulesdata( "commonOption", "hardcoreModeOn" ) ); setdynamicdvar( "scr_game_onlyheadshots", getmatchrulesdata( "commonOption", "headshotsOnly" ) ); if ( !isdefined( var_0 ) ) setdynamicdvar( "scr_team_fftype", getmatchrulesdata( "commonOption", "friendlyFire" ) ); if ( getmatchrulesdata( "commonOption", "hardcoreModeOn" ) ) { setdynamicdvar( "scr_team_fftype", 2 ); setdynamicdvar( "scr_player_maxhealth", 30 ); setdynamicdvar( "scr_player_healthregentime", 0 ); setdynamicdvar( "scr_player_respawndelay", 0 ); setdynamicdvar( "scr_game_allowkillcam", 0 ); setdynamicdvar( "scr_game_forceuav", 0 ); } setdvar( "bg_compassShowEnemies", getdvar( "scr_game_forceuav" ) ); } reinitializematchrulesonmigration() { for (;;) { level waittill( "host_migration_begin" ); [[ level.initializematchrules ]](); } } reinitializethermal( var_0 ) { self endon( "disconnect" ); if ( isdefined( var_0 ) ) var_0 endon( "death" ); for (;;) { level waittill( "host_migration_begin" ); if ( isdefined( self.lastvisionsetthermal ) ) self visionsetthermalforplayer( self.lastvisionsetthermal, 0 ); } } getmatchrulesspecialclass( var_0, var_1 ) { var_2 = []; var_2["loadoutPrimaryAttachment2"] = "none"; var_2["loadoutSecondaryAttachment2"] = "none"; var_3 = []; var_2["loadoutPrimary"] = getmatchrulesdata( "defaultClasses", var_0, var_1, "class", "weaponSetups", 0, "weapon" ); var_2["loadoutPrimaryAttachment"] = getmatchrulesdata( "defaultClasses", var_0, var_1, "class", "weaponSetups", 0, "attachment", 0 ); var_2["loadoutPrimaryAttachment2"] = getmatchrulesdata( "defaultClasses", var_0, var_1, "class", "weaponSetups", 0, "attachment", 1 ); var_2["loadoutPrimaryBuff"] = getmatchrulesdata( "defaultClasses", var_0, var_1, "class", "weaponSetups", 0, "buff" ); var_2["loadoutPrimaryCamo"] = getmatchrulesdata( "defaultClasses", var_0, var_1, "class", "weaponSetups", 0, "camo" ); var_2["loadoutPrimaryReticle"] = getmatchrulesdata( "defaultClasses", var_0, var_1, "class", "weaponSetups", 0, "reticle" ); var_2["loadoutSecondary"] = getmatchrulesdata( "defaultClasses", var_0, var_1, "class", "weaponSetups", 1, "weapon" ); var_2["loadoutSecondaryAttachment"] = getmatchrulesdata( "defaultClasses", var_0, var_1, "class", "weaponSetups", 1, "attachment", 0 ); var_2["loadoutSecondaryAttachment2"] = getmatchrulesdata( "defaultClasses", var_0, var_1, "class", "weaponSetups", 1, "attachment", 1 ); var_2["loadoutSecondaryBuff"] = getmatchrulesdata( "defaultClasses", var_0, var_1, "class", "weaponSetups", 1, "buff" ); var_2["loadoutSecondaryCamo"] = getmatchrulesdata( "defaultClasses", var_0, var_1, "class", "weaponSetups", 1, "camo" ); var_2["loadoutSecondaryReticle"] = getmatchrulesdata( "defaultClasses", var_0, var_1, "class", "weaponSetups", 1, "reticle" ); var_2["loadoutEquipment"] = getmatchrulesdata( "defaultClasses", var_0, var_1, "class", "perks", 0 ); var_2["loadoutOffhand"] = getmatchrulesdata( "defaultClasses", var_0, var_1, "class", "perks", 1 ); if ( var_2["loadoutOffhand"] == "specialty_null" ) { var_2["loadoutOffhand"] = "none"; if ( level.gametype == "infect" && var_0 == "axis" ) var_2["loadoutOffhand"] = "specialty_tacticalinsertion"; } for ( var_4 = 0; var_4 < maps\mp\gametypes\_class::getnumabilitycategories(); var_4++ ) { for ( var_5 = 0; var_5 < maps\mp\gametypes\_class::getnumsubability(); var_5++ ) { var_6 = 0; var_6 = getmatchrulesdata( "defaultClasses", var_0, var_1, "class", "abilitiesPicked", var_4, var_5 ); if ( isdefined( var_6 ) && var_6 ) { var_7 = tablelookup( "mp/cacAbilityTable.csv", 0, var_4 + 1, var_5 + 4 ); var_3[var_3.size] = var_7; } } } var_2["loadoutPerks"] = var_3; var_8 = getmatchrulesdata( "defaultClasses", var_0, var_1, "class", "perks", 5 ); if ( var_8 != "specialty_null" ) { var_2["loadoutStreakType"] = var_8; var_2["loadoutKillstreak1"] = maps\mp\gametypes\_class::recipe_getkillstreak( var_0, var_1, var_8, 0 ); var_2["loadoutKillstreak2"] = maps\mp\gametypes\_class::recipe_getkillstreak( var_0, var_1, var_8, 1 ); var_2["loadoutKillstreak3"] = maps\mp\gametypes\_class::recipe_getkillstreak( var_0, var_1, var_8, 2 ); } var_2["loadoutJuggernaut"] = getmatchrulesdata( "defaultClasses", var_0, var_1, "juggernaut" ); return var_2; } recipeclassapplyjuggernaut( var_0 ) { level endon( "game_ended" ); self endon( "disconnect" ); if ( level.ingraceperiod && !self.hasdonecombat ) self waittill( "giveLoadout" ); else self waittill( "spawned_player" ); if ( var_0 ) { self notify( "lost_juggernaut" ); wait 0.5; } if ( !isdefined( self.isjuiced ) ) { self.movespeedscaler = 0.7; maps\mp\gametypes\_weapons::updatemovespeedscale(); } self.juggmovespeedscaler = 0.7; self disableweaponpickup(); if ( !getdvarint( "camera_thirdPerson" ) ) self setclientomnvar( "ui_juggernaut", 1 ); thread maps\mp\killstreaks\_juggernaut::juggernautsounds(); if ( level.gametype != "jugg" || isdefined( level.matchrules_showjuggradaricon ) && level.matchrules_showjuggradaricon ) self setperk( "specialty_radarjuggernaut", 1, 0 ); if ( isdefined( self.isjuggmodejuggernaut ) && self.isjuggmodejuggernaut ) self makeportableradar( self ); level notify( "juggernaut_equipped", self ); thread maps\mp\killstreaks\_juggernaut::juggremover(); } updatesessionstate( var_0, var_1 ) { self.sessionstate = var_0; if ( !isdefined( var_1 ) ) var_1 = ""; self.statusicon = var_1; self setclientomnvar( "ui_session_state", var_0 ); } getclassindex( var_0 ) { return level.classmap[var_0]; } isteaminlaststand() { var_0 = getlivingplayers( self.team ); foreach ( var_2 in var_0 ) { if ( var_2 != self && ( !isdefined( var_2.laststand ) || !var_2.laststand ) ) return 0; } return 1; } killteaminlaststand( var_0 ) { var_1 = getlivingplayers( var_0 ); foreach ( var_3 in var_1 ) { if ( isdefined( var_3.laststand ) && var_3.laststand ) var_3 thread maps\mp\gametypes\_damage::dieaftertime( randomintrange( 1, 3 ) ); } } switch_to_last_weapon( var_0 ) { if ( !isai( self ) ) self switchtoweapon( var_0 ); else self switchtoweapon( "none" ); } isaiteamparticipant( var_0 ) { if ( isagent( var_0 ) && var_0.agent_teamparticipant == 1 ) return 1; if ( isbot( var_0 ) ) return 1; return 0; } isteamparticipant( var_0 ) { if ( isaiteamparticipant( var_0 ) ) return 1; if ( isplayer( var_0 ) ) return 1; return 0; } isaigameparticipant( var_0 ) { if ( isagent( var_0 ) && isdefined( var_0.agent_gameparticipant ) && var_0.agent_gameparticipant == 1 ) return 1; if ( isbot( var_0 ) ) return 1; return 0; } isgameparticipant( var_0 ) { if ( isaigameparticipant( var_0 ) ) return 1; if ( isplayer( var_0 ) ) return 1; return 0; } getteamindex( var_0 ) { var_1 = 0; if ( level.teambased ) { switch ( var_0 ) { case "axis": var_1 = 1; break; case "allies": var_1 = 2; break; } } return var_1; } getteamarray( var_0, var_1 ) { var_2 = []; if ( !isdefined( var_1 ) || var_1 ) { foreach ( var_4 in level.characters ) { if ( var_4.team == var_0 ) var_2[var_2.size] = var_4; } } else { foreach ( var_4 in level.players ) { if ( var_4.team == var_0 ) var_2[var_2.size] = var_4; } } return var_2; } isheadshot( var_0, var_1, var_2, var_3 ) { if ( isdefined( var_3 ) ) { if ( isdefined( var_3.owner ) ) { if ( var_3.code_classname == "script_vehicle" ) return 0; if ( var_3.code_classname == "misc_turret" ) return 0; if ( var_3.code_classname == "script_model" ) return 0; } if ( isdefined( var_3.agent_type ) ) { if ( var_3.agent_type == "dog" || var_3.agent_type == "alien" ) return 0; } } return ( var_1 == "head" || var_1 == "helmet" ) && var_2 != "MOD_MELEE" && var_2 != "MOD_IMPACT" && var_2 != "MOD_SCARAB" && var_2 != "MOD_CRUSH" && !isenvironmentweapon( var_0 ); } attackerishittingteam( var_0, var_1 ) { if ( !level.teambased ) return 0; else if ( !isdefined( var_1 ) || !isdefined( var_0 ) ) return 0; else if ( !isdefined( var_0.team ) || !isdefined( var_1.team ) ) return 0; else if ( var_0 == var_1 ) return 0; else if ( level.gametype == "infect" && var_0.pers["team"] == var_1.team && isdefined( var_1.teamchangedthisframe ) ) return 0; else if ( level.gametype == "infect" && var_0.pers["team"] != var_1.team && isdefined( var_1.teamchangedthisframe ) ) return 1; else if ( isdefined( var_1.scrambled ) && var_1.scrambled ) return 0; else if ( var_0.team == var_1.team ) return 1; else return 0; } set_high_priority_target_for_bot( var_0 ) { if ( !( isdefined( self.high_priority_for ) && common_scripts\utility::array_contains( self.high_priority_for, var_0 ) ) ) { self.high_priority_for = common_scripts\utility::array_add( self.high_priority_for, var_0 ); var_0 notify( "calculate_new_level_targets" ); } } add_to_bot_use_targets( var_0, var_1 ) { if ( isdefined( level.bot_funcs["bots_add_to_level_targets"] ) ) { var_0.use_time = var_1; var_0.bot_interaction_type = "use"; [[ level.bot_funcs["bots_add_to_level_targets"] ]]( var_0 ); } } remove_from_bot_use_targets( var_0 ) { if ( isdefined( level.bot_funcs["bots_remove_from_level_targets"] ) ) [[ level.bot_funcs["bots_remove_from_level_targets"] ]]( var_0 ); } add_to_bot_damage_targets( var_0 ) { if ( isdefined( level.bot_funcs["bots_add_to_level_targets"] ) ) { var_0.bot_interaction_type = "damage"; [[ level.bot_funcs["bots_add_to_level_targets"] ]]( var_0 ); } } remove_from_bot_damage_targets( var_0 ) { if ( isdefined( level.bot_funcs["bots_remove_from_level_targets"] ) ) [[ level.bot_funcs["bots_remove_from_level_targets"] ]]( var_0 ); } notify_enemy_bots_bomb_used( var_0 ) { if ( isdefined( level.bot_funcs["notify_enemy_bots_bomb_used"] ) ) self [[ level.bot_funcs["notify_enemy_bots_bomb_used"] ]]( var_0 ); } get_rank_xp_for_bot() { if ( isdefined( level.bot_funcs["bot_get_rank_xp"] ) ) return self [[ level.bot_funcs["bot_get_rank_xp"] ]](); } bot_israndom() { var_0 = 1; if ( getdvar( "squad_use_hosts_squad" ) == "1" ) { var_1 = undefined; if ( isdefined( self.bot_team ) ) var_1 = self.bot_team; else if ( isdefined( self.pers["team"] ) ) var_1 = self.pers["team"]; if ( isdefined( var_1 ) && level.wargame_client.team == var_1 ) var_0 = 0; else var_0 = 1; } else var_0 = self botisrandomized(); return var_0; } isassaultkillstreak( var_0 ) { switch ( var_0 ) { case "airdrop_juggernaut_maniac": case "airdrop_assault": case "airdrop_juggernaut": case "airdrop_sentry_minigun": case "ball_drone_backup": case "guard_dog": case "uplink": case "ims": case "odin_assault": case "drone_hive": case "heli_pilot": case "vanguard": case "sentry": case "helicopter": return 1; default: return 0; } } issupportkillstreak( var_0 ) { switch ( var_0 ) { case "sam_turret": case "heli_sniper": case "airdrop_juggernaut_recon": case "uav_3dping": case "jammer": case "recon_agent": case "ball_drone_radar": case "aa_launcher": case "uplink_support": case "deployable_ammo": case "deployable_vest": case "odin_support": case "air_superiority": return 1; default: return 0; } } isspecialistkillstreak( var_0 ) { switch ( var_0 ) { case "specialty_deadeye_ks": case "specialty_boom_ks": case "specialty_twoprimaries_ks": case "specialty_hardline_ks": case "specialty_gambler_ks": case "specialty_explosivedamage_ks": case "specialty_extra_attachment_ks": case "specialty_extra_deadly_ks": case "specialty_extra_equipment_ks": case "specialty_extraammo_ks": case "specialty_gunsmith_ks": case "_specialty_blastshield_ks": case "specialty_stun_resistance_ks": case "specialty_sharp_focus_ks": case "specialty_regenfaster_ks": case "specialty_falldamage_ks": case "specialty_comexp_ks": case "specialty_selectivehearing_ks": case "specialty_detectexplosive_ks": case "specialty_scavenger_ks": case "specialty_paint_ks": case "specialty_incog_ks": case "specialty_quieter_ks": case "specialty_gpsjammer_ks": case "specialty_blindeye_ks": case "specialty_silentkill_ks": case "specialty_sprintreload_ks": case "specialty_quickdraw_ks": case "specialty_bulletaccuracy_ks": case "specialty_pitcher_ks": case "specialty_quickswap_ks": case "specialty_reducedsway_ks": case "specialty_stalker_ks": case "specialty_marathon_ks": case "specialty_lightweight_ks": case "specialty_fastreload_ks": case "specialty_fastsprintrecovery_ks": return 1; default: return 0; } } bot_is_fireteam_mode() { var_0 = botautoconnectenabled() == 2; if ( var_0 ) { if ( !level.teambased || level.gametype != "war" && level.gametype != "dom" ) return 0; return 1; } return 0; } set_console_status() { if ( !isdefined( level.console ) ) level.console = getdvar( "consoleGame" ) == "true"; else { } if ( !isdefined( level.xenon ) ) level.xenon = getdvar( "xenonGame" ) == "true"; else { } if ( !isdefined( level.ps3 ) ) level.ps3 = getdvar( "ps3Game" ) == "true"; else { } if ( !isdefined( level.xb3 ) ) level.xb3 = getdvar( "xb3Game" ) == "true"; else { } if ( !isdefined( level.ps4 ) ) level.ps4 = getdvar( "ps4Game" ) == "true"; else { } } is_gen4() { if ( level.xb3 || level.ps4 || !level.console ) return 1; else return 0; } setdvar_cg_ng( var_0, var_1, var_2 ) { if ( !isdefined( level.console ) || !isdefined( level.xb3 ) || !isdefined( level.ps4 ) ) set_console_status(); if ( is_gen4() ) setdvar( var_0, var_2 ); else setdvar( var_0, var_1 ); } isvalidteamtarget( var_0, var_1, var_2 ) { return isdefined( var_2.team ) && var_2.team == var_1; } isvalidffatarget( var_0, var_1, var_2 ) { return isdefined( var_2.owner ) && ( !isdefined( var_0 ) || var_2.owner != var_0 ); } gethelipilotmeshoffset() { return ( 0, 0, 5000 ); } gethelipilottraceoffset() { return ( 0, 0, 2500 ); } getlinknamenodes() { var_0 = []; if ( isdefined( self.script_linkto ) ) { var_1 = strtok( self.script_linkto, " " ); for ( var_2 = 0; var_2 < var_1.size; var_2++ ) { var_3 = getnode( var_1[var_2], "script_linkname" ); if ( isdefined( var_3 ) ) var_0[var_0.size] = var_3; } } return var_0; } is_aliens() { return level.gametype == "aliens"; } get_players_watching( var_0, var_1 ) { if ( !isdefined( var_0 ) ) var_0 = 0; if ( !isdefined( var_1 ) ) var_1 = 0; var_2 = self getentitynumber(); var_3 = []; foreach ( var_5 in level.players ) { if ( var_5 == self ) continue; var_6 = 0; if ( !var_1 ) { if ( var_5.team == "spectator" || var_5.sessionstate == "spectator" ) { var_7 = var_5 getspectatingplayer(); if ( isdefined( var_7 ) && var_7 == self ) var_6 = 1; } if ( var_5.forcespectatorclient == var_2 ) var_6 = 1; } if ( !var_0 ) { if ( var_5.killcamentity == var_2 ) var_6 = 1; } if ( var_6 ) var_3[var_3.size] = var_5; } return var_3; } set_visionset_for_watching_players( var_0, var_1, var_2, var_3, var_4, var_5 ) { var_6 = get_players_watching( var_4, var_5 ); foreach ( var_8 in var_6 ) { var_8 notify( "changing_watching_visionset" ); if ( isdefined( var_3 ) && var_3 ) var_8 visionsetmissilecamforplayer( var_0, var_1 ); else var_8 visionsetnakedforplayer( var_0, var_1 ); if ( var_0 != "" && isdefined( var_2 ) ) { var_8 thread reset_visionset_on_team_change( self, var_1 + var_2 ); var_8 thread reset_visionset_on_disconnect( self ); if ( var_8 isinkillcam() ) var_8 thread reset_visionset_on_spawn(); } } } reset_visionset_on_spawn() { self endon( "disconnect" ); self waittill( "spawned" ); self visionsetnakedforplayer( "", 0.0 ); } reset_visionset_on_team_change( var_0, var_1 ) { self endon( "changing_watching_visionset" ); var_2 = gettime(); var_3 = self.team; while ( gettime() - var_2 < var_1 * 1000 ) { if ( self.team != var_3 || !common_scripts\utility::array_contains( var_0 get_players_watching(), self ) ) { self visionsetnakedforplayer( "", 0.0 ); self notify( "changing_visionset" ); break; } wait 0.05; } } reset_visionset_on_disconnect( var_0 ) { self endon( "changing_watching_visionset" ); var_0 waittill( "disconnect" ); self visionsetnakedforplayer( "", 0.0 ); } _setplayerdata( var_0, var_1 ) { if ( matchmakinggame() ) self setrankedplayerdata( var_0, var_1 ); else self setprivateplayerdata( var_0, var_1 ); } _getplayerdata( var_0 ) { if ( matchmakinggame() ) return self getrankedplayerdata( var_0 ); else return self getprivateplayerdata( var_0 ); } _validateattacker( var_0 ) { if ( isagent( var_0 ) && ( !isdefined( var_0.isactive ) || !var_0.isactive ) ) return undefined; if ( isagent( var_0 ) && !isdefined( var_0.classname ) ) return undefined; return var_0; } waittill_grenade_fire() { self waittill( "grenade_fire", var_0, var_1 ); if ( isdefined( var_0 ) ) { if ( !isdefined( var_0.weapon_name ) ) var_0.weapon_name = var_1; if ( !isdefined( var_0.owner ) ) var_0.owner = self; if ( !isdefined( var_0.team ) ) var_0.team = self.team; } return var_0; } waittill_missile_fire() { self waittill( "missile_fire", var_0, var_1 ); if ( isdefined( var_0 ) ) { if ( !isdefined( var_0.weapon_name ) ) var_0.weapon_name = var_1; if ( !isdefined( var_0.owner ) ) var_0.owner = self; if ( !isdefined( var_0.team ) ) var_0.team = self.team; } return var_0; } _setnameplatematerial( var_0, var_1 ) { if ( !isdefined( self.nameplatematerial ) ) { self.nameplatematerial = []; self.prevnameplatematerial = []; } else { self.prevnameplatematerial[0] = self.nameplatematerial[0]; self.prevnameplatematerial[1] = self.nameplatematerial[1]; } self.nameplatematerial[0] = var_0; self.nameplatematerial[1] = var_1; self setnameplatematerial( var_0, var_1 ); } _restorepreviousnameplatematerial() { if ( isdefined( self.prevnameplatematerial ) ) self setnameplatematerial( self.prevnameplatematerial[0], self.prevnameplatematerial[1] ); else self setnameplatematerial( "", "" ); self.nameplatematerial = undefined; self.prevnameplatematerial = undefined; } isplayeroutsideofanybombsite( var_0 ) { if ( isdefined( level.bombzones ) ) { foreach ( var_2 in level.bombzones ) { if ( self istouching( var_2.trigger ) ) return 0; } } return 1; } weaponignoresblastshield( var_0 ) { return var_0 == "heli_pilot_turret_mp" || var_0 == "bomb_site_mp"; } isweaponaffectedbyblastshield( var_0 ) { return var_0 == "ims_projectile_mp" || var_0 == "remote_tank_projectile_mp"; } restorebasevisionset( var_0 ) { self visionsetnakedforplayer( "", var_0 ); } playplayerandnpcsounds( var_0, var_1, var_2 ) { var_0 playlocalsound( var_1 ); var_0 playsoundtoteam( var_2, "allies", var_0 ); var_0 playsoundtoteam( var_2, "axis", var_0 ); } isenemy( var_0 ) { if ( level.teambased ) return isplayeronenemyteam( var_0 ); else return isplayerffaenemy( var_0 ); } isplayeronenemyteam( var_0 ) { return var_0.team != self.team; } isplayerffaenemy( var_0 ) { if ( isdefined( var_0.owner ) ) return var_0.owner != self; else return var_0 != self; } setextrascore0( var_0 ) { self.extrascore0 = var_0; setpersstat( "extrascore0", var_0 ); } allowlevelkillstreaks() { if ( level.gametype == "sotf" && level.gametype == "sotf_ffa" && level.gametype == "infect" && level.gametype == "horde" ) return 0; return 1; } getuniqueid() { if ( isdefined( self.pers["guid"] ) ) return self.pers["guid"]; var_0 = self getguid(); if ( var_0 == "0000000000000000" ) { if ( isdefined( level.guidgen ) ) level.guidgen++; else level.guidgen = 1; var_0 = "script" + level.guidgen; } self.pers["guid"] = var_0; return self.pers["guid"]; } getrandomplayingplayer() { var_0 = common_scripts\utility::array_removeundefined( level.players ); for (;;) { if ( !var_0.size ) return; var_1 = randomintrange( 0, var_0.size ); var_2 = var_0[var_1]; if ( !isreallyalive( var_2 ) || var_2.sessionstate != "playing" ) { var_0 = common_scripts\utility::array_remove( var_0, var_2 ); continue; } return var_2; } } getmapname() { if ( !isdefined( level.mapname ) ) level.mapname = getdvar( "mapname" ); return level.mapname; } issinglehitweapon( var_0 ) { switch ( var_0 ) { case "iw6_panzerfaust3_mp": case "iw6_rgm_mp": case "iw6_maaws_mp": case "iw6_mk32_mp": return 1; default: return 0; } } gamehasneutralcrateowner( var_0 ) { switch ( var_0 ) { case "sotf_ffa": case "sotf": return 1; default: return 0; } } array_remove_keep_index( var_0, var_1 ) { var_2 = []; foreach ( var_5, var_4 in var_0 ) { if ( var_4 != var_1 ) var_2[var_5] = var_4; } return var_2; } isanymlgmatch() { if ( getdvarint( "xblive_competitionmatch" ) ) return 1; return 0; } ismlgsystemlink() { if ( getdvarint( "systemlink" ) && getdvarint( "xblive_competitionmatch" ) ) return 1; return 0; } ismlgprivatematch() { if ( privatematch() && getdvarint( "xblive_competitionmatch" ) ) return 1; return 0; } ismlgmatch() { if ( ismlgsystemlink() || ismlgprivatematch() ) return 1; return 0; } ismoddedroundgame() { if ( level.gametype == "blitz" || level.gametype == "dom" ) return 1; return 0; } isusingdefaultclass( var_0, var_1 ) { var_2 = 0; if ( isdefined( var_1 ) ) { if ( isusingmatchrulesdata() && getmatchrulesdata( "defaultClasses", var_0, var_1, "class", "inUse" ) ) var_2 = 1; } else { for ( var_1 = 0; var_1 < 6; var_1++ ) { if ( isusingmatchrulesdata() && getmatchrulesdata( "defaultClasses", var_0, var_1, "class", "inUse" ) ) { var_2 = 1; break; } } } return var_2; } cancustomjuggusekillstreak( var_0 ) { var_1 = 1; if ( isdefined( self.isjuggernautlevelcustom ) && self.isjuggernautlevelcustom && ( isdefined( self.canusekillstreakcallback ) && !self [[ self.canusekillstreakcallback ]]( var_0 ) ) ) var_1 = 0; return var_1; } printcustomjuggkillstreakerrormsg() { if ( isdefined( self.killstreakerrormsg ) ) [[ self.killstreakerrormsg ]](); }