This commit is contained in:
2024-02-13 13:20:49 +01:00
commit 872504afef
1761 changed files with 871764 additions and 0 deletions

View File

@ -0,0 +1,405 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
if ( level.teambased && !isdefined( level.nobuddyspawns ) )
{
if ( !isdefined( level.battlebuddywaitlist ) )
level.battlebuddywaitlist = [];
level thread onplayerspawned();
level thread onplayerconnect();
}
}
onplayerconnect()
{
for (;;)
{
level waittill( "connected", var_0 );
var_0 thread onbattlebuddymenuselection();
var_0 thread ondisconnect();
}
}
onplayerspawned()
{
level endon( "game_ended" );
for (;;)
{
level waittill( "player_spawned", var_0 );
if ( !isai( var_0 ) )
{
if ( isdefined( var_0.isspawningonbattlebuddy ) )
{
var_0.isspawningonbattlebuddy = undefined;
if ( isdefined( var_0.battlebuddy ) && isalive( var_0.battlebuddy ) )
{
if ( var_0.battlebuddy getstance() != "stand" )
var_0 setstance( "crouch" );
}
}
if ( var_0 wantsbattlebuddy() )
{
if ( !var_0 hasbattlebuddy() )
{
var_0.firstspawn = 0;
var_0 findbattlebuddy();
}
continue;
}
var_0 leavebattlebuddysystem();
}
}
}
onbattlebuddymenuselection()
{
self endon( "disconnect" );
level endon( "game_ended" );
for (;;)
{
self waittill( "luinotifyserver", var_0, var_1 );
if ( var_0 == "battlebuddy_update" )
{
var_2 = !wantsbattlebuddy();
self setcommonplayerdata( "enableBattleBuddy", var_2 );
if ( var_2 )
findbattlebuddy();
else
leavebattlebuddysystem();
continue;
}
if ( var_0 == "team_select" && self.hasspawned )
{
var_3 = wantsbattlebuddy();
leavebattlebuddysystem();
self setcommonplayerdata( "enableBattleBuddy", var_3 );
}
}
}
ondisconnect()
{
self waittill( "disconnect" );
leavebattlebuddysystemdisconnect();
}
waitforplayerrespawnchoice()
{
maps\mp\_utility::updatesessionstate( "spectator" );
self.forcespectatorclient = self.battlebuddy getentitynumber();
self forcethirdpersonwhenfollowing();
self setclientomnvar( "cam_scene_name", "over_shoulder" );
self setclientomnvar( "cam_scene_lead", self.battlebuddy getentitynumber() );
waitforbuddyspawntimer();
}
watchforrandomspawnbutton()
{
self endon( "disconnect" );
self endon( "abort_battlebuddy_spawn" );
self endon( "teamSpawnPressed" );
level endon( "game_ended" );
self setclientomnvar( "ui_battlebuddy_showButtonPrompt", 1 );
self notifyonplayercommand( "respawn_random", "+usereload" );
self notifyonplayercommand( "respawn_random", "+activate" );
wait 0.5;
self waittill( "respawn_random" );
self setclientomnvar( "ui_battlebuddy_timer_ms", 0 );
self setclientomnvar( "ui_battlebuddy_showButtonPrompt", 0 );
setupforrandomspawn();
}
setupforrandomspawn()
{
clearbuddymessage();
self.isspawningonbattlebuddy = undefined;
self notify( "randomSpawnPressed" );
cleanupbuddyspawn();
}
waitforbuddyspawntimer()
{
self endon( "randomSpawnPressed" );
level endon( "game_ended" );
self.isspawningonbattlebuddy = undefined;
thread watchforrandomspawnbutton();
if ( isdefined( self.battlebuddyrespawntimestamp ) )
{
var_0 = 4000 - ( gettime() - self.battlebuddyrespawntimestamp );
if ( var_0 < 2000 )
var_0 = 2000;
}
else
var_0 = 4000;
var_1 = checkbuddyspawn();
if ( var_1.status == 0 )
self.battlebuddy setclientomnvar( "ui_battlebuddy_status", "incoming" );
else if ( var_1.status == -1 || var_1.status == -3 )
self.battlebuddy setclientomnvar( "ui_battlebuddy_status", "err_combat" );
else
self.battlebuddy setclientomnvar( "ui_battlebuddy_status", "err_pos" );
updatetimer( var_0 );
for ( var_1 = checkbuddyspawn(); var_1.status != 0; var_1 = checkbuddyspawn() )
{
if ( var_1.status == -1 || var_1.status == -3 )
{
self setclientomnvar( "ui_battlebuddy_status", "wait_combat" );
self.battlebuddy setclientomnvar( "ui_battlebuddy_status", "err_combat" );
}
else if ( var_1.status == -2 )
{
self setclientomnvar( "ui_battlebuddy_status", "wait_pos" );
self.battlebuddy setclientomnvar( "ui_battlebuddy_status", "err_pos" );
}
else if ( var_1.status == -4 )
{
cleanupbuddyspawn();
return;
}
wait 0.5;
}
self.isspawningonbattlebuddy = 1;
thread displaybuddyspawnsuccessful();
self playlocalsound( "copycat_steal_class" );
self notify( "teamSpawnPressed" );
}
clearbuddymessage()
{
self setclientomnvar( "ui_battlebuddy_status", "none" );
self setclientomnvar( "ui_battlebuddy_showButtonPrompt", 0 );
if ( isdefined( self.battlebuddy ) )
self.battlebuddy setclientomnvar( "ui_battlebuddy_status", "none" );
}
displaybuddystatusmessage( var_0 )
{
maps\mp\_utility::setlowermessage( "waiting_info", var_0, undefined, undefined, undefined, undefined, undefined, undefined, 1 );
}
displaybuddyspawnsuccessful()
{
clearbuddymessage();
if ( isdefined( self.battlebuddy ) )
{
self.battlebuddy setclientomnvar( "ui_battlebuddy_status", "on_you" );
wait 1.5;
self.battlebuddy setclientomnvar( "ui_battlebuddy_status", "none" );
}
}
checkbuddyspawn()
{
var_0 = spawnstruct();
if ( !isdefined( self.battlebuddy ) || !isalive( self.battlebuddy ) )
{
var_0.status = -4;
return var_0;
}
if ( maps\mp\gametypes\_spawnscoring::isplayerincombat( self.battlebuddy, 1 ) )
var_0.status = -1;
else
{
var_1 = maps\mp\gametypes\_spawnscoring::findspawnlocationnearplayer( self.battlebuddy );
if ( isdefined( var_1 ) )
{
var_2 = spawnstruct();
var_2.maxtracecount = 18;
var_2.currenttracecount = 0;
if ( !maps\mp\gametypes\_spawnscoring::issafetospawnon( self.battlebuddy, var_1, var_2 ) )
var_0.status = -3;
else
{
var_0.status = 0;
var_0.origin = var_1;
var_3 = self.battlebuddy.origin - var_1;
var_0.angles = ( 0, self.battlebuddy.angles[1], 0 );
}
}
else
var_0.status = -2;
}
return var_0;
}
cleanupbuddyspawn()
{
thread maps\mp\gametypes\_spectating::setspectatepermissions();
self.forcespectatorclient = -1;
maps\mp\_utility::updatesessionstate( "dead" );
self disableforcethirdpersonwhenfollowing();
self setclientomnvar( "cam_scene_name", "unknown" );
clearbuddymessage();
self notify( "abort_battlebuddy_spawn" );
}
updatetimer( var_0 )
{
self endon( "disconnect" );
self endon( "abort_battlebuddy_spawn" );
self endon( "teamSpawnPressed" );
var_1 = var_0 * 0.001;
self setclientomnvar( "ui_battlebuddy_timer_ms", var_0 + gettime() );
wait( var_1 );
self setclientomnvar( "ui_battlebuddy_timer_ms", 0 );
}
wantsbattlebuddy()
{
return self getcommonplayerdata( "enableBattleBuddy" );
}
hasbattlebuddy()
{
return isdefined( self.battlebuddy );
}
needsbattlebuddy()
{
return wantsbattlebuddy() && !hasbattlebuddy();
}
isvalidbattlebuddy( var_0 )
{
return self != var_0 && self.team == var_0.team && var_0 needsbattlebuddy();
}
canbuddyspawn()
{
return hasbattlebuddy() && maps\mp\_utility::isreallyalive( self.battlebuddy );
}
pairbattlebuddy( var_0 )
{
removefrombattlebuddywaitlist( var_0 );
self.battlebuddy = var_0;
var_0.battlebuddy = self;
self setclientomnvar( "ui_battlebuddy_idx", var_0 getentitynumber() );
var_0 setclientomnvar( "ui_battlebuddy_idx", self getentitynumber() );
}
getwaitingbattlebuddy()
{
return level.battlebuddywaitlist[self.team];
}
addtobattlebuddywaitlist( var_0 )
{
if ( !isdefined( level.battlebuddywaitlist[var_0.team] ) )
level.battlebuddywaitlist[var_0.team] = var_0;
else if ( level.battlebuddywaitlist[var_0.team] != var_0 )
return;
}
removefrombattlebuddywaitlist( var_0 )
{
if ( isdefined( var_0.team ) && isdefined( level.battlebuddywaitlist[var_0.team] ) && var_0 == level.battlebuddywaitlist[var_0.team] )
level.battlebuddywaitlist[var_0.team] = undefined;
}
findbattlebuddy()
{
if ( level.onlinegame )
{
self.fireteammembers = self getfireteammembers();
if ( self.fireteammembers.size >= 1 )
{
foreach ( var_1 in self.fireteammembers )
{
if ( isvalidbattlebuddy( var_1 ) )
pairbattlebuddy( var_1 );
}
}
}
if ( !hasbattlebuddy() )
{
var_1 = getwaitingbattlebuddy();
if ( isdefined( var_1 ) && isvalidbattlebuddy( var_1 ) )
pairbattlebuddy( var_1 );
else
{
addtobattlebuddywaitlist( self );
self setclientomnvar( "ui_battlebuddy_idx", -1 );
}
}
}
clearbattlebuddy()
{
if ( !isalive( self ) )
setupforrandomspawn();
self setclientomnvar( "ui_battlebuddy_idx", -1 );
self.battlebuddy = undefined;
}
leavebattlebuddysystem()
{
if ( hasbattlebuddy() )
{
var_0 = self.battlebuddy;
clearbattlebuddy();
self setcommonplayerdata( "enableBattleBuddy", 0 );
var_0 clearbattlebuddy();
var_0 findbattlebuddy();
}
else
{
removefrombattlebuddywaitlist( self );
self setclientomnvar( "ui_battlebuddy_idx", -1 );
}
}
leavebattlebuddysystemdisconnect()
{
if ( hasbattlebuddy() )
{
var_0 = self.battlebuddy;
var_0 clearbattlebuddy();
var_0 findbattlebuddy();
var_0 clearbuddymessage();
}
else
{
foreach ( var_3, var_2 in level.battlebuddywaitlist )
{
if ( var_2 == self )
{
level.battlebuddywaitlist[var_3] = undefined;
break;
}
}
}
}

View File

@ -0,0 +1,967 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
if ( level.multiteambased )
{
foreach ( var_1 in level.teamnamelist )
{
level.isteamspeaking[var_1] = 0;
level.speakers[var_1] = [];
}
}
else
{
level.isteamspeaking["allies"] = 0;
level.isteamspeaking["axis"] = 0;
level.speakers["allies"] = [];
level.speakers["axis"] = [];
}
level.bcsounds = [];
level.bcsounds["reload"] = "inform_reloading_generic";
level.bcsounds["frag_out"] = "inform_attack_grenade";
level.bcsounds["flash_out"] = "inform_attack_flashbang";
level.bcsounds["smoke_out"] = "inform_attack_smoke";
level.bcsounds["conc_out"] = "inform_attack_stun";
level.bcsounds["c4_plant"] = "inform_attack_thwc4";
level.bcsounds["claymore_plant"] = "inform_plant_claymore";
level.bcsounds["semtex_out"] = "semtex_use";
level.bcsounds["kill"] = "inform_killfirm_infantry";
level.bcsounds["casualty"] = "reaction_casualty_generic";
level.bcsounds["suppressing_fire"] = "cmd_suppressfire";
level.bcsounds["moving"] = "order_move_combat";
level.bcsounds["callout_generic"] = "threat_infantry_generic";
level.bcsounds["callout_response_generic"] = "response_ack_yes";
level.bcsounds["damage"] = "inform_taking_fire";
level.bcsounds["semtex_incoming"] = "semtex_incoming";
level.bcsounds["c4_incoming"] = "c4_incoming";
level.bcsounds["flash_incoming"] = "flash_incoming";
level.bcsounds["stun_incoming"] = "stun_incoming";
level.bcsounds["grenade_incoming"] = "grenade_incoming";
level.bcsounds["rpg_incoming"] = "rpg_incoming";
level.bcinfo = [];
level.bcinfo["timeout"]["suppressing_fire"] = 5000;
level.bcinfo["timeout"]["moving"] = 45000;
level.bcinfo["timeout"]["callout_generic"] = 15000;
level.bcinfo["timeout"]["callout_location"] = 3000;
level.bcinfo["timeout_player"]["suppressing_fire"] = 10000;
level.bcinfo["timeout_player"]["moving"] = 120000;
level.bcinfo["timeout_player"]["callout_generic"] = 5000;
level.bcinfo["timeout_player"]["callout_location"] = 5000;
foreach ( var_5, var_4 in level.speakers )
{
level.bcinfo["last_say_time"][var_5]["suppressing_fire"] = -99999;
level.bcinfo["last_say_time"][var_5]["moving"] = -99999;
level.bcinfo["last_say_time"][var_5]["callout_generic"] = -99999;
level.bcinfo["last_say_time"][var_5]["callout_location"] = -99999;
level.bcinfo["last_say_pos"][var_5]["suppressing_fire"] = ( 0, 0, -9000 );
level.bcinfo["last_say_pos"][var_5]["moving"] = ( 0, 0, -9000 );
level.bcinfo["last_say_pos"][var_5]["callout_generic"] = ( 0, 0, -9000 );
level.bcinfo["last_say_pos"][var_5]["callout_location"] = ( 0, 0, -9000 );
level.voice_count[var_5][""] = 0;
level.voice_count[var_5]["w"] = 0;
}
common_scripts\_bcs_location_trigs::bcs_location_trigs_init();
var_6 = getdvar( "g_gametype" );
level.istactical = 1;
if ( var_6 == "war" || var_6 == "kc" || var_6 == "dom" )
level.istactical = 0;
level thread onplayerconnect();
}
onplayerconnect()
{
for (;;)
{
level waittill( "connected", var_0 );
var_0 thread onplayerspawned();
}
}
onplayerspawned()
{
self endon( "disconnect" );
for (;;)
{
self waittill( "spawned_player" );
self.bcinfo = [];
self.bcinfo["last_say_time"]["suppressing_fire"] = -99999;
self.bcinfo["last_say_time"]["moving"] = -99999;
self.bcinfo["last_say_time"]["callout_generic"] = -99999;
self.bcinfo["last_say_time"]["callout_location"] = -99999;
var_0 = maps\mp\gametypes\_teams::getteamvoiceprefix( self.team );
var_1 = "";
if ( !isagent( self ) && self hasfemalecustomizationmodel() )
var_1 = "w";
self.pers["voiceNum"] = level.voice_count[self.team][var_1];
level.voice_count[self.team][var_1] = ( level.voice_count[self.team][var_1] + 1 ) % 3;
self.pers["voicePrefix"] = var_0 + var_1 + self.pers["voiceNum"] + "_";
if ( level.splitscreen )
continue;
if ( !level.teambased )
continue;
thread claymoretracking();
thread reloadtracking();
thread grenadetracking();
thread grenadeproximitytracking();
thread suppressingfiretracking();
thread casualtytracking();
thread damagetracking();
thread sprinttracking();
thread threatcallouttracking();
}
}
grenadeproximitytracking()
{
self endon( "disconnect" );
self endon( "death" );
var_0 = self.origin;
var_1 = 147456;
for (;;)
{
var_2 = common_scripts\utility::ter_op( isdefined( level.grenades ), level.grenades, [] );
var_3 = common_scripts\utility::ter_op( isdefined( level.missiles ), level.missiles, [] );
if ( var_2.size + var_3.size < 1 || !maps\mp\_utility::isreallyalive( self ) )
{
wait 0.05;
continue;
}
var_2 = common_scripts\utility::array_combine( var_2, var_3 );
foreach ( var_5 in var_2 )
{
wait 0.05;
if ( !isdefined( var_5 ) )
continue;
if ( isdefined( var_5.weapon_name ) )
{
switch ( var_5.weapon_name )
{
case "proximity_explosive_mp":
case "smoke_grenade_mp":
case "motion_sensor_mp":
case "trophy_mp":
case "throwingknife_mp":
continue;
}
if ( weaponinventorytype( var_5.weapon_name ) != "offhand" && weaponclass( var_5.weapon_name ) == "grenade" )
continue;
if ( !isdefined( var_5.owner ) )
var_5.owner = getmissileowner( var_5 );
if ( isdefined( var_5.owner ) && level.teambased && var_5.owner.team == self.team )
continue;
var_6 = distancesquared( var_5.origin, self.origin );
if ( var_6 < var_1 )
{
if ( common_scripts\utility::cointoss() )
{
wait 5;
continue;
}
if ( bullettracepassed( var_5.origin, self.origin, 0, self ) )
{
if ( var_5.weapon_name == "concussion_grenade_mp" )
{
level thread saylocalsound( self, "stun_incoming" );
wait 5;
continue;
}
if ( var_5.weapon_name == "flash_grenade_mp" )
{
level thread saylocalsound( self, "flash_incoming" );
wait 5;
continue;
}
if ( weaponclass( var_5.weapon_name ) == "rocketlauncher" )
{
level thread saylocalsound( self, "rpg_incoming" );
wait 5;
continue;
}
if ( var_5.weapon_name == "c4_mp" )
{
level thread saylocalsound( self, "c4_incoming" );
wait 5;
continue;
}
if ( var_5.weapon_name == "semtex_mp" )
{
level thread saylocalsound( self, "semtex_incoming" );
wait 5;
continue;
}
level thread saylocalsound( self, "grenade_incoming" );
wait 5;
}
}
}
}
}
}
suppressingfiretracking()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "faux_spawn" );
var_0 = undefined;
for (;;)
{
self waittill( "begin_firing" );
thread suppresswaiter();
thread suppresstimeout();
self waittill( "stoppedFiring" );
}
}
suppresstimeout()
{
thread waitsuppresstimeout();
self endon( "begin_firing" );
self waittill( "end_firing" );
wait 0.3;
self notify( "stoppedFiring" );
}
waitsuppresstimeout()
{
self endon( "stoppedFiring" );
self waittill( "begin_firing" );
thread suppresstimeout();
}
suppresswaiter()
{
self notify( "suppressWaiter" );
self endon( "suppressWaiter" );
self endon( "death" );
self endon( "disconnect" );
self endon( "stoppedFiring" );
wait 1;
if ( cansay( "suppressing_fire" ) )
level thread saylocalsound( self, "suppressing_fire" );
}
claymoretracking()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "faux_spawn" );
for (;;)
{
self waittill( "begin_firing" );
var_0 = self getcurrentweapon();
if ( var_0 == "claymore_mp" )
level thread saylocalsound( self, "claymore_plant" );
}
}
reloadtracking()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "faux_spawn" );
for (;;)
{
self waittill( "reload_start" );
level thread saylocalsound( self, "reload" );
}
}
grenadetracking()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "faux_spawn" );
for (;;)
{
self waittill( "grenade_fire", var_0, var_1 );
if ( var_1 == "frag_grenade_mp" )
{
level thread saylocalsound( self, "frag_out" );
continue;
}
if ( var_1 == "semtex_mp" )
{
level thread saylocalsound( self, "semtex_out" );
continue;
}
if ( var_1 == "flash_grenade_mp" )
{
level thread saylocalsound( self, "flash_out" );
continue;
}
if ( var_1 == "concussion_grenade_mp" )
{
level thread saylocalsound( self, "conc_out" );
continue;
}
if ( var_1 == "smoke_grenade_mp" )
{
level thread saylocalsound( self, "smoke_out" );
continue;
}
if ( var_1 == "c4_mp" )
level thread saylocalsound( self, "c4_plant" );
}
}
sprinttracking()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "faux_spawn" );
for (;;)
{
self waittill( "sprint_begin" );
if ( cansay( "moving" ) )
level thread saylocalsound( self, "moving", 0, 0 );
}
}
damagetracking()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "faux_spawn" );
for (;;)
{
self waittill( "damage", var_0, var_1 );
if ( !isdefined( var_1 ) )
continue;
if ( !isdefined( var_1.classname ) )
continue;
if ( var_1 != self && var_1.classname != "worldspawn" )
{
wait 1.5;
level thread saylocalsound( self, "damage" );
wait 3;
}
}
}
casualtytracking()
{
self endon( "disconnect" );
self endon( "faux_spawn" );
self waittill( "death" );
foreach ( var_1 in level.participants )
{
if ( !isdefined( var_1 ) )
continue;
if ( var_1 == self )
continue;
if ( !maps\mp\_utility::isreallyalive( var_1 ) )
continue;
if ( var_1.team != self.team )
continue;
if ( distancesquared( self.origin, var_1.origin ) <= 262144 )
{
level thread saylocalsounddelayed( var_1, "casualty", 0.75 );
break;
}
}
}
threatcallouttracking()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "faux_spawn" );
for (;;)
{
self waittill( "enemy_sighted" );
if ( getomnvar( "ui_prematch_period" ) )
{
level waittill( "prematch_over" );
continue;
}
if ( !cansay( "callout_location" ) && !cansay( "callout_generic" ) )
continue;
var_0 = self getsightedplayers();
if ( !isdefined( var_0 ) )
continue;
var_1 = 0;
var_2 = 4000000;
if ( self playerads() > 0.7 )
var_2 = 6250000;
foreach ( var_4 in var_0 )
{
if ( isdefined( var_4 ) && maps\mp\_utility::isreallyalive( var_4 ) && !var_4 maps\mp\_utility::_hasperk( "specialty_coldblooded" ) && distancesquared( self.origin, var_4.origin ) < var_2 )
{
var_5 = var_4 getvalidlocation( self );
var_1 = 1;
if ( isdefined( var_5 ) && cansay( "callout_location" ) && friendly_nearby( 4840000 ) )
{
if ( maps\mp\_utility::_hasperk( "specialty_quieter" ) || !friendly_nearby( 262144 ) )
level thread saylocalsound( self, var_5.locationaliases[0], 0 );
else
level thread saylocalsound( self, var_5.locationaliases[0], 1 );
break;
}
}
}
if ( var_1 && cansay( "callout_generic" ) )
level thread saylocalsound( self, "callout_generic" );
}
}
saylocalsounddelayed( var_0, var_1, var_2, var_3, var_4 )
{
var_0 endon( "death" );
var_0 endon( "disconnect" );
wait( var_2 );
saylocalsound( var_0, var_1, var_3, var_4 );
}
saylocalsound( var_0, var_1, var_2, var_3 )
{
var_0 endon( "death" );
var_0 endon( "disconnect" );
if ( isdefined( var_0.bcdisabled ) && var_0.bcdisabled == 1 )
return;
if ( isspeakerinrange( var_0 ) )
return;
if ( var_0.team != "spectator" )
{
var_4 = var_0.pers["voicePrefix"];
if ( isdefined( level.bcsounds[var_1] ) )
var_5 = var_4 + level.bcsounds[var_1];
else
{
location_add_last_callout_time( var_1 );
var_5 = var_4 + "co_loc_" + var_1;
var_0 thread dothreatcalloutresponse( var_5, var_1 );
var_1 = "callout_location";
}
var_0 updatechatter( var_1 );
var_0 thread dosound( var_5, var_2, var_3 );
}
}
dosound( var_0, var_1, var_2 )
{
if ( !isdefined( var_2 ) )
var_2 = 1;
var_3 = self.pers["team"];
level addspeaker( self, var_3 );
var_4 = !level.istactical || !maps\mp\_utility::_hasperk( "specialty_coldblooded" ) && ( isagent( self ) || self issighted() );
if ( var_2 && var_4 )
{
if ( isagent( self ) || level.alivecount[var_3] > 3 )
thread dosounddistant( var_0, var_3 );
}
if ( isagent( self ) || isdefined( var_1 ) && var_1 )
self playsoundtoteam( var_0, var_3 );
else
self playsoundtoteam( var_0, var_3, self );
thread timehack( var_0 );
common_scripts\utility::waittill_any( var_0, "death", "disconnect" );
level removespeaker( self, var_3 );
}
dosounddistant( var_0, var_1 )
{
var_2 = spawn( "script_origin", self.origin + ( 0, 0, 256 ) );
var_3 = var_0 + "_n";
if ( soundexists( var_3 ) )
{
foreach ( var_5 in level.teamnamelist )
{
if ( var_5 != var_1 )
var_2 playsoundtoteam( var_3, var_5 );
}
}
wait 3;
var_2 delete();
}
dothreatcalloutresponse( var_0, var_1 )
{
var_2 = common_scripts\utility::waittill_any_return( var_0, "death", "disconnect" );
if ( var_2 == var_0 )
{
var_3 = self.team;
if ( !isagent( self ) )
var_4 = self hasfemalecustomizationmodel();
else
var_4 = 0;
var_5 = self.pers["voiceNum"];
var_6 = self.origin;
wait 0.5;
foreach ( var_8 in level.participants )
{
if ( !isdefined( var_8 ) )
continue;
if ( var_8 == self )
continue;
if ( !maps\mp\_utility::isreallyalive( var_8 ) )
continue;
if ( var_8.team != var_3 )
continue;
if ( !isagent( var_8 ) )
var_9 = var_8 hasfemalecustomizationmodel();
else
var_9 = 0;
if ( isdefined( var_8.pers["voiceNum"] ) && ( var_5 != var_8.pers["voiceNum"] || var_4 != var_9 ) && distancesquared( var_6, var_8.origin ) <= 262144 && !isspeakerinrange( var_8 ) )
{
var_10 = var_8.pers["voicePrefix"];
var_11 = var_10 + "co_loc_" + var_1 + "_echo";
if ( soundexists( var_11 ) && common_scripts\utility::cointoss() )
var_12 = var_11;
else
var_12 = var_10 + level.bcsounds["callout_response_generic"];
var_8 thread dosound( var_12, 0, 1 );
break;
}
}
}
}
timehack( var_0 )
{
self endon( "death" );
self endon( "disconnect" );
wait 2.0;
self notify( var_0 );
}
isspeakerinrange( var_0, var_1 )
{
var_0 endon( "death" );
var_0 endon( "disconnect" );
if ( !isdefined( var_1 ) )
var_1 = 1000;
var_2 = var_1 * var_1;
if ( isdefined( var_0 ) && isdefined( var_0.team ) && var_0.team != "spectator" )
{
for ( var_3 = 0; var_3 < level.speakers[var_0.team].size; var_3++ )
{
var_4 = level.speakers[var_0.team][var_3];
if ( var_4 == var_0 )
return 1;
if ( !isdefined( var_4 ) )
continue;
if ( distancesquared( var_4.origin, var_0.origin ) < var_2 )
return 1;
}
}
return 0;
}
addspeaker( var_0, var_1 )
{
level.speakers[var_1][level.speakers[var_1].size] = var_0;
}
removespeaker( var_0, var_1 )
{
var_2 = [];
for ( var_3 = 0; var_3 < level.speakers[var_1].size; var_3++ )
{
if ( level.speakers[var_1][var_3] == var_0 )
continue;
var_2[var_2.size] = level.speakers[var_1][var_3];
}
level.speakers[var_1] = var_2;
}
disablebattlechatter( var_0 )
{
var_0.bcdisabled = 1;
}
enablebattlechatter( var_0 )
{
var_0.bcdisabled = undefined;
}
cansay( var_0 )
{
var_1 = self.pers["team"];
if ( var_1 == "spectator" )
return 0;
var_2 = level.bcinfo["timeout_player"][var_0];
var_3 = gettime() - self.bcinfo["last_say_time"][var_0];
if ( var_2 > var_3 )
return 0;
var_2 = level.bcinfo["timeout"][var_0];
var_3 = gettime() - level.bcinfo["last_say_time"][var_1][var_0];
if ( var_2 < var_3 )
return 1;
return 0;
}
updatechatter( var_0 )
{
var_1 = self.pers["team"];
self.bcinfo["last_say_time"][var_0] = gettime();
level.bcinfo["last_say_time"][var_1][var_0] = gettime();
level.bcinfo["last_say_pos"][var_1][var_0] = self.origin;
}
updatelocation( var_0 )
{
}
getlocation()
{
var_0 = get_all_my_locations();
var_0 = common_scripts\utility::array_randomize( var_0 );
if ( var_0.size )
{
foreach ( var_2 in var_0 )
{
if ( !location_called_out_ever( var_2 ) )
return var_2;
}
foreach ( var_2 in var_0 )
{
if ( !location_called_out_recently( var_2 ) )
return var_2;
}
}
return undefined;
}
getvalidlocation( var_0 )
{
var_1 = get_all_my_locations();
var_1 = common_scripts\utility::array_randomize( var_1 );
if ( var_1.size )
{
foreach ( var_3 in var_1 )
{
if ( !location_called_out_ever( var_3 ) && var_0 cancalloutlocation( var_3 ) )
return var_3;
}
foreach ( var_3 in var_1 )
{
if ( !location_called_out_recently( var_3 ) && var_0 cancalloutlocation( var_3 ) )
return var_3;
}
}
return undefined;
}
get_all_my_locations()
{
var_0 = anim.bcs_locations;
var_1 = self getistouchingentities( var_0 );
var_2 = [];
foreach ( var_4 in var_1 )
{
if ( isdefined( var_4.locationaliases ) )
var_2[var_2.size] = var_4;
}
return var_2;
}
update_bcs_locations()
{
if ( isdefined( anim.bcs_locations ) )
anim.bcs_locations = common_scripts\utility::array_removeundefined( anim.bcs_locations );
}
is_in_callable_location()
{
var_0 = get_all_my_locations();
foreach ( var_2 in var_0 )
{
if ( !location_called_out_recently( var_2 ) )
return 1;
}
return 0;
}
location_called_out_ever( var_0 )
{
var_1 = location_get_last_callout_time( var_0.locationaliases[0] );
if ( !isdefined( var_1 ) )
return 0;
return 1;
}
location_called_out_recently( var_0 )
{
var_1 = location_get_last_callout_time( var_0.locationaliases[0] );
if ( !isdefined( var_1 ) )
return 0;
var_2 = var_1 + 25000;
if ( gettime() < var_2 )
return 1;
return 0;
}
location_add_last_callout_time( var_0 )
{
anim.locationlastcallouttimes[var_0] = gettime();
}
location_get_last_callout_time( var_0 )
{
if ( isdefined( anim.locationlastcallouttimes[var_0] ) )
return anim.locationlastcallouttimes[var_0];
return undefined;
}
cancalloutlocation( var_0 )
{
foreach ( var_2 in var_0.locationaliases )
{
var_3 = getloccalloutalias( "co_loc_" + var_2 );
var_4 = getqacalloutalias( var_2, 0 );
var_5 = getloccalloutalias( "concat_loc_" + var_2 );
var_6 = soundexists( var_3 ) || soundexists( var_4 ) || soundexists( var_5 );
if ( var_6 )
return var_6;
}
return 0;
}
canconcat( var_0 )
{
var_1 = var_0.locationaliases;
foreach ( var_3 in var_1 )
{
if ( iscallouttypeconcat( var_3, self ) )
return 1;
}
return 0;
}
getcannedresponse( var_0 )
{
var_1 = undefined;
var_2 = self.locationaliases;
foreach ( var_4 in var_2 )
{
if ( iscallouttypeqa( var_4, var_0 ) && !isdefined( self.qafinished ) )
{
var_1 = var_4;
break;
}
if ( iscallouttypereport( var_4 ) )
var_1 = var_4;
}
return var_1;
}
iscallouttypereport( var_0 )
{
return issubstr( var_0, "_report" );
}
iscallouttypeconcat( var_0, var_1 )
{
var_2 = var_1 getloccalloutalias( "concat_loc_" + var_0 );
if ( soundexists( var_2 ) )
return 1;
return 0;
}
iscallouttypeqa( var_0, var_1 )
{
if ( issubstr( var_0, "_qa" ) && soundexists( var_0 ) )
return 1;
var_2 = var_1 getqacalloutalias( var_0, 0 );
if ( soundexists( var_2 ) )
return 1;
return 0;
}
getloccalloutalias( var_0 )
{
var_1 = self.pers["voicePrefix"] + var_0;
return var_1;
}
getqacalloutalias( var_0, var_1 )
{
var_2 = getloccalloutalias( var_0 );
var_2 = var_2 + ( "_qa" + var_1 );
return var_2;
}
battlechatter_canprint()
{
return 0;
}
battlechatter_canprintdump()
{
return 0;
}
battlechatter_print( var_0 )
{
}
battlechatter_printdump( var_0 )
{
}
battlechatter_debugprint( var_0 )
{
}
getaliastypefromsoundalias( var_0 )
{
}
battlechatter_printdumpline( var_0, var_1, var_2 )
{
}
friendly_nearby( var_0 )
{
if ( !isdefined( var_0 ) )
var_0 = 262144;
foreach ( var_2 in level.players )
{
if ( var_2.team == self.pers["team"] )
{
if ( var_2 != self && distancesquared( var_2.origin, self.origin ) <= var_0 )
return 1;
}
}
return 0;
}

View File

@ -0,0 +1,131 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
codecallback_startgametype()
{
if ( getdvar( "r_reflectionProbeGenerate" ) == "1" )
level waittill( "eternity" );
if ( !isdefined( level.gametypestarted ) || !level.gametypestarted )
{
[[ level.callbackstartgametype ]]();
level.gametypestarted = 1;
}
}
codecallback_playerconnect()
{
if ( getdvar( "r_reflectionProbeGenerate" ) == "1" )
level waittill( "eternity" );
self endon( "disconnect" );
[[ level.callbackplayerconnect ]]();
}
codecallback_playerdisconnect( var_0 )
{
self notify( "disconnect" );
[[ level.callbackplayerdisconnect ]]( var_0 );
}
codecallback_playerdamage( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
self endon( "disconnect" );
var_5 = maps\mp\_utility::weaponmap( var_5 );
[[ level.callbackplayerdamage ]]( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 );
}
codecallback_playerkilled( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self endon( "disconnect" );
var_4 = maps\mp\_utility::weaponmap( var_4 );
[[ level.callbackplayerkilled ]]( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 );
}
codecallback_vehicledamage( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10, var_11 )
{
var_5 = maps\mp\_utility::weaponmap( var_5 );
if ( isdefined( self.damagecallback ) )
self [[ self.damagecallback ]]( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10, var_11 );
else
self vehicle_finishdamage( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10, var_11 );
}
codecallback_codeendgame()
{
self endon( "disconnect" );
[[ level.callbackcodeendgame ]]();
}
codecallback_playerlaststand( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self endon( "disconnect" );
var_4 = maps\mp\_utility::weaponmap( var_4 );
[[ level.callbackplayerlaststand ]]( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 );
}
codecallback_playermigrated()
{
self endon( "disconnect" );
[[ level.callbackplayermigrated ]]();
}
codecallback_hostmigration()
{
[[ level.callbackhostmigration ]]();
}
setupdamageflags()
{
level.idflags_radius = 1;
level.idflags_no_armor = 2;
level.idflags_no_knockback = 4;
level.idflags_penetration = 8;
level.idflags_stun = 16;
level.idflags_shield_explosive_impact = 32;
level.idflags_shield_explosive_impact_huge = 64;
level.idflags_shield_explosive_splash = 128;
level.idflags_no_team_protection = 256;
level.idflags_no_protection = 512;
level.idflags_passthru = 1024;
}
setupcallbacks()
{
setdefaultcallbacks();
setupdamageflags();
}
setdefaultcallbacks()
{
level.callbackstartgametype = maps\mp\gametypes\_gamelogic::callback_startgametype;
level.callbackplayerconnect = maps\mp\gametypes\_playerlogic::callback_playerconnect;
level.callbackplayerdisconnect = maps\mp\gametypes\_playerlogic::callback_playerdisconnect;
level.callbackplayerdamage = maps\mp\gametypes\_damage::callback_playerdamage;
level.callbackplayerkilled = maps\mp\gametypes\_damage::callback_playerkilled;
level.callbackcodeendgame = maps\mp\gametypes\_gamelogic::callback_codeendgame;
level.callbackplayerlaststand = maps\mp\gametypes\_damage::callback_playerlaststand;
level.callbackplayermigrated = maps\mp\gametypes\_playerlogic::callback_playermigrated;
level.callbackhostmigration = maps\mp\gametypes\_hostmigration::callback_hostmigration;
}
abortlevel()
{
level.callbackstartgametype = ::callbackvoid;
level.callbackplayerconnect = ::callbackvoid;
level.callbackplayerdisconnect = ::callbackvoid;
level.callbackplayerdamage = ::callbackvoid;
level.callbackplayerkilled = ::callbackvoid;
level.callbackcodeendgame = ::callbackvoid;
level.callbackplayerlaststand = ::callbackvoid;
level.callbackplayermigrated = ::callbackvoid;
level.callbackhostmigration = ::callbackvoid;
setdvar( "g_gametype", "dm" );
exitlevel( 0 );
}
callbackvoid()
{
}

2187
maps/mp/gametypes/_class.gsc Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,2 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,102 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
}
updatedamagefeedback( var_0 )
{
var_1 = 0;
if ( isdefined( level.damagefeedbacknosound ) && level.damagefeedbacknosound )
var_1 = 1;
if ( !isplayer( self ) )
return;
switch ( var_0 )
{
case "hitaliensoft":
case "hitalienarmor":
case "hitkill":
case "hitcritical":
case "hitdeadeyekill":
case "hitmorehealth":
case "hitjuggernaut":
case "hitkilljugg":
case "hitlightarmor":
case "hitblastshield":
case "hitkillblast":
case "thermobaric_debuff":
case "thermodebuff_kill":
case "hitmotionsensor":
if ( !var_1 )
self playlocalsound( "MP_hit_alert" );
self setclientomnvar( "damage_feedback", var_0 );
break;
case "none":
break;
case "meleestun":
if ( !isdefined( self.meleestun ) )
{
if ( !var_1 )
self playlocalsound( "crate_impact" );
self.meleestun = 1;
}
self setclientomnvar( "damage_feedback", "hitcritical" );
wait 0.2;
self.meleestun = undefined;
break;
default:
if ( !var_1 )
self playlocalsound( "MP_hit_alert" );
self setclientomnvar( "damage_feedback", "standard" );
break;
}
}
hudicontype( var_0 )
{
var_1 = 0;
if ( isdefined( level.damagefeedbacknosound ) && level.damagefeedbacknosound )
var_1 = 1;
if ( !isplayer( self ) )
return;
switch ( var_0 )
{
case "scavenger":
case "throwingknife":
if ( !var_1 )
self playlocalsound( "scavenger_pack_pickup" );
if ( !level.hardcoremode )
self setclientomnvar( "damage_feedback_other", var_0 );
break;
case "boxofguns":
if ( !var_1 )
self playlocalsound( "mp_box_guns_ammo" );
if ( !level.hardcoremode )
self setclientomnvar( "damage_feedback_other", var_0 );
break;
case "oracle":
if ( !var_1 )
self playlocalsound( "oracle_radar_pulse_plr" );
if ( !level.hardcoremode )
self setclientomnvar( "damage_feedback_other", var_0 );
break;
}
}

View File

@ -0,0 +1,73 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
if ( !level.teambased )
return;
precacheshader( "headicon_dead" );
level thread onplayerconnect();
}
onplayerconnect()
{
for (;;)
{
level waittill( "connected", var_0 );
var_0.selfdeathicons = [];
}
}
updatedeathiconsenabled()
{
}
adddeathicon( var_0, var_1, var_2, var_3 )
{
if ( !level.teambased )
return;
var_4 = var_0.origin;
var_1 endon( "spawned_player" );
var_1 endon( "disconnect" );
wait 0.05;
maps\mp\_utility::waittillslowprocessallowed();
if ( getdvar( "ui_hud_showdeathicons" ) == "0" )
return;
if ( level.hardcoremode )
return;
if ( isdefined( self.lastdeathicon ) )
self.lastdeathicon destroy();
var_5 = newteamhudelem( var_2 );
var_5.x = var_4[0];
var_5.y = var_4[1];
var_5.z = var_4[2] + 54;
var_5.alpha = 0.61;
var_5.archived = 0;
var_5.showinkillcam = 0;
if ( level.splitscreen )
var_5 setshader( "headicon_dead", 14, 14 );
else
var_5 setshader( "headicon_dead", 7, 7 );
var_5 setwaypoint( 0 );
self.lastdeathicon = var_5;
var_5 thread destroyslowly( var_3 );
}
destroyslowly( var_0 )
{
self endon( "death" );
wait( var_0 );
self fadeovertime( 1.0 );
self.alpha = 0;
wait 1.0;
self destroy();
}

View File

@ -0,0 +1,58 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
}
onplayerconnect()
{
for (;;)
{
level waittill( "connected", var_0 );
var_0 thread updatereflectionprobe();
}
}
showspawnpoint( var_0, var_1, var_2 )
{
}
updatereflectionprobe()
{
}
reflectionprobebuttons()
{
}
gotonextspawn()
{
}
gotoprevspawn()
{
}
devaliengiveplayersmoney()
{
}
spam_points_popup()
{
var_0 = [ "headshot", "avenger", "execution", "longshot", "posthumous", "double", "triple", "multi" ];
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
{
thread maps\mp\gametypes\_rank::xppointspopup( 100 );
thread maps\mp\gametypes\_rank::xpeventpopup( var_0[var_1] );
wait 2.0;
}
}

699
maps/mp/gametypes/_door.gsc Normal file
View File

@ -0,0 +1,699 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
door_system_init( var_0 )
{
var_1 = getentarray( var_0, "targetname" );
foreach ( var_3 in var_1 )
{
if ( isdefined( var_3.script_parameters ) )
var_3 button_parse_parameters( var_3.script_parameters );
var_3 door_setup();
}
foreach ( var_3 in var_1 )
var_3 thread door_think();
}
door_setup()
{
var_0 = self;
var_0.doors = [];
if ( isdefined( var_0.script_index ) )
var_0.doormovetime = max( 0.1, float( var_0.script_index ) / 1000 );
var_1 = getentarray( var_0.target, "targetname" );
foreach ( var_3 in var_1 )
{
if ( issubstr( var_3.classname, "trigger" ) )
{
if ( !isdefined( var_0.trigblock ) )
var_0.trigblock = [];
if ( isdefined( var_3.script_parameters ) )
var_3 trigger_parse_parameters( var_3.script_parameters );
if ( isdefined( var_3.script_linkto ) )
{
var_4 = getent( var_3.script_linkto, "script_linkname" );
var_3 enablelinkto();
var_3 linkto( var_4 );
}
var_0.trigblock[var_0.trigblock.size] = var_3;
continue;
}
if ( var_3.classname == "script_brushmodel" || var_3.classname == "script_model" )
{
if ( isdefined( var_3.script_noteworthy ) && issubstr( var_3.script_noteworthy, "light" ) )
{
if ( issubstr( var_3.script_noteworthy, "light_on" ) )
{
if ( !isdefined( var_0.lights_on ) )
var_0.lights_on = [];
var_3 hide();
var_0.lights_on[var_0.lights_on.size] = var_3;
}
else if ( issubstr( var_3.script_noteworthy, "light_off" ) )
{
if ( !isdefined( var_0.lights_off ) )
var_0.lights_off = [];
var_3 hide();
var_0.lights_off[var_0.lights_off.size] = var_3;
}
else
{
}
}
else if ( var_3.spawnflags & 2 )
{
if ( !isdefined( var_0.ai_sight_brushes ) )
var_0.ai_sight_brushes = [];
var_3 notsolid();
var_3 hide();
var_3 setaisightlinevisible( 0 );
var_0.ai_sight_brushes[var_0.ai_sight_brushes.size] = var_3;
}
else
var_0.doors[var_0.doors.size] = var_3;
continue;
}
if ( var_3.classname == "script_origin" )
var_0.entsound = var_3;
}
if ( !isdefined( var_0.entsound ) && var_0.doors.size )
var_0.entsound = sortbydistance( var_0.doors, var_0.origin )[0];
foreach ( var_7 in var_0.doors )
{
var_7.posclosed = var_7.origin;
var_7.posopen = common_scripts\utility::getstruct( var_7.target, "targetname" ).origin;
var_7.distmove = distance( var_7.posopen, var_7.posclosed );
var_7.origin = var_7.posopen;
var_7.no_moving_unresolved_collisions = 0;
if ( isdefined( var_7.script_parameters ) )
var_7 door_parse_parameters( var_7.script_parameters );
}
}
door_think()
{
var_0 = self;
var_0 door_state_change( 2, 1 );
for (;;)
{
var_0.statedone = undefined;
var_0.stateinterrupted = undefined;
var_0 common_scripts\utility::waittill_any( "door_state_done", "door_state_interrupted" );
if ( isdefined( var_0.statedone ) && var_0.statedone )
{
var_1 = var_0 door_state_next( var_0.statecurr );
var_0 door_state_change( var_1, 0 );
continue;
}
if ( isdefined( var_0.stateinterrupted ) && var_0.stateinterrupted )
{
var_0 door_state_change( 4, 0 );
continue;
}
}
}
door_state_next( var_0 )
{
var_1 = self;
var_2 = undefined;
if ( var_0 == 0 )
var_2 = 3;
else if ( var_0 == 2 )
var_2 = 1;
else if ( var_0 == 1 )
var_2 = 0;
else if ( var_0 == 3 )
var_2 = 2;
else if ( var_0 == 4 )
var_2 = var_1.stateprev;
else
{
}
return var_2;
}
door_state_update( var_0 )
{
var_1 = self;
var_1 endon( "door_state_interrupted" );
var_1.statedone = undefined;
if ( var_1.statecurr == 0 || var_1.statecurr == 2 )
{
if ( !var_0 )
{
foreach ( var_3 in var_1.doors )
{
if ( isdefined( var_3.stop_sound ) )
{
var_3 stoploopsound();
var_3 playsoundonmovingent( var_3.stop_sound );
}
}
}
if ( isdefined( var_1.lights_on ) )
{
foreach ( var_6 in var_1.lights_on )
var_6 show();
}
foreach ( var_3 in var_1.doors )
{
if ( var_1.statecurr == 0 )
{
if ( isdefined( var_1.ai_sight_brushes ) )
{
foreach ( var_10 in var_1.ai_sight_brushes )
{
var_10 show();
var_10 setaisightlinevisible( 1 );
}
}
if ( var_3.spawnflags & 1 )
var_3 disconnectpaths();
}
else
{
if ( isdefined( var_1.ai_sight_brushes ) )
{
foreach ( var_10 in var_1.ai_sight_brushes )
{
var_10 hide();
var_10 setaisightlinevisible( 0 );
}
}
if ( var_3.spawnflags & 1 )
{
if ( isdefined( var_3.script_noteworthy ) && var_3.script_noteworthy == "always_disconnect" )
var_3 disconnectpaths();
else
var_3 connectpaths();
}
}
if ( isdefined( var_3.script_noteworthy ) )
{
if ( var_3.script_noteworthy == "clockwise_wheel" || var_3.script_noteworthy == "counterclockwise_wheel" )
var_3 rotatevelocity( ( 0, 0, 0 ), 0.1 );
}
if ( var_3.no_moving_unresolved_collisions )
var_3.unresolved_collision_func = undefined;
}
var_15 = common_scripts\utility::ter_op( var_1.statecurr == 0, &"MP_DOOR_USE_OPEN", &"MP_DOOR_USE_CLOSE" );
var_1 sethintstring( var_15 );
var_1 makeusable();
var_1 waittill( "trigger" );
if ( isdefined( var_1.button_sound ) )
var_1 playsound( var_1.button_sound );
}
else if ( var_1.statecurr == 1 || var_1.statecurr == 3 )
{
if ( isdefined( var_1.lights_off ) )
{
foreach ( var_6 in var_1.lights_off )
var_6 show();
}
var_1 makeunusable();
if ( var_1.statecurr == 1 )
{
var_1 thread door_state_on_interrupt();
foreach ( var_3 in var_1.doors )
{
if ( isdefined( var_3.script_noteworthy ) )
{
var_19 = common_scripts\utility::ter_op( isdefined( var_1.doormovetime ), var_1.doormovetime, 3.0 );
var_20 = common_scripts\utility::ter_op( var_1.statecurr == 1, var_3.posclosed, var_3.posopen );
var_21 = distance( var_3.origin, var_20 );
var_22 = max( 0.1, var_21 / var_3.distmove * var_19 );
var_23 = max( var_22 * 0.25, 0.05 );
var_24 = 360 * var_21 / 94.2;
if ( var_3.script_noteworthy == "clockwise_wheel" )
var_3 rotatevelocity( ( 0, 0, -1 * var_24 / var_22 ), var_22, var_23, var_23 );
else if ( var_3.script_noteworthy == "counterclockwise_wheel" )
var_3 rotatevelocity( ( 0, 0, var_24 / var_22 ), var_22, var_23, var_23 );
}
}
}
else if ( var_1.statecurr == 3 )
{
if ( isdefined( var_1.open_interrupt ) && var_1.open_interrupt )
var_1 thread door_state_on_interrupt();
foreach ( var_3 in var_1.doors )
{
if ( isdefined( var_3.script_noteworthy ) )
{
var_19 = common_scripts\utility::ter_op( isdefined( var_1.doormovetime ), var_1.doormovetime, 3.0 );
var_20 = common_scripts\utility::ter_op( var_1.statecurr == 1, var_3.posclosed, var_3.posopen );
var_21 = distance( var_3.origin, var_20 );
var_22 = max( 0.1, var_21 / var_3.distmove * var_19 );
var_23 = max( var_22 * 0.25, 0.05 );
var_24 = 360 * var_21 / 94.2;
if ( var_3.script_noteworthy == "clockwise_wheel" )
var_3 rotatevelocity( ( 0, 0, var_24 / var_22 ), var_22, var_23, var_23 );
else if ( var_3.script_noteworthy == "counterclockwise_wheel" )
var_3 rotatevelocity( ( 0, 0, -1 * var_24 / var_22 ), var_22, var_23, var_23 );
}
}
}
wait 0.1;
var_1 childthread door_state_update_sound( "garage_door_start", "garage_door_loop" );
var_19 = common_scripts\utility::ter_op( isdefined( var_1.doormovetime ), var_1.doormovetime, 3.0 );
var_28 = undefined;
foreach ( var_3 in var_1.doors )
{
var_20 = common_scripts\utility::ter_op( var_1.statecurr == 1, var_3.posclosed, var_3.posopen );
if ( var_3.origin != var_20 )
{
var_22 = max( 0.1, distance( var_3.origin, var_20 ) / var_3.distmove * var_19 );
var_23 = max( var_22 * 0.25, 0.05 );
var_3 moveto( var_20, var_22, var_23, var_23 );
var_3 maps\mp\_movers::notify_moving_platform_invalid();
if ( var_3.no_moving_unresolved_collisions )
var_3.unresolved_collision_func = maps\mp\_movers::unresolved_collision_void;
if ( !isdefined( var_28 ) || var_22 > var_28 )
var_28 = var_22;
}
}
if ( isdefined( var_28 ) )
wait( var_28 );
}
else if ( var_1.statecurr == 4 )
{
foreach ( var_3 in var_1.doors )
{
var_3 moveto( var_3.origin, 0.05, 0.0, 0.0 );
var_3 maps\mp\_movers::notify_moving_platform_invalid();
if ( var_3.no_moving_unresolved_collisions )
var_3.unresolved_collision_func = undefined;
if ( isdefined( var_3.script_noteworthy ) )
{
if ( var_3.script_noteworthy == "clockwise_wheel" || var_3.script_noteworthy == "counterclockwise_wheel" )
var_3 rotatevelocity( ( 0, 0, 0 ), 0.05 );
}
}
if ( isdefined( var_1.lights_off ) )
{
foreach ( var_6 in var_1.lights_off )
var_6 show();
}
var_1.entsound stoploopsound();
foreach ( var_3 in var_1.doors )
{
if ( isdefined( var_3.interrupt_sound ) )
var_3 playsound( var_3.interrupt_sound );
}
wait 1.0;
}
else
{
}
var_1.statedone = 1;
foreach ( var_3 in var_1.doors )
var_3.statedone = 1;
var_1 notify( "door_state_done" );
}
door_state_update_sound( var_0, var_1 )
{
var_2 = self;
var_3 = 1;
var_4 = 1;
var_5 = 0;
if ( var_2.statecurr == 3 || var_2.statecurr == 1 )
{
foreach ( var_7 in var_2.doors )
{
if ( isdefined( var_7.start_sound ) )
{
var_7 playsoundonmovingent( var_7.start_sound );
var_5 = lookupsoundlength( var_7.start_sound ) / 1000;
var_3 = 0;
}
}
if ( var_3 )
{
var_5 = lookupsoundlength( var_0 ) / 1000;
playsoundatpos( var_2.entsound.origin, var_0 );
}
}
wait( var_5 * 0.3 );
if ( var_2.statecurr == 3 || var_2.statecurr == 1 )
{
foreach ( var_7 in var_2.doors )
{
if ( isdefined( var_7.loop_sound ) )
{
if ( var_7.loop_sound != "none" )
var_7 playloopsound( var_7.loop_sound );
var_4 = 0;
}
}
if ( var_4 )
var_2.entsound playloopsound( var_1 );
}
}
door_state_change( var_0, var_1 )
{
var_2 = self;
if ( isdefined( var_2.statecurr ) )
{
door_state_exit( var_2.statecurr );
var_2.stateprev = var_2.statecurr;
}
var_2.statecurr = var_0;
var_2 thread door_state_update( var_1 );
}
door_state_exit( var_0 )
{
var_1 = self;
if ( var_0 == 0 || var_0 == 2 )
{
if ( isdefined( var_1.lights_on ) )
{
foreach ( var_3 in var_1.lights_on )
var_3 hide();
}
}
else if ( var_0 == 1 || var_0 == 3 )
{
if ( isdefined( var_1.lights_off ) )
{
foreach ( var_3 in var_1.lights_off )
var_3 hide();
}
var_1.entsound stoploopsound();
foreach ( var_8 in var_1.doors )
{
if ( isdefined( var_8.loop_sound ) )
var_8 stoploopsound();
}
}
else
{
if ( var_0 == 4 )
return;
return;
}
}
door_state_on_interrupt()
{
var_0 = self;
var_0 endon( "door_state_done" );
var_1 = [];
foreach ( var_3 in var_0.trigblock )
{
if ( var_0.statecurr == 1 )
{
if ( isdefined( var_3.not_closing ) && var_3.not_closing == 1 )
continue;
}
else if ( var_0.statecurr == 3 )
{
if ( isdefined( var_3.not_opening ) && var_3.not_opening == 1 )
continue;
}
var_1[var_1.size] = var_3;
}
if ( var_1.size > 0 )
{
var_5 = var_0 waittill_any_triggered_return_triggerer( var_1 );
if ( !isdefined( var_5.fauxdead ) || var_5.fauxdead == 0 )
{
var_0.stateinterrupted = 1;
var_0 notify( "door_state_interrupted" );
}
}
}
waittill_any_triggered_return_triggerer( var_0 )
{
var_1 = self;
foreach ( var_3 in var_0 )
var_1 thread return_triggerer( var_3 );
var_1 waittill( "interrupted" );
return var_1.interrupter;
}
return_triggerer( var_0 )
{
var_1 = self;
var_1 endon( "door_state_done" );
var_1 endon( "interrupted" );
for (;;)
{
var_0 waittill( "trigger", var_2 );
if ( isdefined( var_0.prone_only ) && var_0.prone_only == 1 )
{
if ( isplayer( var_2 ) )
{
var_3 = var_2 getstance();
if ( var_3 != "prone" )
continue;
else
{
var_4 = vectornormalize( anglestoforward( var_2.angles ) );
var_5 = vectornormalize( var_0.origin - var_2.origin );
var_6 = vectordot( var_4, var_5 );
if ( var_6 > 0 )
continue;
}
}
}
break;
}
var_1.interrupter = var_2;
var_1 notify( "interrupted" );
}
button_parse_parameters( var_0 )
{
var_1 = self;
var_1.button_sound = undefined;
if ( !isdefined( var_0 ) )
var_0 = "";
var_2 = strtok( var_0, ";" );
foreach ( var_4 in var_2 )
{
var_5 = strtok( var_4, "=" );
if ( var_5.size != 2 )
continue;
if ( var_5[1] == "undefined" || var_5[1] == "default" )
{
var_1.params[var_5[0]] = undefined;
continue;
}
switch ( var_5[0] )
{
case "open_interrupt":
var_1.open_interrupt = string_to_bool( var_5[1] );
break;
case "button_sound":
var_1.button_sound = var_5[1];
break;
default:
break;
}
}
}
door_parse_parameters( var_0 )
{
var_1 = self;
var_1.start_sound = undefined;
var_1.stop_sound = undefined;
var_1.loop_sound = undefined;
var_1.interrupt_sound = undefined;
if ( !isdefined( var_0 ) )
var_0 = "";
var_2 = strtok( var_0, ";" );
foreach ( var_4 in var_2 )
{
var_5 = strtok( var_4, "=" );
if ( var_5.size != 2 )
continue;
if ( var_5[1] == "undefined" || var_5[1] == "default" )
{
var_1.params[var_5[0]] = undefined;
continue;
}
switch ( var_5[0] )
{
case "stop_sound":
var_1.stop_sound = var_5[1];
break;
case "interrupt_sound":
var_1.interrupt_sound = var_5[1];
break;
case "loop_sound":
var_1.loop_sound = var_5[1];
break;
case "open_interrupt":
var_1.open_interrupt = string_to_bool( var_5[1] );
break;
case "start_sound":
var_1.start_sound = var_5[1];
break;
case "unresolved_collision_nodes":
var_1.unresolved_collision_nodes = getnodearray( var_5[1], "targetname" );
break;
case "no_moving_unresolved_collisions":
var_1.no_moving_unresolved_collisions = string_to_bool( var_5[1] );
break;
default:
break;
}
}
}
trigger_parse_parameters( var_0 )
{
var_1 = self;
if ( !isdefined( var_0 ) )
var_0 = "";
var_2 = strtok( var_0, ";" );
foreach ( var_4 in var_2 )
{
var_5 = strtok( var_4, "=" );
if ( var_5.size != 2 )
continue;
if ( var_5[1] == "undefined" || var_5[1] == "default" )
{
var_1.params[var_5[0]] = undefined;
continue;
}
switch ( var_5[0] )
{
case "not_opening":
var_1.not_opening = string_to_bool( var_5[1] );
break;
case "not_closing":
var_1.not_closing = string_to_bool( var_5[1] );
break;
case "prone_only":
var_1.prone_only = string_to_bool( var_5[1] );
break;
default:
break;
}
}
}
string_to_bool( var_0 )
{
var_1 = undefined;
switch ( var_0 )
{
case "true":
case "1":
var_1 = 1;
break;
case "false":
case "0":
var_1 = 0;
break;
default:
break;
}
return var_1;
}

View File

@ -0,0 +1,118 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
level.drawfriend = 0;
game["headicon_allies"] = maps\mp\gametypes\_teams::getteamheadicon( "allies" );
game["headicon_axis"] = maps\mp\gametypes\_teams::getteamheadicon( "axis" );
precacheheadicon( game["headicon_allies"] );
precacheheadicon( game["headicon_axis"] );
precacheshader( "waypoint_revive" );
level thread onplayerconnect();
for (;;)
{
updatefriendiconsettings();
wait 5;
}
}
onplayerconnect()
{
for (;;)
{
level waittill( "connected", var_0 );
var_0 thread onplayerspawned();
var_0 thread onplayerkilled();
}
}
onplayerspawned()
{
self endon( "disconnect" );
for (;;)
{
self waittill( "spawned_player" );
thread showfriendicon();
}
}
onplayerkilled()
{
self endon( "disconnect" );
for (;;)
{
self waittill( "killed_player" );
self.headicon = "";
}
}
showfriendicon()
{
if ( level.drawfriend )
{
if ( self.pers["team"] == "allies" )
{
self.headicon = game["headicon_allies"];
self.headiconteam = "allies";
}
else
{
self.headicon = game["headicon_axis"];
self.headiconteam = "axis";
}
}
}
updatefriendiconsettings()
{
var_0 = maps\mp\_utility::getintproperty( "scr_drawfriend", level.drawfriend );
if ( level.drawfriend != var_0 )
{
level.drawfriend = var_0;
updatefriendicons();
}
}
updatefriendicons()
{
var_0 = level.players;
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
{
var_2 = var_0[var_1];
if ( isdefined( var_2.pers["team"] ) && var_2.pers["team"] != "spectator" && var_2.sessionstate == "playing" )
{
if ( level.drawfriend )
{
if ( var_2.pers["team"] == "allies" )
{
var_2.headicon = game["headicon_allies"];
var_2.headiconteam = "allies";
}
else
{
var_2.headicon = game["headicon_axis"];
var_2.headiconteam = "axis";
}
continue;
}
var_0 = level.players;
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
{
var_2 = var_0[var_1];
if ( isdefined( var_2.pers["team"] ) && var_2.pers["team"] != "spectator" && var_2.sessionstate == "playing" )
var_2.headicon = "";
}
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,522 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
gethighestscoringplayer()
{
updateplacement();
if ( !level.placement["all"].size )
return undefined;
else
return level.placement["all"][0];
}
getlosingplayers()
{
updateplacement();
var_0 = level.placement["all"];
var_1 = [];
foreach ( var_3 in var_0 )
{
if ( var_3 == level.placement["all"][0] )
continue;
var_1[var_1.size] = var_3;
}
return var_1;
}
giveplayerscore( var_0, var_1, var_2, var_3, var_4, var_5 )
{
if ( maps\mp\_utility::is_aliens() )
return;
else
giveplayerscore_regularmp( var_0, var_1, var_2, var_3, var_4, var_5 );
}
giveplayerscore_regularmp( var_0, var_1, var_2, var_3, var_4, var_5 )
{
if ( isdefined( var_1.owner ) && !isbot( var_1 ) )
var_1 = var_1.owner;
if ( !isbot( var_1 ) )
{
if ( isdefined( var_1.commanding_bot ) )
var_1 = var_1.commanding_bot;
}
if ( !isplayer( var_1 ) )
return;
if ( !isdefined( var_3 ) )
var_3 = 0;
if ( !isdefined( var_4 ) )
var_4 = 0;
if ( !isdefined( var_5 ) )
var_5 = 0;
var_6 = var_1.pers["score"];
onplayerscore( var_0, var_1, var_2, var_5 );
var_7 = var_1.pers["score"] - var_6;
if ( var_7 == 0 )
return;
if ( var_5 )
var_7 = int( var_7 * 10 );
var_8 = maps\mp\gametypes\_rank::getscoreinfovalue( var_0 );
if ( !var_1 maps\mp\_utility::rankingenabled() && !level.hardcoremode && !var_4 )
{
if ( gamemodeusesdeathmatchscoring( level.gametype ) )
var_1 thread maps\mp\gametypes\_rank::xppointspopup( var_8 );
else
var_1 thread maps\mp\gametypes\_rank::xppointspopup( var_7 );
}
if ( gamemodeusesdeathmatchscoring( level.gametype ) )
var_1 maps\mp\gametypes\_persistence::statadd( "score", var_8 );
else if ( !issquadsmode() )
var_1 maps\mp\gametypes\_persistence::statadd( "score", var_7 );
if ( var_1.pers["score"] >= 65000 )
var_1.pers["score"] = 65000;
var_1.score = var_1.pers["score"];
var_9 = var_1.score;
if ( var_5 )
var_9 = int( var_9 * 10 );
if ( gamemodeusesdeathmatchscoring( level.gametype ) )
var_1 maps\mp\gametypes\_persistence::statsetchild( "round", "score", var_9 * var_8 );
else
var_1 maps\mp\gametypes\_persistence::statsetchild( "round", "score", var_9 );
if ( !level.teambased )
thread sendupdateddmscores();
if ( !var_3 )
var_1 maps\mp\gametypes\_gamelogic::checkplayerscorelimitsoon();
var_10 = var_1 maps\mp\gametypes\_gamelogic::checkscorelimit();
}
onplayerscore( var_0, var_1, var_2, var_3 )
{
var_4 = undefined;
if ( isdefined( level.onplayerscore ) )
var_4 = [[ level.onplayerscore ]]( var_0, var_1, var_2 );
if ( !isdefined( var_4 ) )
var_4 = maps\mp\gametypes\_rank::getscoreinfovalue( var_0 );
var_4 = var_4 * level.objectivepointsmod;
if ( var_3 )
var_4 = int( var_4 / 10 );
var_1.pers["score"] = var_1.pers["score"] + var_4;
}
_setplayerscore( var_0, var_1 )
{
if ( var_1 == var_0.pers["score"] )
return;
if ( var_1 < 0 )
return;
var_0.pers["score"] = var_1;
var_0.score = var_0.pers["score"];
var_0 thread maps\mp\gametypes\_gamelogic::checkscorelimit();
}
_getplayerscore( var_0 )
{
if ( !isdefined( var_0 ) )
var_0 = self;
return var_0.pers["score"];
}
giveteamscoreforobjective( var_0, var_1 )
{
var_1 = var_1 * level.objectivepointsmod;
_setteamscore( var_0, _getteamscore( var_0 ) + var_1 );
level notify( "update_team_score", var_0, _getteamscore( var_0 ) );
var_2 = getwinningteam();
if ( !level.splitscreen && var_2 != "none" && var_2 != level.waswinning && gettime() - level.laststatustime > 5000 && maps\mp\_utility::getscorelimit() != 1 )
{
level.laststatustime = gettime();
maps\mp\_utility::leaderdialog( "lead_taken", var_2, "status" );
if ( level.waswinning != "none" )
maps\mp\_utility::leaderdialog( "lead_lost", level.waswinning, "status" );
}
if ( var_2 != "none" )
{
level.waswinning = var_2;
var_3 = _getteamscore( var_2 );
var_4 = maps\mp\_utility::getwatcheddvar( "scorelimit" );
if ( var_3 == 0 || var_4 == 0 )
return;
var_5 = var_3 / var_4 * 100;
if ( var_5 > level.scorepercentagecutoff )
setnojipscore( 1 );
}
}
getwinningteam()
{
var_0 = level.teamnamelist;
if ( !isdefined( level.waswinning ) )
level.waswinning = "none";
var_1 = "none";
var_2 = 0;
if ( level.waswinning != "none" )
{
var_1 = level.waswinning;
var_2 = game["teamScores"][level.waswinning];
}
var_3 = 1;
foreach ( var_5 in var_0 )
{
if ( var_5 == level.waswinning )
continue;
if ( game["teamScores"][var_5] > var_2 )
{
var_1 = var_5;
var_2 = game["teamScores"][var_5];
var_3 = 1;
continue;
}
if ( game["teamScores"][var_5] == var_2 )
{
var_3 = var_3 + 1;
var_1 = "none";
}
}
return var_1;
}
_setteamscore( var_0, var_1 )
{
if ( var_1 == game["teamScores"][var_0] )
return;
game["teamScores"][var_0] = var_1;
updateteamscore( var_0 );
if ( game["status"] == "overtime" && !isdefined( level.overtimescorewinoverride ) || isdefined( level.overtimescorewinoverride ) && !level.overtimescorewinoverride )
thread maps\mp\gametypes\_gamelogic::onscorelimit();
else
{
thread maps\mp\gametypes\_gamelogic::checkteamscorelimitsoon( var_0 );
thread maps\mp\gametypes\_gamelogic::checkscorelimit();
}
}
updateteamscore( var_0 )
{
var_1 = 0;
if ( !maps\mp\_utility::isroundbased() || !maps\mp\_utility::isobjectivebased() || level.gametype == "blitz" )
var_1 = _getteamscore( var_0 );
else
var_1 = game["roundsWon"][var_0];
setteamscore( var_0, var_1 );
}
_getteamscore( var_0 )
{
return game["teamScores"][var_0];
}
sendupdatedteamscores()
{
level notify( "updating_scores" );
level endon( "updating_scores" );
wait 0.05;
maps\mp\_utility::waittillslowprocessallowed();
foreach ( var_1 in level.players )
var_1 updatescores();
}
sendupdateddmscores()
{
level notify( "updating_dm_scores" );
level endon( "updating_dm_scores" );
wait 0.05;
maps\mp\_utility::waittillslowprocessallowed();
for ( var_0 = 0; var_0 < level.players.size; var_0++ )
{
level.players[var_0] updatedmscores();
level.players[var_0].updateddmscores = 1;
}
}
removedisconnectedplayerfromplacement()
{
var_0 = 0;
var_1 = level.placement["all"].size;
var_2 = 0;
for ( var_3 = 0; var_3 < var_1; var_3++ )
{
if ( level.placement["all"][var_3] == self )
var_2 = 1;
if ( var_2 )
level.placement["all"][var_3] = level.placement["all"][var_3 + 1];
}
if ( !var_2 )
return;
level.placement["all"][var_1 - 1] = undefined;
if ( level.multiteambased )
mtdm_updateteamplacement();
if ( level.teambased )
{
updateteamplacement();
return;
}
var_1 = level.placement["all"].size;
for ( var_3 = 0; var_3 < var_1; var_3++ )
{
var_4 = level.placement["all"][var_3];
var_4 notify( "update_outcome" );
}
}
updateplacement()
{
var_0 = [];
foreach ( var_2 in level.players )
{
if ( isdefined( var_2.connectedpostgame ) )
continue;
if ( var_2.pers["team"] == "spectator" || var_2.pers["team"] == "none" )
continue;
var_0[var_0.size] = var_2;
}
for ( var_4 = 1; var_4 < var_0.size; var_4++ )
{
var_2 = var_0[var_4];
var_5 = var_2.score;
for ( var_6 = var_4 - 1; var_6 >= 0 && getbetterplayer( var_2, var_0[var_6] ) == var_2; var_6-- )
var_0[var_6 + 1] = var_0[var_6];
var_0[var_6 + 1] = var_2;
}
level.placement["all"] = var_0;
if ( level.multiteambased )
mtdm_updateteamplacement();
else if ( level.teambased )
updateteamplacement();
}
getbetterplayer( var_0, var_1 )
{
if ( var_0.score > var_1.score )
return var_0;
if ( var_1.score > var_0.score )
return var_1;
if ( var_0.deaths < var_1.deaths )
return var_0;
if ( var_1.deaths < var_0.deaths )
return var_1;
if ( common_scripts\utility::cointoss() )
return var_0;
else
return var_1;
}
updateteamplacement()
{
var_0["allies"] = [];
var_0["axis"] = [];
var_0["spectator"] = [];
var_1 = level.placement["all"];
var_2 = var_1.size;
for ( var_3 = 0; var_3 < var_2; var_3++ )
{
var_4 = var_1[var_3];
var_5 = var_4.pers["team"];
var_0[var_5][var_0[var_5].size] = var_4;
}
level.placement["allies"] = var_0["allies"];
level.placement["axis"] = var_0["axis"];
}
mtdm_updateteamplacement()
{
var_0["spectator"] = [];
foreach ( var_2 in level.teamnamelist )
var_0[var_2] = [];
var_4 = level.placement["all"];
var_5 = var_4.size;
for ( var_6 = 0; var_6 < var_5; var_6++ )
{
var_7 = var_4[var_6];
var_8 = var_7.pers["team"];
var_0[var_8][var_0[var_8].size] = var_7;
}
foreach ( var_2 in level.teamnamelist )
level.placement[var_2] = var_0[var_2];
}
initialdmscoreupdate()
{
wait 0.2;
var_0 = 0;
for (;;)
{
var_1 = 0;
var_2 = level.players;
for ( var_3 = 0; var_3 < var_2.size; var_3++ )
{
var_4 = var_2[var_3];
if ( !isdefined( var_4 ) )
continue;
if ( isdefined( var_4.updateddmscores ) )
continue;
var_4.updateddmscores = 1;
var_4 updatedmscores();
var_1 = 1;
wait 0.5;
}
if ( !var_1 )
wait 3;
}
}
processassist( var_0 )
{
if ( isdefined( level.assists_disabled ) )
return;
if ( maps\mp\_utility::is_aliens() )
return;
else
processassist_regularmp( var_0 );
}
processassist_regularmp( var_0 )
{
self endon( "disconnect" );
var_0 endon( "disconnect" );
wait 0.05;
maps\mp\_utility::waittillslowprocessallowed();
var_1 = self.pers["team"];
if ( var_1 != "axis" && var_1 != "allies" )
return;
if ( var_1 == var_0.pers["team"] )
return;
var_2 = self;
if ( isdefined( self.commanding_bot ) )
var_2 = self.commanding_bot;
var_2 thread [[ level.onxpevent ]]( "assist" );
var_2 maps\mp\_utility::incpersstat( "assists", 1 );
var_2.assists = var_2 maps\mp\_utility::getpersstat( "assists" );
var_2 maps\mp\_utility::incplayerstat( "assists", 1 );
var_2 maps\mp\gametypes\_persistence::statsetchild( "round", "assists", var_2.assists );
giveplayerscore( "assist", self, var_0 );
maps\mp\killstreaks\_killstreaks::giveadrenaline( "assist" );
thread maps\mp\gametypes\_missions::playerassist( var_0 );
}
processshieldassist( var_0 )
{
if ( isdefined( level.assists_disabled ) )
return;
if ( maps\mp\_utility::is_aliens() )
return;
else
processshieldassist_regularmp( var_0 );
}
processshieldassist_regularmp( var_0 )
{
self endon( "disconnect" );
var_0 endon( "disconnect" );
wait 0.05;
maps\mp\_utility::waittillslowprocessallowed();
if ( self.pers["team"] != "axis" && self.pers["team"] != "allies" )
return;
if ( self.pers["team"] == var_0.pers["team"] )
return;
self thread [[ level.onxpevent ]]( "assist" );
self thread [[ level.onxpevent ]]( "assist" );
maps\mp\_utility::incpersstat( "assists", 1 );
self.assists = maps\mp\_utility::getpersstat( "assists" );
maps\mp\_utility::incplayerstat( "assists", 1 );
maps\mp\gametypes\_persistence::statsetchild( "round", "assists", self.assists );
giveplayerscore( "assist", self, var_0 );
thread maps\mp\gametypes\_hud_message::splashnotifydelayed( "shield_assist" );
thread maps\mp\gametypes\_missions::playerassist( var_0 );
}
gamemodeusesdeathmatchscoring( var_0 )
{
return var_0 == "dm" || var_0 == "sotf_ffa";
}

View File

@ -0,0 +1,2 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool

View File

@ -0,0 +1,191 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
level.splitscreen = issplitscreen();
maps\mp\_utility::set_console_status();
level.onlinegame = getdvarint( "onlinegame" );
level.rankedmatch = level.onlinegame && !getdvarint( "xblive_privatematch" ) || getdvarint( "force_ranking" );
level.script = tolower( getdvar( "mapname" ) );
level.gametype = tolower( getdvar( "g_gametype" ) );
level.teamnamelist = [ "axis", "allies" ];
level.otherteam["allies"] = "axis";
level.otherteam["axis"] = "allies";
level.multiteambased = 0;
level.teambased = 0;
level.objectivebased = 0;
level.endgameontimelimit = 1;
level.showingfinalkillcam = 0;
level.tispawndelay = getdvarint( "scr_tispawndelay" );
if ( !isdefined( level.tweakablesinitialized ) )
maps\mp\gametypes\_tweakables::init();
level.halftimetype = "halftime";
level.laststatustime = 0;
level.waswinning = "none";
level.lastslowprocessframe = 0;
level.placement["allies"] = [];
level.placement["axis"] = [];
level.placement["all"] = [];
level.postroundtime = 5.0;
level.playerslookingforsafespawn = [];
registerdvars();
if ( maps\mp\_utility::matchmakinggame() )
{
var_0 = " LB_MAP_" + getdvar( "ui_mapname" );
var_1 = "";
var_2 = "";
if ( issquadsmode() )
{
if ( getdvarint( "squad_match" ) )
{
var_1 = " LB_GM_SQUAD_ASSAULT";
level thread endmatchonhostdisconnect();
}
else if ( level.gametype == "horde" )
var_1 = " LB_GM_HORDE";
}
else
{
var_2 = "LB_GB_TOTALXP_AT LB_GB_TOTALXP_LT LB_GB_WINS_AT LB_GB_WINS_LT LB_GB_KILLS_AT LB_GB_KILLS_LT LB_GB_ACCURACY_AT LB_ACCOLADES";
var_1 = " LB_GM_" + level.gametype;
if ( getdvarint( "g_hardcore" ) )
var_1 = var_1 + "_HC";
}
precacheleaderboards( var_2 + var_1 + var_0 );
}
level.teamcount["allies"] = 0;
level.teamcount["axis"] = 0;
level.teamcount["spectator"] = 0;
level.alivecount["allies"] = 0;
level.alivecount["axis"] = 0;
level.alivecount["spectator"] = 0;
level.livescount["allies"] = 0;
level.livescount["axis"] = 0;
level.onelefttime = [];
level.hasspawned["allies"] = 0;
level.hasspawned["axis"] = 0;
var_3 = 9;
init_multiteamdata( var_3 );
}
endmatchonhostdisconnect()
{
level endon( "game_ended" );
for (;;)
{
level waittill( "connected", var_0 );
if ( var_0 ishost() )
{
var_1 = var_0;
break;
}
}
var_1 waittill( "disconnect" );
thread maps\mp\gametypes\_gamelogic::endgame( "draw", game["end_reason"]["host_ended_game"] );
}
init_multiteamdata( var_0 )
{
for ( var_1 = 0; var_1 < var_0; var_1++ )
{
var_2 = "team_" + var_1;
level.placement[var_2] = [];
level.teamcount[var_2] = 0;
level.alivecount[var_2] = 0;
level.livescount[var_2] = 0;
level.hasspawned[var_2] = 0;
}
}
registerdvars()
{
setomnvar( "ui_bomb_timer", 0 );
if ( getdvar( "r_reflectionProbeGenerate" ) != "1" )
setomnvar( "ui_nuke_end_milliseconds", 0 );
setdvar( "ui_danger_team", "" );
setdvar( "ui_inhostmigration", 0 );
setdvar( "ui_override_halftime", 0 );
setdvar( "camera_thirdPerson", getdvarint( "scr_thirdPerson" ) );
}
setupcallbacks()
{
level.onxpevent = ::onxpevent;
level.getspawnpoint = ::blank;
level.onspawnplayer = ::blank;
level.onrespawndelay = ::blank;
level.ontimelimit = maps\mp\gametypes\_gamelogic::default_ontimelimit;
level.onhalftime = maps\mp\gametypes\_gamelogic::default_onhalftime;
level.ondeadevent = maps\mp\gametypes\_gamelogic::default_ondeadevent;
level.ononeleftevent = maps\mp\gametypes\_gamelogic::default_ononeleftevent;
level.onprecachegametype = ::blank;
level.onstartgametype = ::blank;
level.onplayerkilled = ::blank;
level.killstreakinit = maps\mp\killstreaks\_killstreaks_init::init;
level.matcheventsinit = maps\mp\_matchevents::init;
level.intelinit = maps\mp\gametypes\_intel::init;
}
blank( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
}
testmenu()
{
self endon( "death" );
self endon( "disconnect" );
for (;;)
{
wait 10.0;
var_0 = spawnstruct();
var_0.titletext = &"MP_CHALLENGE_COMPLETED";
var_0.notifytext = "wheee";
var_0.sound = "mp_challenge_complete";
thread maps\mp\gametypes\_hud_message::notifymessage( var_0 );
}
}
testshock()
{
self endon( "death" );
self endon( "disconnect" );
for (;;)
{
wait 3.0;
var_0 = randomint( 6 );
for ( var_1 = 0; var_1 < var_0; var_1++ )
{
iprintlnbold( var_0 );
self shellshock( "frag_grenade_mp", 0.2 );
wait 0.1;
}
}
}
onxpevent( var_0 )
{
thread maps\mp\gametypes\_rank::giverankxp( var_0 );
}
debugline( var_0, var_1 )
{
for ( var_2 = 0; var_2 < 50; var_2++ )
wait 0.05;
}

View File

@ -0,0 +1,2 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool

View File

@ -0,0 +1,217 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
level.healthoverlaycutoff = 0.55;
var_0 = 5;
var_0 = maps\mp\gametypes\_tweakables::gettweakablevalue( "player", "healthregentime" );
level.playerhealth_regularregendelay = var_0;
level.healthregendisabled = level.playerhealth_regularregendelay <= 0;
level thread onplayerconnect();
}
onplayerconnect()
{
for (;;)
{
level waittill( "connected", var_0 );
var_0 thread onplayerspawned();
}
}
onplayerspawned()
{
self endon( "disconnect" );
for (;;)
{
self waittill( "spawned_player" );
thread playerhealthregen();
self visionsetthermalforplayer( game["thermal_vision"] );
}
}
playerhealthregen()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "joined_team" );
self endon( "joined_spectators" );
self endon( "faux_spawn" );
level endon( "game_ended" );
if ( self.health <= 0 )
return;
var_0 = 0;
var_1 = 0;
thread playerpainbreathingsound( self.maxhealth * 0.55 );
for (;;)
{
self waittill( "damage" );
if ( self.health <= 0 )
return;
if ( maps\mp\_utility::isjuggernaut() )
continue;
var_1 = gettime();
var_2 = self.health / self.maxhealth;
self.regenspeed = 1;
if ( maps\mp\_utility::_hasperk( "specialty_regenfaster" ) )
self.regenspeed = self.regenspeed * level.regenfastermod;
else if ( maps\mp\_utility::_hasperk( "specialty_bloodrush" ) )
self.regenspeed = self.regenspeed * self.bloodrushregenspeedmod;
if ( var_2 <= level.healthoverlaycutoff )
self.atbrinkofdeath = 1;
thread healthregeneration( var_1, var_2 );
thread breathingmanager( var_1, var_2 );
}
}
breathingmanager( var_0, var_1 )
{
self notify( "breathingManager" );
self endon( "breathingManager" );
self endon( "death" );
self endon( "disconnect" );
self endon( "joined_team" );
self endon( "joined_spectators" );
level endon( "game_ended" );
if ( maps\mp\_utility::isusingremote() )
return;
if ( !isplayer( self ) )
return;
self.breathingstoptime = var_0 + 6000 * self.regenspeed;
wait( 6 * self.regenspeed );
if ( !level.gameended )
{
if ( self hasfemalecustomizationmodel() )
self playlocalsound( "Fem_breathing_better" );
else
self playlocalsound( "breathing_better" );
}
}
healthregeneration( var_0, var_1 )
{
self notify( "healthRegeneration" );
self endon( "healthRegeneration" );
self endon( "death" );
self endon( "disconnect" );
self endon( "joined_team" );
self endon( "joined_spectators" );
level endon( "game_ended" );
var_2 = level.healthregendisabled || isdefined( self.healthregendisabled ) && self.healthregendisabled;
if ( var_2 )
return;
childthread maps\mp\perks\_perkfunctions::regenspeedwatcher();
wait( level.playerhealth_regularregendelay * self.regenspeed );
if ( var_1 < 0.55 )
var_3 = 1;
else
var_3 = 0;
for (;;)
{
if ( !isdefined( self.regenspeed ) || self.regenspeed == 1 )
{
wait 0.05;
if ( self.health < self.maxhealth )
{
self.health = self.health + 1;
var_1 = self.health / self.maxhealth;
}
else
break;
}
else
{
wait 0.05;
if ( self.health < self.maxhealth )
{
if ( maps\mp\_utility::_hasperk( "specialty_regenfaster" ) )
self.health = self.health + level.regenfasterhealthmod;
else if ( maps\mp\_utility::_hasperk( "specialty_bloodrush" ) )
self.health = self.health + self.bloodrushregenhealthmod;
}
else
break;
}
if ( self.health > self.maxhealth )
self.health = self.maxhealth;
}
self notify( "healed" );
maps\mp\gametypes\_damage::resetattackerlist();
if ( var_3 )
maps\mp\gametypes\_missions::healthregenerated();
}
wait_for_not_using_remote()
{
self notify( "waiting_to_stop_remote" );
self endon( "waiting_to_stop_remote" );
self endon( "death" );
level endon( "game_ended" );
self waittill( "stopped_using_remote" );
maps\mp\_utility::restorebasevisionset( 0 );
}
playerpainbreathingsound( var_0 )
{
level endon( "game_ended" );
self endon( "death" );
self endon( "disconnect" );
self endon( "joined_team" );
self endon( "joined_spectators" );
if ( !isplayer( self ) )
return;
wait 2;
for (;;)
{
wait 0.2;
if ( self.health <= 0 )
return;
if ( self.health >= var_0 )
continue;
var_1 = level.healthregendisabled || isdefined( self.healthregendisabled ) && self.healthregendisabled;
if ( var_1 && isdefined( self.breathingstoptime ) && gettime() > self.breathingstoptime )
continue;
if ( maps\mp\_utility::isusingremote() )
continue;
if ( self hasfemalecustomizationmodel() )
self playlocalsound( "Fem_breathing_hurt" );
else
self playlocalsound( "breathing_hurt" );
wait 0.784;
wait( 0.1 + randomfloat( 0.8 ) );
}
}

View File

@ -0,0 +1,730 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
createhordecrates( var_0, var_1 )
{
level.getrandomcratetypeforgamemode = ::getrandomcratetypehorde;
level.hordeicon["ammo"] = "specialty_ammo_crate";
level.hordeicon["iw6_mts255_mp_barrelrange03_reflexshotgun"] = "hud_icon_mts255";
level.hordeicon["iw6_fp6_mp_barrelrange03_reflexshotgun"] = "hud_icon_fp6";
level.hordeicon["iw6_vepr_mp_grip"] = "hud_icon_vepr";
level.hordeicon["iw6_microtar_mp_eotechsmg"] = "hud_icon_microtar";
level.hordeicon["iw6_ak12_mp_flashsuppress_grip"] = "hud_icon_ak12";
level.hordeicon["iw6_arx160_mp_flashsuppress_hybrid"] = "hud_icon_arx160";
level.hordeicon["iw6_m27_mp_flashsuppress_hybrid"] = "hud_icon_m27";
level.hordeicon["iw6_kac_mp_flashsuppress"] = "hud_icon_kac";
level.hordeicon["iw6_usr_mp_usrvzscope_xmags"] = "hud_icon_usr";
level.hordeicon["iw6_magnumhorde_mp_fmj"] = "hud_icon_magnum";
level.hordeicon["throwingknife_mp"] = "throw_knife_sm";
level.hordeicon["specialty_lightweight"] = "icon_perks_agility";
level.hordeicon["specialty_fastreload"] = "icon_perks_sleight_of_hand";
level.hordeicon["specialty_quickdraw"] = "icon_perks_quickdraw";
level.hordeicon["specialty_marathon"] = "icon_perks_marathon";
level.hordeicon["specialty_quickswap"] = "icon_perks_reflex";
level.hordeicon["specialty_bulletaccuracy"] = "icon_perks_steady_aim";
level.hordeicon["specialty_fastsprintrecovery"] = "icon_perks_ready_up";
level.hordeicon["_specialty_blastshield"] = "icon_perks_blast_shield";
level.hordeicon["specialty_stalker"] = "icon_perks_stalker";
level.hordeicon["specialty_sharp_focus"] = "icon_perks_focus";
level.hordeicon["specialty_regenfaster"] = "icon_perks_icu";
level.hordeicon["specialty_sprintreload"] = "icon_perks_on_the_go";
level.hordeicon["specialty_triggerhappy"] = "icon_perks_triggerhappy";
maps\mp\killstreaks\_airdrop::addcratetype( "a", "iw6_mts255_mp_barrelrange03_reflexshotgun", 12, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_MTS" );
maps\mp\killstreaks\_airdrop::addcratetype( "a", "iw6_fp6_mp_barrelrange03_reflexshotgun", 12, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_FP6" );
maps\mp\killstreaks\_airdrop::addcratetype( "a", "iw6_vepr_mp_grip", 12, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_VEPR" );
maps\mp\killstreaks\_airdrop::addcratetype( "a", "iw6_microtar_mp_eotechsmg", 12, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_MICRO" );
maps\mp\killstreaks\_airdrop::addcratetype( "a", "iw6_ak12_mp_flashsuppress_grip", 0, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_AK" );
maps\mp\killstreaks\_airdrop::addcratetype( "a", "iw6_arx160_mp_flashsuppress_hybrid", 0, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_ARX" );
maps\mp\killstreaks\_airdrop::addcratetype( "a", "iw6_m27_mp_flashsuppress_hybrid", 0, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_M27" );
maps\mp\killstreaks\_airdrop::addcratetype( "a", "iw6_kac_mp_flashsuppress", 0, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_KAC" );
maps\mp\killstreaks\_airdrop::addcratetype( "a", "iw6_usr_mp_usrvzscope_xmags", 12, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_USR" );
maps\mp\killstreaks\_airdrop::addcratetype( "a", "iw6_magnumhorde_mp_fmj", 0, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_WEST" );
maps\mp\killstreaks\_airdrop::addcratetype( "a", "throwingknife_mp", 3, ::hordecratelethalthink, var_0, var_1, &"HORDE_DOUBLE_TAP_KNIFE" );
maps\mp\killstreaks\_airdrop::addcratetype( "a", "specialty_lightweight", 0, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_LIGHT" );
maps\mp\killstreaks\_airdrop::addcratetype( "a", "specialty_fastreload", 0, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_FAST" );
maps\mp\killstreaks\_airdrop::addcratetype( "a", "specialty_quickdraw", 10, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_QIUCK" );
maps\mp\killstreaks\_airdrop::addcratetype( "a", "specialty_marathon", 0, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_MARA" );
maps\mp\killstreaks\_airdrop::addcratetype( "a", "specialty_quickswap", 10, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_SWAP" );
maps\mp\killstreaks\_airdrop::addcratetype( "a", "specialty_bulletaccuracy", 0, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_AIM" );
maps\mp\killstreaks\_airdrop::addcratetype( "a", "specialty_fastsprintrecovery", 7, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_READY" );
maps\mp\killstreaks\_airdrop::addcratetype( "a", "_specialty_blastshield", 0, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_BLAST" );
maps\mp\killstreaks\_airdrop::addcratetype( "a", "specialty_stalker", 10, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_STALK" );
maps\mp\killstreaks\_airdrop::addcratetype( "a", "specialty_sharp_focus", 0, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_FOCUS" );
maps\mp\killstreaks\_airdrop::addcratetype( "a", "specialty_regenfaster", 0, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_HEALTH" );
maps\mp\killstreaks\_airdrop::addcratetype( "a", "specialty_sprintreload", 0, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_GO" );
maps\mp\killstreaks\_airdrop::addcratetype( "a", "specialty_triggerhappy", 0, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_TRIGGER" );
maps\mp\killstreaks\_airdrop::addcratetype( "a", "ammo", 0, ::hordecrateammothink, var_0, var_1, &"HORDE_AMMO" );
maps\mp\killstreaks\_airdrop::addcratetype( "b", "iw6_mts255_mp_barrelrange03_reflexshotgun", 5, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_MTS" );
maps\mp\killstreaks\_airdrop::addcratetype( "b", "iw6_fp6_mp_barrelrange03_reflexshotgun", 5, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_FP6" );
maps\mp\killstreaks\_airdrop::addcratetype( "b", "iw6_vepr_mp_grip", 10, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_VEPR" );
maps\mp\killstreaks\_airdrop::addcratetype( "b", "iw6_microtar_mp_eotechsmg", 10, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_MICRO" );
maps\mp\killstreaks\_airdrop::addcratetype( "b", "iw6_ak12_mp_flashsuppress_grip", 10, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_AK" );
maps\mp\killstreaks\_airdrop::addcratetype( "b", "iw6_arx160_mp_flashsuppress_hybrid", 10, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_ARX" );
maps\mp\killstreaks\_airdrop::addcratetype( "b", "iw6_m27_mp_flashsuppress_hybrid", 0, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_M27" );
maps\mp\killstreaks\_airdrop::addcratetype( "b", "iw6_kac_mp_flashsuppress", 0, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_KAC" );
maps\mp\killstreaks\_airdrop::addcratetype( "b", "iw6_usr_mp_usrvzscope_xmags", 10, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_USR" );
maps\mp\killstreaks\_airdrop::addcratetype( "b", "iw6_magnumhorde_mp_fmj", 0, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_WEST" );
maps\mp\killstreaks\_airdrop::addcratetype( "b", "throwingknife_mp", 3, ::hordecratelethalthink, var_0, var_1, &"HORDE_DOUBLE_TAP_KNIFE" );
maps\mp\killstreaks\_airdrop::addcratetype( "b", "specialty_lightweight", 10, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_LIGHT" );
maps\mp\killstreaks\_airdrop::addcratetype( "b", "specialty_fastreload", 0, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_FAST" );
maps\mp\killstreaks\_airdrop::addcratetype( "b", "specialty_quickdraw", 0, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_QIUCK" );
maps\mp\killstreaks\_airdrop::addcratetype( "b", "specialty_marathon", 10, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_MARA" );
maps\mp\killstreaks\_airdrop::addcratetype( "b", "specialty_quickswap", 0, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_SWAP" );
maps\mp\killstreaks\_airdrop::addcratetype( "b", "specialty_bulletaccuracy", 0, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_AIM" );
maps\mp\killstreaks\_airdrop::addcratetype( "b", "specialty_fastsprintrecovery", 0, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_READY" );
maps\mp\killstreaks\_airdrop::addcratetype( "b", "_specialty_blastshield", 0, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_BLAST" );
maps\mp\killstreaks\_airdrop::addcratetype( "b", "specialty_stalker", 0, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_STALK" );
maps\mp\killstreaks\_airdrop::addcratetype( "b", "specialty_sharp_focus", 7, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_FOCUS" );
maps\mp\killstreaks\_airdrop::addcratetype( "b", "specialty_regenfaster", 0, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_HEALTH" );
maps\mp\killstreaks\_airdrop::addcratetype( "b", "specialty_sprintreload", 10, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_GO" );
maps\mp\killstreaks\_airdrop::addcratetype( "b", "specialty_triggerhappy", 0, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_TRIGGER" );
maps\mp\killstreaks\_airdrop::addcratetype( "b", "ammo", 0, ::hordecrateammothink, var_0, var_1, &"HORDE_AMMO" );
maps\mp\killstreaks\_airdrop::addcratetype( "c", "iw6_mts255_mp_barrelrange03_reflexshotgun", 5, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_MTS" );
maps\mp\killstreaks\_airdrop::addcratetype( "c", "iw6_fp6_mp_barrelrange03_reflexshotgun", 5, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_FP6" );
maps\mp\killstreaks\_airdrop::addcratetype( "c", "iw6_vepr_mp_grip", 5, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_VEPR" );
maps\mp\killstreaks\_airdrop::addcratetype( "c", "iw6_microtar_mp_eotechsmg", 5, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_MICRO" );
maps\mp\killstreaks\_airdrop::addcratetype( "c", "iw6_ak12_mp_flashsuppress_grip", 12, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_AK" );
maps\mp\killstreaks\_airdrop::addcratetype( "c", "iw6_arx160_mp_flashsuppress_hybrid", 12, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_ARX" );
maps\mp\killstreaks\_airdrop::addcratetype( "c", "iw6_m27_mp_flashsuppress_hybrid", 0, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_M27" );
maps\mp\killstreaks\_airdrop::addcratetype( "c", "iw6_kac_mp_flashsuppress", 0, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_KAC" );
maps\mp\killstreaks\_airdrop::addcratetype( "c", "iw6_usr_mp_usrvzscope_xmags", 6, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_USR" );
maps\mp\killstreaks\_airdrop::addcratetype( "c", "iw6_magnumhorde_mp_fmj", 0, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_WEST" );
maps\mp\killstreaks\_airdrop::addcratetype( "c", "throwingknife_mp", 2, ::hordecratelethalthink, var_0, var_1, &"HORDE_DOUBLE_TAP_KNIFE" );
maps\mp\killstreaks\_airdrop::addcratetype( "c", "specialty_lightweight", 0, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_LIGHT" );
maps\mp\killstreaks\_airdrop::addcratetype( "c", "specialty_fastreload", 12, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_FAST" );
maps\mp\killstreaks\_airdrop::addcratetype( "c", "specialty_quickdraw", 0, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_QIUCK" );
maps\mp\killstreaks\_airdrop::addcratetype( "c", "specialty_marathon", 0, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_MARA" );
maps\mp\killstreaks\_airdrop::addcratetype( "c", "specialty_quickswap", 0, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_SWAP" );
maps\mp\killstreaks\_airdrop::addcratetype( "c", "specialty_bulletaccuracy", 12, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_AIM" );
maps\mp\killstreaks\_airdrop::addcratetype( "c", "specialty_fastsprintrecovery", 0, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_READY" );
maps\mp\killstreaks\_airdrop::addcratetype( "c", "_specialty_blastshield", 12, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_BLAST" );
maps\mp\killstreaks\_airdrop::addcratetype( "c", "specialty_stalker", 0, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_STALK" );
maps\mp\killstreaks\_airdrop::addcratetype( "c", "specialty_sharp_focus", 0, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_FOCUS" );
maps\mp\killstreaks\_airdrop::addcratetype( "c", "specialty_regenfaster", 12, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_HEALTH" );
maps\mp\killstreaks\_airdrop::addcratetype( "c", "specialty_sprintreload", 0, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_GO" );
maps\mp\killstreaks\_airdrop::addcratetype( "c", "specialty_triggerhappy", 0, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_TRIGGER" );
maps\mp\killstreaks\_airdrop::addcratetype( "c", "ammo", 0, ::hordecrateammothink, var_0, var_1, &"HORDE_AMMO" );
maps\mp\killstreaks\_airdrop::addcratetype( "d", "iw6_mts255_mp_barrelrange03_reflexshotgun", 5, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_MTS" );
maps\mp\killstreaks\_airdrop::addcratetype( "d", "iw6_fp6_mp_barrelrange03_reflexshotgun", 5, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_FP6" );
maps\mp\killstreaks\_airdrop::addcratetype( "d", "iw6_vepr_mp_grip", 5, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_VEPR" );
maps\mp\killstreaks\_airdrop::addcratetype( "d", "iw6_microtar_mp_eotechsmg", 5, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_MICRO" );
maps\mp\killstreaks\_airdrop::addcratetype( "d", "iw6_ak12_mp_flashsuppress_grip", 5, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_AK" );
maps\mp\killstreaks\_airdrop::addcratetype( "d", "iw6_arx160_mp_flashsuppress_hybrid", 5, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_ARX" );
maps\mp\killstreaks\_airdrop::addcratetype( "d", "iw6_m27_mp_flashsuppress_hybrid", 10, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_M27" );
maps\mp\killstreaks\_airdrop::addcratetype( "d", "iw6_kac_mp_flashsuppress", 10, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_KAC" );
maps\mp\killstreaks\_airdrop::addcratetype( "d", "iw6_usr_mp_usrvzscope_xmags", 5, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_USR" );
maps\mp\killstreaks\_airdrop::addcratetype( "d", "iw6_magnumhorde_mp_fmj", 0, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_WEST" );
maps\mp\killstreaks\_airdrop::addcratetype( "d", "throwingknife_mp", 2, ::hordecratelethalthink, var_0, var_1, &"HORDE_DOUBLE_TAP_KNIFE" );
maps\mp\killstreaks\_airdrop::addcratetype( "d", "specialty_lightweight", 3, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_LIGHT" );
maps\mp\killstreaks\_airdrop::addcratetype( "d", "specialty_fastreload", 4, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_FAST" );
maps\mp\killstreaks\_airdrop::addcratetype( "d", "specialty_quickdraw", 3, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_QIUCK" );
maps\mp\killstreaks\_airdrop::addcratetype( "d", "specialty_marathon", 4, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_MARA" );
maps\mp\killstreaks\_airdrop::addcratetype( "d", "specialty_quickswap", 3, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_SWAP" );
maps\mp\killstreaks\_airdrop::addcratetype( "d", "specialty_bulletaccuracy", 4, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_AIM" );
maps\mp\killstreaks\_airdrop::addcratetype( "d", "specialty_fastsprintrecovery", 3, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_READY" );
maps\mp\killstreaks\_airdrop::addcratetype( "d", "_specialty_blastshield", 4, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_BLAST" );
maps\mp\killstreaks\_airdrop::addcratetype( "d", "specialty_stalker", 3, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_STALK" );
maps\mp\killstreaks\_airdrop::addcratetype( "d", "specialty_sharp_focus", 4, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_FOCUS" );
maps\mp\killstreaks\_airdrop::addcratetype( "d", "specialty_regenfaster", 4, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_HEALTH" );
maps\mp\killstreaks\_airdrop::addcratetype( "d", "specialty_sprintreload", 4, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_GO" );
maps\mp\killstreaks\_airdrop::addcratetype( "d", "specialty_triggerhappy", 0, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_TRIGGER" );
maps\mp\killstreaks\_airdrop::addcratetype( "d", "ammo", 0, ::hordecrateammothink, var_0, var_1, &"HORDE_AMMO" );
maps\mp\killstreaks\_airdrop::addcratetype( "e", "iw6_mts255_mp_barrelrange03_reflexshotgun", 4, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_MTS" );
maps\mp\killstreaks\_airdrop::addcratetype( "e", "iw6_fp6_mp_barrelrange03_reflexshotgun", 4, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_FP6" );
maps\mp\killstreaks\_airdrop::addcratetype( "e", "iw6_vepr_mp_grip", 4, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_VEPR" );
maps\mp\killstreaks\_airdrop::addcratetype( "e", "iw6_microtar_mp_eotechsmg", 4, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_MICRO" );
maps\mp\killstreaks\_airdrop::addcratetype( "e", "iw6_ak12_mp_flashsuppress_grip", 4, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_AK" );
maps\mp\killstreaks\_airdrop::addcratetype( "e", "iw6_arx160_mp_flashsuppress_hybrid", 4, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_ARX" );
maps\mp\killstreaks\_airdrop::addcratetype( "e", "iw6_m27_mp_flashsuppress_hybrid", 9, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_M27" );
maps\mp\killstreaks\_airdrop::addcratetype( "e", "iw6_kac_mp_flashsuppress", 9, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_KAC" );
maps\mp\killstreaks\_airdrop::addcratetype( "e", "iw6_usr_mp_usrvzscope_xmags", 5, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_USR" );
maps\mp\killstreaks\_airdrop::addcratetype( "e", "iw6_magnumhorde_mp_fmj", 3, ::hordecrateweaponthink, var_0, var_1, &"HORDE_DOUBLE_TAP_WEST" );
maps\mp\killstreaks\_airdrop::addcratetype( "e", "throwingknife_mp", 2, ::hordecratelethalthink, var_0, var_1, &"HORDE_DOUBLE_TAP_KNIFE" );
maps\mp\killstreaks\_airdrop::addcratetype( "e", "specialty_lightweight", 4, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_LIGHT" );
maps\mp\killstreaks\_airdrop::addcratetype( "e", "specialty_fastreload", 4, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_FAST" );
maps\mp\killstreaks\_airdrop::addcratetype( "e", "specialty_quickdraw", 4, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_QIUCK" );
maps\mp\killstreaks\_airdrop::addcratetype( "e", "specialty_marathon", 4, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_MARA" );
maps\mp\killstreaks\_airdrop::addcratetype( "e", "specialty_quickswap", 4, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_SWAP" );
maps\mp\killstreaks\_airdrop::addcratetype( "e", "specialty_bulletaccuracy", 4, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_AIM" );
maps\mp\killstreaks\_airdrop::addcratetype( "e", "specialty_fastsprintrecovery", 4, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_READY" );
maps\mp\killstreaks\_airdrop::addcratetype( "e", "_specialty_blastshield", 4, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_BLAST" );
maps\mp\killstreaks\_airdrop::addcratetype( "e", "specialty_stalker", 4, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_STALK" );
maps\mp\killstreaks\_airdrop::addcratetype( "e", "specialty_sharp_focus", 4, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_FOCUS" );
maps\mp\killstreaks\_airdrop::addcratetype( "e", "specialty_regenfaster", 4, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_HEALTH" );
maps\mp\killstreaks\_airdrop::addcratetype( "e", "specialty_sprintreload", 4, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_GO" );
maps\mp\killstreaks\_airdrop::addcratetype( "e", "specialty_triggerhappy", 3, ::hordecrateperkthink, var_0, var_1, &"HORDE_DOUBLE_TAP_TRIGGER" );
maps\mp\killstreaks\_airdrop::addcratetype( "e", "ammo", 0, ::hordecrateammothink, var_0, var_1, &"HORDE_AMMO" );
setuplootcrates( var_0, var_1 );
}
setuplootcrates( var_0, var_1 )
{
maps\mp\killstreaks\_airdrop::addcratetype( "loot", "ims", 15, ::killstreakcratethinkhorde, var_0, var_1, &"KILLSTREAKS_HINTS_IMS_PICKUP" );
maps\mp\killstreaks\_airdrop::addcratetype( "loot", "helicopter", 15, ::killstreakcratethinkhorde, var_0, var_1, &"KILLSTREAKS_HINTS_HELICOPTER_PICKUP" );
maps\mp\killstreaks\_airdrop::addcratetype( "loot", "drone_hive", 15, ::killstreakcratethinkhorde, var_0, var_1, &"KILLSTREAKS_HINTS_DRONE_HIVE_PICKUP" );
maps\mp\killstreaks\_airdrop::addcratetype( "loot", "sentry", 15, ::killstreakcratethinkhorde, var_0, var_1, &"KILLSTREAKS_HINTS_SENTRY_PICKUP" );
maps\mp\killstreaks\_airdrop::addcratetype( "loot", "heli_sniper", 15, ::killstreakcratethinkhorde, var_0, var_1, &"KILLSTREAKS_HINTS_HELI_SNIPER_PICKUP" );
maps\mp\killstreaks\_airdrop::addcratetype( "loot", "ball_drone_backup", 15, ::killstreakcratethinkhorde, var_0, var_1, &"KILLSTREAKS_HINTS_BALL_DRONE_BACKUP_PICKUP" );
}
hordecrateweaponthink( var_0 )
{
self endon( "death" );
self endon( "doubleTap" );
self endon( "restarting_physics" );
if ( !isdefined( self.doubletapcount ) )
self.doubletapcount = 0;
var_1 = game["strings"][self.cratetype + "_hint"];
thread doubletapthink();
maps\mp\killstreaks\_airdrop::cratesetupforuse( var_1, level.hordeicon[self.cratetype] );
thread crateallcapturethinkhorde( 1000 );
setcratelooksbasedontap( self );
level thread removeonnextairdrop( self );
for (;;)
{
self waittill( "captured", var_2 );
trygivehordeweapon( var_2, self.cratetype );
maps\mp\killstreaks\_airdrop::deletecrate();
}
}
trygivehordeweapon( var_0, var_1 )
{
var_0 playlocalsound( "ammo_crate_use" );
var_2 = [];
var_3 = var_0 getweaponslistprimaries();
var_4 = getweaponbasename( var_1 );
foreach ( var_6 in var_3 )
{
if ( var_6 == level.intelminigun )
continue;
var_2[var_2.size] = var_6;
}
if ( var_2.size > 1 )
{
var_8 = 1;
foreach ( var_10 in var_2 )
{
if ( var_1 == var_10 )
var_8 = 0;
}
if ( var_8 )
{
var_12 = var_0 getcurrentprimaryweapon();
if ( var_12 == "none" )
var_12 = var_0 common_scripts\utility::getlastweapon();
if ( !var_0 hasweapon( var_12 ) || var_12 == level.intelminigun )
var_12 = var_0 maps\mp\killstreaks\_killstreaks::getfirstprimaryweapon();
var_0 takeweapon( var_12 );
}
else
{
var_0 givemaxammo( var_1 );
var_13 = var_0.weaponstate[var_4]["barSize"];
var_0.weaponstate[var_4]["vaule"] = var_13;
var_0 notify( "weaponPointsEarned" );
}
}
maps\mp\gametypes\horde::createhordeweaponstate( var_0, var_4, 1 );
var_0 maps\mp\_utility::_giveweapon( var_1 );
var_0 switchtoweaponimmediate( var_1 );
}
hordecrateperkthink( var_0 )
{
self endon( "death" );
self endon( "doubleTap" );
self endon( "restarting_physics" );
if ( !isdefined( self.doubletapcount ) )
self.doubletapcount = 0;
var_1 = game["strings"][self.cratetype + "_hint"];
thread doubletapthink();
maps\mp\killstreaks\_airdrop::cratesetupforuse( var_1, level.hordeicon[self.cratetype] );
thread crateallcapturethinkhorde( 1000 );
setcratelooksbasedontap( self );
level thread removeonnextairdrop( self );
for (;;)
{
self waittill( "captured", var_2 );
var_2 playlocalsound( "ammo_crate_use" );
if ( !var_2 maps\mp\_utility::_hasperk( self.cratetype ) )
{
var_3 = self.cratetype;
var_2 maps\mp\_utility::giveperk( var_3, 0 );
var_4 = tablelookup( "mp/hordeIcons.csv", 1, var_3, 0 );
var_2 setclientomnvar( "ui_horde_update_perk", int( var_4 ) );
var_5 = var_2.horde_perks.size;
var_2.horde_perks[var_5]["name"] = var_3;
var_2.horde_perks[var_5]["index"] = int( var_4 );
}
maps\mp\killstreaks\_airdrop::deletecrate();
}
}
hordecratelethalthink( var_0 )
{
self endon( "death" );
self endon( "doubleTap" );
self endon( "restarting_physics" );
if ( !isdefined( self.doubletapcount ) )
self.doubletapcount = 0;
var_1 = game["strings"][self.cratetype + "_hint"];
thread doubletapthink();
maps\mp\killstreaks\_airdrop::cratesetupforuse( var_1, level.hordeicon[self.cratetype] );
thread crateallcapturethinkhorde( 1000 );
setcratelooksbasedontap( self );
level thread removeonnextairdrop( self );
for (;;)
{
self waittill( "captured", var_2 );
var_2 playlocalsound( "ammo_crate_use" );
if ( !var_2 hasweapon( self.cratetype ) )
{
var_3 = var_2 getcurrentoffhand();
var_2 takeweapon( var_3 );
var_2 maps\mp\_utility::giveperkequipment( self.cratetype, 1 );
}
else
var_2 givemaxammo( self.cratetype );
maps\mp\killstreaks\_airdrop::deletecrate();
}
}
hordecrateammothink( var_0 )
{
self endon( "death" );
self endon( "restarting_physics" );
var_1 = game["strings"][self.cratetype + "_hint"];
maps\mp\killstreaks\_airdrop::cratesetupforuse( var_1, level.hordeicon[self.cratetype] );
thread crateallcapturethinkhorde( 2000 );
self.friendlymodel hudoutlineenable( 5, 0 );
self.outlinecolor = 5;
level thread removeonnextairdrop( self );
for (;;)
{
self waittill( "captured", var_2 );
var_2 playlocalsound( "ammo_crate_use" );
level thread maps\mp\gametypes\_horde_util::refillammohorde( var_2 );
maps\mp\killstreaks\_airdrop::deletecrate();
}
}
killstreakcratethinkhorde( var_0 )
{
self endon( "death" );
self endon( "restarting_physics" );
var_1 = game["strings"][self.cratetype + "_hint"];
maps\mp\killstreaks\_airdrop::cratesetupforuse( var_1, maps\mp\_utility::getkillstreakoverheadicon( self.cratetype ) );
thread crateallcapturethinkhorde( 2000 );
setcratelook( self, 3, ( 0.157, 0.784, 0.784 ) );
for (;;)
{
self waittill( "captured", var_2 );
if ( !isplayer( var_2 ) )
continue;
var_3 = getslotnumber( var_2 );
if ( !isdefined( var_3 ) )
continue;
var_2 playlocalsound( "ammo_crate_use" );
var_2 thread maps\mp\killstreaks\_killstreaks::givekillstreak( self.cratetype, 0, 0, self.owner, var_3 );
maps\mp\killstreaks\_airdrop::deletecrate();
}
}
getslotnumber( var_0 )
{
var_1 = undefined;
for ( var_2 = 1; var_2 < 4; var_2++ )
{
var_3 = var_0.pers["killstreaks"][var_2];
if ( !isdefined( var_3 ) || !isdefined( var_3.streakname ) || var_3.available == 0 )
{
var_1 = var_2;
break;
}
}
return var_1;
}
crateallcapturethinkhorde( var_0 )
{
self endon( "doubleTap" );
self endon( "restarting_physics" );
if ( !isdefined( var_0 ) )
var_0 = 500;
while ( isdefined( self ) )
{
self makeusable();
self waittill( "trigger", var_1 );
if ( handleagentuse( var_1 ) )
continue;
if ( handlekillstreaklimit( var_1 ) )
continue;
if ( !maps\mp\killstreaks\_airdrop::validateopenconditions( var_1 ) )
continue;
self makeunusable();
var_1.iscapturingcrate = 1;
if ( !maps\mp\killstreaks\_airdrop::useholdthink( var_1, var_0 ) )
{
var_1.iscapturingcrate = 0;
continue;
}
var_1.iscapturingcrate = 0;
maps\mp\gametypes\_horde_util::awardhordecrateused( var_1 );
self notify( "captured", var_1 );
}
}
handlekillstreaklimit( var_0 )
{
if ( self.droptype == "loot" && !isdefined( getslotnumber( var_0 ) ) )
{
var_0 setclientomnvar( "ui_killstreak_limit", 1 );
return 1;
}
return 0;
}
handleagentuse( var_0 )
{
if ( !isplayer( var_0 ) )
{
if ( isdefined( var_0.disableplayeruseent ) )
var_0.disableplayeruseent enableplayeruse( var_0 );
var_0.disableplayeruseent = self;
self disableplayeruse( var_0 );
return 1;
}
return 0;
}
monitordoubletap( var_0 )
{
var_0 endon( "disconnect" );
var_1 = 0;
for (;;)
{
if ( var_0 usebuttonpressed() )
{
var_1 = 0;
while ( var_0 usebuttonpressed() )
{
var_1 = var_1 + 0.05;
wait 0.05;
}
if ( var_1 >= 0.5 )
continue;
var_1 = 0;
while ( !var_0 usebuttonpressed() && var_1 < 0.5 )
{
var_1 = var_1 + 0.05;
wait 0.05;
}
if ( var_1 >= 0.5 )
continue;
level notify( "doubleTap", var_0 );
}
wait 0.05;
}
}
doubletapthink()
{
self endon( "death" );
self endon( "capture" );
self endon( "restarting_physics" );
var_0 = 16384;
if ( self.doubletapcount > 0 )
wait 1.0;
for (;;)
{
level waittill( "doubleTap", var_1 );
if ( maps\mp\gametypes\_horde_util::isplayerinlaststand( var_1 ) )
continue;
if ( !maps\mp\_utility::isreallyalive( var_1 ) )
continue;
if ( isdefined( self.inuse ) && self.inuse )
continue;
if ( distance2dsquared( var_1.origin, self.origin ) < var_0 )
{
self notify( "doubleTap" );
newrandomcrate();
break;
}
}
}
newrandomcrate()
{
self.doubletapcount++;
playsoundatpos( self.origin, "mp_killconfirm_tags_drop" );
if ( self.doubletapcount > 1 )
var_0 = "ammo";
else
{
var_1 = level.cratetypes[self.droptype][self.cratetype].raw_weight;
maps\mp\killstreaks\_airdrop::changecrateweight( self.droptype, self.cratetype, 0 );
var_0 = getrandomcratetypehorde( self.droptype );
maps\mp\killstreaks\_airdrop::changecrateweight( self.droptype, self.cratetype, var_1 );
}
self.cratetype = var_0;
self thread [[ level.cratetypes[self.droptype][self.cratetype].func ]]( self.droptype );
}
runlootdrop()
{
var_0 = "loot";
var_1 = 8;
var_2 = randomint( level.cratetypes["loot"].size );
var_3 = ( 0, 0, 75 );
if ( !level.carepackages.size )
maps\mp\gametypes\horde::sortdroplocations();
for ( var_4 = 0; var_4 < var_1; var_4++ )
{
var_5 = level.hordedroplocations[level.droplocationindex];
var_6 = getfinaldroplocation( var_5.tracelocation );
if ( !isdefined( var_6 ) )
{
level.droplocationindex = maps\mp\gametypes\horde::getnextdroplocationindex( level.droplocationindex );
continue;
}
var_7 = var_6;
var_8 = getcratetypeforlootdrop( var_2 + var_4 );
var_9 = level.players[0] maps\mp\killstreaks\_airdrop::createairdropcrate( level.players[0], var_0, var_8, var_7 + var_3, var_7, 3 );
var_9.angles = ( 0, 0, 0 );
var_9.droppingtoground = 1;
var_9.friendlymodel hide();
wait 0.05;
var_9 thread maps\mp\killstreaks\_airdrop::waitfordropcratemsg( var_9, ( randomint( 25 ), randomint( 25 ), randomint( 25 ) ), var_0, var_8, 800, 1 );
level thread removeatroundend( var_9 );
level.droplocationindex = maps\mp\gametypes\horde::getnextdroplocationindex( level.droplocationindex );
wait 0.05;
playfx( level._effect["crate_teleport"], var_9.origin, ( 0, 0, 1 ) );
playsoundatpos( var_9.origin, "crate_teleport_safeguard" );
var_9.friendlymodel show();
}
}
lootcrateeffect( var_0 )
{
var_0 waittill( "physics_finished" );
var_1 = spawnfx( level._effect["loot_crtae"], var_0.origin - ( 0, 0, 16 ) );
triggerfx( var_1 );
var_0 common_scripts\utility::waittill_any_timeout_no_endon_death( level.specialroundtime, "death" );
var_1 delete();
}
getfinaldroplocation( var_0 )
{
if ( !isplayernearlocation( var_0 ) )
return var_0;
var_1 = getnodesinradiussorted( var_0, 256, 64, 128, "Path" );
foreach ( var_3 in var_1 )
{
if ( !isplayernearlocation( var_3.origin ) )
return var_3.origin;
}
return undefined;
}
isplayernearlocation( var_0 )
{
var_1 = 0;
foreach ( var_3 in level.participants )
{
var_4 = distance2dsquared( var_3.origin, var_0 );
if ( var_4 < 4096 )
{
var_1 = 1;
break;
}
}
return var_1;
}
getcratetypeforlootdrop( var_0 )
{
while ( var_0 >= level.cratetypes["loot"].size )
var_0 = var_0 - level.cratetypes["loot"].size;
var_1 = getarraykeys( level.cratetypes["loot"] );
var_2 = level.cratetypes["loot"][var_1[var_0]].type;
return var_2;
}
removeonnextairdrop( var_0 )
{
var_0 endon( "death" );
var_0 endon( "doubleTap" );
var_0 endon( "restarting_physics" );
level waittill( "airSupport" );
while ( isdefined( var_0.inuse ) && var_0.inuse )
common_scripts\utility::waitframe();
var_0 maps\mp\killstreaks\_airdrop::deletecrate();
}
removeatroundend( var_0 )
{
var_0 endon( "death" );
level waittill( "round_ended" );
while ( isdefined( var_0.inuse ) && var_0.inuse )
common_scripts\utility::waitframe();
var_0 maps\mp\killstreaks\_airdrop::deletecrate();
}
getrandomcratetypehorde( var_0 )
{
var_1 = getnumpowerweapons();
var_2 = randomint( level.cratemaxval[var_0] );
var_3 = undefined;
foreach ( var_5 in level.cratetypes[var_0] )
{
var_6 = var_5.type;
if ( !level.cratetypes[var_0][var_6].weight )
continue;
if ( !canpickcrate( var_6, var_1 ) )
continue;
var_3 = var_6;
if ( level.cratetypes[var_0][var_6].weight > var_2 )
break;
}
return var_3;
}
getnumpowerweapons()
{
var_0 = 0;
foreach ( var_2 in level.players )
{
if ( !maps\mp\gametypes\_horde_util::isonhumanteam( var_2 ) )
continue;
if ( var_2 hasweapon( "iw6_magnumhorde_mp_fmj" ) )
var_0++;
if ( var_2 maps\mp\_utility::_hasperk( "specialty_triggerhappy" ) )
var_0++;
}
var_4 = getentarray( "care_package", "targetname" );
foreach ( var_6 in var_4 )
{
if ( var_6.cratetype == "iw6_magnumhorde_mp_fmj" )
var_0++;
if ( var_6.cratetype == "specialty_triggerhappy" )
var_0++;
}
return var_0;
}
ispowerweapon( var_0 )
{
return var_0 == "iw6_magnumhorde_mp_fmj" || var_0 == "specialty_triggerhappy";
}
canpickcrate( var_0, var_1 )
{
if ( ispowerweapon( var_0 ) && var_1 >= 2 )
return 0;
return 1;
}
setcratelook( var_0, var_1, var_2 )
{
var_0.friendlymodel hudoutlineenable( var_1, 0 );
var_0.outlinecolor = var_1;
foreach ( var_4 in var_0.entityheadicons )
var_4.color = var_2;
}
setcratelooksbasedontap( var_0 )
{
if ( var_0.doubletapcount == 0 )
setcratelook( var_0, 2, ( 0.431, 0.745, 0.235 ) );
else
setcratelook( var_0, 5, ( 0.804, 0.804, 0.035 ) );
}

View File

@ -0,0 +1,394 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
callback_playerlaststandhorde( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
registerlaststandparameter( var_0, var_1, var_2, var_3, var_4, var_5, var_6 );
if ( gameshouldend( self ) )
{
self.uselaststandparams = 1;
maps\mp\_utility::_suicide();
hordeendgame();
return;
}
if ( !maydolaststandhorde( self ) )
{
self.uselaststandparams = 1;
maps\mp\_utility::_suicide();
return;
}
self.inlaststand = 1;
self.laststand = 1;
self.ignoreme = 1;
self.health = 1;
self hudoutlineenable( 1, 0 );
common_scripts\utility::_disableusability();
thread laststandrevivehorde();
}
gameshouldend( var_0 )
{
var_1 = 0;
foreach ( var_3 in level.participants )
{
if ( var_0 == var_3 && !maps\mp\gametypes\_horde_util::hasagentsquadmember( var_0 ) )
continue;
if ( !maps\mp\gametypes\_horde_util::isonhumanteam( var_3 ) )
continue;
if ( maps\mp\gametypes\_horde_util::isplayerinlaststand( var_3 ) && !maps\mp\gametypes\_horde_util::hasagentsquadmember( var_3 ) )
continue;
if ( !isdefined( var_3.sessionstate ) || var_3.sessionstate != "playing" )
continue;
var_1 = 1;
break;
}
return !var_1;
}
hordeendgame()
{
level.finalkillcam_winner = level.enemyteam;
level thread maps\mp\gametypes\_gamelogic::endgame( level.enemyteam, game["end_reason"][level.playerteam + "_eliminated"] );
}
maydolaststandhorde( var_0 )
{
if ( var_0 maps\mp\_utility::touchingbadtrigger() )
return 0;
return 1;
}
registerlaststandparameter( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
{
var_7 = spawnstruct();
var_7.einflictor = var_0;
var_7.attacker = var_1;
var_7.idamage = var_2;
var_7.attackerposition = var_1.origin;
var_7.smeansofdeath = var_3;
var_7.sweapon = var_4;
var_7.vdir = var_5;
var_7.shitloc = var_6;
var_7.laststandstarttime = gettime();
if ( isdefined( var_1 ) && isplayer( var_1 ) && var_1 getcurrentprimaryweapon() != "none" )
var_7.sprimaryweapon = var_1 getcurrentprimaryweapon();
else
var_7.sprimaryweapon = undefined;
self.laststandparams = var_7;
}
laststandrevivehorde()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "revive" );
level endon( "game_ended" );
level notify( "player_last_stand" );
self notify( "force_cancel_placement" );
level thread maps\mp\gametypes\_horde_util::playsoundtoallplayers( "mp_safe_team_last_stand" );
level thread maps\mp\_utility::leaderdialog( "ally_down", level.playerteam, "status" );
level thread perkpenalty( self );
thread laststandwaittilldeathhorde();
thread laststandammowacher();
thread laststandkeepoverlayhorde();
var_0 = spawn( "script_model", self.origin );
var_0 setmodel( "tag_origin" );
var_0 setcursorhint( "HINT_NOICON" );
var_0 sethintstring( &"PLATFORM_REVIVE" );
var_0 makeusable();
var_0.inuse = 0;
var_0.curprogress = 0;
var_0.usetime = level.laststandusetime;
var_0.userate = 1;
var_0.id = "last_stand";
var_0.targetname = "revive_trigger";
var_0.owner = self;
var_0 linkto( self, "tag_origin", ( 0, 0, 20 ), ( 0, 0, 0 ) );
var_0 thread maps\mp\gametypes\_damage::deleteonreviveordeathordisconnect();
var_1 = newteamhudelem( self.team );
var_1 setshader( "waypoint_revive", 8, 8 );
var_1 setwaypoint( 1, 1 );
var_1 settargetent( self );
var_1.color = ( 0.33, 0.75, 0.24 );
var_1 thread maps\mp\gametypes\_damage::destroyonreviveentdeath( var_0 );
thread laststandupdatereviveiconcolorhorde( var_0, var_1, 25 );
thread laststandtimerhorde( 25, var_0 );
var_0 thread revivetriggerthinkhorde();
var_0 thread laststandwaittillliferecived();
var_0 endon( "death" );
wait 25;
while ( isdefined( var_0.inuse ) && var_0.inuse )
common_scripts\utility::waitframe();
level thread maps\mp\_utility::leaderdialog( "ally_dead", level.playerteam, "status" );
self hudoutlinedisable();
maps\mp\_utility::_suicide();
}
revivetriggerthinkhorde()
{
self endon( "death" );
level endon( "game_ended" );
for (;;)
{
self makeusable();
self waittill( "trigger", var_0 );
self makeunusable();
self.curprogress = 0;
self.inuse = 1;
self.owner.beingrevived = 1;
var_0 freezecontrols( 1 );
var_0 common_scripts\utility::_disableweapon();
var_0.isreviving = 1;
var_1 = maps\mp\gametypes\_damage::useholdthinkloop( var_0 );
self.inuse = 0;
if ( isdefined( self.owner ) )
self.owner.beingrevived = 0;
if ( isdefined( var_0 ) && maps\mp\_utility::isreallyalive( var_0 ) )
{
var_0 freezecontrols( 0 );
var_0 common_scripts\utility::_enableweapon();
var_0.isreviving = 0;
if ( isdefined( var_1 ) && var_1 )
{
var_0 thread maps\mp\gametypes\_hud_message::splashnotifydelayed( "horde_reviver" );
var_0 thread maps\mp\perks\_perkfunctions::setlightarmor( 850 );
if ( isplayer( var_0 ) )
maps\mp\gametypes\_horde_util::awardhorderevive( var_0 );
else if ( isdefined( var_0.owner ) && isplayer( var_0.owner ) && var_0.owner != self.owner )
maps\mp\gametypes\_horde_util::awardhorderevive( var_0.owner );
}
if ( !isdefined( var_1 ) )
var_0 maps\mp\gametypes\_gameobjects::updateuiprogress( self, 0 );
}
if ( isdefined( var_1 ) && var_1 )
{
self.owner notify( "revive_trigger", var_0 );
break;
}
}
}
laststandwaittillliferecived()
{
self endon( "death" );
self endon( "game_ended" );
var_0 = self.owner;
var_0 waittill( "revive_trigger", var_1 );
if ( isdefined( var_1 ) && isplayer( var_1 ) && var_1 != var_0 )
var_0 thread maps\mp\gametypes\_hud_message::playercardsplashnotify( "revived", var_1 );
var_0 laststandrespawnplayerhorde( self );
}
laststandrespawnplayerhorde( var_0 )
{
self notify( "revive" );
self.laststand = undefined;
self.inlaststand = 0;
self.headicon = "";
self.health = self.maxhealth;
self.movespeedscaler = 1;
self.ignoreme = 0;
self.beingrevived = 0;
if ( maps\mp\_utility::_hasperk( "specialty_lightweight" ) )
self.movespeedscaler = maps\mp\_utility::lightweightscalar();
self hudoutlinedisable();
self laststandrevive();
self setstance( "crouch" );
common_scripts\utility::_enableusability();
maps\mp\gametypes\_weapons::updatemovespeedscale();
maps\mp\_utility::clearlowermessage( "last_stand" );
maps\mp\_utility::giveperk( "specialty_pistoldeath", 0 );
if ( !canspawn( self.origin ) )
maps\mp\_movers::unresolved_collision_nearest_node( self, 0 );
var_0 delete();
}
laststandwaittilldeathhorde()
{
self endon( "disconnect" );
self endon( "revive" );
level endon( "game_ended" );
self waittill( "death" );
self.laststand = undefined;
self.inlaststand = 0;
self.ignoreme = 0;
}
laststandkeepoverlayhorde()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "revive" );
level endon( "game_ended" );
for (;;)
{
self.health = 2;
common_scripts\utility::waitframe();
self.health = 1;
common_scripts\utility::waitframe();
}
}
laststandupdatereviveiconcolorhorde( var_0, var_1, var_2 )
{
self endon( "death" );
self endon( "disconnect" );
self endon( "revive" );
level endon( "game_ended" );
var_0 endon( "death" );
maps\mp\_utility::playdeathsound();
wait( var_2 / 3 );
var_1.color = ( 1, 0.64, 0 );
while ( var_0.inuse )
wait 0.05;
maps\mp\_utility::playdeathsound();
wait( var_2 / 3 );
var_1.color = ( 1, 0, 0 );
while ( var_0.inuse )
wait 0.05;
maps\mp\_utility::playdeathsound();
}
laststandtimerhorde( var_0, var_1 )
{
self endon( "disconnect" );
var_2 = 90;
if ( !issplitscreen() )
var_2 = 135;
var_3 = maps\mp\gametypes\_hud_util::createtimer( "hudsmall", 1.0 );
var_3 maps\mp\gametypes\_hud_util::setpoint( "CENTER", undefined, 0, var_2 );
var_3.label = &"MP_HORDE_BLEED_OUT";
var_3.color = ( 0.804, 0.804, 0.035 );
var_3.archived = 0;
var_3.showinkillcam = 0;
var_3 settimer( var_0 - 1 );
var_1 waittill( "death" );
if ( !isdefined( var_3 ) )
return;
var_3 notify( "destroying" );
var_3 maps\mp\gametypes\_hud_util::destroyelem();
}
laststandammowacher()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "revive" );
level endon( "game_ended" );
for (;;)
{
wait 1.5;
var_0 = self getcurrentprimaryweapon();
if ( !maps\mp\gametypes\_weapons::isprimaryweapon( var_0 ) )
continue;
var_1 = self getweaponammostock( var_0 );
var_2 = weaponclipsize( var_0 );
if ( var_1 < var_2 )
self setweaponammostock( var_0, var_2 );
}
}
perkpenalty( var_0 )
{
var_0 endon( "disconnect" );
level endon( "game_ended" );
if ( !isplayer( var_0 ) )
return;
while ( maps\mp\gametypes\_horde_util::isplayerinlaststand( var_0 ) && var_0.horde_perks.size > 0 )
{
var_1 = var_0.horde_perks[var_0.horde_perks.size - 1]["name"];
var_2 = var_0.horde_perks[var_0.horde_perks.size - 1]["index"];
var_0 thread flashperk( var_2 );
var_3 = var_0 common_scripts\utility::waittill_any_return_no_endon_death( "remove_perk", "death", "revive" );
if ( var_3 == "death" )
return;
if ( var_3 == "revive" )
{
if ( isdefined( var_0.flashingperkindex ) )
{
if ( var_0.flashingperkindex == var_2 )
{
var_0 setclientomnvar( "ui_horde_update_perk", var_2 );
var_0.flashingperkindex = undefined;
}
}
return;
}
if ( var_3 == "remove_perk" )
{
var_0 setclientomnvar( "ui_horde_update_perk", var_2 * -1 );
var_0 maps\mp\_utility::_unsetperk( var_1 );
var_0.horde_perks = array_remove_perk( var_0.horde_perks, var_1 );
}
}
}
array_remove_perk( var_0, var_1 )
{
var_2 = [];
foreach ( var_4 in var_0 )
{
if ( var_4["name"] != var_1 )
var_2[var_2.size] = var_4;
}
return var_2;
}
flashperk( var_0 )
{
self endon( "death" );
self endon( "revive" );
wait 0.5;
self setclientomnvar( "ui_horde_update_perk", var_0 );
self.flashingperkindex = var_0;
wait 8;
self notify( "remove_perk" );
}

View File

@ -0,0 +1,159 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
isplayerinlaststand( var_0 )
{
return isdefined( var_0.laststand ) && var_0.laststand;
}
isonhumanteam( var_0 )
{
return var_0.team == level.playerteam;
}
getnumplayers()
{
var_0 = 0;
if ( !isdefined( level.players ) )
return 0;
foreach ( var_2 in level.players )
{
if ( isonhumanteam( var_2 ) )
var_0++;
}
return var_0;
}
isspecialround( var_0 )
{
if ( !isdefined( var_0 ) )
var_0 = level.currentroundnumber;
if ( !level.enablespecialround )
return 0;
if ( var_0 % 5 == 1 )
return 1;
return 0;
}
isdoground()
{
return level.chancetospawndog > 0;
}
showteamsplashhorde( var_0 )
{
foreach ( var_2 in level.players )
{
if ( isonhumanteam( var_2 ) && maps\mp\_utility::isreallyalive( var_2 ) )
var_2 thread maps\mp\gametypes\_hud_message::splashnotify( var_0 );
}
}
hasagentsquadmember( var_0 )
{
var_1 = 0;
if ( isagent( var_0 ) )
return var_1;
foreach ( var_3 in var_0.pers["killstreaks"] )
{
if ( isdefined( var_3 ) && isdefined( var_3.streakname ) && var_3.available && var_3.streakname == "agent" )
{
var_1 = 1;
break;
}
}
return var_1;
}
getplayerweaponhorde( var_0 )
{
var_1 = var_0 getcurrentprimaryweapon();
if ( isdefined( var_0.changingweapon ) )
var_1 = var_0.changingweapon;
if ( !maps\mp\gametypes\_weapons::isprimaryweapon( var_1 ) )
var_1 = var_0 common_scripts\utility::getlastweapon();
if ( !var_0 hasweapon( var_1 ) )
var_1 = var_0 maps\mp\killstreaks\_killstreaks::getfirstprimaryweapon();
return var_1;
}
playsoundtoallplayers( var_0 )
{
level endon( "game_ended" );
foreach ( var_2 in level.players )
{
if ( !maps\mp\_utility::isreallyalive( var_2 ) )
continue;
if ( !isonhumanteam( var_2 ) )
continue;
var_2 playsoundtoplayer( var_0, var_2 );
}
}
refillammohorde( var_0 )
{
var_1 = var_0 getweaponslistall();
foreach ( var_3 in var_1 )
{
var_0 givemaxammo( var_3 );
if ( var_3 == level.intelminigun )
{
var_4 = weaponclipsize( level.intelminigun );
var_0 setweaponammoclip( level.intelminigun, var_4 );
}
}
}
awardhordekill( var_0 )
{
var_0 maps\mp\gametypes\_persistence::statsetchild( "round", "squardKills", var_0.killz + 1 );
var_0.killz = int( min( var_0.killz + 1, 999 ) );
var_0.kills = var_0.killz;
var_0 maps\mp\_utility::setpersstat( "hordeKills", var_0.killz );
}
awardhorderevive( var_0 )
{
var_0 maps\mp\gametypes\_persistence::statsetchild( "round", "squardRevives", var_0.numrevives + 1 );
var_0.numrevives = int( min( var_0.numrevives + 1, 999 ) );
var_0.assists = var_0.numrevives;
var_0 maps\mp\_utility::setpersstat( "hordeRevives", var_0.numrevives );
}
awardhordecrateused( var_0 )
{
var_0 maps\mp\gametypes\_persistence::statsetchild( "round", "squardCrates", var_0.numcrtaescaptured + 1 );
var_0.numcrtaescaptured = int( min( var_0.numcrtaescaptured + 1, 999 ) );
var_0 maps\mp\_utility::setextrascore0( var_0.numcrtaescaptured );
var_0 maps\mp\_utility::setpersstat( "hordeCrates", var_0.numcrtaescaptured );
}
awardhorderoundnumber( var_0, var_1 )
{
var_0 maps\mp\gametypes\_persistence::statsetchild( "round", "sguardWave", var_1 );
var_0 maps\mp\_utility::setpersstat( "hordeRound", var_1 );
}
awardhordweaponlevel( var_0, var_1 )
{
var_0 maps\mp\gametypes\_persistence::statsetchild( "round", "sguardWeaponLevel", var_1 );
var_0 maps\mp\_utility::setpersstat( "hordeWeapon", var_1 );
}

View File

@ -0,0 +1,216 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
callback_hostmigration()
{
if ( maps\mp\_utility::is_aliens() )
setnojiptime( 1 );
level.hostmigrationreturnedplayercount = 0;
if ( level.gameended )
return;
foreach ( var_1 in level.characters )
var_1.hostmigrationcontrolsfrozen = 0;
level.hostmigrationtimer = 1;
setdvar( "ui_inhostmigration", 1 );
level notify( "host_migration_begin" );
maps\mp\gametypes\_gamelogic::updatetimerpausedness();
foreach ( var_1 in level.characters )
{
var_1 thread hostmigrationtimerthink();
if ( isplayer( var_1 ) )
var_1 setclientomnvar( "ui_session_state", var_1.sessionstate );
}
setdvar( "ui_game_state", game["state"] );
level endon( "host_migration_begin" );
hostmigrationwait();
level.hostmigrationtimer = undefined;
setdvar( "ui_inhostmigration", 0 );
level notify( "host_migration_end" );
maps\mp\gametypes\_gamelogic::updatetimerpausedness();
level thread maps\mp\gametypes\_gamelogic::updategameevents();
if ( getdvar( "squad_use_hosts_squad" ) == "1" )
level thread maps\mp\gametypes\_menus::update_wargame_after_migration();
}
hostmigrationwait()
{
level endon( "game_ended" );
level.ingraceperiod = 25;
thread maps\mp\gametypes\_gamelogic::matchstarttimer( "waiting_for_players", 20.0 );
hostmigrationwaitforplayers();
level.ingraceperiod = 10;
thread maps\mp\gametypes\_gamelogic::matchstarttimer( "match_resuming_in", 5.0 );
wait 5;
level.ingraceperiod = 0;
}
hostmigrationwaitforplayers()
{
level endon( "hostmigration_enoughplayers" );
wait 15;
}
hostmigrationname( var_0 )
{
if ( !isdefined( var_0 ) )
return "<removed_ent>";
var_1 = -1;
var_2 = "?";
if ( isdefined( var_0.entity_number ) )
var_1 = var_0.entity_number;
if ( isplayer( var_0 ) && isdefined( var_0.name ) )
var_2 = var_0.name;
if ( isplayer( var_0 ) )
return "player <" + var_2 + ">";
if ( isagent( var_0 ) && maps\mp\_utility::isgameparticipant( var_0 ) )
return "participant agent <" + var_1 + ">";
if ( isagent( var_0 ) )
return "non-participant agent <" + var_1 + ">";
return "unknown entity <" + var_1 + ">";
}
hostmigrationtimerthink_internal()
{
level endon( "host_migration_begin" );
level endon( "host_migration_end" );
while ( !maps\mp\_utility::isreallyalive( self ) )
self waittill( "spawned" );
self.hostmigrationcontrolsfrozen = 1;
maps\mp\_utility::freezecontrolswrapper( 1 );
level waittill( "host_migration_end" );
}
hostmigrationtimerthink()
{
self endon( "disconnect" );
if ( isplayer( self ) )
self setclientdvar( "cg_scoreboardPingGraph", "0" );
hostmigrationtimerthink_internal();
if ( self.hostmigrationcontrolsfrozen )
{
if ( maps\mp\_utility::gameflag( "prematch_done" ) )
maps\mp\_utility::freezecontrolswrapper( 0 );
self.hostmigrationcontrolsfrozen = undefined;
}
if ( isplayer( self ) )
self setclientdvar( "cg_scoreboardPingGraph", "1" );
}
waittillhostmigrationdone()
{
if ( !isdefined( level.hostmigrationtimer ) )
return 0;
var_0 = gettime();
level waittill( "host_migration_end" );
return gettime() - var_0;
}
waittillhostmigrationstarts( var_0 )
{
if ( isdefined( level.hostmigrationtimer ) )
return;
level endon( "host_migration_begin" );
wait( var_0 );
}
waitlongdurationwithhostmigrationpause( var_0 )
{
if ( var_0 == 0 )
return;
var_1 = gettime();
var_2 = gettime() + var_0 * 1000;
while ( gettime() < var_2 )
{
waittillhostmigrationstarts( ( var_2 - gettime() ) / 1000 );
if ( isdefined( level.hostmigrationtimer ) )
{
var_3 = waittillhostmigrationdone();
var_2 = var_2 + var_3;
}
}
waittillhostmigrationdone();
return gettime() - var_1;
}
waittill_notify_or_timeout_hostmigration_pause( var_0, var_1 )
{
self endon( var_0 );
if ( var_1 == 0 )
return;
var_2 = gettime();
var_3 = gettime() + var_1 * 1000;
while ( gettime() < var_3 )
{
waittillhostmigrationstarts( ( var_3 - gettime() ) / 1000 );
if ( isdefined( level.hostmigrationtimer ) )
{
var_4 = waittillhostmigrationdone();
var_3 = var_3 + var_4;
}
}
waittillhostmigrationdone();
return gettime() - var_2;
}
waitlongdurationwithgameendtimeupdate( var_0 )
{
if ( var_0 == 0 )
return;
var_1 = gettime();
var_2 = gettime() + var_0 * 1000;
while ( gettime() < var_2 )
{
waittillhostmigrationstarts( ( var_2 - gettime() ) / 1000 );
while ( isdefined( level.hostmigrationtimer ) )
{
var_2 = var_2 + 1000;
setgameendtime( int( var_2 ) );
wait 1;
}
}
while ( isdefined( level.hostmigrationtimer ) )
{
var_2 = var_2 + 1000;
setgameendtime( int( var_2 ) );
wait 1;
}
return gettime() - var_1;
}

View File

@ -0,0 +1,62 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
level.uiparent = spawnstruct();
level.uiparent.horzalign = "left";
level.uiparent.vertalign = "top";
level.uiparent.alignx = "left";
level.uiparent.aligny = "top";
level.uiparent.x = 0;
level.uiparent.y = 0;
level.uiparent.width = 0;
level.uiparent.height = 0;
level.uiparent.children = [];
level.fontheight = 12;
level.hud["allies"] = spawnstruct();
level.hud["axis"] = spawnstruct();
level.primaryprogressbary = -61;
level.primaryprogressbarx = 0;
level.primaryprogressbarheight = 9;
level.primaryprogressbarwidth = 120;
level.primaryprogressbartexty = -75;
level.primaryprogressbartextx = 0;
level.primaryprogressbarfontsize = 1.2;
level.teamprogressbary = 32;
level.teamprogressbarheight = 14;
level.teamprogressbarwidth = 192;
level.teamprogressbartexty = 8;
level.teamprogressbarfontsize = 1.65;
level.lowertextyalign = "BOTTOM";
level.lowertexty = -140;
level.lowertextfontsize = 1.6;
}
fontpulseinit( var_0 )
{
self.basefontscale = self.fontscale;
if ( isdefined( var_0 ) )
self.maxfontscale = min( var_0, 6.3 );
else
self.maxfontscale = min( self.fontscale * 2, 6.3 );
self.inframes = 2;
self.outframes = 4;
}
fontpulse( var_0 )
{
self notify( "fontPulse" );
self endon( "fontPulse" );
self endon( "death" );
var_0 endon( "disconnect" );
var_0 endon( "joined_team" );
var_0 endon( "joined_spectators" );
self changefontscaleovertime( self.inframes * 0.05 );
self.fontscale = self.maxfontscale;
wait( self.inframes * 0.05 );
self changefontscaleovertime( self.outframes * 0.05 );
self.fontscale = self.basefontscale;
}

View File

@ -0,0 +1,971 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
game["round_end"]["draw"] = 1;
game["round_end"]["round_draw"] = 2;
game["round_end"]["round_win"] = 3;
game["round_end"]["round_loss"] = 4;
game["round_end"]["victory"] = 5;
game["round_end"]["defeat"] = 6;
game["round_end"]["halftime"] = 7;
game["round_end"]["overtime"] = 8;
game["round_end"]["roundend"] = 9;
game["round_end"]["intermission"] = 10;
game["round_end"]["side_switch"] = 11;
game["round_end"]["match_bonus"] = 12;
game["round_end"]["tie"] = 13;
game["round_end"]["spectator"] = 14;
game["end_reason"]["score_limit_reached"] = 1;
game["end_reason"]["time_limit_reached"] = 2;
game["end_reason"]["players_forfeited"] = 3;
game["end_reason"]["target_destroyed"] = 4;
game["end_reason"]["bomb_defused"] = 5;
game["end_reason"]["allies_eliminated"] = 6;
game["end_reason"]["axis_eliminated"] = 7;
game["end_reason"]["allies_forfeited"] = 8;
game["end_reason"]["axis_forfeited"] = 9;
game["end_reason"]["enemies_eliminated"] = 10;
game["end_reason"]["tie"] = 11;
game["end_reason"]["objective_completed"] = 12;
game["end_reason"]["objective_failed"] = 13;
game["end_reason"]["switching_sides"] = 14;
game["end_reason"]["round_limit_reached"] = 15;
game["end_reason"]["ended_game"] = 16;
game["end_reason"]["host_ended_game"] = 17;
game["strings"]["overtime"] = &"MP_OVERTIME";
level thread onplayerconnect();
}
onplayerconnect()
{
for (;;)
{
level waittill( "connected", var_0 );
var_0 thread hintmessagedeaththink();
var_0 thread lowermessagethink();
var_0 thread initnotifymessage();
}
}
hintmessage( var_0 )
{
var_1 = spawnstruct();
var_1.notifytext = var_0;
var_1.glowcolor = game["colors"]["cyan"];
notifymessage( var_1 );
}
initnotifymessage()
{
if ( level.splitscreen || self issplitscreenplayer() )
{
var_0 = 1.5;
var_1 = 1.25;
var_2 = 24;
var_3 = "default";
var_4 = "TOP";
var_5 = "BOTTOM";
var_6 = 0;
var_7 = 0;
}
else
{
var_0 = 2.5;
var_1 = 1.75;
var_2 = 30;
var_3 = "objective";
var_4 = "TOP";
var_5 = "BOTTOM";
var_6 = 50;
var_7 = 0;
}
self.notifytitle = maps\mp\gametypes\_hud_util::createfontstring( var_3, var_0 );
self.notifytitle maps\mp\gametypes\_hud_util::setpoint( var_4, undefined, var_7, var_6 );
self.notifytitle.glowcolor = game["colors"]["blue"];
self.notifytitle.glowalpha = 1;
self.notifytitle.hidewheninmenu = 1;
self.notifytitle.archived = 0;
self.notifytitle.alpha = 0;
self.notifytext = maps\mp\gametypes\_hud_util::createfontstring( var_3, var_1 );
self.notifytext maps\mp\gametypes\_hud_util::setparent( self.notifytitle );
self.notifytext maps\mp\gametypes\_hud_util::setpoint( var_4, var_5, 0, 0 );
self.notifytext.glowcolor = game["colors"]["blue"];
self.notifytext.glowalpha = 1;
self.notifytext.hidewheninmenu = 1;
self.notifytext.archived = 0;
self.notifytext.alpha = 0;
self.notifytext2 = maps\mp\gametypes\_hud_util::createfontstring( var_3, var_1 );
self.notifytext2 maps\mp\gametypes\_hud_util::setparent( self.notifytitle );
self.notifytext2 maps\mp\gametypes\_hud_util::setpoint( var_4, var_5, 0, 0 );
self.notifytext2.glowcolor = game["colors"]["blue"];
self.notifytext2.glowalpha = 1;
self.notifytext2.hidewheninmenu = 1;
self.notifytext2.archived = 0;
self.notifytext2.alpha = 0;
self.notifyicon = maps\mp\gametypes\_hud_util::createicon( "white", var_2, var_2 );
self.notifyicon maps\mp\gametypes\_hud_util::setparent( self.notifytext2 );
self.notifyicon maps\mp\gametypes\_hud_util::setpoint( var_4, var_5, 0, 0 );
self.notifyicon.hidewheninmenu = 1;
self.notifyicon.archived = 0;
self.notifyicon.alpha = 0;
self.notifyoverlay = maps\mp\gametypes\_hud_util::createicon( "white", var_2, var_2 );
self.notifyoverlay maps\mp\gametypes\_hud_util::setparent( self.notifyicon );
self.notifyoverlay maps\mp\gametypes\_hud_util::setpoint( "CENTER", "CENTER", 0, 0 );
self.notifyoverlay.hidewheninmenu = 1;
self.notifyoverlay.archived = 0;
self.notifyoverlay.alpha = 0;
self.doingsplash = [];
self.doingsplash[0] = undefined;
self.doingsplash[1] = undefined;
self.doingsplash[2] = undefined;
self.doingsplash[3] = undefined;
self.splashqueue = [];
self.splashqueue[0] = [];
self.splashqueue[1] = [];
self.splashqueue[2] = [];
self.splashqueue[3] = [];
}
oldnotifymessage( var_0, var_1, var_2, var_3, var_4, var_5 )
{
var_6 = spawnstruct();
var_6.titletext = var_0;
var_6.notifytext = var_1;
var_6.iconname = var_2;
var_6.glowcolor = var_3;
var_6.sound = var_4;
var_6.duration = var_5;
notifymessage( var_6 );
}
notifymessage( var_0 )
{
self endon( "death" );
self endon( "disconnect" );
if ( !isdefined( var_0.slot ) )
var_0.slot = 0;
var_1 = var_0.slot;
if ( !isdefined( var_0.type ) )
var_0.type = "";
if ( !isdefined( self.doingsplash[var_1] ) )
{
thread shownotifymessage( var_0 );
return;
}
self.splashqueue[var_1][self.splashqueue[var_1].size] = var_0;
}
dispatchnotify( var_0 )
{
var_1 = self.splashqueue[var_0][0];
for ( var_2 = 1; var_2 < self.splashqueue[var_0].size; var_2++ )
self.splashqueue[var_0][var_2 - 1] = self.splashqueue[var_0][var_2];
self.splashqueue[var_0][var_2 - 1] = undefined;
if ( isdefined( var_1.name ) )
actionnotify( var_1 );
else
shownotifymessage( var_1 );
}
promotionsplashnotify()
{
if ( !isplayer( self ) )
return;
self endon( "disconnect" );
var_0 = spawnstruct();
var_1 = "promotion";
var_0.name = var_1;
var_0.type = tablelookup( get_table_name(), 0, var_1, 11 );
var_0.sound = tablelookup( get_table_name(), 0, var_1, 9 );
var_0.slot = 0;
thread actionnotify( var_0 );
}
weaponpromotionsplashnotify()
{
if ( !isplayer( self ) )
return;
self endon( "disconnect" );
var_0 = spawnstruct();
var_1 = "promotion_weapon";
var_0.name = var_1;
var_0.type = tablelookup( get_table_name(), 0, var_1, 11 );
var_0.sound = tablelookup( get_table_name(), 0, var_1, 9 );
var_0.slot = 0;
thread actionnotify( var_0 );
}
shownotifymessage( var_0 )
{
self endon( "disconnect" );
var_1 = var_0.slot;
if ( level.gameended )
{
if ( isdefined( var_0.type ) && var_0.type == "rank" )
{
self setclientdvar( "ui_promotion", 1 );
self.postgamepromotion = 1;
}
if ( self.splashqueue[var_1].size )
thread dispatchnotify( var_1 );
return;
}
self.doingsplash[var_1] = var_0;
waitrequirevisibility( 0 );
if ( isdefined( var_0.duration ) )
var_2 = var_0.duration;
else if ( level.gameended )
var_2 = 2.0;
else
var_2 = 4.0;
thread resetoncancel();
if ( isdefined( var_0.sound ) )
self playlocalsound( var_0.sound );
if ( isdefined( var_0.leadersound ) )
maps\mp\_utility::leaderdialogonplayer( var_0.leadersound );
if ( isdefined( var_0.glowcolor ) )
var_3 = var_0.glowcolor;
else
var_3 = game["colors"]["cyan"];
var_4 = self.notifytitle;
if ( isdefined( var_0.titletext ) )
{
if ( isdefined( var_0.titlelabel ) )
self.notifytitle.label = var_0.titlelabel;
else
self.notifytitle.label = &"";
if ( isdefined( var_0.titlelabel ) && !isdefined( var_0.titleisstring ) )
self.notifytitle setvalue( var_0.titletext );
else
self.notifytitle settext( var_0.titletext );
self.notifytitle setpulsefx( int( 25 * var_2 ), int( var_2 * 1000 ), 1000 );
self.notifytitle.glowcolor = var_3;
self.notifytitle.alpha = 1;
}
if ( isdefined( var_0.textglowcolor ) )
var_3 = var_0.textglowcolor;
if ( isdefined( var_0.notifytext ) )
{
if ( isdefined( var_0.textlabel ) )
self.notifytext.label = var_0.textlabel;
else
self.notifytext.label = &"";
if ( isdefined( var_0.textlabel ) && !isdefined( var_0.textisstring ) )
self.notifytext setvalue( var_0.notifytext );
else
self.notifytext settext( var_0.notifytext );
self.notifytext setpulsefx( 100, int( var_2 * 1000 ), 1000 );
self.notifytext.glowcolor = var_3;
self.notifytext.alpha = 1;
var_4 = self.notifytext;
}
if ( isdefined( var_0.notifytext2 ) )
{
self.notifytext2 maps\mp\gametypes\_hud_util::setparent( var_4 );
if ( isdefined( var_0.text2label ) )
self.notifytext2.label = var_0.text2label;
else
self.notifytext2.label = &"";
self.notifytext2 settext( var_0.notifytext2 );
self.notifytext2 setpulsefx( 100, int( var_2 * 1000 ), 1000 );
self.notifytext2.glowcolor = var_3;
self.notifytext2.alpha = 1;
var_4 = self.notifytext2;
}
if ( isdefined( var_0.iconname ) )
{
self.notifyicon maps\mp\gametypes\_hud_util::setparent( var_4 );
if ( level.splitscreen || self issplitscreenplayer() )
self.notifyicon setshader( var_0.iconname, 30, 30 );
else
self.notifyicon setshader( var_0.iconname, 60, 60 );
self.notifyicon.alpha = 0;
if ( isdefined( var_0.iconoverlay ) )
{
self.notifyicon fadeovertime( 0.15 );
self.notifyicon.alpha = 1;
var_0.overlayoffsety = 0;
self.notifyoverlay maps\mp\gametypes\_hud_util::setparent( self.notifyicon );
self.notifyoverlay maps\mp\gametypes\_hud_util::setpoint( "CENTER", "CENTER", 0, var_0.overlayoffsety );
self.notifyoverlay setshader( var_0.iconoverlay, 511, 511 );
self.notifyoverlay.alpha = 0;
self.notifyoverlay.color = game["colors"]["orange"];
self.notifyoverlay fadeovertime( 0.4 );
self.notifyoverlay.alpha = 0.85;
self.notifyoverlay scaleovertime( 0.4, 32, 32 );
waitrequirevisibility( var_2 );
self.notifyicon fadeovertime( 0.75 );
self.notifyicon.alpha = 0;
self.notifyoverlay fadeovertime( 0.75 );
self.notifyoverlay.alpha = 0;
}
else
{
self.notifyicon fadeovertime( 1.0 );
self.notifyicon.alpha = 1;
waitrequirevisibility( var_2 );
self.notifyicon fadeovertime( 0.75 );
self.notifyicon.alpha = 0;
}
}
else
waitrequirevisibility( var_2 );
self notify( "notifyMessageDone" );
self.doingsplash[var_1] = undefined;
if ( self.splashqueue[var_1].size )
thread dispatchnotify( var_1 );
}
killstreaksplashnotify( var_0, var_1, var_2 )
{
if ( !isplayer( self ) )
return;
self endon( "disconnect" );
waittillframeend;
if ( level.gameended )
return;
var_3 = spawnstruct();
if ( isdefined( var_2 ) )
var_0 = var_0 + ( "_" + var_2 );
var_3.name = var_0;
var_3.type = tablelookup( get_table_name(), 0, var_0, 11 );
var_3.optionalnumber = var_1;
var_3.sound = maps\mp\_utility::getkillstreaksound( var_0 );
var_3.leadersound = var_0;
var_3.leadersoundgroup = "killstreak_earned";
var_3.slot = 0;
thread actionnotify( var_3 );
}
defconsplashnotify( var_0, var_1 )
{
}
challengesplashnotify( var_0 )
{
if ( !isplayer( self ) )
return;
self endon( "disconnect" );
waittillframeend;
wait 0.05;
var_1 = maps\mp\gametypes\_hud_util::ch_getstate( var_0 ) - 1;
var_2 = maps\mp\gametypes\_hud_util::ch_gettarget( var_0, var_1 );
if ( var_2 == 0 )
var_2 = 1;
if ( var_0 == "ch_longersprint_pro" || var_0 == "ch_longersprint_pro_daily" || var_0 == "ch_longersprint_pro_weekly" )
var_2 = int( var_2 / 528 );
var_3 = spawnstruct();
var_3.name = var_0;
var_3.type = tablelookup( get_table_name(), 0, var_0, 11 );
var_3.optionalnumber = var_2;
var_3.sound = tablelookup( get_table_name(), 0, var_0, 9 );
var_3.slot = 1;
thread actionnotify( var_3 );
}
splashnotify( var_0, var_1 )
{
if ( !isplayer( self ) )
return;
self endon( "disconnect" );
wait 0.05;
var_2 = spawnstruct();
var_2.name = var_0;
var_2.type = tablelookup( get_table_name(), 0, var_0, 11 );
var_2.optionalnumber = var_1;
var_2.sound = tablelookup( get_table_name(), 0, var_2.name, 9 );
var_2.slot = 0;
thread actionnotify( var_2 );
}
splashnotifyurgent( var_0, var_1 )
{
if ( !isplayer( self ) )
return;
self endon( "disconnect" );
wait 0.05;
var_2 = spawnstruct();
var_2.name = var_0;
var_2.type = tablelookup( get_table_name(), 0, var_0, 11 );
var_2.optionalnumber = var_1;
var_2.sound = tablelookup( get_table_name(), 0, var_0, 9 );
var_2.slot = 0;
thread actionnotify( var_2 );
}
splashnotifydelayed( var_0, var_1 )
{
if ( !isplayer( self ) )
return;
self endon( "disconnect" );
waittillframeend;
if ( level.gameended )
return;
var_2 = spawnstruct();
var_2.name = var_0;
var_2.type = tablelookup( get_table_name(), 0, var_0, 11 );
var_2.optionalnumber = var_1;
var_2.sound = tablelookup( get_table_name(), 0, var_0, 9 );
var_2.slot = 0;
thread actionnotify( var_2 );
}
playercardsplashnotify( var_0, var_1, var_2 )
{
if ( !isplayer( self ) )
return;
self endon( "disconnect" );
waittillframeend;
if ( level.gameended )
return;
var_3 = spawnstruct();
var_3.name = var_0;
var_3.type = tablelookup( get_table_name(), 0, var_0, 11 );
var_3.optionalnumber = var_2;
var_3.sound = tablelookup( get_table_name(), 0, var_0, 9 );
var_3.playercardplayer = var_1;
var_3.slot = 1;
thread actionnotify( var_3 );
}
actionnotify( var_0 )
{
self endon( "death" );
self endon( "disconnect" );
var_1 = var_0.slot;
if ( !isdefined( var_0.type ) )
var_0.type = "";
if ( !isdefined( self.doingsplash[var_1] ) )
{
thread actionnotifymessage( var_0 );
return;
}
else
{
switch ( var_0.type )
{
case "urgent_splash":
case "mp_dig_all_perks_splash":
self.notifytext.alpha = 0;
self.notifytext2.alpha = 0;
self.notifyicon.alpha = 0;
self setclientomnvar( "ui_splash_idx", -1 );
self setclientomnvar( "ui_splash_killstreak_idx", -1 );
self setclientomnvar( "ui_dig_killstreak_show", -1 );
thread actionnotifymessage( var_0 );
return;
case "killstreak_splash":
case "splash":
if ( self.doingsplash[var_1].type != "splash" && self.doingsplash[var_1].type != "urgent_splash" && self.doingsplash[var_1].type != "killstreak_splash" && self.doingsplash[var_1].type != "challenge_splash" && self.doingsplash[var_1].type != "promotion_splash" && self.doingsplash[var_1].type != "intel_splash" )
{
self.notifytext.alpha = 0;
self.notifytext2.alpha = 0;
self.notifyicon.alpha = 0;
thread actionnotifymessage( var_0 );
return;
}
break;
}
}
if ( var_0.type == "challenge_splash" || var_0.type == "killstreak_splash" )
{
if ( var_0.type == "killstreak_splash" )
removetypefromqueue( "killstreak_splash", var_1 );
for ( var_2 = self.splashqueue[var_1].size; var_2 > 0; var_2-- )
self.splashqueue[var_1][var_2] = self.splashqueue[var_1][var_2 - 1];
self.splashqueue[var_1][0] = var_0;
}
else
self.splashqueue[var_1][self.splashqueue[var_1].size] = var_0;
}
removetypefromqueue( var_0, var_1 )
{
var_2 = [];
for ( var_3 = 0; var_3 < self.splashqueue[var_1].size; var_3++ )
{
if ( self.splashqueue[var_1][var_3].type != "killstreak_splash" )
var_2[var_2.size] = self.splashqueue[var_1][var_3];
}
self.splashqueue[var_1] = var_2;
}
actionnotifymessage( var_0 )
{
self endon( "disconnect" );
var_1 = var_0.slot;
if ( level.gameended )
{
if ( isdefined( var_0.type ) && ( var_0.type == "promotion_splash" || var_0.type == "promotion_weapon_splash" ) )
{
self setclientdvar( "ui_promotion", 1 );
self.postgamepromotion = 1;
}
else if ( isdefined( var_0.type ) && var_0.type == "challenge_splash" )
{
self.pers["postGameChallenges"]++;
self setclientdvar( "ui_challenge_" + self.pers["postGameChallenges"] + "_ref", var_0.name );
}
if ( self.splashqueue[var_1].size )
thread dispatchnotify( var_1 );
return;
}
if ( tablelookup( get_table_name(), 0, var_0.name, 0 ) != "" )
{
var_2 = tablelookuprownum( get_table_name(), 0, var_0.name );
var_3 = maps\mp\_utility::stringtofloat( tablelookupbyrow( get_table_name(), var_2, 4 ) );
switch ( var_0.type )
{
case "killstreak_splash":
self setclientomnvar( "ui_splash_killstreak_idx", var_2 );
if ( isdefined( var_0.playercardplayer ) && var_0.playercardplayer != self )
self setclientomnvar( "ui_splash_killstreak_clientnum", var_0.playercardplayer getentitynumber() );
else
self setclientomnvar( "ui_splash_killstreak_clientnum", -1 );
if ( isdefined( var_0.optionalnumber ) )
self setclientomnvar( "ui_splash_killstreak_optional_number", var_0.optionalnumber );
else
self setclientomnvar( "ui_splash_killstreak_optional_number", 0 );
break;
case "playercard_splash":
if ( isdefined( var_0.playercardplayer ) )
{
self setclientomnvar( "ui_splash_playercard_idx", var_2 );
self setclientomnvar( "ui_splash_playercard_clientnum", var_0.playercardplayer getentitynumber() );
if ( isdefined( var_0.optionalnumber ) )
self setclientomnvar( "ui_splash_playercard_optional_number", var_0.optionalnumber );
}
break;
case "intel_splash":
case "urgent_splash":
case "splash":
self setclientomnvar( "ui_splash_idx", var_2 );
if ( isdefined( var_0.optionalnumber ) )
self setclientomnvar( "ui_splash_optional_number", var_0.optionalnumber );
break;
case "perk_challenge_splash":
case "challenge_splash":
self setclientomnvar( "ui_challenge_splash_idx", var_2 );
if ( isdefined( var_0.optionalnumber ) )
self setclientomnvar( "ui_challenge_splash_optional_number", var_0.optionalnumber );
break;
case "mp_dig_all_perks_splash":
self setclientomnvar( "ui_dig_killstreak_show", 1 );
break;
default:
break;
}
self.doingsplash[var_1] = var_0;
if ( isdefined( var_0.sound ) )
self playlocalsound( var_0.sound );
if ( isdefined( var_0.leadersound ) )
{
if ( isdefined( var_0.leadersoundgroup ) )
maps\mp\_utility::leaderdialogonplayer( var_0.leadersound, var_0.leadersoundgroup, 1 );
else
maps\mp\_utility::leaderdialogonplayer( var_0.leadersound );
}
self notify( "actionNotifyMessage" + var_1 );
self endon( "actionNotifyMessage" + var_1 );
wait( var_3 + 0.5 );
self.doingsplash[var_1] = undefined;
}
if ( self.splashqueue[var_1].size )
thread dispatchnotify( var_1 );
}
waitrequirevisibility( var_0 )
{
var_1 = 0.05;
while ( !canreadtext() )
wait( var_1 );
while ( var_0 > 0 )
{
wait( var_1 );
if ( canreadtext() )
var_0 = var_0 - var_1;
}
}
canreadtext()
{
if ( maps\mp\_flashgrenades::isflashbanged() )
return 0;
return 1;
}
resetondeath()
{
self endon( "notifyMessageDone" );
self endon( "disconnect" );
level endon( "game_ended" );
self waittill( "death" );
resetnotify();
}
resetoncancel()
{
self notify( "resetOnCancel" );
self endon( "resetOnCancel" );
self endon( "notifyMessageDone" );
self endon( "disconnect" );
level waittill( "cancel_notify" );
resetnotify();
}
resetnotify()
{
self.notifytitle.alpha = 0;
self.notifytext.alpha = 0;
self.notifyicon.alpha = 0;
self.notifyoverlay.alpha = 0;
self.doingsplash[0] = undefined;
self.doingsplash[1] = undefined;
self.doingsplash[2] = undefined;
self.doingsplash[3] = undefined;
}
hintmessagedeaththink()
{
self endon( "disconnect" );
for (;;)
{
self waittill( "death" );
if ( isdefined( self.hintmessage ) )
self.hintmessage maps\mp\gametypes\_hud_util::destroyelem();
}
}
lowermessagethink()
{
self endon( "disconnect" );
self.lowermessages = [];
var_0 = "default";
if ( isdefined( level.lowermessagefont ) )
var_0 = level.lowermessagefont;
var_1 = level.lowertexty;
var_2 = level.lowertextfontsize;
var_3 = 1.25;
if ( level.splitscreen || self issplitscreenplayer() && !isai( self ) )
{
var_1 = var_1 - 40;
var_2 = level.lowertextfontsize * 1.3;
var_3 = var_3 * 1.5;
}
self.lowermessage = maps\mp\gametypes\_hud_util::createfontstring( var_0, var_2 );
self.lowermessage settext( "" );
self.lowermessage.archived = 0;
self.lowermessage.sort = 10;
self.lowermessage.showinkillcam = 0;
self.lowermessage maps\mp\gametypes\_hud_util::setpoint( "CENTER", level.lowertextyalign, 0, var_1 );
self.lowertimer = maps\mp\gametypes\_hud_util::createfontstring( "default", var_3 );
self.lowertimer maps\mp\gametypes\_hud_util::setparent( self.lowermessage );
self.lowertimer maps\mp\gametypes\_hud_util::setpoint( "TOP", "BOTTOM", 0, 0 );
self.lowertimer settext( "" );
self.lowertimer.archived = 0;
self.lowertimer.sort = 10;
self.lowertimer.showinkillcam = 0;
}
outcomeoverlay( var_0 )
{
if ( level.teambased )
{
if ( var_0 == "tie" )
matchoutcomenotify( "draw" );
else if ( var_0 == self.team )
matchoutcomenotify( "victory" );
else
matchoutcomenotify( "defeat" );
}
else if ( var_0 == self )
matchoutcomenotify( "victory" );
else
matchoutcomenotify( "defeat" );
}
matchoutcomenotify( var_0 )
{
var_1 = self.team;
var_2 = maps\mp\gametypes\_hud_util::createfontstring( "bigfixed", 1.0 );
var_2 maps\mp\gametypes\_hud_util::setpoint( "TOP", undefined, 0, 50 );
var_2.foreground = 1;
var_2.glowalpha = 1;
var_2.hidewheninmenu = 0;
var_2.archived = 0;
var_2 settext( game["strings"][var_0] );
var_2.alpha = 0;
var_2 fadeovertime( 0.5 );
var_2.alpha = 1;
switch ( var_0 )
{
case "victory":
var_2.glowcolor = game["colors"]["cyan"];
break;
default:
var_2.glowcolor = game["colors"]["orange"];
break;
}
var_3 = maps\mp\gametypes\_hud_util::createicon( game["icons"][var_1], 64, 64 );
var_3 maps\mp\gametypes\_hud_util::setparent( var_2 );
var_3 maps\mp\gametypes\_hud_util::setpoint( "TOP", "BOTTOM", 0, 30 );
var_3.foreground = 1;
var_3.hidewheninmenu = 0;
var_3.archived = 0;
var_3.alpha = 0;
var_3 fadeovertime( 0.5 );
var_3.alpha = 1;
wait 3.0;
var_2 maps\mp\gametypes\_hud_util::destroyelem();
var_3 maps\mp\gametypes\_hud_util::destroyelem();
}
isdoingsplash()
{
if ( isdefined( self.doingsplash[0] ) )
return 1;
if ( isdefined( self.doingsplash[1] ) )
return 1;
if ( isdefined( self.doingsplash[2] ) )
return 1;
if ( isdefined( self.doingsplash[3] ) )
return 1;
return 0;
}
teamoutcomenotify( var_0, var_1, var_2 )
{
self endon( "disconnect" );
self notify( "reset_outcome" );
self setclientomnvar( "ui_round_end_update_data", 0 );
self setclientomnvar( "ui_round_end", 1 );
wait 0.5;
var_3 = self.pers["team"];
if ( self ismlgspectator() )
var_3 = self getmlgspectatorteam();
if ( !isdefined( var_3 ) || var_3 != "allies" && var_3 != "axis" )
var_3 = "allies";
while ( isdoingsplash() )
wait 0.05;
self endon( "reset_outcome" );
if ( var_0 == "halftime" )
{
self setclientomnvar( "ui_round_end_title", game["round_end"]["halftime"] );
var_0 = "allies";
}
else if ( var_0 == "intermission" )
{
self setclientomnvar( "ui_round_end_title", game["round_end"]["intermission"] );
var_0 = "allies";
}
else if ( var_0 == "roundend" )
{
self setclientomnvar( "ui_round_end_title", game["round_end"]["roundend"] );
var_0 = "allies";
}
else if ( var_0 == "overtime" )
{
self setclientomnvar( "ui_round_end_title", game["round_end"]["overtime"] );
var_0 = "allies";
}
else if ( var_0 == "tie" )
{
if ( var_1 )
self setclientomnvar( "ui_round_end_title", game["round_end"]["round_draw"] );
else
self setclientomnvar( "ui_round_end_title", game["round_end"]["draw"] );
var_0 = "allies";
}
else if ( self ismlgspectator() )
self setclientomnvar( "ui_round_end_title", game["round_end"]["spectator"] );
else if ( isdefined( self.pers["team"] ) && var_0 == var_3 )
{
if ( var_1 )
self setclientomnvar( "ui_round_end_title", game["round_end"]["round_win"] );
else
self setclientomnvar( "ui_round_end_title", game["round_end"]["victory"] );
}
else if ( var_1 )
self setclientomnvar( "ui_round_end_title", game["round_end"]["round_loss"] );
else
self setclientomnvar( "ui_round_end_title", game["round_end"]["defeat"] );
self setclientomnvar( "ui_round_end_reason", var_2 );
if ( !maps\mp\_utility::isroundbased() || !maps\mp\_utility::isobjectivebased() || level.gametype == "Blitz" )
{
self setclientomnvar( "ui_round_end_friendly_score", maps\mp\gametypes\_gamescore::_getteamscore( var_3 ) );
self setclientomnvar( "ui_round_end_enemy_score", maps\mp\gametypes\_gamescore::_getteamscore( level.otherteam[var_3] ) );
}
else
{
self setclientomnvar( "ui_round_end_friendly_score", game["roundsWon"][var_3] );
self setclientomnvar( "ui_round_end_enemy_score", game["roundsWon"][level.otherteam[var_3]] );
}
if ( isdefined( self.matchbonus ) )
self setclientomnvar( "ui_round_end_match_bonus", self.matchbonus );
self setclientomnvar( "ui_round_end_update_data", 1 );
}
outcomenotify( var_0, var_1 )
{
self endon( "disconnect" );
self notify( "reset_outcome" );
self setclientomnvar( "ui_round_end_update_data", 0 );
self setclientomnvar( "ui_round_end", 1 );
wait 0.5;
while ( isdoingsplash() )
wait 0.05;
self endon( "reset_outcome" );
var_2 = level.placement["all"];
var_3 = var_2[0];
var_4 = var_2[1];
var_5 = var_2[2];
var_6 = 0;
if ( isdefined( var_3 ) && self.score == var_3.score && self.deaths == var_3.deaths )
{
if ( self != var_3 )
var_6 = 1;
else if ( isdefined( var_4 ) && var_4.score == var_3.score && var_4.deaths == var_3.deaths )
var_6 = 1;
}
if ( var_6 )
self setclientomnvar( "ui_round_end_title", game["round_end"]["tie"] );
else if ( isdefined( var_3 ) && self == var_3 )
self setclientomnvar( "ui_round_end_title", game["round_end"]["victory"] );
else
self setclientomnvar( "ui_round_end_title", game["round_end"]["defeat"] );
self setclientomnvar( "ui_round_end_reason", var_1 );
if ( isdefined( self.matchbonus ) )
self setclientomnvar( "ui_round_end_match_bonus", self.matchbonus );
self setclientomnvar( "ui_round_end_update_data", 1 );
self waittill( "update_outcome" );
}
canshowsplash( var_0 )
{
}
get_table_name()
{
if ( maps\mp\_utility::is_aliens() )
return "mp/alien/splashTable.csv";
return "mp/splashTable.csv";
}

View File

@ -0,0 +1,908 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
setparent( var_0 )
{
if ( isdefined( self.parent ) && self.parent == var_0 )
return;
if ( isdefined( self.parent ) )
self.parent removechild( self );
self.parent = var_0;
self.parent addchild( self );
if ( isdefined( self.point ) )
setpoint( self.point, self.relativepoint, self.xoffset, self.yoffset );
else
setpoint( "TOPLEFT" );
}
getparent()
{
return self.parent;
}
removedestroyedchildren()
{
if ( isdefined( self.childchecktime ) && self.childchecktime == gettime() )
return;
self.childchecktime = gettime();
var_0 = [];
foreach ( var_3, var_2 in self.children )
{
if ( !isdefined( var_2 ) )
continue;
var_2.index = var_0.size;
var_0[var_0.size] = var_2;
}
self.children = var_0;
}
addchild( var_0 )
{
var_0.index = self.children.size;
self.children[self.children.size] = var_0;
removedestroyedchildren();
}
removechild( var_0 )
{
var_0.parent = undefined;
if ( self.children[self.children.size - 1] != var_0 )
{
self.children[var_0.index] = self.children[self.children.size - 1];
self.children[var_0.index].index = var_0.index;
}
self.children[self.children.size - 1] = undefined;
var_0.index = undefined;
}
setpoint( var_0, var_1, var_2, var_3, var_4 )
{
if ( !isdefined( var_4 ) )
var_4 = 0;
var_5 = getparent();
if ( var_4 )
self moveovertime( var_4 );
if ( !isdefined( var_2 ) )
var_2 = 0;
self.xoffset = var_2;
if ( !isdefined( var_3 ) )
var_3 = 0;
self.yoffset = var_3;
self.point = var_0;
self.alignx = "center";
self.aligny = "middle";
if ( issubstr( var_0, "TOP" ) )
self.aligny = "top";
if ( issubstr( var_0, "BOTTOM" ) )
self.aligny = "bottom";
if ( issubstr( var_0, "LEFT" ) )
self.alignx = "left";
if ( issubstr( var_0, "RIGHT" ) )
self.alignx = "right";
if ( !isdefined( var_1 ) )
var_1 = var_0;
self.relativepoint = var_1;
var_6 = "center_adjustable";
var_7 = "middle";
if ( issubstr( var_1, "TOP" ) )
var_7 = "top_adjustable";
if ( issubstr( var_1, "BOTTOM" ) )
var_7 = "bottom_adjustable";
if ( issubstr( var_1, "LEFT" ) )
var_6 = "left_adjustable";
if ( issubstr( var_1, "RIGHT" ) )
var_6 = "right_adjustable";
if ( var_5 == level.uiparent )
{
self.horzalign = var_6;
self.vertalign = var_7;
}
else
{
self.horzalign = var_5.horzalign;
self.vertalign = var_5.vertalign;
}
if ( maps\mp\_utility::strip_suffix( var_6, "_adjustable" ) == var_5.alignx )
{
var_8 = 0;
var_9 = 0;
}
else if ( var_6 == "center" || var_5.alignx == "center" )
{
var_8 = int( var_5.width / 2 );
if ( var_6 == "left_adjustable" || var_5.alignx == "right" )
var_9 = -1;
else
var_9 = 1;
}
else
{
var_8 = var_5.width;
if ( var_6 == "left_adjustable" )
var_9 = -1;
else
var_9 = 1;
}
self.x = var_5.x + var_8 * var_9;
if ( maps\mp\_utility::strip_suffix( var_7, "_adjustable" ) == var_5.aligny )
{
var_10 = 0;
var_11 = 0;
}
else if ( var_7 == "middle" || var_5.aligny == "middle" )
{
var_10 = int( var_5.height / 2 );
if ( var_7 == "top_adjustable" || var_5.aligny == "bottom" )
var_11 = -1;
else
var_11 = 1;
}
else
{
var_10 = var_5.height;
if ( var_7 == "top_adjustable" )
var_11 = -1;
else
var_11 = 1;
}
self.y = var_5.y + var_10 * var_11;
self.x = self.x + self.xoffset;
self.y = self.y + self.yoffset;
switch ( self.elemtype )
{
case "bar":
setpointbar( var_0, var_1, var_2, var_3 );
break;
}
updatechildren();
}
setpointbar( var_0, var_1, var_2, var_3 )
{
self.bar.horzalign = self.horzalign;
self.bar.vertalign = self.vertalign;
self.bar.alignx = "left";
self.bar.aligny = self.aligny;
self.bar.y = self.y;
if ( self.alignx == "left" )
self.bar.x = self.x;
else if ( self.alignx == "right" )
self.bar.x = self.x - self.width;
else
self.bar.x = self.x - int( self.width / 2 );
if ( self.aligny == "top" )
self.bar.y = self.y;
else if ( self.aligny == "bottom" )
self.bar.y = self.y;
updatebar( self.bar.frac );
}
updatebar( var_0, var_1 )
{
if ( self.elemtype == "bar" )
updatebarscale( var_0, var_1 );
}
updatebarscale( var_0, var_1 )
{
var_2 = int( self.width * var_0 + 0.5 );
if ( !var_2 )
var_2 = 1;
self.bar.frac = var_0;
self.bar setshader( self.bar.shader, var_2, self.height );
if ( isdefined( var_1 ) && var_2 < self.width )
{
if ( var_1 > 0 )
self.bar scaleovertime( ( 1 - var_0 ) / var_1, self.width, self.height );
else if ( var_1 < 0 )
self.bar scaleovertime( var_0 / ( -1 * var_1 ), 1, self.height );
}
self.bar.rateofchange = var_1;
self.bar.lastupdatetime = gettime();
}
createfontstring( var_0, var_1 )
{
var_2 = newclienthudelem( self );
var_2.elemtype = "font";
var_2.font = var_0;
var_2.fontscale = var_1;
var_2.basefontscale = var_1;
var_2.x = 0;
var_2.y = 0;
var_2.width = 0;
var_2.height = int( level.fontheight * var_1 );
var_2.xoffset = 0;
var_2.yoffset = 0;
var_2.children = [];
var_2 setparent( level.uiparent );
var_2.hidden = 0;
return var_2;
}
createserverfontstring( var_0, var_1, var_2 )
{
if ( isdefined( var_2 ) )
var_3 = newteamhudelem( var_2 );
else
var_3 = newhudelem();
var_3.elemtype = "font";
var_3.font = var_0;
var_3.fontscale = var_1;
var_3.basefontscale = var_1;
var_3.x = 0;
var_3.y = 0;
var_3.width = 0;
var_3.height = int( level.fontheight * var_1 );
var_3.xoffset = 0;
var_3.yoffset = 0;
var_3.children = [];
var_3 setparent( level.uiparent );
var_3.hidden = 0;
return var_3;
}
createservertimer( var_0, var_1, var_2 )
{
if ( isdefined( var_2 ) )
var_3 = newteamhudelem( var_2 );
else
var_3 = newhudelem();
var_3.elemtype = "timer";
var_3.font = var_0;
var_3.fontscale = var_1;
var_3.basefontscale = var_1;
var_3.x = 0;
var_3.y = 0;
var_3.width = 0;
var_3.height = int( level.fontheight * var_1 );
var_3.xoffset = 0;
var_3.yoffset = 0;
var_3.children = [];
var_3 setparent( level.uiparent );
var_3.hidden = 0;
return var_3;
}
createtimer( var_0, var_1 )
{
var_2 = newclienthudelem( self );
var_2.elemtype = "timer";
var_2.font = var_0;
var_2.fontscale = var_1;
var_2.basefontscale = var_1;
var_2.x = 0;
var_2.y = 0;
var_2.width = 0;
var_2.height = int( level.fontheight * var_1 );
var_2.xoffset = 0;
var_2.yoffset = 0;
var_2.children = [];
var_2 setparent( level.uiparent );
var_2.hidden = 0;
return var_2;
}
createicon( var_0, var_1, var_2 )
{
var_3 = newclienthudelem( self );
var_3.elemtype = "icon";
var_3.x = 0;
var_3.y = 0;
var_3.width = var_1;
var_3.height = var_2;
var_3.basewidth = var_3.width;
var_3.baseheight = var_3.height;
var_3.xoffset = 0;
var_3.yoffset = 0;
var_3.children = [];
var_3 setparent( level.uiparent );
var_3.hidden = 0;
if ( isdefined( var_0 ) )
{
var_3 setshader( var_0, var_1, var_2 );
var_3.shader = var_0;
}
return var_3;
}
createservericon( var_0, var_1, var_2, var_3 )
{
if ( isdefined( var_3 ) )
var_4 = newteamhudelem( var_3 );
else
var_4 = newhudelem();
var_4.elemtype = "icon";
var_4.x = 0;
var_4.y = 0;
var_4.width = var_1;
var_4.height = var_2;
var_4.basewidth = var_4.width;
var_4.baseheight = var_4.height;
var_4.xoffset = 0;
var_4.yoffset = 0;
var_4.children = [];
var_4 setparent( level.uiparent );
var_4.hidden = 0;
if ( isdefined( var_0 ) )
{
var_4 setshader( var_0, var_1, var_2 );
var_4.shader = var_0;
}
return var_4;
}
createserverbar( var_0, var_1, var_2, var_3, var_4, var_5 )
{
if ( isdefined( var_4 ) )
var_6 = newteamhudelem( var_4 );
else
var_6 = newhudelem();
var_6.x = 0;
var_6.y = 0;
var_6.frac = 0;
var_6.color = var_0;
var_6.sort = -2;
var_6.shader = "progress_bar_fill";
var_6 setshader( "progress_bar_fill", var_1, var_2 );
var_6.hidden = 0;
if ( isdefined( var_3 ) )
var_6.flashfrac = var_3;
if ( isdefined( var_4 ) )
var_7 = newteamhudelem( var_4 );
else
var_7 = newhudelem();
var_7.elemtype = "bar";
var_7.x = 0;
var_7.y = 0;
var_7.width = var_1;
var_7.height = var_2;
var_7.xoffset = 0;
var_7.yoffset = 0;
var_7.bar = var_6;
var_7.children = [];
var_7.sort = -3;
var_7.color = ( 0, 0, 0 );
var_7.alpha = 0.5;
var_7 setparent( level.uiparent );
var_7 setshader( "progress_bar_bg", var_1, var_2 );
var_7.hidden = 0;
return var_7;
}
createbar( var_0, var_1, var_2, var_3 )
{
var_4 = newclienthudelem( self );
var_4.x = 0;
var_4.y = 0;
var_4.frac = 0;
var_4.color = var_0;
var_4.sort = -2;
var_4.shader = "progress_bar_fill";
var_4 setshader( "progress_bar_fill", var_1, var_2 );
var_4.hidden = 0;
if ( isdefined( var_3 ) )
var_4.flashfrac = var_3;
var_5 = newclienthudelem( self );
var_5.elemtype = "bar";
var_5.width = var_1;
var_5.height = var_2;
var_5.xoffset = 0;
var_5.yoffset = 0;
var_5.bar = var_4;
var_5.children = [];
var_5.sort = -3;
var_5.color = ( 0, 0, 0 );
var_5.alpha = 0.5;
var_5 setparent( level.uiparent );
var_5 setshader( "progress_bar_bg", var_1 + 4, var_2 + 4 );
var_5.hidden = 0;
return var_5;
}
getcurrentfraction()
{
var_0 = self.bar.frac;
if ( isdefined( self.bar.rateofchange ) )
{
var_0 = var_0 + ( gettime() - self.bar.lastupdatetime ) * self.bar.rateofchange;
if ( var_0 > 1 )
var_0 = 1;
if ( var_0 < 0 )
var_0 = 0;
}
return var_0;
}
createprimaryprogressbar( var_0, var_1 )
{
if ( isagent( self ) )
return undefined;
if ( !isdefined( var_0 ) )
var_0 = 0;
if ( !isdefined( var_1 ) )
var_1 = -25;
if ( self issplitscreenplayer() )
var_1 = var_1 + 20;
var_2 = createbar( ( 1, 1, 1 ), level.primaryprogressbarwidth, level.primaryprogressbarheight );
var_2 setpoint( "CENTER", undefined, level.primaryprogressbarx + var_0, level.primaryprogressbary + var_1 );
return var_2;
}
createprimaryprogressbartext( var_0, var_1, var_2, var_3 )
{
if ( isagent( self ) )
return undefined;
if ( !isdefined( var_0 ) )
var_0 = 0;
if ( !isdefined( var_1 ) )
var_1 = -25;
if ( self issplitscreenplayer() )
var_1 = var_1 + 20;
var_4 = level.primaryprogressbarfontsize;
var_5 = "default";
if ( isdefined( var_2 ) )
var_4 = var_2;
if ( isdefined( var_3 ) )
var_5 = var_3;
var_6 = createfontstring( var_5, var_4 );
var_6 setpoint( "CENTER", undefined, level.primaryprogressbartextx + var_0, level.primaryprogressbartexty + var_1 );
var_6.sort = -1;
return var_6;
}
createteamprogressbar( var_0 )
{
var_1 = createserverbar( ( 1, 0, 0 ), level.teamprogressbarwidth, level.teamprogressbarheight, undefined, var_0 );
var_1 setpoint( "TOP", undefined, 0, level.teamprogressbary );
return var_1;
}
createteamprogressbartext( var_0 )
{
var_1 = createserverfontstring( "default", level.teamprogressbarfontsize, var_0 );
var_1 setpoint( "TOP", undefined, 0, level.teamprogressbartexty );
return var_1;
}
setflashfrac( var_0 )
{
self.bar.flashfrac = var_0;
}
hideelem()
{
if ( self.hidden )
return;
self.hidden = 1;
if ( self.alpha != 0 )
self.alpha = 0;
if ( self.elemtype == "bar" || self.elemtype == "bar_shader" )
{
self.bar.hidden = 1;
if ( self.bar.alpha != 0 )
self.bar.alpha = 0;
}
}
showelem()
{
if ( !self.hidden )
return;
self.hidden = 0;
if ( self.elemtype == "bar" || self.elemtype == "bar_shader" )
{
if ( self.alpha != 0.5 )
self.alpha = 0.5;
self.bar.hidden = 0;
if ( self.bar.alpha != 1 )
self.bar.alpha = 1;
}
else if ( self.alpha != 1 )
self.alpha = 1;
}
flashthread()
{
self endon( "death" );
if ( !self.hidden )
self.alpha = 1;
for (;;)
{
if ( self.frac >= self.flashfrac )
{
if ( !self.hidden )
{
self fadeovertime( 0.3 );
self.alpha = 0.2;
wait 0.35;
self fadeovertime( 0.3 );
self.alpha = 1;
}
wait 0.7;
continue;
}
if ( !self.hidden && self.alpha != 1 )
self.alpha = 1;
wait 0.05;
}
}
destroyelem()
{
var_0 = [];
for ( var_1 = 0; var_1 < self.children.size; var_1++ )
{
if ( isdefined( self.children[var_1] ) )
var_0[var_0.size] = self.children[var_1];
}
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
var_0[var_1] setparent( getparent() );
if ( self.elemtype == "bar" || self.elemtype == "bar_shader" )
self.bar destroy();
self destroy();
}
seticonshader( var_0 )
{
self setshader( var_0, self.width, self.height );
self.shader = var_0;
}
geticonshader( var_0 )
{
return self.shader;
}
seticonsize( var_0, var_1 )
{
self setshader( self.shader, var_0, var_1 );
}
setwidth( var_0 )
{
self.width = var_0;
}
setheight( var_0 )
{
self.height = var_0;
}
setsize( var_0, var_1 )
{
self.width = var_0;
self.height = var_1;
}
updatechildren()
{
for ( var_0 = 0; var_0 < self.children.size; var_0++ )
{
var_1 = self.children[var_0];
var_1 setpoint( var_1.point, var_1.relativepoint, var_1.xoffset, var_1.yoffset );
}
}
transitionreset()
{
self.x = self.xoffset;
self.y = self.yoffset;
if ( self.elemtype == "font" )
{
self.fontscale = self.basefontscale;
self.label = &"";
}
else if ( self.elemtype == "icon" )
self setshader( self.shader, self.width, self.height );
self.alpha = 0;
}
transitionzoomin( var_0 )
{
switch ( self.elemtype )
{
case "timer":
case "font":
self.fontscale = 6.3;
self changefontscaleovertime( var_0 );
self.fontscale = self.basefontscale;
break;
case "icon":
self setshader( self.shader, self.width * 6, self.height * 6 );
self scaleovertime( var_0, self.width, self.height );
break;
}
}
transitionpulsefxin( var_0, var_1 )
{
var_2 = int( var_0 ) * 1000;
var_3 = int( var_1 ) * 1000;
switch ( self.elemtype )
{
case "timer":
case "font":
self setpulsefx( var_2 + 250, var_3 + var_2, var_2 + 250 );
break;
default:
break;
}
}
transitionslidein( var_0, var_1 )
{
if ( !isdefined( var_1 ) )
var_1 = "left";
switch ( var_1 )
{
case "left":
self.x = self.x + 1000;
break;
case "right":
self.x = self.x - 1000;
break;
case "up":
self.y = self.y - 1000;
break;
case "down":
self.y = self.y + 1000;
break;
}
self moveovertime( var_0 );
self.x = self.xoffset;
self.y = self.yoffset;
}
transitionslideout( var_0, var_1 )
{
if ( !isdefined( var_1 ) )
var_1 = "left";
var_2 = self.xoffset;
var_3 = self.yoffset;
switch ( var_1 )
{
case "left":
var_2 = var_2 + 1000;
break;
case "right":
var_2 = var_2 - 1000;
break;
case "up":
var_3 = var_3 - 1000;
break;
case "down":
var_3 = var_3 + 1000;
break;
}
self.alpha = 1;
self moveovertime( var_0 );
self.x = var_2;
self.y = var_3;
}
transitionzoomout( var_0 )
{
switch ( self.elemtype )
{
case "timer":
case "font":
self changefontscaleovertime( var_0 );
self.fontscale = 6.3;
case "icon":
self scaleovertime( var_0, self.width * 6, self.height * 6 );
break;
}
}
transitionfadein( var_0 )
{
self fadeovertime( var_0 );
if ( isdefined( self.maxalpha ) )
self.alpha = self.maxalpha;
else
self.alpha = 1;
}
transitionfadeout( var_0 )
{
self fadeovertime( 0.15 );
self.alpha = 0;
}
getweeklyref( var_0 )
{
for ( var_1 = 0; var_1 < 3; var_1++ )
{
var_2 = self getrankedplayerdata( "weeklyChallengeId", var_1 );
var_3 = tablelookupbyrow( "mp/weeklyChallengesTable.csv", var_2, 0 );
if ( var_3 == var_0 )
return "ch_weekly_" + var_1;
}
return "";
}
getdailyref( var_0 )
{
for ( var_1 = 0; var_1 < 3; var_1++ )
{
var_2 = self getrankedplayerdata( "dailyChallengeId", var_1 );
var_3 = tablelookupbyrow( "mp/dailyChallengesTable.csv", var_2, 0 );
if ( var_3 == var_0 )
return "ch_daily_" + var_1;
}
return "";
}
ch_getprogress( var_0 )
{
if ( level.challengeinfo[var_0]["type"] == 0 )
return self getrankedplayerdata( "challengeProgress", var_0 );
else if ( level.challengeinfo[var_0]["type"] == 1 )
return self getrankedplayerdata( "challengeProgress", getdailyref( var_0 ) );
else if ( level.challengeinfo[var_0]["type"] == 2 )
return self getrankedplayerdata( "challengeProgress", getweeklyref( var_0 ) );
}
ch_getstate( var_0 )
{
if ( level.challengeinfo[var_0]["type"] == 0 )
return self getrankedplayerdata( "challengeState", var_0 );
else if ( level.challengeinfo[var_0]["type"] == 1 )
return self getrankedplayerdata( "challengeState", getdailyref( var_0 ) );
else if ( level.challengeinfo[var_0]["type"] == 2 )
return self getrankedplayerdata( "challengeState", getweeklyref( var_0 ) );
}
ch_setprogress( var_0, var_1 )
{
if ( level.challengeinfo[var_0]["type"] == 0 )
return self setrankedplayerdata( "challengeProgress", var_0, var_1 );
else if ( level.challengeinfo[var_0]["type"] == 1 )
return self setrankedplayerdata( "challengeProgress", getdailyref( var_0 ), var_1 );
else if ( level.challengeinfo[var_0]["type"] == 2 )
return self setrankedplayerdata( "challengeProgress", getweeklyref( var_0 ), var_1 );
}
ch_setstate( var_0, var_1 )
{
if ( level.challengeinfo[var_0]["type"] == 0 )
return self setrankedplayerdata( "challengeState", var_0, var_1 );
else if ( level.challengeinfo[var_0]["type"] == 1 )
return self setrankedplayerdata( "challengeState", getdailyref( var_0 ), var_1 );
else if ( level.challengeinfo[var_0]["type"] == 2 )
return self setrankedplayerdata( "challengeState", getweeklyref( var_0 ), var_1 );
}
ch_gettarget( var_0, var_1 )
{
if ( level.challengeinfo[var_0]["type"] == 0 )
return int( tablelookup( "mp/allChallengesTable.csv", 0, var_0, 9 + ( var_1 - 1 ) * 2 ) );
else if ( level.challengeinfo[var_0]["type"] == 1 )
return int( tablelookup( "mp/dailyChallengesTable.csv", 0, var_0, 9 + ( var_1 - 1 ) * 2 ) );
else if ( level.challengeinfo[var_0]["type"] == 2 )
return int( tablelookup( "mp/weeklyChallengesTable.csv", 0, var_0, 9 + ( var_1 - 1 ) * 2 ) );
}
ch_isactivechallenge( var_0 )
{
var_1 = 5;
if ( level.challengeinfo[var_0]["type"] == 0 )
{
for ( var_2 = 0; var_2 < var_1; var_2++ )
{
var_3 = self getrankedplayerdata( "activeChallenges", var_2 );
if ( var_3 == var_0 )
return 1;
}
}
else if ( level.challengeinfo[var_0]["type"] == 1 )
return 1;
else if ( level.challengeinfo[var_0]["type"] == 2 )
return 1;
return 0;
}

View File

@ -0,0 +1,549 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
level thread populateintelchallenges();
level.intelactive = 0;
if ( !isdefined( level.supportintel ) || level.supportintel )
level thread onplayerconnect();
if ( isdefined( level.enableteamintel ) && isdefined( level.enableteamintel ) )
level thread runteamintel();
}
populateintelchallenges()
{
level endon( "game_ended" );
wait 0.05;
level.intelchallengearray = [];
var_0 = level.gametype == "sd" || level.gametype == "sr";
var_1 = 0;
for (;;)
{
var_2 = tablelookupbyrow( "mp/intelChallenges.csv", var_1, 0 );
var_3 = int( tablelookupbyrow( "mp/intelChallenges.csv", var_1, 2 ) );
var_4 = int( tablelookupbyrow( "mp/intelChallenges.csv", var_1, 3 ) );
var_5 = int( tablelookupbyrow( "mp/intelChallenges.csv", var_1, 4 ) ) == 1;
var_6 = int( tablelookupbyrow( "mp/intelChallenges.csv", var_1, 5 ) ) == 1;
var_7 = int( tablelookupbyrow( "mp/intelChallenges.csv", var_1, 6 ) ) == 1;
var_1++;
if ( var_2 == "" )
break;
if ( var_0 && !var_5 )
continue;
level.intelchallengearray[var_2] = spawnstruct();
level.intelchallengearray[var_2].challengename = var_2;
level.intelchallengearray[var_2].challengereward = var_3;
level.intelchallengearray[var_2].challengetarget = var_4;
level.intelchallengearray[var_2].teamchallenge = var_6;
level.intelchallengearray[var_2].juggchallenge = var_7;
}
}
runteamintel()
{
level endon( "game_ended" );
level.nummeleekillsintel = 0;
level.numheadshotsintel = 0;
level.numkillstreakkillsintel = 0;
level.numequipmentkillsintel = 0;
for (;;)
{
level waittill( "giveTeamIntel", var_0 );
var_1 = [];
foreach ( var_3 in level.intelchallengearray )
{
if ( !var_3.teamchallenge )
continue;
var_1[var_1.size] = var_3;
}
var_5 = var_1[randomint( var_1.size )];
var_6 = var_5.challengename;
level maps\mp\gametypes\_intelchallenges::giveteamchallenge( var_6, var_0 );
}
}
onplayerconnect()
{
for (;;)
{
level waittill( "connected", var_0 );
var_0 thread inteldeathwatcher();
}
}
inteldeathwatcher( var_0 )
{
level endon( "game_ended" );
self endon( "disconnect" );
for (;;)
{
self waittill( "death", var_1 );
if ( isdefined( self.hasintel ) && self.hasintel )
{
if ( isdefined( self.onhelisniper ) && self.onhelisniper || self.sessionstate == "spectator" )
{
self.hasintel = 0;
level thread randassignintel();
}
else
ondropintel();
continue;
}
if ( !level.intelactive )
{
if ( level.teambased && isdefined( var_1 ) && isdefined( var_1.team ) && var_1.team == self.team )
continue;
level.intelactive = 1;
ondropintel( 1 );
}
}
}
ondropintel( var_0 )
{
self.hasintel = 0;
if ( !isdefined( var_0 ) )
var_0 = 0;
var_1 = self.origin;
if ( isdefined( self.inteldeathposition ) )
{
var_1 = self.inteldeathposition;
self.inteldeathposition = undefined;
}
var_2 = getgroundposition( var_1, 42, 1000, 72 );
var_3 = var_1 + ( 0, 0, 32 );
if ( var_0 )
{
var_4 = spawn( "script_model", var_3 );
var_4.angles = ( 0, 0, 0 );
var_4 setmodel( "com_metal_briefcase_intel" );
var_5 = spawn( "trigger_radius", var_1, 0, 96, 60 );
var_5.id = "intel";
var_6 = [];
var_6["visuals"] = var_4;
var_6["trigger"] = var_5;
var_6["owner"] = "none";
var_6["isActive"] = 1;
var_6["firstTriggerPlayer"] = undefined;
var_6["useRate"] = 1;
var_6["useTime"] = 0.5;
var_6["useProgress"] = 0;
var_6["dropped_time"] = gettime();
level.intelent = var_6;
level.intelent["trigger"] enablelinkto();
}
else
{
if ( isdefined( level.intelent["visuals"] getlinkedparent() ) )
{
level.intelent["visuals"] unlink();
level.intelent["trigger"] unlink();
}
level.intelent["visuals"] hide();
level.intelent["visuals"].origin = var_3;
level.intelent["trigger"].origin = var_2;
}
if ( level.intelent["visuals"] maps\mp\_utility::touchingbadtrigger() )
{
level.intelent["isActive"] = 0;
level.intelent["visuals"] hide();
level thread randassignintel();
return;
}
level.intelent["owner"] = "none";
level.intelent["isActive"] = 1;
level.intelent["dropped_time"] = gettime();
level.intelent["visuals"] scriptmodelplayanim( "mp_briefcase_spin" );
thread inteltriggerwatcher();
level.intelent thread intelemergencyrespawntimer();
}
inteldeathoverride( var_0 )
{
level.intelent["isActive"] = 0;
level.intelent["visuals"] hide();
level thread randassignintel();
}
inteltriggerwatcher()
{
level notify( "intelTriggerWatcher" );
level endon( "intelTriggerWatcher" );
level endon( "game_ended" );
level.intelent["visuals"] endon( "pickedUp" );
var_0 = level.intelent["trigger"];
var_1 = spawnstruct();
var_1.linkparent = self getmovingplatformparent();
var_1.endonstring = "intelTriggerWatcher";
var_1.deathoverridecallback = ::inteldeathoverride;
level.intelent["visuals"] thread maps\mp\_movers::handle_moving_platforms( var_1 );
level.intelent["trigger"] linkto( level.intelent["visuals"] );
wait 0.05;
level.intelent["visuals"] show();
for (;;)
{
var_0 waittill( "trigger", var_2 );
if ( !isplayer( var_2 ) )
continue;
if ( isai( var_2 ) )
continue;
if ( !isalive( var_2 ) || isdefined( var_2.fauxdead ) && var_2.fauxdead )
continue;
if ( level.intelent["isActive"] )
{
if ( isdefined( var_2.hasintel ) && var_2.hasintel )
continue;
var_3 = var_0 proximitythink( var_2 );
if ( var_3 )
var_2 onpickupintel();
}
}
}
intelemergencyrespawntimer()
{
level.intelent["visuals"] endon( "pickedUp" );
for (;;)
{
if ( gettime() > level.intelent["dropped_time"] + 60000 )
break;
wait 1;
}
level.intelent["isActive"] = 0;
level.intelent["visuals"] hide();
level thread randassignintel();
}
onpickupintel()
{
self.hasintel = 1;
level.intelent["isActive"] = 0;
level.intelent["visuals"] hide();
level.intelent["owner"] = self;
var_0 = [];
thread maps\mp\gametypes\_rank::giverankxp( "challenge", 100 );
if ( maps\mp\_utility::isjuggernaut() )
{
foreach ( var_2 in level.intelchallengearray )
{
var_3 = var_2.challengename;
if ( !var_2.juggchallenge )
continue;
if ( isdefined( self.isjuggernautmaniac ) && self.isjuggernautmaniac == 1 )
{
if ( !issubstr( var_3, "maniac" ) )
continue;
}
else if ( isdefined( self.isjuggernautrecon ) && self.isjuggernautrecon == 1 )
{
if ( !issubstr( var_3, "recon" ) )
continue;
}
else if ( !issubstr( var_3, "assault" ) )
continue;
var_0[var_0.size] = var_2;
}
}
else
{
var_5 = maps\mp\_utility::getotherteam( self.team );
var_6 = level.teamcount[var_5];
var_7 = level.alivecount[var_5];
var_8 = undefined;
var_8 = getdvarint( "scr_player_lives" ) == 0;
var_9 = self getweaponslistprimaries();
foreach ( var_2 in level.intelchallengearray )
{
var_3 = var_2.challengename;
var_11 = var_2.challengetarget;
if ( !var_8 )
{
if ( var_3 == "ch_intel_tbag" || var_11 > var_7 )
continue;
}
if ( var_3 == "ch_intel_secondarykills" && intelcancomplete_secondarykills( self, var_9 ) == 0 )
continue;
if ( var_3 == "ch_intel_explosivekill" && intelcancomplete_explosivekill( self, var_9 ) == 0 )
continue;
if ( var_2.teamchallenge )
continue;
if ( var_2.juggchallenge )
continue;
var_0[var_0.size] = var_2;
}
}
var_13 = var_0[randomint( var_0.size )];
var_14 = var_13.challengename;
if ( maps\mp\_utility::isjuggernaut() )
maps\mp\gametypes\_intelchallenges::givejuggernautchallenge( var_14 );
else
{
maps\mp\gametypes\_intelchallenges::givechallenge( var_14 );
thread watchforjuggernaut();
}
thread watchforplayerdisconnect();
thread watchforremotekillstreak();
level.intelent["visuals"] notify( "pickedUp" );
}
intelcancomplete_secondarykills( var_0, var_1 )
{
var_2 = 0;
foreach ( var_4 in var_1 )
{
if ( maps\mp\_utility::iscacsecondaryweapon( var_4 ) )
{
if ( var_0 getammocount( var_4 ) > 0 )
{
var_2 = 1;
break;
}
}
}
return var_2;
}
intelcancomplete_explosivekill( var_0, var_1 )
{
var_2 = 0;
if ( self.loadoutperkequipment != "specialty_null" && !issubstr( self.loadoutperkequipment, "throwingknife" ) )
{
var_3 = var_0 getammocount( self.loadoutperkequipment );
if ( var_3 > 0 )
var_2 = 1;
}
if ( var_2 == 0 )
{
foreach ( var_5 in var_1 )
{
var_6 = weaponclass( var_5 );
if ( ( var_6 == "rocketlauncher" || var_6 == "grenade" ) && var_0 getammocount( var_5 ) > 0 )
{
var_2 = 1;
break;
}
else
{
var_7 = weaponaltweaponname( var_5 );
if ( isdefined( var_7 ) && weaponclass( var_7 ) == "grenade" && var_0 getammocount( var_7 ) > 0 )
{
var_2 = 1;
break;
}
}
}
}
return var_2;
}
watchforjuggernaut()
{
self endon( "death" );
self endon( "intel_cleanup" );
for (;;)
{
level waittill( "juggernaut_equipped" );
waittillframeend;
if ( maps\mp\_utility::isjuggernaut() )
thread updatejuggintel();
}
}
updatejuggintel()
{
self notify( "intel_cleanup" );
self setclientomnvar( "ui_intel_active_index", -1 );
onpickupintel();
}
watchforplayerdisconnect()
{
self endon( "death" );
self endon( "intel_cleanup" );
self waittill( "disconnect" );
level thread randassignintel();
}
watchforremotekillstreak()
{
self endon( "death" );
self endon( "intel_cleanup" );
self endon( "stopped_using_remote" );
self waittill( "using_remote" );
self.inteldeathposition = self.origin;
thread updateinteldeathposition();
}
updateinteldeathposition()
{
self endon( "death" );
self endon( "intel_cleanup" );
self waittill( "stopped_using_remote" );
self.inteldeathposition = undefined;
thread watchforremotekillstreak();
}
randassignintel()
{
level notify( "randAssignIntel" );
level endon( "randAssignIntel" );
level endon( "game_ended" );
for (;;)
{
wait 1;
var_0 = maps\mp\_utility::getrandomplayingplayer();
if ( !isdefined( var_0 ) )
continue;
var_0.hasintel = 1;
level.intelent["owner"] = var_0;
var_0 thread watchforplayerdisconnect();
break;
}
}
awardplayerchallengecomplete( var_0 )
{
self endon( "disconnect" );
replenishammo();
self.hasintel = 0;
var_1 = level.intelchallengearray[var_0];
var_2 = var_1.challengename;
var_3 = int( var_1.challengereward );
self setclientomnvar( "ui_intel_active_index", -1 );
thread maps\mp\killstreaks\_killstreaks::givekillstreak( "airdrop_assault", 0, 0, self );
thread maps\mp\gametypes\_hud_message::splashnotifydelayed( var_2, var_3 );
thread maps\mp\gametypes\_rank::giverankxp( "intel", var_3 );
level thread randassignintel();
self thread [[ level.leaderdialogonplayer_func ]]( "achieve_carepackage", undefined, undefined, self.origin );
maps\mp\gametypes\_missions::processchallenge( "ch_intelligence" );
self notify( "intel_cleanup" );
}
replenishammo()
{
var_0 = self getweaponslistall();
foreach ( var_2 in var_0 )
{
if ( maps\mp\_utility::iskillstreakweapon( var_2 ) )
continue;
else
{
if ( weaponinventorytype( var_2 ) == "offhand" )
{
if ( var_2 == self.loadoutperkequipment && maps\mp\_utility::_hasperk( "specialty_extra_deadly" ) || var_2 == self.loadoutperkoffhand && maps\mp\_utility::_hasperk( "specialty_extra_equipment" ) )
self setweaponammoclip( var_2, 2 );
else
self setweaponammoclip( var_2, 1 );
continue;
}
self givemaxammo( var_2 );
}
}
}
proximitythink( var_0 )
{
if ( !isdefined( self ) )
return 0;
self.inuse = 1;
var_1 = proximitythinkloop( var_0 );
if ( !isdefined( self ) )
return 0;
level.intelent["useProgress"] = 0;
return var_1;
}
proximitythinkloop( var_0 )
{
self.userate = level.intelent["useRate"];
self.usetime = level.intelent["useTime"];
self.curprogress = 0;
while ( !level.gameended && isdefined( self ) && maps\mp\_utility::isreallyalive( var_0 ) )
{
if ( distance2dsquared( self.origin, var_0.origin ) > 36864 )
break;
level.intelent["useProgress"] = level.intelent["useProgress"] + 0.05 * self.userate;
self.curprogress = level.intelent["useProgress"];
var_0 maps\mp\gametypes\_gameobjects::updateuiprogress( self, 1 );
if ( level.intelent["useProgress"] >= self.usetime )
{
var_0 maps\mp\gametypes\_gameobjects::updateuiprogress( self, 0 );
return maps\mp\_utility::isreallyalive( var_0 );
}
wait 0.05;
}
var_0 maps\mp\gametypes\_gameobjects::updateuiprogress( self, 0 );
return 0;
}

View File

@ -0,0 +1,843 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
givechallenge( var_0 )
{
thread deathwatcher();
var_1 = tablelookuprownum( "mp/intelChallenges.csv", 0, var_0 );
self setclientomnvar( "ui_intel_active_index", var_1 );
switch ( var_0 )
{
case "ch_intel_headshots":
thread intelheadshotchallenge( var_0 );
break;
case "ch_intel_kills":
thread intelkillschallenge( var_0 );
break;
case "ch_intel_knifekill":
thread intelknifekillchallenge( var_0 );
break;
case "ch_intel_explosivekill":
thread intelbombkillchallenge( var_0 );
break;
case "ch_intel_crouchkills":
thread intelcrouchkillschallenge( var_0 );
break;
case "ch_intel_pronekills":
thread intelpronekillschallenge( var_0 );
break;
case "ch_intel_backshots":
thread intelbackkillschallenge( var_0 );
break;
case "ch_intel_jumpshot":
thread inteljumpshotkillschallenge( var_0 );
break;
case "ch_intel_secondarykills":
thread intelsecondarykillschallenge( var_0 );
break;
case "ch_intel_foundshot":
thread intelfoundshotkillschallenge( var_0 );
break;
case "ch_intel_tbag":
thread inteltbagchallenge( var_0 );
break;
default:
}
}
giveteamchallenge( var_0, var_1 )
{
switch ( var_0 )
{
case "ch_team_intel_melee":
level thread intelteammelee( var_0, var_1 );
break;
case "ch_team_intel_headshot":
level thread intelteamheadshot( var_0, var_1 );
break;
case "ch_team_intel_killstreak":
level thread intelteamkillstreak( var_0, var_1 );
break;
case "ch_team_intel_equipment":
level thread intelteamequipment( var_0, var_1 );
break;
default:
}
}
intelteammelee( var_0, var_1 )
{
level endon( "game_ended" );
level endon( "giveTeamIntel" );
level endon( "teamIntelFail" );
level.nummeleekillsintel = 0;
var_2 = level.intelchallengearray[var_0].challengetarget;
var_3 = tablelookuprownum( "mp/intelChallenges.csv", 0, var_0 );
level thread teamintelstarthud( var_0, var_1, var_3, var_2 );
while ( level.nummeleekillsintel < var_2 )
{
level waittill( "enemy_death" );
setteamintelprogress( var_2 - level.nummeleekillsintel );
}
teamintelendhud( var_0, var_1 );
level thread intelteamreward( var_1 );
}
setteamintelprogress( var_0 )
{
level.updateintelprogress = int( max( var_0, 0 ) );
updateteamintelprogress( level.updateintelprogress );
}
updateteamintelprogress( var_0 )
{
level.currentteamintelprogress = var_0;
foreach ( var_2 in level.players )
var_2 playerupdateteamintelprogress();
}
playerupdateteamintelprogress()
{
self setclientomnvar( "ui_intel_progress_current", level.currentteamintelprogress );
}
playerupdateintelprogress( var_0 )
{
self setclientomnvar( "ui_intel_progress_current", var_0 );
}
intelteamheadshot( var_0, var_1 )
{
level endon( "game_ended" );
level endon( "giveTeamIntel" );
level endon( "teamIntelFail" );
level.numheadshotsintel = 0;
var_2 = level.intelchallengearray[var_0].challengetarget;
var_3 = tablelookuprownum( "mp/intelChallenges.csv", 0, var_0 );
level thread teamintelstarthud( var_0, var_1, var_3, var_2 );
while ( level.numheadshotsintel < var_2 )
{
level waittill( "enemy_death" );
setteamintelprogress( var_2 - level.numheadshotsintel );
}
teamintelendhud( var_0, var_1 );
level thread intelteamreward( var_1 );
}
intelteamkillstreak( var_0, var_1 )
{
level endon( "game_ended" );
level endon( "giveTeamIntel" );
level endon( "teamIntelFail" );
level.numkillstreakkillsintel = 0;
var_2 = level.intelchallengearray[var_0].challengetarget;
var_3 = tablelookuprownum( "mp/intelChallenges.csv", 0, var_0 );
level thread teamintelstarthud( var_0, var_1, var_3, var_2 );
while ( level.numkillstreakkillsintel < var_2 )
{
level waittill( "enemy_death" );
setteamintelprogress( var_2 - level.numkillstreakkillsintel );
}
teamintelendhud( var_0, var_1 );
level thread intelteamreward( var_1 );
}
intelteamequipment( var_0, var_1 )
{
level endon( "game_ended" );
level endon( "giveTeamIntel" );
level endon( "teamIntelFail" );
level.numequipmentkillsintel = 0;
var_2 = level.intelchallengearray[var_0].challengetarget;
var_3 = tablelookuprownum( "mp/intelChallenges.csv", 0, var_0 );
level thread teamintelstarthud( var_0, var_1, var_3, var_2 );
while ( level.numequipmentkillsintel < var_2 )
{
level waittill( "enemy_death" );
setteamintelprogress( var_2 - level.numequipmentkillsintel );
}
teamintelendhud( var_0, var_1 );
level thread intelteamreward( var_1 );
}
teamintelstarthud( var_0, var_1, var_2, var_3 )
{
level endon( "game_ended" );
level endon( "giveTeamIntel" );
level endon( "teamIntelFail" );
level endon( "teamIntelComplete" );
level.isteamintelcomplete = 0;
level.currentteamintelname = var_0;
level.currentteamintelprogress = var_3;
foreach ( var_5 in level.players )
var_5 playerteamintelstarthud( var_0, var_1, var_2, var_3 );
for (;;)
{
level waittill( "player_spawned", var_5 );
var_5 playerteamintelstarthud( var_0, var_1, var_2, var_3 );
}
}
playerteamintelstarthud( var_0, var_1, var_2, var_3 )
{
if ( self.team != var_1 )
return;
self setclientomnvar( "ui_intel_active_index", var_2 );
playerupdateteamintelprogress();
if ( maps\mp\_utility::isreallyalive( self ) )
thread maps\mp\gametypes\_hud_message::splashnotify( var_0 + "_received" );
}
teamintelendhud( var_0, var_1 )
{
level notify( "teamIntelComplete" );
foreach ( var_3 in level.players )
{
if ( var_3.team != var_1 )
continue;
var_3 setclientomnvar( "ui_intel_active_index", -1 );
var_3 setclientomnvar( "ui_intel_progress_current", -1 );
if ( maps\mp\_utility::isreallyalive( var_3 ) )
var_3 thread maps\mp\gametypes\_hud_message::splashnotify( var_0 );
}
}
intelteamreward( var_0 )
{
level endon( "game_ended" );
level notify( "intelTeamReward" );
foreach ( var_2 in level.players )
{
if ( var_2.team != var_0 )
continue;
if ( !maps\mp\_utility::isreallyalive( var_2 ) )
continue;
var_2 thread intelteamrewardplayer();
}
level.isteamintelcomplete = 1;
}
intelteamrewardplayerwaittillcomplete( var_0 )
{
level endon( "intelTeamReward" );
while ( var_0 )
{
wait 1.0;
maps\mp\gametypes\_hostmigration::waittillhostmigrationdone();
if ( ( !isdefined( self.iscarrying ) || self.iscarrying == 0 ) && !isdefined( self.ui_securing ) )
var_0 = max( 0, var_0 - 1.0 );
if ( var_0 == 8 )
childthread flashintelicon();
}
}
intelteamrewardplayer()
{
level endon( "game_ended" );
var_0 = self;
var_0 maps\mp\_utility::giveperk( "specialty_explosivebullets", 0 );
var_0 setclientomnvar( "ui_horde_update_explosive", 1 );
var_0 maps\mp\_utility::_giveweapon( level.intelminigun );
var_0 givestartammo( level.intelminigun );
if ( var_0 common_scripts\utility::isweaponenabled() && var_0 common_scripts\utility::isusabilityenabled() && !var_0 maps\mp\_utility::isusingremote() && !var_0 maps\mp\killstreaks\_killstreaks::isusinghelisniper() )
var_0 switchtoweaponimmediate( level.intelminigun );
var_0 intelteamrewardplayerwaittillcomplete( 60 );
var_0 maps\mp\_utility::_unsetperk( "specialty_explosivebullets" );
var_0 setclientomnvar( "ui_horde_update_explosive", 0 );
var_1 = var_0 getcurrentprimaryweapon();
var_0 takeweapon( level.intelminigun );
if ( var_1 == level.intelminigun )
{
var_2 = var_0 maps\mp\killstreaks\_killstreaks::getfirstprimaryweapon();
var_0 switchtoweaponimmediate( var_2 );
}
}
flashintelicon()
{
self endon( "death" );
self endon( "disconnect" );
self setclientomnvar( "ui_horde_update_explosive", 1 );
wait 8;
self setclientomnvar( "ui_horde_update_explosive", 0 );
}
intelsplash()
{
}
deathwatcher()
{
self endon( "disconnect" );
self endon( "intel_cleanup" );
self waittill( "death" );
self setclientomnvar( "ui_intel_active_index", -1 );
thread maps\mp\gametypes\_hud_message::splashnotifydelayed( "ch_intel_failed" );
}
intelheadshotchallenge( var_0 )
{
self endon( "disconnect" );
self endon( "death" );
self endon( "intel_cleanup" );
var_1 = 0;
var_2 = level.intelchallengearray[var_0].challengetarget;
thread maps\mp\gametypes\_hud_message::splashnotifydelayed( var_0 + "_received", var_2 );
playerupdateintelprogress( var_2 );
while ( var_1 < var_2 )
{
self waittill( "got_a_kill", var_3, var_4, var_5 );
if ( maps\mp\_utility::iskillstreakweapon( var_4 ) )
continue;
if ( var_5 == "MOD_HEAD_SHOT" )
{
var_1++;
var_6 = var_2 - var_1;
playerupdateintelprogress( var_6 );
}
}
maps\mp\gametypes\_intel::awardplayerchallengecomplete( var_0 );
}
intelkillschallenge( var_0 )
{
self endon( "disconnect" );
self endon( "death" );
self endon( "intel_cleanup" );
var_1 = 0;
var_2 = level.intelchallengearray[var_0].challengetarget;
thread maps\mp\gametypes\_hud_message::splashnotifydelayed( var_0 + "_received", var_2 );
playerupdateintelprogress( var_2 );
while ( var_1 < var_2 )
{
self waittill( "got_a_kill", var_3, var_4 );
if ( maps\mp\_utility::iskillstreakweapon( var_4 ) )
continue;
var_1++;
var_5 = var_2 - var_1;
playerupdateintelprogress( var_5 );
}
maps\mp\gametypes\_intel::awardplayerchallengecomplete( var_0 );
}
intelcrouchkillschallenge( var_0 )
{
self endon( "disconnect" );
self endon( "death" );
self endon( "intel_cleanup" );
var_1 = 0;
var_2 = level.intelchallengearray[var_0].challengetarget;
playerupdateintelprogress( var_2 );
thread maps\mp\gametypes\_hud_message::splashnotifydelayed( var_0 + "_received", var_2 );
while ( var_1 < var_2 )
{
self waittill( "got_a_kill", var_3, var_4 );
if ( self getstance() == "crouch" )
{
if ( maps\mp\_utility::iskillstreakweapon( var_4 ) )
continue;
var_1++;
var_5 = var_2 - var_1;
playerupdateintelprogress( var_5 );
}
}
maps\mp\gametypes\_intel::awardplayerchallengecomplete( var_0 );
}
intelfoundshotkillschallenge( var_0 )
{
self endon( "disconnect" );
self endon( "death" );
self endon( "intel_cleanup" );
var_1 = 0;
var_2 = level.intelchallengearray[var_0].challengetarget;
thread maps\mp\gametypes\_hud_message::splashnotifydelayed( var_0 + "_received", var_2 );
playerupdateintelprogress( var_2 );
while ( var_1 < var_2 )
{
self waittill( "got_a_kill", var_3, var_4, var_5 );
if ( var_5 == "MOD_MELEE" && !maps\mp\gametypes\_weapons::isknifeonly( var_4 ) && !maps\mp\gametypes\_weapons::isriotshield( var_4 ) )
continue;
if ( maps\mp\gametypes\_weapons::isoffhandweapon( var_4 ) || maps\mp\_utility::iskillstreakweapon( var_4 ) || maps\mp\_utility::isenvironmentweapon( var_4 ) )
continue;
var_4 = maps\mp\_utility::weaponmap( var_4 );
if ( var_4 != self.pers["primaryWeapon"] && var_4 != self.pers["secondaryWeapon"] )
{
var_1++;
var_6 = var_2 - var_1;
playerupdateintelprogress( var_6 );
}
}
maps\mp\gametypes\_intel::awardplayerchallengecomplete( var_0 );
}
intelsecondarykillschallenge( var_0 )
{
self endon( "disconnect" );
self endon( "death" );
self endon( "intel_cleanup" );
var_1 = 0;
var_2 = level.intelchallengearray[var_0].challengetarget;
thread maps\mp\gametypes\_hud_message::splashnotifydelayed( var_0 + "_received", var_2 );
playerupdateintelprogress( var_2 );
while ( var_1 < var_2 )
{
self waittill( "got_a_kill", var_3, var_4, var_5 );
var_4 = maps\mp\_utility::weaponmap( var_4 );
if ( maps\mp\_utility::iscacsecondaryweapon( var_4 ) )
{
if ( var_5 == "MOD_MELEE" && !issubstr( var_4, "tactical" ) )
continue;
var_1++;
var_6 = var_2 - var_1;
playerupdateintelprogress( var_6 );
}
}
maps\mp\gametypes\_intel::awardplayerchallengecomplete( var_0 );
}
intelbackkillschallenge( var_0 )
{
self endon( "disconnect" );
self endon( "death" );
self endon( "intel_cleanup" );
var_1 = 0;
var_2 = level.intelchallengearray[var_0].challengetarget;
thread maps\mp\gametypes\_hud_message::splashnotifydelayed( var_0 + "_received", var_2 );
playerupdateintelprogress( var_2 );
while ( var_1 < var_2 )
{
self waittill( "got_a_kill", var_3, var_4, var_5 );
if ( maps\mp\_utility::iskillstreakweapon( var_4 ) )
continue;
var_6 = var_3.anglesondeath[1];
var_7 = self.anglesonkill[1];
var_8 = angleclamp180( var_6 - var_7 );
if ( abs( var_8 ) < 65 )
{
var_1++;
var_9 = var_2 - var_1;
playerupdateintelprogress( var_9 );
}
}
maps\mp\gametypes\_intel::awardplayerchallengecomplete( var_0 );
}
inteljumpshotkillschallenge( var_0 )
{
self endon( "disconnect" );
self endon( "death" );
self endon( "intel_cleanup" );
var_1 = 0;
var_2 = int( level.intelchallengearray[var_0].challengetarget );
thread maps\mp\gametypes\_hud_message::splashnotifydelayed( var_0 + "_received", var_2 );
playerupdateintelprogress( var_2 );
while ( var_1 < var_2 )
{
self waittill( "got_a_kill", var_3, var_4, var_5 );
if ( maps\mp\_utility::iskillstreakweapon( var_4 ) )
continue;
if ( !self isonground() )
{
var_1++;
var_6 = var_2 - var_1;
playerupdateintelprogress( var_6 );
}
}
maps\mp\gametypes\_intel::awardplayerchallengecomplete( var_0 );
}
intelknifekillchallenge( var_0 )
{
self endon( "disconnect" );
self endon( "death" );
self endon( "intel_cleanup" );
var_1 = 0;
var_2 = level.intelchallengearray[var_0].challengetarget;
thread maps\mp\gametypes\_hud_message::splashnotifydelayed( var_0 + "_received", var_2 );
playerupdateintelprogress( var_2 );
while ( var_1 < var_2 )
{
self waittill( "got_a_kill", var_3, var_4, var_5 );
if ( var_5 == "MOD_MELEE" )
{
var_1++;
var_6 = var_2 - var_1;
playerupdateintelprogress( var_6 );
}
}
maps\mp\gametypes\_intel::awardplayerchallengecomplete( var_0 );
}
intelbombkillchallenge( var_0 )
{
self endon( "disconnect" );
self endon( "death" );
self endon( "intel_cleanup" );
var_1 = 0;
var_2 = level.intelchallengearray[var_0].challengetarget;
thread maps\mp\gametypes\_hud_message::splashnotifydelayed( var_0 + "_received", var_2 );
playerupdateintelprogress( var_2 );
while ( var_1 < var_2 )
{
self waittill( "got_a_kill", var_3, var_4, var_5 );
if ( maps\mp\_utility::iskillstreakweapon( var_4 ) )
continue;
if ( var_4 == "throwingknife_mp" )
continue;
if ( isexplosivedamagemod( var_5 ) || var_5 == "MOD_IMPACT" )
{
var_1++;
var_6 = var_2 - var_1;
playerupdateintelprogress( var_6 );
}
}
maps\mp\gametypes\_intel::awardplayerchallengecomplete( var_0 );
}
intelpronekillschallenge( var_0 )
{
self endon( "disconnect" );
self endon( "death" );
self endon( "intel_cleanup" );
var_1 = 0;
var_2 = int( level.intelchallengearray[var_0].challengetarget );
thread maps\mp\gametypes\_hud_message::splashnotifydelayed( var_0 + "_received", var_2 );
playerupdateintelprogress( var_2 );
while ( var_1 < var_2 )
{
self waittill( "got_a_kill", var_3, var_4, var_5 );
if ( maps\mp\_utility::iskillstreakweapon( var_4 ) )
continue;
if ( self getstance() == "prone" )
{
var_1++;
var_6 = var_2 - var_1;
playerupdateintelprogress( var_6 );
}
}
maps\mp\gametypes\_intel::awardplayerchallengecomplete( var_0 );
}
inteltbagchallenge( var_0 )
{
self endon( "disconnect" );
self endon( "death" );
self endon( "intel_cleanup" );
var_1 = level.intelchallengearray[var_0].challengetarget;
thread maps\mp\gametypes\_hud_message::splashnotifydelayed( var_0 + "_received" );
for (;;)
{
self waittill( "got_a_kill", var_2, var_3, var_4 );
if ( maps\mp\_utility::iskillstreakweapon( var_3 ) )
continue;
thread watchfortbag( var_2.origin, var_0 );
}
}
watchfortbag( var_0, var_1 )
{
self notify( "watchForTbag" );
self endon( "watchForTbag" );
self endon( "death" );
self endon( "disconnect" );
self endon( "intel_cleanup" );
var_2 = 0;
self notifyonplayercommand( "Tbag_adjustedStance", "+stance" );
self notifyonplayercommand( "Tbag_adjustedStance", "+goStand" );
if ( !level.console && !isai( self ) )
{
self notifyonplayercommand( "Tbag_adjustedStance", "+togglecrouch" );
self notifyonplayercommand( "Tbag_adjustedStance", "+movedown" );
}
for (;;)
{
while ( self getstance() != "stand" )
wait 0.05;
self waittill( "Tbag_adjustedStance" );
while ( self getstance() != "crouch" )
wait 0.05;
if ( distance2d( self.origin, var_0 ) < 128 )
{
self waittill( "Tbag_adjustedStance" );
while ( self getstance() != "stand" )
wait 0.05;
if ( distance2d( self.origin, var_0 ) < 128 )
var_2++;
}
if ( var_2 )
{
thread maps\mp\gametypes\_intel::awardplayerchallengecomplete( var_1 );
return;
}
}
}
givejuggernautchallenge( var_0 )
{
thread deathwatcher();
var_1 = tablelookuprownum( "mp/intelChallenges.csv", 0, var_0 );
self setclientomnvar( "ui_intel_active_index", var_1 );
switch ( var_0 )
{
case "ch_intel_jugg_maniac_knife":
thread inteljuggmaniacknifechallenge( var_0 );
break;
case "ch_intel_jugg_maniac_throwingknife":
thread inteljuggmaniacthrowingknifechallenge( var_0 );
break;
case "ch_intel_jugg_maniac_backknife":
thread inteljuggmaniacbackknifechallenge( var_0 );
break;
case "ch_intel_jugg_assault_kills":
thread inteljuggassaultkillschallenge( var_0 );
break;
case "ch_intel_jugg_recon_shieldkills":
thread inteljuggreconshieldkillschallenge( var_0 );
break;
case "ch_intel_jugg_recon_pistolkills":
thread inteljuggreconpistolkillschallenge( var_0 );
break;
default:
}
}
inteljuggassaultkillschallenge( var_0 )
{
self endon( "disconnect" );
self endon( "death" );
self endon( "intel_cleanup" );
var_1 = 0;
var_2 = int( level.intelchallengearray[var_0].challengetarget );
thread maps\mp\gametypes\_hud_message::splashnotifydelayed( var_0 + "_received", var_2 );
playerupdateintelprogress( var_2 );
while ( var_1 < var_2 )
{
self waittill( "got_a_kill", var_3, var_4, var_5 );
if ( maps\mp\_utility::isjuggernautweapon( var_4 ) )
{
var_1++;
var_6 = var_2 - var_1;
playerupdateintelprogress( var_6 );
}
}
maps\mp\gametypes\_intel::awardplayerchallengecomplete( var_0 );
}
inteljuggmaniacknifechallenge( var_0 )
{
self endon( "disconnect" );
self endon( "death" );
self endon( "intel_cleanup" );
var_1 = 0;
var_2 = int( level.intelchallengearray[var_0].challengetarget );
thread maps\mp\gametypes\_hud_message::splashnotifydelayed( var_0 + "_received", var_2 );
playerupdateintelprogress( var_2 );
while ( var_1 < var_2 )
{
self waittill( "got_a_kill", var_3, var_4, var_5 );
if ( var_4 == "iw6_knifeonlyjugg_mp" )
{
var_1++;
var_6 = var_2 - var_1;
playerupdateintelprogress( var_6 );
}
}
maps\mp\gametypes\_intel::awardplayerchallengecomplete( var_0 );
}
inteljuggmaniacthrowingknifechallenge( var_0 )
{
self endon( "disconnect" );
self endon( "death" );
self endon( "intel_cleanup" );
var_1 = 0;
var_2 = int( level.intelchallengearray[var_0].challengetarget );
thread maps\mp\gametypes\_hud_message::splashnotifydelayed( var_0 + "_received", var_2 );
playerupdateintelprogress( var_2 );
while ( var_1 < var_2 )
{
self waittill( "got_a_kill", var_3, var_4, var_5 );
if ( var_4 == "throwingknifejugg_mp" )
{
var_1++;
var_6 = var_2 - var_1;
playerupdateintelprogress( var_6 );
}
}
maps\mp\gametypes\_intel::awardplayerchallengecomplete( var_0 );
}
inteljuggmaniacbackknifechallenge( var_0 )
{
self endon( "disconnect" );
self endon( "death" );
self endon( "intel_cleanup" );
var_1 = 0;
var_2 = level.intelchallengearray[var_0].challengetarget;
thread maps\mp\gametypes\_hud_message::splashnotifydelayed( var_0 + "_received", var_2 );
playerupdateintelprogress( var_2 );
while ( var_1 < var_2 )
{
self waittill( "got_a_kill", var_3, var_4, var_5 );
if ( maps\mp\_utility::isjuggernautweapon( var_4 ) )
{
var_6 = var_3.anglesondeath[1];
var_7 = self.anglesonkill[1];
var_8 = angleclamp180( var_6 - var_7 );
if ( abs( var_8 ) < 90 )
{
var_1++;
var_9 = var_2 - var_1;
playerupdateintelprogress( var_9 );
}
}
}
maps\mp\gametypes\_intel::awardplayerchallengecomplete( var_0 );
}
inteljuggreconshieldkillschallenge( var_0 )
{
self endon( "disconnect" );
self endon( "death" );
self endon( "intel_cleanup" );
var_1 = 0;
var_2 = int( level.intelchallengearray[var_0].challengetarget );
thread maps\mp\gametypes\_hud_message::splashnotifydelayed( var_0 + "_received", var_2 );
playerupdateintelprogress( var_2 );
while ( var_1 < var_2 )
{
self waittill( "got_a_kill", var_3, var_4, var_5 );
if ( var_4 == "iw6_riotshieldjugg_mp" )
{
var_1++;
var_6 = var_2 - var_1;
playerupdateintelprogress( var_6 );
}
}
maps\mp\gametypes\_intel::awardplayerchallengecomplete( var_0 );
}
inteljuggreconpistolkillschallenge( var_0 )
{
self endon( "disconnect" );
self endon( "death" );
self endon( "intel_cleanup" );
var_1 = 0;
var_2 = int( level.intelchallengearray[var_0].challengetarget );
thread maps\mp\gametypes\_hud_message::splashnotifydelayed( var_0 + "_received", var_2 );
playerupdateintelprogress( var_2 );
while ( var_1 < var_2 )
{
self waittill( "got_a_kill", var_3, var_4, var_5 );
if ( var_4 == "iw6_magnumjugg_mp" && var_5 != "MOD_MELEE" )
{
var_1++;
var_6 = var_2 - var_1;
playerupdateintelprogress( var_6 );
}
}
maps\mp\gametypes\_intel::awardplayerchallengecomplete( var_0 );
}

View File

@ -0,0 +1,523 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
level.killcam = maps\mp\gametypes\_tweakables::gettweakablevalue( "game", "allowkillcam" );
}
setcinematiccamerastyle( var_0, var_1, var_2 )
{
self setclientomnvar( "cam_scene_name", var_0 );
self setclientomnvar( "cam_scene_lead", var_1 );
self setclientomnvar( "cam_scene_support", var_2 );
}
setkillcamerastyle( var_0, var_1, var_2, var_3, var_4, var_5 )
{
var_5.camerastyle = "unknown";
if ( isdefined( var_1 ) && isdefined( var_1.agent_type ) )
{
if ( var_1.agent_type == "dog" || var_1.agent_type == "wolf" )
{
setcinematiccamerastyle( "killcam_dog", var_0 getentitynumber(), var_3 getentitynumber() );
var_5.camerastyle = "killcam_dog";
}
else if ( var_1.agent_type == "beastmen" )
{
setcinematiccamerastyle( "killcam_agent_firstperson", var_0 getentitynumber(), var_3 getentitynumber() );
var_5.camerastyle = "killcam_agent_firstperson";
}
else
{
setcinematiccamerastyle( "killcam_agent", var_0 getentitynumber(), var_3 getentitynumber() );
var_5.camerastyle = "killcam_agent";
}
return 1;
}
else if ( var_4 > 0 )
{
setcinematiccamerastyle( "unknown", -1, -1 );
return 0;
}
else
{
setcinematiccamerastyle( "unknown", -1, -1 );
return 0;
}
return 0;
}
trimkillcamtime( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
var_9 = var_5 + var_6;
if ( isdefined( var_8 ) && var_9 > var_8 )
{
if ( var_8 < 2 )
return;
if ( var_8 - var_5 >= 1 )
var_6 = var_8 - var_5;
else
{
var_6 = 1;
var_5 = var_8 - 1;
}
var_9 = var_5 + var_6;
}
var_10 = var_5 + var_7;
if ( isdefined( var_1 ) && isdefined( var_1.lastspawntime ) )
var_11 = var_1.lastspawntime;
else
{
var_11 = var_2.lastspawntime;
if ( isdefined( var_2.deathtime ) )
{
if ( gettime() - var_2.deathtime < var_6 * 1000.0 )
{
var_6 = 1.0;
var_6 = var_6 - 0.05;
var_9 = var_5 + var_6;
}
}
}
var_12 = ( gettime() - var_11 ) / 1000.0;
if ( var_10 > var_12 && var_12 > var_7 )
{
var_13 = var_12 - var_7;
if ( var_5 > var_13 )
{
var_5 = var_13;
var_9 = var_5 + var_6;
var_10 = var_5 + var_7;
}
}
var_14 = spawnstruct();
var_14.camtime = var_5;
var_14.postdelay = var_6;
var_14.killcamlength = var_9;
var_14.killcamoffset = var_10;
return var_14;
}
prekillcamnotify( var_0, var_1 )
{
if ( isdefined( var_1 ) && !isagent( var_1 ) )
self loadcustomizationplayerview( var_1 );
}
killcam( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10, var_11, var_12 )
{
self endon( "disconnect" );
self endon( "spawned" );
level endon( "game_ended" );
if ( var_2 < 0 || !isdefined( var_10 ) )
return;
level.numplayerswaitingtoenterkillcam++;
if ( level.numplayerswaitingtoenterkillcam > 1 )
wait( 0.05 * ( level.numplayerswaitingtoenterkillcam - 1 ) );
wait 0.05;
level.numplayerswaitingtoenterkillcam--;
if ( getdvar( "scr_killcam_time" ) == "" )
{
if ( var_5 == "artillery_mp" || var_5 == "stealth_bomb_mp" || var_5 == "warhawk_mortar_mp" )
var_13 = ( gettime() - var_4 ) / 1000 - var_6 - 0.1;
else if ( var_5 == "remote_mortar_missile_mp" )
var_13 = 6.5;
else if ( level.showingfinalkillcam )
var_13 = 4.0;
else if ( var_5 == "apache_minigun_mp" )
var_13 = 3.0;
else if ( var_5 == "javelin_mp" )
var_13 = 8;
else if ( issubstr( var_5, "remotemissile_" ) )
var_13 = 5;
else if ( isdefined( var_0.sentrytype ) && var_0.sentrytype == "multiturret" )
var_13 = 2.0;
else if ( isdefined( var_0.carestrike ) )
var_13 = 2.0;
else if ( !var_8 || var_8 > 5.0 )
var_13 = 5.0;
else if ( var_5 == "frag_grenade_mp" || var_5 == "frag_grenade_short_mp" || var_5 == "semtex_mp" || var_5 == "semtexproj_mp" || var_5 == "thermobaric_grenade_mp" || var_5 == "mortar_shell__mp" )
var_13 = 4.25;
else
var_13 = 2.5;
}
else
var_13 = getdvarfloat( "scr_killcam_time" );
if ( isdefined( var_9 ) )
{
if ( var_13 > var_9 )
var_13 = var_9;
if ( var_13 < 0.05 )
var_13 = 0.05;
}
if ( getdvar( "scr_killcam_posttime" ) == "" )
var_14 = 2;
else
{
var_14 = getdvarfloat( "scr_killcam_posttime" );
if ( var_14 < 0.05 )
var_14 = 0.05;
}
if ( var_2 < 0 || !isdefined( var_10 ) )
return;
var_15 = trimkillcamtime( var_0, var_1, var_10, var_11, var_3, var_13, var_14, var_6, var_9 );
if ( !isdefined( var_15 ) )
return;
self setclientomnvar( "ui_killcam_end_milliseconds", 0 );
if ( isplayer( var_10 ) )
{
self setclientomnvar( "ui_killcam_killedby_id", var_10 getentitynumber() );
self setclientomnvar( "ui_killcam_victim_id", var_11 getentitynumber() );
self loadcustomizationplayerview( var_10 );
}
if ( maps\mp\_utility::iskillstreakweapon( var_5 ) )
{
if ( var_12 == "MOD_MELEE" && maps\mp\killstreaks\_killstreaks::isairdropmarker( var_5 ) )
{
var_16 = tablelookuprownum( "mp/statsTable.csv", 4, "iw6_knifeonly" );
self setclientomnvar( "ui_killcam_killedby_weapon", var_16 );
self setclientomnvar( "ui_killcam_killedby_killstreak", -1 );
}
else
{
var_17 = maps\mp\_utility::getkillstreakrownum( level.killstreakweildweapons[var_5] );
self setclientomnvar( "ui_killcam_killedby_killstreak", var_17 );
self setclientomnvar( "ui_killcam_killedby_weapon", -1 );
self setclientomnvar( "ui_killcam_killedby_attachment1", -1 );
self setclientomnvar( "ui_killcam_killedby_attachment2", -1 );
self setclientomnvar( "ui_killcam_killedby_attachment3", -1 );
self setclientomnvar( "ui_killcam_killedby_attachment4", -1 );
}
}
else
{
var_18 = [];
var_19 = getweaponbasename( var_5 );
if ( isdefined( var_19 ) )
{
if ( var_12 == "MOD_MELEE" && !maps\mp\gametypes\_weapons::isriotshield( var_5 ) )
var_19 = "iw6_knifeonly";
else
{
var_19 = maps\mp\_utility::weaponmap( var_19 );
var_19 = maps\mp\_utility::strip_suffix( var_19, "_mp" );
}
var_16 = tablelookuprownum( "mp/statsTable.csv", 4, var_19 );
self setclientomnvar( "ui_killcam_killedby_weapon", var_16 );
self setclientomnvar( "ui_killcam_killedby_killstreak", -1 );
if ( var_19 != "iw6_knifeonly" )
var_18 = getweaponattachments( var_5 );
}
else
{
self setclientomnvar( "ui_killcam_killedby_weapon", -1 );
self setclientomnvar( "ui_killcam_killedby_killstreak", -1 );
}
for ( var_20 = 0; var_20 < 4; var_20++ )
{
if ( isdefined( var_18[var_20] ) )
{
var_21 = tablelookuprownum( "mp/attachmentTable.csv", 4, maps\mp\_utility::attachmentmap_tobase( var_18[var_20] ) );
self setclientomnvar( "ui_killcam_killedby_attachment" + ( var_20 + 1 ), var_21 );
continue;
}
self setclientomnvar( "ui_killcam_killedby_attachment" + ( var_20 + 1 ), -1 );
}
var_22 = [ 0, 0 ];
var_23 = var_10.pers["loadoutPerks"];
for ( var_20 = 0; var_20 < var_23.size; var_20++ )
{
var_24 = int( tablelookup( "mp/killCamAbilitiesBitMaskTable.csv", 1, var_23[var_20], 0 ) );
if ( var_24 == 0 )
continue;
var_25 = int( ( var_24 - 1 ) / 24 );
var_26 = 1 << ( var_24 - 1 ) % 24;
var_22[var_25] = var_22[var_25] | var_26;
}
self setclientomnvar( "ui_killcam_killedby_abilities1", var_22[0] );
self setclientomnvar( "ui_killcam_killedby_abilities2", var_22[1] );
}
var_27 = getdvarint( "scr_player_forcerespawn" );
if ( var_8 && !level.gameended || isdefined( self ) && isdefined( self.battlebuddy ) && !level.gameended || var_27 == 0 && !level.gameended )
self setclientomnvar( "ui_killcam_text", "skip" );
else if ( !level.gameended )
self setclientomnvar( "ui_killcam_text", "respawn" );
else
self setclientomnvar( "ui_killcam_text", "none" );
var_28 = gettime();
self notify( "begin_killcam", var_28 );
if ( !isagent( var_10 ) && isdefined( var_10 ) )
var_10 visionsyncwithplayer( var_11 );
maps\mp\_utility::updatesessionstate( "spectator", "hud_status_dead" );
self.spectatekillcam = 1;
if ( isagent( var_10 ) || isagent( var_0 ) )
{
var_2 = var_11 getentitynumber();
var_7 = var_7 - 25;
}
self.forcespectatorclient = var_2;
self.killcamentity = -1;
var_29 = setkillcamerastyle( var_0, var_1, var_2, var_11, var_3, var_15 );
if ( !var_29 )
thread setkillcamentity( var_3, var_15.killcamoffset, var_4 );
self.archivetime = var_15.killcamoffset;
self.killcamlength = var_15.killcamlength;
self.psoffsettime = var_7;
self allowspectateteam( "allies", 1 );
self allowspectateteam( "axis", 1 );
self allowspectateteam( "freelook", 1 );
self allowspectateteam( "none", 1 );
if ( level.multiteambased )
{
foreach ( var_31 in level.teamnamelist )
self allowspectateteam( var_31, 1 );
}
thread endedkillcamcleanup();
wait 0.05;
if ( !isdefined( self ) )
return;
if ( self.archivetime < var_15.killcamoffset )
{
var_33 = var_15.killcamoffset - self.archivetime;
if ( game["truncated_killcams"] < 32 )
{
setmatchdata( "killcam", game["truncated_killcams"], var_33 );
game["truncated_killcams"]++;
}
}
var_15.camtime = self.archivetime - 0.05 - var_6;
var_15.killcamlength = var_15.camtime + var_15.postdelay;
self.killcamlength = var_15.killcamlength;
if ( var_15.camtime <= 0 )
{
maps\mp\_utility::updatesessionstate( "dead" );
maps\mp\_utility::clearkillcamstate();
self notify( "killcam_ended" );
return;
}
var_34 = level.showingfinalkillcam;
self setclientomnvar( "ui_killcam_end_milliseconds", int( var_15.killcamlength * 1000 ) + gettime() );
if ( var_34 )
self setclientomnvar( "ui_killcam_victim_or_attacker", 1 );
if ( var_34 )
thread dofinalkillcamfx( var_15, self.killcamentity, var_10, var_11, var_12 );
self.killcam = 1;
if ( isdefined( self.battlebuddy ) && !level.gameended )
self.battlebuddyrespawntimestamp = gettime();
thread spawnedkillcamcleanup();
if ( !level.showingfinalkillcam )
thread waitskipkillcambutton( var_8 );
else
self notify( "showing_final_killcam" );
thread endkillcamifnothingtoshow();
waittillkillcamover();
if ( level.showingfinalkillcam )
{
thread maps\mp\gametypes\_playerlogic::spawnendofgame();
return;
}
thread calculatekillcamtime( var_28 );
thread killcamcleanup( 1 );
}
dofinalkillcamfx( var_0, var_1, var_2, var_3, var_4 )
{
self endon( "killcam_ended" );
if ( isdefined( level.doingfinalkillcamfx ) )
return;
level.doingfinalkillcamfx = 1;
var_5 = var_0.camtime;
var_6 = 0;
var_7 = var_3 getentitynumber();
if ( !isdefined( var_0.attackernum ) )
var_0.attackernum = var_2 getentitynumber();
var_8 = var_5;
if ( var_8 > 1.0 )
{
var_8 = 1.0;
var_6 = var_6 + 1.0;
wait( var_5 - var_6 );
}
setslowmotion( 1.0, 0.25, var_8 );
wait( var_8 + 0.5 );
setslowmotion( 0.25, 1, 1 );
level.doingfinalkillcamfx = undefined;
}
calculatekillcamtime( var_0 )
{
var_1 = int( gettime() - var_0 );
maps\mp\_utility::incplayerstat( "killcamtimewatched", var_1 );
}
waittillkillcamover()
{
self endon( "abort_killcam" );
wait( self.killcamlength - 0.05 );
}
setkillcamentity( var_0, var_1, var_2 )
{
self endon( "disconnect" );
self endon( "killcam_ended" );
var_3 = gettime() - var_1 * 1000;
if ( var_2 > var_3 )
{
wait 0.05;
var_1 = self.archivetime;
var_3 = gettime() - var_1 * 1000;
if ( var_2 > var_3 )
wait( ( var_2 - var_3 ) / 1000 );
}
self.killcamentity = var_0;
}
waitskipkillcambutton( var_0 )
{
self endon( "disconnect" );
self endon( "killcam_ended" );
if ( !isai( self ) )
{
self notifyonplayercommand( "kc_respawn", "+usereload" );
self notifyonplayercommand( "kc_respawn", "+activate" );
self waittill( "kc_respawn" );
self.cancelkillcam = 1;
if ( !maps\mp\_utility::matchmakinggame() )
maps\mp\_utility::incplayerstat( "killcamskipped", 1 );
if ( var_0 <= 0 )
maps\mp\_utility::clearlowermessage( "kc_info" );
self notify( "abort_killcam" );
}
}
endkillcamifnothingtoshow()
{
self endon( "disconnect" );
self endon( "killcam_ended" );
for (;;)
{
if ( self.archivetime <= 0 )
break;
wait 0.05;
}
self notify( "abort_killcam" );
}
spawnedkillcamcleanup()
{
self endon( "disconnect" );
self endon( "killcam_ended" );
self waittill( "spawned" );
thread killcamcleanup( 0 );
}
endedkillcamcleanup()
{
self endon( "disconnect" );
self endon( "killcam_ended" );
level waittill( "game_ended" );
thread killcamcleanup( 1 );
}
killcamcleanup( var_0 )
{
self setclientomnvar( "ui_killcam_end_milliseconds", 0 );
self.killcam = undefined;
var_1 = level.showingfinalkillcam;
if ( !var_1 )
setcinematiccamerastyle( "unknown", -1, -1 );
if ( !level.gameended )
maps\mp\_utility::clearlowermessage( "kc_info" );
thread maps\mp\gametypes\_spectating::setspectatepermissions();
self notify( "killcam_ended" );
if ( !var_0 )
return;
maps\mp\_utility::updatesessionstate( "dead" );
maps\mp\_utility::clearkillcamstate();
}

View File

@ -0,0 +1,723 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
if ( !isdefined( game["gamestarted"] ) )
{
game["menu_team"] = "team_marinesopfor";
if ( level.multiteambased )
game["menu_team"] = "team_mt_options";
if ( maps\mp\_utility::bot_is_fireteam_mode() )
{
level.fireteam_menu = "class_commander_" + level.gametype;
game["menu_class"] = level.fireteam_menu;
game["menu_class_allies"] = level.fireteam_menu;
game["menu_class_axis"] = level.fireteam_menu;
}
else
{
game["menu_class"] = "class";
game["menu_class_allies"] = "class_marines";
game["menu_class_axis"] = "class_opfor";
}
game["menu_changeclass_allies"] = "changeclass_marines";
game["menu_changeclass_axis"] = "changeclass_opfor";
if ( level.multiteambased )
{
for ( var_0 = 0; var_0 < level.teamnamelist.size; var_0++ )
{
var_1 = "menu_class_" + level.teamnamelist[var_0];
var_2 = "menu_changeclass_" + level.teamnamelist[var_0];
game[var_1] = game["menu_class_allies"];
game[var_2] = "changeclass_marines";
}
}
game["menu_changeclass"] = "changeclass";
if ( level.console )
{
game["menu_controls"] = "ingame_controls";
if ( level.splitscreen )
{
if ( level.multiteambased )
{
for ( var_0 = 0; var_0 < level.teamnamelist.size; var_0++ )
{
var_1 = "menu_class_" + level.teamnamelist[var_0];
var_2 = "menu_changeclass_" + level.teamnamelist[var_0];
game[var_1] = game[var_1] + "_splitscreen";
game[var_2] = game[var_2] + "_splitscreen";
}
}
game["menu_team"] = game["menu_team"] + "_splitscreen";
game["menu_class_allies"] = game["menu_class_allies"] + "_splitscreen";
game["menu_class_axis"] = game["menu_class_axis"] + "_splitscreen";
game["menu_changeclass_allies"] = game["menu_changeclass_allies"] + "_splitscreen";
game["menu_changeclass_axis"] = game["menu_changeclass_axis"] + "_splitscreen";
game["menu_controls"] = game["menu_controls"] + "_splitscreen";
game["menu_changeclass_defaults_splitscreen"] = "changeclass_splitscreen_defaults";
game["menu_changeclass_custom_splitscreen"] = "changeclass_splitscreen_custom";
precachemenu( game["menu_changeclass_defaults_splitscreen"] );
precachemenu( game["menu_changeclass_custom_splitscreen"] );
}
precachemenu( game["menu_controls"] );
}
precachemenu( game["menu_team"] );
precachemenu( game["menu_class_allies"] );
precachemenu( game["menu_class_axis"] );
precachemenu( game["menu_changeclass"] );
precachemenu( game["menu_changeclass_allies"] );
precachemenu( game["menu_changeclass_axis"] );
precachemenu( game["menu_class"] );
precachestring( &"MP_HOST_ENDED_GAME" );
precachestring( &"MP_HOST_ENDGAME_RESPONSE" );
}
level thread onplayerconnect();
}
onplayerconnect()
{
for (;;)
{
level waittill( "connected", var_0 );
var_0 thread watchforclasschange();
var_0 thread watchforteamchange();
var_0 thread watchforleavegame();
var_0 thread connectedmenus();
}
}
connectedmenus()
{
}
getclasschoice( var_0 )
{
if ( var_0 > 10 )
{
if ( var_0 > 10 && var_0 < 17 )
{
var_0 = var_0 - 10;
var_0 = "axis_recipe" + var_0;
}
else if ( var_0 > 16 && var_0 < 23 )
{
var_0 = var_0 - 16;
var_0 = "allies_recipe" + var_0;
}
}
else
var_0 = "custom" + var_0;
return var_0;
}
watchforclasschange()
{
self endon( "disconnect" );
level endon( "game_ended" );
for (;;)
{
self waittill( "luinotifyserver", var_0, var_1 );
if ( var_0 != "class_select" )
continue;
if ( getdvarint( "systemlink" ) && getdvarint( "xblive_competitionmatch" ) && self ismlgspectator() )
{
self setclientomnvar( "ui_options_menu", 0 );
continue;
}
var_2 = isai( self ) || issubstr( self.name, "tcBot" );
if ( !var_2 )
{
if ( !isai( self ) && "" + var_1 != "callback" )
self setclientomnvar( "ui_loadout_selected", var_1 );
}
if ( isdefined( self.waitingtoselectclass ) && self.waitingtoselectclass )
continue;
if ( !maps\mp\_utility::allowclasschoice() || maps\mp\_utility::showfakeloadout() )
continue;
if ( "" + var_1 != "callback" )
{
if ( isdefined( self.pers["isBot"] ) && self.pers["isBot"] )
{
self.pers["class"] = var_1;
self.class = var_1;
}
else
{
var_3 = var_1 + 1;
var_3 = getclasschoice( var_3 );
if ( !isdefined( self.pers["class"] ) || var_3 == self.pers["class"] )
continue;
self.pers["class"] = var_3;
self.class = var_3;
if ( level.ingraceperiod && !self.hasdonecombat )
{
maps\mp\gametypes\_class::setclass( self.pers["class"] );
self.tag_stowed_back = undefined;
self.tag_stowed_hip = undefined;
maps\mp\gametypes\_class::giveloadout( self.pers["team"], self.pers["class"] );
}
else if ( isalive( self ) )
self iprintlnbold( game["strings"]["change_class"] );
}
continue;
}
menuclass( "callback" );
}
}
watchforleavegame()
{
self endon( "disconnect" );
level endon( "game_ended" );
for (;;)
{
self waittill( "luinotifyserver", var_0, var_1 );
if ( var_0 != "end_game" )
continue;
if ( maps\mp\_utility::is_aliens() )
{
[[ level.forceendgame_alien ]]();
continue;
}
level thread maps\mp\gametypes\_gamelogic::forceend( var_1 );
}
}
watchforteamchange()
{
self endon( "disconnect" );
level endon( "game_ended" );
for (;;)
{
self waittill( "luinotifyserver", var_0, var_1 );
if ( var_0 != "team_select" )
continue;
if ( maps\mp\_utility::matchmakinggame() )
continue;
if ( var_1 != 3 )
thread showloadoutmenu();
if ( var_1 == 3 )
{
self setclientomnvar( "ui_spectator_selected", 1 );
self setclientomnvar( "ui_loadout_selected", -1 );
self.spectating_actively = 1;
if ( getdvarint( "systemlink" ) && getdvarint( "xblive_competitionmatch" ) )
{
self setmlgspectator( 1 );
self.pers["mlgSpectator"] = 1;
thread maps\mp\gametypes\_spectating::setmlgcamvisibility( 1 );
thread maps\mp\gametypes\_spectating::setspectatepermissions();
self setclientomnvar( "ui_options_menu", 2 );
}
}
else
{
self setclientomnvar( "ui_spectator_selected", -1 );
self.spectating_actively = 0;
if ( getdvarint( "systemlink" ) && getdvarint( "xblive_competitionmatch" ) )
{
self setmlgspectator( 0 );
self.pers["mlgSpectator"] = 0;
thread maps\mp\gametypes\_spectating::setmlgcamvisibility( 0 );
}
}
self setclientomnvar( "ui_team_selected", var_1 );
if ( var_1 == 0 )
var_1 = "axis";
else if ( var_1 == 1 )
var_1 = "allies";
else if ( var_1 == 2 )
var_1 = "random";
else
var_1 = "spectator";
if ( isdefined( self.pers["team"] ) && var_1 == self.pers["team"] )
{
self notify( "selected_same_team" );
continue;
}
self setclientomnvar( "ui_loadout_selected", -1 );
if ( var_1 == "axis" )
{
thread setteam( "axis" );
continue;
}
if ( var_1 == "allies" )
{
thread setteam( "allies" );
continue;
}
if ( var_1 == "random" )
{
thread autoassign();
continue;
}
if ( var_1 == "spectator" )
thread setspectator();
}
}
showloadoutmenu()
{
self endon( "disconnect" );
level endon( "game_ended" );
common_scripts\utility::waittill_any( "joined_team", "selected_same_team" );
self setclientomnvar( "ui_options_menu", 2 );
}
autoassign()
{
if ( maps\mp\_utility::is_aliens() || level.gametype == "infect" )
thread setteam( "allies" );
else if ( ( getdvarint( "squad_match" ) == 1 || getdvarint( "squad_vs_squad" ) == 1 || getdvarint( "squad_use_hosts_squad" ) == 1 ) && isdefined( self.bot_team ) )
thread setteam( self.bot_team );
else if ( !isdefined( self.team ) )
{
if ( self ismlgspectator() )
thread setspectator();
else if ( level.teamcount["axis"] < level.teamcount["allies"] )
thread setteam( "axis" );
else if ( level.teamcount["allies"] < level.teamcount["axis"] )
thread setteam( "allies" );
else if ( getteamscore( "allies" ) > getteamscore( "axis" ) )
thread setteam( "axis" );
else
thread setteam( "allies" );
}
else
{
if ( self ismlgspectator() )
{
thread setspectator();
return;
}
if ( level.teamcount["axis"] < level.teamcount["allies"] && self.team != "axis" )
{
thread setteam( "axis" );
return;
}
if ( level.teamcount["allies"] < level.teamcount["axis"] && self.team != "allies" )
{
thread setteam( "allies" );
return;
}
if ( level.teamcount["allies"] == level.teamcount["axis"] )
{
if ( getteamscore( "allies" ) > getteamscore( "axis" ) && self.team != "axis" )
thread setteam( "axis" );
else if ( self.team != "allies" )
thread setteam( "allies" );
}
}
}
setteam( var_0 )
{
self endon( "disconnect" );
if ( !isai( self ) && level.teambased && !maps\mp\gametypes\_teams::getjointeampermissions( var_0 ) )
return;
if ( level.ingraceperiod && !self.hasdonecombat )
self.hasspawned = 0;
if ( self.sessionstate == "playing" )
{
self.switching_teams = 1;
self.joining_team = var_0;
self.leaving_team = self.pers["team"];
}
addtoteam( var_0 );
if ( self.sessionstate == "playing" )
self suicide();
waitforclassselect();
endrespawnnotify();
if ( self.sessionstate == "spectator" )
{
if ( game["state"] == "postgame" )
return;
if ( game["state"] == "playing" && !maps\mp\_utility::isinkillcam() )
{
if ( isdefined( self.waitingtospawnamortize ) && self.waitingtospawnamortize )
return;
thread maps\mp\gametypes\_playerlogic::spawnclient();
}
thread maps\mp\gametypes\_spectating::setspectatepermissions();
}
self notify( "okToSpawn" );
}
setspectator()
{
if ( isdefined( self.pers["team"] ) && self.pers["team"] == "spectator" )
return;
if ( isalive( self ) )
{
self.switching_teams = 1;
self.joining_team = "spectator";
self.leaving_team = self.pers["team"];
self suicide();
}
self notify( "becameSpectator" );
addtoteam( "spectator" );
self.pers["class"] = undefined;
self.class = undefined;
thread maps\mp\gametypes\_playerlogic::spawnspectator();
}
waitforclassselect()
{
self endon( "disconnect" );
level endon( "game_ended" );
self.waitingtoselectclass = 1;
for (;;)
{
if ( maps\mp\_utility::allowclasschoice() || maps\mp\_utility::showfakeloadout() && !isai( self ) )
self waittill( "luinotifyserver", var_0, var_1 );
else
{
bypassclasschoice();
break;
}
if ( var_0 != "class_select" )
continue;
if ( self.team == "spectator" )
continue;
if ( "" + var_1 != "callback" )
{
if ( isdefined( self.pers["isBot"] ) && self.pers["isBot"] )
{
self.pers["class"] = var_1;
self.class = var_1;
}
else
{
var_1 = var_1 + 1;
self.pers["class"] = getclasschoice( var_1 );
self.class = getclasschoice( var_1 );
}
self.waitingtoselectclass = 0;
}
else
{
self.waitingtoselectclass = 0;
menuclass( "callback" );
}
break;
}
}
beginclasschoice( var_0 )
{
var_1 = self.pers["team"];
if ( maps\mp\_utility::allowclasschoice() || maps\mp\_utility::showfakeloadout() && !isai( self ) )
{
self setclientomnvar( "ui_options_menu", 2 );
if ( !self ismlgspectator() )
waitforclassselect();
endrespawnnotify();
if ( self.sessionstate == "spectator" )
{
if ( game["state"] == "postgame" )
return;
if ( game["state"] == "playing" && !maps\mp\_utility::isinkillcam() )
{
if ( isdefined( self.waitingtospawnamortize ) && self.waitingtospawnamortize )
return;
thread maps\mp\gametypes\_playerlogic::spawnclient();
}
thread maps\mp\gametypes\_spectating::setspectatepermissions();
}
self.connecttime = gettime();
self notify( "okToSpawn" );
}
else
thread bypassclasschoice();
if ( !isalive( self ) )
thread maps\mp\gametypes\_playerlogic::predictabouttospawnplayerovertime( 0.1 );
}
bypassclasschoice()
{
self.selectedclass = 1;
self.waitingtoselectclass = 0;
if ( isdefined( level.bypassclasschoicefunc ) )
{
var_0 = self [[ level.bypassclasschoicefunc ]]();
self.class = var_0;
}
else
self.class = "class0";
}
beginteamchoice()
{
self setclientomnvar( "ui_options_menu", 1 );
}
showmainmenuforteam()
{
var_0 = self.pers["team"];
self openpopupmenu( game["menu_class_" + var_0] );
}
menuspectator()
{
if ( isdefined( self.pers["team"] ) && self.pers["team"] == "spectator" )
return;
if ( isalive( self ) )
{
self.switching_teams = 1;
self.joining_team = "spectator";
self.leaving_team = self.pers["team"];
self suicide();
}
addtoteam( "spectator" );
self.pers["class"] = undefined;
self.class = undefined;
thread maps\mp\gametypes\_playerlogic::spawnspectator();
}
menuclass( var_0 )
{
if ( var_0 == "demolitions_mp,0" && self getrankedplayerdata( "featureNew", "demolitions" ) )
self setrankedplayerdata( "featureNew", "demolitions", 0 );
if ( var_0 == "sniper_mp,0" && self getrankedplayerdata( "featureNew", "sniper" ) )
self setrankedplayerdata( "featureNew", "sniper", 0 );
var_1 = self.pers["team"];
var_2 = maps\mp\gametypes\_class::getclasschoice( var_0 );
var_3 = maps\mp\gametypes\_class::getweaponchoice( var_0 );
if ( var_2 == "restricted" )
{
beginclasschoice();
return;
}
if ( isdefined( self.pers["class"] ) && self.pers["class"] == var_2 && ( isdefined( self.pers["primary"] ) && self.pers["primary"] == var_3 ) )
return;
if ( self.sessionstate == "playing" )
{
if ( isdefined( self.pers["lastClass"] ) && isdefined( self.pers["class"] ) )
{
self.pers["lastClass"] = self.pers["class"];
self.lastclass = self.pers["lastClass"];
}
self.pers["class"] = var_2;
self.class = var_2;
self.pers["primary"] = var_3;
if ( game["state"] == "postgame" )
return;
if ( level.ingraceperiod && !self.hasdonecombat )
{
maps\mp\gametypes\_class::setclass( self.pers["class"] );
self.tag_stowed_back = undefined;
self.tag_stowed_hip = undefined;
maps\mp\gametypes\_class::giveloadout( self.pers["team"], self.pers["class"] );
}
else
self iprintlnbold( game["strings"]["change_class"] );
}
else
{
if ( isdefined( self.pers["lastClass"] ) && isdefined( self.pers["class"] ) )
{
self.pers["lastClass"] = self.pers["class"];
self.lastclass = self.pers["lastClass"];
}
self.pers["class"] = var_2;
self.class = var_2;
self.pers["primary"] = var_3;
if ( game["state"] == "postgame" )
return;
if ( game["state"] == "playing" && !maps\mp\_utility::isinkillcam() )
thread maps\mp\gametypes\_playerlogic::spawnclient();
}
thread maps\mp\gametypes\_spectating::setspectatepermissions();
}
update_wargame_after_migration()
{
foreach ( var_1 in level.players )
{
if ( !isai( var_1 ) && var_1 ishost() )
level.wargame_client = var_1;
}
}
addtoteam( var_0, var_1, var_2 )
{
if ( isdefined( self.team ) )
{
maps\mp\gametypes\_playerlogic::removefromteamcount();
if ( isdefined( var_2 ) && var_2 )
maps\mp\gametypes\_playerlogic::decrementalivecount( self.team );
}
self.pers["team"] = var_0;
self.team = var_0;
if ( getdvar( "squad_vs_squad" ) == "1" )
{
if ( !isai( self ) )
{
if ( var_0 == "allies" )
{
if ( !isdefined( level.squad_vs_squad_allies_client ) )
level.squad_vs_squad_allies_client = self;
}
else if ( var_0 == "axis" )
{
if ( !isdefined( level.squad_vs_squad_axis_client ) )
level.squad_vs_squad_axis_client = self;
}
}
}
if ( getdvar( "squad_match" ) == "1" )
{
if ( !isai( self ) && self ishost() )
{
if ( !isdefined( level.squad_match_client ) )
level.squad_match_client = self;
}
}
if ( getdvar( "squad_use_hosts_squad" ) == "1" )
{
if ( !isai( self ) && self ishost() )
{
if ( !isdefined( level.wargame_client ) )
level.wargame_client = self;
}
}
if ( !maps\mp\_utility::matchmakinggame() || isdefined( self.pers["isBot"] ) || !maps\mp\_utility::allowteamchoice() )
{
if ( level.teambased )
self.sessionteam = var_0;
else if ( var_0 == "spectator" )
self.sessionteam = "spectator";
else
self.sessionteam = "none";
}
if ( game["state"] != "postgame" )
{
maps\mp\gametypes\_playerlogic::addtoteamcount();
if ( isdefined( var_2 ) && var_2 )
maps\mp\gametypes\_playerlogic::incrementalivecount( self.team );
}
maps\mp\_utility::updateobjectivetext();
if ( isdefined( var_1 ) && var_1 )
waittillframeend;
maps\mp\_utility::updatemainmenu();
if ( var_0 == "spectator" )
{
self notify( "joined_spectators" );
level notify( "joined_team", self );
}
else
{
self notify( "joined_team" );
level notify( "joined_team", self );
}
}
endrespawnnotify()
{
self.waitingtospawn = 0;
self notify( "end_respawn" );
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,598 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
game["music"]["spawn_allies"] = "mus_us_spawn";
game["music"]["defeat_allies"] = "mus_us_defeat";
game["music"]["victory_allies"] = "mus_us_victory";
game["music"]["winning_allies"] = "mus_us_winning";
game["music"]["losing_allies"] = "mus_us_losing";
game["voice"]["allies"] = maps\mp\gametypes\_teams::getteamvoiceprefix( "allies" ) + "1mc_";
game["music"]["allies_used_nuke"] = "mus_us_nuke_fired";
game["music"]["allies_hit_by_nuke"] = "mus_us_nuke_hit";
game["music"]["draw_allies"] = "mus_us_draw";
game["music"]["spawn_axis"] = "mus_fd_spawn";
game["music"]["defeat_axis"] = "mus_fd_defeat";
game["music"]["victory_axis"] = "mus_fd_victory";
game["music"]["winning_axis"] = "mus_fd_winning";
game["music"]["losing_axis"] = "mus_fd_losing";
game["voice"]["axis"] = maps\mp\gametypes\_teams::getteamvoiceprefix( "axis" ) + "1mc_";
game["music"]["axis_used_nuke"] = "mus_fd_nuke_fired";
game["music"]["axis_hit_by_nuke"] = "mus_fd_nuke_hit";
game["music"]["draw_axis"] = "mus_fd_draw";
game["music"]["losing_time"] = "mp_time_running_out_losing";
game["music"]["allies_suspense"] = [];
game["music"]["allies_suspense"][game["music"]["allies_suspense"].size] = "mus_us_suspense_01";
game["music"]["allies_suspense"][game["music"]["allies_suspense"].size] = "mus_us_suspense_02";
game["music"]["allies_suspense"][game["music"]["allies_suspense"].size] = "mus_us_suspense_03";
game["music"]["allies_suspense"][game["music"]["allies_suspense"].size] = "mus_us_suspense_04";
game["music"]["allies_suspense"][game["music"]["allies_suspense"].size] = "mus_us_suspense_05";
game["music"]["allies_suspense"][game["music"]["allies_suspense"].size] = "mus_us_suspense_06";
game["music"]["axis_suspense"] = [];
game["music"]["axis_suspense"][game["music"]["axis_suspense"].size] = "mus_fd_suspense_01";
game["music"]["axis_suspense"][game["music"]["axis_suspense"].size] = "mus_fd_suspense_02";
game["music"]["axis_suspense"][game["music"]["axis_suspense"].size] = "mus_fd_suspense_03";
game["music"]["axis_suspense"][game["music"]["axis_suspense"].size] = "mus_fd_suspense_04";
game["music"]["axis_suspense"][game["music"]["axis_suspense"].size] = "mus_fd_suspense_05";
game["music"]["axis_suspense"][game["music"]["axis_suspense"].size] = "mus_fd_suspense_06";
game["dialog"]["mission_success"] = "mission_success";
game["dialog"]["mission_failure"] = "mission_fail";
game["dialog"]["mission_draw"] = "draw";
game["dialog"]["round_success"] = "encourage_win";
game["dialog"]["round_failure"] = "encourage_lost";
game["dialog"]["round_draw"] = "draw";
game["dialog"]["timesup"] = "timesup";
game["dialog"]["winning_time"] = "winning";
game["dialog"]["losing_time"] = "losing";
game["dialog"]["winning_score"] = "winning_fight";
game["dialog"]["losing_score"] = "losing_fight";
game["dialog"]["lead_lost"] = "lead_lost";
game["dialog"]["lead_tied"] = "tied";
game["dialog"]["lead_taken"] = "lead_taken";
game["dialog"]["last_alive"] = "lastalive";
game["dialog"]["boost"] = "boost";
if ( !isdefined( game["dialog"]["offense_obj"] ) )
game["dialog"]["offense_obj"] = "boost";
if ( !isdefined( game["dialog"]["defense_obj"] ) )
game["dialog"]["defense_obj"] = "boost";
game["dialog"]["hardcore"] = "hardcore";
game["dialog"]["highspeed"] = "highspeed";
game["dialog"]["tactical"] = "tactical";
game["dialog"]["challenge"] = "challengecomplete";
game["dialog"]["promotion"] = "promotion";
game["dialog"]["bomb_taken"] = "acheive_bomb";
game["dialog"]["bomb_lost"] = "bomb_taken";
game["dialog"]["bomb_defused"] = "bomb_defused";
game["dialog"]["bomb_defused_axis"] = "bomb_defused_axis";
game["dialog"]["bomb_defused_allies"] = "bomb_defused_allies";
game["dialog"]["bomb_planted"] = "bomb_planted";
game["dialog"]["obj_taken"] = "securedobj";
game["dialog"]["obj_lost"] = "lostobj";
game["dialog"]["obj_defend"] = "obj_defend";
game["dialog"]["obj_destroy"] = "obj_destroy";
game["dialog"]["obj_capture"] = "capture_obj";
game["dialog"]["objs_capture"] = "capture_objs";
game["dialog"]["hq_located"] = "hq_located";
game["dialog"]["hq_enemy_captured"] = "hq_captured";
game["dialog"]["hq_enemy_destroyed"] = "hq_destroyed";
game["dialog"]["hq_secured"] = "hq_secured";
game["dialog"]["hq_offline"] = "hq_offline";
game["dialog"]["hq_online"] = "hq_online";
game["dialog"]["move_to_new"] = "new_positions";
game["dialog"]["push_forward"] = "pushforward";
game["dialog"]["attack"] = "attack";
game["dialog"]["defend"] = "defend";
game["dialog"]["offense"] = "offense";
game["dialog"]["defense"] = "defense";
game["dialog"]["halftime"] = "halftime";
game["dialog"]["overtime"] = "overtime";
game["dialog"]["side_switch"] = "switching";
game["dialog"]["flag_taken"] = "ourflag";
game["dialog"]["flag_dropped"] = "ourflag_drop";
game["dialog"]["flag_returned"] = "ourflag_return";
game["dialog"]["flag_captured"] = "ourflag_capt";
game["dialog"]["flag_getback"] = "getback_ourflag";
game["dialog"]["enemy_flag_bringhome"] = "enemyflag_tobase";
game["dialog"]["enemy_flag_taken"] = "enemyflag";
game["dialog"]["enemy_flag_dropped"] = "enemyflag_drop";
game["dialog"]["enemy_flag_returned"] = "enemyflag_return";
game["dialog"]["enemy_flag_captured"] = "enemyflag_capt";
game["dialog"]["got_flag"] = "achieve_flag";
game["dialog"]["dropped_flag"] = "lost_flag";
game["dialog"]["enemy_got_flag"] = "enemy_has_flag";
game["dialog"]["enemy_dropped_flag"] = "enemy_dropped_flag";
game["dialog"]["capturing_a"] = "capturing_a";
game["dialog"]["capturing_b"] = "capturing_b";
game["dialog"]["capturing_c"] = "capturing_c";
game["dialog"]["captured_a"] = "capture_a";
game["dialog"]["captured_b"] = "capture_c";
game["dialog"]["captured_c"] = "capture_b";
game["dialog"]["securing_a"] = "securing_a";
game["dialog"]["securing_b"] = "securing_b";
game["dialog"]["securing_c"] = "securing_c";
game["dialog"]["secured_a"] = "secure_a";
game["dialog"]["secured_b"] = "secure_b";
game["dialog"]["secured_c"] = "secure_c";
game["dialog"]["losing_a"] = "losing_a";
game["dialog"]["losing_b"] = "losing_b";
game["dialog"]["losing_c"] = "losing_c";
game["dialog"]["lost_a"] = "lost_a";
game["dialog"]["lost_b"] = "lost_b";
game["dialog"]["lost_c"] = "lost_c";
game["dialog"]["enemy_taking_a"] = "enemy_take_a";
game["dialog"]["enemy_taking_b"] = "enemy_take_b";
game["dialog"]["enemy_taking_c"] = "enemy_take_c";
game["dialog"]["enemy_has_a"] = "enemy_has_a";
game["dialog"]["enemy_has_b"] = "enemy_has_b";
game["dialog"]["enemy_has_c"] = "enemy_has_c";
game["dialog"]["lost_all"] = "take_positions";
game["dialog"]["secure_all"] = "positions_lock";
game["dialog"]["losing_target"] = "enemy_capture";
game["dialog"]["lost_target"] = "lost_target";
game["dialog"]["taking_target"] = "capturing_target";
game["dialog"]["took_target"] = "achieve_target";
game["dialog"]["defcon_raised"] = "defcon_raised";
game["dialog"]["defcon_lowered"] = "defcon_lowered";
game["dialog"]["one_minute_left"] = "one_minute";
game["dialog"]["thirty_seconds_left"] = "thirty_seconds";
game["music"]["nuke_music"] = "nuke_music";
game["dialog"]["sentry_destroyed"] = "sentry_destroyed";
game["dialog"]["sentry_gone"] = "sentry_gone";
game["dialog"]["ti_destroyed"] = "ti_blocked";
game["dialog"]["ti_gone"] = "ti_cancelled";
game["dialog"]["ims_destroyed"] = "ims_destroyed";
game["dialog"]["satcom_destroyed"] = "satcom_destroyed";
game["dialog"]["ballistic_vest_destroyed"] = "ballistic_vest_destroyed";
game["dialog"]["ammocrate_destroyed"] = "ammocrate_destroyed";
game["dialog"]["ammocrate_gone"] = "ammocrate_gone";
game["dialog"]["achieve_carepackage"] = "achieve_carepackage";
game["dialog"]["gryphon_destroyed"] = "gryphon_destroyed";
game["dialog"]["gryphon_gone"] = "gryphon_gone";
game["dialog"]["vulture_destroyed"] = "vulture_destroyed";
game["dialog"]["vulture_gone"] = "vulture_gone";
game["dialog"]["nowl_destroyed"] = "nowl_destroyed";
game["dialog"]["nowl_gone"] = "nowl_gone";
game["dialog"]["oracle_gone"] = "oracle_gone";
game["dialog"]["dog_gone"] = "dog_gone";
game["dialog"]["dog_killed"] = "dog_killed";
game["dialog"]["squad_gone"] = "squad_gone";
game["dialog"]["squad_killed"] = "squad_killed";
game["dialog"]["odin_gone"] = "odin_gone";
game["dialog"]["odin_carepackage"] = "odin_carepackage";
game["dialog"]["odin_marking"] = "odin_marking";
game["dialog"]["odin_marked"] = "odin_marked";
game["dialog"]["odin_m_marked"] = "odin_m_marked";
game["dialog"]["odin_smoke"] = "odin_smoke";
game["dialog"]["odin_moving"] = "odin_moving";
game["dialog"]["loki_gone"] = "loki_gone";
game["dialog"]["odin_target_killed"] = "odin_target_killed";
game["dialog"]["odin_targets_killed"] = "odin_targets_killed";
game["dialog"]["claymore_destroyed"] = "null";
game["dialog"]["mine_destroyed"] = "null";
level thread onplayerconnect();
level thread onlastalive();
level thread musiccontroller();
level thread ongameended();
level thread onroundswitch();
}
onplayerconnect()
{
for (;;)
{
level waittill( "connected", var_0 );
var_0 thread onplayerspawned();
var_0 thread finalkillcammusic();
var_0 thread watchhostmigration();
}
}
onplayerspawned()
{
self endon( "disconnect" );
if ( !isai( self ) )
{
self waittill( "spawned_player" );
thread dointro();
}
}
dointro()
{
level endon( "host_migration_begin" );
if ( !level.splitscreen || level.splitscreen && !isdefined( level.playedstartingmusic ) )
{
if ( !self issplitscreenplayer() || self issplitscreenplayerprimary() )
self playlocalsound( game["music"]["spawn_" + self.team] );
if ( level.splitscreen )
level.playedstartingmusic = 1;
}
if ( isdefined( game["dialog"]["gametype"] ) && ( !level.splitscreen || self == level.players[0] ) )
{
if ( isdefined( game["dialog"]["allies_gametype"] ) && self.team == "allies" )
maps\mp\_utility::leaderdialogonplayer( "allies_gametype" );
else if ( isdefined( game["dialog"]["axis_gametype"] ) && self.team == "axis" )
maps\mp\_utility::leaderdialogonplayer( "axis_gametype" );
else if ( !self issplitscreenplayer() || self issplitscreenplayerprimary() )
maps\mp\_utility::leaderdialogonplayer( "gametype" );
}
maps\mp\_utility::gameflagwait( "prematch_done" );
if ( !isdefined( self ) )
return;
if ( self.team == game["attackers"] )
{
if ( !self issplitscreenplayer() || self issplitscreenplayerprimary() )
maps\mp\_utility::leaderdialogonplayer( "offense_obj", "introboost" );
}
else if ( !self issplitscreenplayer() || self issplitscreenplayerprimary() )
maps\mp\_utility::leaderdialogonplayer( "defense_obj", "introboost" );
}
watchhostmigration()
{
self endon( "disconnect" );
level endon( "grace_period_ending" );
for (;;)
{
level waittill( "host_migration_begin" );
var_0 = level.ingraceperiod;
level waittill( "host_migration_end" );
if ( var_0 )
thread dointro();
}
}
onlastalive()
{
level endon( "game_ended" );
level waittill( "last_alive", var_0 );
if ( !isalive( var_0 ) )
return;
var_0 maps\mp\_utility::leaderdialogonplayer( "last_alive" );
}
onroundswitch()
{
level waittill( "round_switch", var_0 );
switch ( var_0 )
{
case "halftime":
foreach ( var_2 in level.players )
{
if ( var_2 issplitscreenplayer() && !var_2 issplitscreenplayerprimary() )
continue;
var_2 maps\mp\_utility::leaderdialogonplayer( "halftime" );
}
break;
case "overtime":
foreach ( var_2 in level.players )
{
if ( var_2 issplitscreenplayer() && !var_2 issplitscreenplayerprimary() )
continue;
var_2 maps\mp\_utility::leaderdialogonplayer( "overtime" );
}
break;
default:
foreach ( var_2 in level.players )
{
if ( var_2 issplitscreenplayer() && !var_2 issplitscreenplayerprimary() )
continue;
var_2 maps\mp\_utility::leaderdialogonplayer( "side_switch" );
}
break;
}
}
ongameended()
{
level thread roundwinnerdialog();
level thread gamewinnerdialog();
level waittill( "game_win", var_0 );
if ( level.teambased )
{
if ( level.splitscreen )
{
if ( var_0 == "allies" )
maps\mp\_utility::playsoundonplayers( game["music"]["victory_allies"], "allies" );
else if ( var_0 == "axis" )
maps\mp\_utility::playsoundonplayers( game["music"]["victory_axis"], "axis" );
else
maps\mp\_utility::playsoundonplayers( game["music"]["nuke_music"] );
}
else if ( var_0 == "allies" )
{
maps\mp\_utility::playsoundonplayers( game["music"]["victory_allies"], "allies" );
maps\mp\_utility::playsoundonplayers( game["music"]["defeat_axis"], "axis" );
}
else if ( var_0 == "axis" )
{
maps\mp\_utility::playsoundonplayers( game["music"]["victory_axis"], "axis" );
maps\mp\_utility::playsoundonplayers( game["music"]["defeat_allies"], "allies" );
}
else
{
maps\mp\_utility::playsoundonplayers( game["music"]["draw_axis"], "axis" );
maps\mp\_utility::playsoundonplayers( game["music"]["draw_allies"], "allies" );
}
}
else
{
foreach ( var_2 in level.players )
{
if ( var_2 issplitscreenplayer() && !var_2 issplitscreenplayerprimary() )
continue;
if ( var_2.pers["team"] != "allies" && var_2.pers["team"] != "axis" )
{
var_2 playlocalsound( game["music"]["nuke_music"] );
continue;
}
if ( isdefined( var_0 ) && isplayer( var_0 ) && var_2 == var_0 )
{
var_2 playlocalsound( game["music"]["victory_" + var_2.pers["team"]] );
continue;
}
if ( !level.splitscreen )
var_2 playlocalsound( game["music"]["defeat_" + var_2.pers["team"]] );
}
}
}
roundwinnerdialog()
{
level waittill( "round_win", var_0 );
var_1 = level.roundenddelay / 4;
if ( var_1 > 0 )
wait( var_1 );
if ( !isdefined( var_0 ) || isplayer( var_0 ) )
return;
if ( var_0 == "allies" )
{
maps\mp\_utility::leaderdialog( "round_success", "allies" );
maps\mp\_utility::leaderdialog( "round_failure", "axis" );
}
else if ( var_0 == "axis" )
{
maps\mp\_utility::leaderdialog( "round_success", "axis" );
maps\mp\_utility::leaderdialog( "round_failure", "allies" );
}
}
gamewinnerdialog()
{
level waittill( "game_win", var_0 );
var_1 = level.postroundtime / 2;
if ( var_1 > 0 )
wait( var_1 );
if ( !isdefined( var_0 ) || isplayer( var_0 ) )
return;
if ( var_0 == "allies" )
{
maps\mp\_utility::leaderdialog( "mission_success", "allies" );
maps\mp\_utility::leaderdialog( "mission_failure", "axis" );
}
else if ( var_0 == "axis" )
{
maps\mp\_utility::leaderdialog( "mission_success", "axis" );
maps\mp\_utility::leaderdialog( "mission_failure", "allies" );
}
else
maps\mp\_utility::leaderdialog( "mission_draw" );
}
musiccontroller()
{
level endon( "game_ended" );
level.musicenabled = 1;
thread suspensemusic();
level waittill( "match_ending_soon", var_0 );
if ( maps\mp\_utility::getwatcheddvar( "roundlimit" ) == 1 || game["roundsPlayed"] == maps\mp\_utility::getwatcheddvar( "roundlimit" ) - 1 || maps\mp\_utility::ismoddedroundgame() )
{
if ( !level.splitscreen )
{
if ( var_0 == "time" )
{
if ( level.teambased )
{
if ( game["teamScores"]["allies"] > game["teamScores"]["axis"] )
{
if ( ismusicenabled() )
{
maps\mp\_utility::playsoundonplayers( game["music"]["winning_allies"], "allies" );
maps\mp\_utility::playsoundonplayers( game["music"]["losing_axis"], "axis" );
}
maps\mp\_utility::leaderdialog( "winning_time", "allies" );
maps\mp\_utility::leaderdialog( "losing_time", "axis" );
}
else if ( game["teamScores"]["axis"] > game["teamScores"]["allies"] )
{
if ( !level.hardcoremode )
{
maps\mp\_utility::playsoundonplayers( game["music"]["winning_axis"], "axis" );
maps\mp\_utility::playsoundonplayers( game["music"]["losing_allies"], "allies" );
}
maps\mp\_utility::leaderdialog( "winning_time", "axis" );
maps\mp\_utility::leaderdialog( "losing_time", "allies" );
}
}
else
{
if ( ismusicenabled() )
maps\mp\_utility::playsoundonplayers( game["music"]["losing_time"] );
maps\mp\_utility::leaderdialog( "timesup" );
}
}
else if ( var_0 == "score" )
{
if ( level.teambased )
{
if ( game["teamScores"]["allies"] > game["teamScores"]["axis"] )
{
if ( ismusicenabled() )
{
maps\mp\_utility::playsoundonplayers( game["music"]["winning_allies"], "allies" );
maps\mp\_utility::playsoundonplayers( game["music"]["losing_axis"], "axis" );
}
maps\mp\_utility::leaderdialog( "winning_score", "allies" );
maps\mp\_utility::leaderdialog( "losing_score", "axis" );
}
else if ( game["teamScores"]["axis"] > game["teamScores"]["allies"] )
{
if ( ismusicenabled() )
{
maps\mp\_utility::playsoundonplayers( game["music"]["winning_axis"], "axis" );
maps\mp\_utility::playsoundonplayers( game["music"]["losing_allies"], "allies" );
}
maps\mp\_utility::leaderdialog( "winning_score", "axis" );
maps\mp\_utility::leaderdialog( "losing_score", "allies" );
}
}
else
{
var_1 = maps\mp\gametypes\_gamescore::gethighestscoringplayer();
var_2 = maps\mp\gametypes\_gamescore::getlosingplayers();
var_3[0] = var_1;
if ( ismusicenabled() )
{
var_1 playlocalsound( game["music"]["winning_" + var_1.pers["team"]] );
foreach ( var_5 in level.players )
{
if ( var_5 == var_1 )
continue;
var_5 playlocalsound( game["music"]["losing_" + var_5.pers["team"]] );
}
}
var_1 maps\mp\_utility::leaderdialogonplayer( "winning_score" );
maps\mp\_utility::leaderdialogonplayers( "losing_score", var_2 );
}
}
level waittill( "match_ending_very_soon" );
maps\mp\_utility::leaderdialog( "timesup" );
}
}
else
{
if ( !level.hardcoremode )
maps\mp\_utility::playsoundonplayers( game["music"]["losing_allies"] );
maps\mp\_utility::leaderdialog( "timesup" );
}
}
suspensemusic( var_0 )
{
if ( !ismusicenabled() )
return;
level endon( "game_ended" );
level endon( "match_ending_soon" );
level endon( "stop_suspense_music" );
if ( isdefined( level.nosuspensemusic ) && level.nosuspensemusic )
return;
var_1 = game["music"]["allies_suspense"].size;
var_2 = game["music"]["axis_suspense"].size;
level.cursuspsensetrack = [];
if ( isdefined( var_0 ) && var_0 )
wait 120;
for (;;)
{
wait( randomfloatrange( 60, 120 ) );
level.cursuspsensetrack["allies"] = randomint( var_1 );
maps\mp\_utility::playsoundonplayers( game["music"]["allies_suspense"][level.cursuspsensetrack["allies"]], "allies" );
level.cursuspsensetrack["axis"] = randomint( var_2 );
maps\mp\_utility::playsoundonplayers( game["music"]["axis_suspense"][level.cursuspsensetrack["axis"]], "axis" );
}
}
stopsuspensemusic()
{
level notify( "stop_suspense_music" );
if ( isdefined( level.cursuspsensetrack ) && level.cursuspsensetrack.size == 2 )
{
foreach ( var_1 in level.players )
{
var_2 = var_1.team;
var_1 stoplocalsound( game["music"][var_2 + "_suspense"][level.cursuspsensetrack[var_2]] );
}
}
}
finalkillcammusic()
{
self waittill( "showing_final_killcam" );
}
enablemusic()
{
if ( level.musicenabled == 0 )
thread suspensemusic();
level.musicenabled++;
}
disablemusic()
{
if ( level.musicenabled > 0 )
{
level.musicenabled--;
if ( level.musicenabled == 0 )
stopsuspensemusic();
}
else
{
}
}
ismusicenabled()
{
return !level.hardcoremode && level.musicenabled > 0;
}

View File

@ -0,0 +1,141 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
precacheshader( "objpoint_default" );
level.objpointnames = [];
level.objpoints = [];
if ( level.splitscreen )
level.objpointsize = 15;
else
level.objpointsize = 8;
level.objpoint_alpha_default = 0.75;
level.objpointscale = 1.0;
}
createteamobjpoint( var_0, var_1, var_2, var_3, var_4, var_5 )
{
var_6 = getobjpointbyname( var_0 );
if ( isdefined( var_6 ) )
deleteobjpoint( var_6 );
if ( !isdefined( var_3 ) )
var_3 = "objpoint_default";
if ( !isdefined( var_5 ) )
var_5 = 1.0;
if ( var_2 != "all" )
var_6 = newteamhudelem( var_2 );
else
var_6 = newhudelem();
var_6.name = var_0;
var_6.x = var_1[0];
var_6.y = var_1[1];
var_6.z = var_1[2];
var_6.team = var_2;
var_6.isflashing = 0;
var_6.isshown = 1;
var_6 setshader( var_3, level.objpointsize, level.objpointsize );
var_6 setwaypoint( 1, 0 );
if ( isdefined( var_4 ) )
var_6.alpha = var_4;
else
var_6.alpha = level.objpoint_alpha_default;
var_6.basealpha = var_6.alpha;
var_6.index = level.objpointnames.size;
level.objpoints[var_0] = var_6;
level.objpointnames[level.objpointnames.size] = var_0;
return var_6;
}
deleteobjpoint( var_0 )
{
if ( level.objpoints.size == 1 )
{
level.objpoints = [];
level.objpointnames = [];
var_0 destroy();
return;
}
var_1 = var_0.index;
var_2 = level.objpointnames.size - 1;
var_3 = getobjpointbyindex( var_2 );
level.objpointnames[var_1] = var_3.name;
var_3.index = var_1;
level.objpointnames[var_2] = undefined;
level.objpoints[var_0.name] = undefined;
var_0 destroy();
}
updateorigin( var_0 )
{
if ( self.x != var_0[0] )
self.x = var_0[0];
if ( self.y != var_0[1] )
self.y = var_0[1];
if ( self.z != var_0[2] )
self.z = var_0[2];
}
setoriginbyname( var_0, var_1 )
{
var_2 = getobjpointbyname( var_0 );
var_2 updateorigin( var_1 );
}
getobjpointbyname( var_0 )
{
if ( isdefined( level.objpoints[var_0] ) )
return level.objpoints[var_0];
else
return undefined;
}
getobjpointbyindex( var_0 )
{
if ( isdefined( level.objpointnames[var_0] ) )
return level.objpoints[level.objpointnames[var_0]];
else
return undefined;
}
startflashing()
{
self endon( "stop_flashing_thread" );
if ( self.isflashing )
return;
self.isflashing = 1;
while ( self.isflashing )
{
self fadeovertime( 0.75 );
self.alpha = 0.35 * self.basealpha;
wait 0.75;
self fadeovertime( 0.75 );
self.alpha = self.basealpha;
wait 0.75;
}
self.alpha = self.basealpha;
}
stopflashing()
{
if ( !self.isflashing )
return;
self.isflashing = 0;
}

View File

@ -0,0 +1,314 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
level.outlineids = 0;
level.outlineents = [];
level thread outlinecatchplayerdisconnect();
level thread outlineonplayerjoinedteam();
}
outlineenableinternal( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
{
if ( !isdefined( var_0.outlines ) )
var_0.outlines = [];
var_7 = spawnstruct();
var_7.priority = var_4;
var_7.colorindex = var_1;
var_7.playersvisibleto = var_2;
var_7.depthenable = var_3;
var_7.type = var_5;
if ( var_5 == "TEAM" )
var_7.team = var_6;
var_8 = outlinegenerateuniqueid();
var_0.outlines[var_8] = var_7;
outlineaddtogloballist( var_0 );
var_9 = [];
foreach ( var_11 in var_7.playersvisibleto )
{
var_12 = outlinegethighestinfoforplayer( var_0, var_11 );
if ( !isdefined( var_12 ) || var_12 == var_7 || var_12.priority == var_7.priority )
var_9[var_9.size] = var_11;
}
if ( var_9.size > 0 )
var_0 hudoutlineenableforclients( var_9, var_7.colorindex, var_7.depthenable );
return var_8;
}
outlinedisableinternal( var_0, var_1 )
{
if ( !isdefined( var_1.outlines ) )
{
outlineremovefromgloballist( var_1 );
return;
}
else if ( !isdefined( var_1.outlines[var_0] ) )
return;
var_2 = var_1.outlines[var_0];
var_3 = [];
foreach ( var_6, var_5 in var_1.outlines )
{
if ( var_5 != var_2 )
var_3[var_6] = var_5;
}
if ( var_3.size == 0 )
outlineremovefromgloballist( var_1 );
if ( isdefined( var_1 ) )
{
var_1.outlines = var_3;
foreach ( var_8 in var_2.playersvisibleto )
{
if ( !isdefined( var_8 ) )
continue;
var_9 = outlinegethighestinfoforplayer( var_1, var_8 );
if ( isdefined( var_9 ) )
{
if ( var_9.priority <= var_2.priority )
var_1 hudoutlineenableforclient( var_8, var_9.colorindex, var_9.depthenable );
continue;
}
var_1 hudoutlinedisableforclient( var_8 );
}
}
}
outlinecatchplayerdisconnect()
{
for (;;)
{
level waittill( "connected", var_0 );
level thread outlineonplayerdisconnect( var_0 );
}
}
outlineonplayerdisconnect( var_0 )
{
level endon( "game_ended" );
var_0 waittill( "disconnect" );
outlineremoveplayerfromvisibletoarrays( var_0 );
outlinedisableinternalall( var_0 );
}
outlineonplayerjoinedteam()
{
for (;;)
{
level waittill( "joined_team", var_0 );
if ( !isdefined( var_0.team ) || var_0.team == "spectator" )
continue;
thread outlineonplayerjoinedteam_onfirstspawn( var_0 );
}
}
outlineonplayerjoinedteam_onfirstspawn( var_0 )
{
var_0 notify( "outlineOnPlayerJoinedTeam_onFirstSpawn" );
var_0 endon( "outlineOnPlayerJoinedTeam_onFirstSpawn" );
var_0 endon( "disconnect" );
var_0 waittill( "spawned_player" );
outlineremoveplayerfromvisibletoarrays( var_0 );
outlinedisableinternalall( var_0 );
outlineaddplayertoexistingteamoutlines( var_0 );
}
outlineremoveplayerfromvisibletoarrays( var_0 )
{
level.outlineents = common_scripts\utility::array_removeundefined( level.outlineents );
foreach ( var_2 in level.outlineents )
{
var_3 = 0;
foreach ( var_5 in var_2.outlines )
{
var_5.playersvisibleto = common_scripts\utility::array_removeundefined( var_5.playersvisibleto );
if ( isdefined( var_0 ) && common_scripts\utility::array_contains( var_5.playersvisibleto, var_0 ) )
{
var_5.playersvisibleto = common_scripts\utility::array_remove( var_5.playersvisibleto, var_0 );
var_3 = 1;
}
}
if ( var_3 && isdefined( var_2 ) && isdefined( var_0 ) )
var_2 hudoutlinedisableforclient( var_0 );
}
}
outlineaddplayertoexistingteamoutlines( var_0 )
{
foreach ( var_2 in level.outlineents )
{
if ( !isdefined( var_2 ) )
continue;
var_3 = undefined;
foreach ( var_5 in var_2.outlines )
{
if ( var_5.type == "ALL" || var_5.type == "TEAM" && var_5.team == var_0.team )
{
if ( !common_scripts\utility::array_contains( var_5.playersvisibleto, var_0 ) )
var_5.playersvisibleto[var_5.playersvisibleto.size] = var_0;
else
{
}
if ( !isdefined( var_3 ) || var_5.priority > var_3.priority )
var_3 = var_5;
}
}
if ( isdefined( var_3 ) )
var_2 hudoutlineenableforclient( var_0, var_3.colorindex, var_3.depthenable );
}
}
outlinedisableinternalall( var_0 )
{
if ( !isdefined( var_0 ) || !isdefined( var_0.outlines ) || var_0.outlines.size == 0 )
return;
foreach ( var_3, var_2 in var_0.outlines )
outlinedisableinternal( var_3, var_0 );
}
outlineaddtogloballist( var_0 )
{
if ( !common_scripts\utility::array_contains( level.outlineents, var_0 ) )
level.outlineents[level.outlineents.size] = var_0;
}
outlineremovefromgloballist( var_0 )
{
level.outlineents = common_scripts\utility::array_remove( level.outlineents, var_0 );
}
outlinegethighestpriorityid( var_0 )
{
var_1 = -1;
if ( !isdefined( var_0.outlines ) || var_0.size == 0 )
return var_1;
var_2 = undefined;
foreach ( var_5, var_4 in var_0.outlines )
{
if ( !isdefined( var_2 ) || var_4.priority > var_2.priority )
{
var_2 = var_4;
var_1 = var_5;
}
}
return var_1;
}
outlinegethighestinfoforplayer( var_0, var_1 )
{
var_2 = undefined;
if ( isdefined( var_0.outlines ) && var_0.outlines.size )
{
foreach ( var_5, var_4 in var_0.outlines )
{
if ( common_scripts\utility::array_contains( var_4.playersvisibleto, var_1 ) && ( !isdefined( var_2 ) || var_4.priority > var_2.priority ) )
var_2 = var_4;
}
}
return var_2;
}
outlinegenerateuniqueid()
{
level.outlineids++;
return level.outlineids;
}
outlineprioritygroupmap( var_0 )
{
var_0 = tolower( var_0 );
var_1 = undefined;
switch ( var_0 )
{
case "level_script":
var_1 = 0;
break;
case "equipment":
var_1 = 1;
break;
case "perk":
var_1 = 2;
break;
case "killstreak":
var_1 = 3;
break;
case "killstreak_personal":
var_1 = 4;
break;
default:
var_1 = 0;
break;
}
return var_1;
}
outlinecolorindexmap( var_0 )
{
var_0 = tolower( var_0 );
var_1 = undefined;
switch ( var_0 )
{
case "white":
var_1 = 0;
break;
case "red":
var_1 = 1;
break;
case "green":
var_1 = 2;
break;
case "cyan":
var_1 = 3;
break;
case "orange":
var_1 = 4;
break;
case "yellow":
var_1 = 5;
break;
case "blue":
var_1 = 6;
break;
default:
var_1 = 0;
break;
}
return var_1;
}

View File

@ -0,0 +1,564 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
maps\mp\gametypes\_class::init();
if ( !maps\mp\_utility::is_aliens() )
{
level.persistentdatainfo = [];
maps\mp\gametypes\_missions::init();
maps\mp\gametypes\_rank::init();
level thread updatebufferedstats();
level thread uploadglobalstatcounters();
level thread writekdhistorystats();
}
maps\mp\gametypes\_playercards::init();
}
initbufferedstats()
{
self.bufferedstats = [];
self.squadmemberbufferedstats = [];
if ( maps\mp\_utility::rankingenabled() )
{
self.bufferedstats["totalShots"] = self getrankedplayerdata( "totalShots" );
self.bufferedstats["accuracy"] = self getrankedplayerdata( "accuracy" );
self.bufferedstats["misses"] = self getrankedplayerdata( "misses" );
self.bufferedstats["hits"] = self getrankedplayerdata( "hits" );
self.bufferedstats["timePlayedAllies"] = self getrankedplayerdata( "timePlayedAllies" );
self.bufferedstats["timePlayedOpfor"] = self getrankedplayerdata( "timePlayedOpfor" );
self.bufferedstats["timePlayedOther"] = self getrankedplayerdata( "timePlayedOther" );
self.bufferedstats["timePlayedTotal"] = self getrankedplayerdata( "timePlayedTotal" );
var_0 = self getrankedplayerdata( "activeSquadMember" );
self.squadmemberbufferedstats["experienceToPrestige"] = self getrankedplayerdata( "squadMembers", var_0, "experienceToPrestige" );
}
self.bufferedchildstats = [];
self.bufferedchildstats["round"] = [];
self.bufferedchildstats["round"]["timePlayed"] = self getcommonplayerdata( "round", "timePlayed" );
if ( maps\mp\_utility::rankingenabled() )
{
self.bufferedchildstats["xpMultiplierTimePlayed"] = [];
self.bufferedchildstats["xpMultiplierTimePlayed"][0] = self getrankedplayerdata( "xpMultiplierTimePlayed", 0 );
self.bufferedchildstats["xpMultiplierTimePlayed"][1] = self getrankedplayerdata( "xpMultiplierTimePlayed", 1 );
self.bufferedchildstats["xpMultiplierTimePlayed"][2] = self getrankedplayerdata( "xpMultiplierTimePlayed", 2 );
self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"] = [];
self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][0] = self getrankedplayerdata( "xpMaxMultiplierTimePlayed", 0 );
self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][1] = self getrankedplayerdata( "xpMaxMultiplierTimePlayed", 1 );
self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][2] = self getrankedplayerdata( "xpMaxMultiplierTimePlayed", 2 );
self.bufferedchildstats["challengeXPMultiplierTimePlayed"] = [];
self.bufferedchildstats["challengeXPMultiplierTimePlayed"][0] = self getrankedplayerdata( "challengeXPMultiplierTimePlayed", 0 );
self.bufferedchildstatsmax["challengeXPMaxMultiplierTimePlayed"] = [];
self.bufferedchildstatsmax["challengeXPMaxMultiplierTimePlayed"][0] = self getrankedplayerdata( "challengeXPMaxMultiplierTimePlayed", 0 );
self.bufferedchildstats["weaponXPMultiplierTimePlayed"] = [];
self.bufferedchildstats["weaponXPMultiplierTimePlayed"][0] = self getrankedplayerdata( "weaponXPMultiplierTimePlayed", 0 );
self.bufferedchildstatsmax["weaponXPMaxMultiplierTimePlayed"] = [];
self.bufferedchildstatsmax["weaponXPMaxMultiplierTimePlayed"][0] = self getrankedplayerdata( "weaponXPMaxMultiplierTimePlayed", 0 );
if ( issquadsmode() )
{
self.bufferedstats["prestigeDoubleXp"] = self getrankedplayerdata( "prestigeDoubleXp" );
self.bufferedstats["prestigeDoubleXpTimePlayed"] = self getrankedplayerdata( "prestigeDoubleXpTimePlayed" );
self.bufferedstatsmax["prestigeDoubleXpMaxTimePlayed"] = self getrankedplayerdata( "prestigeDoubleXpMaxTimePlayed" );
}
self.bufferedstats["prestigeDoubleWeaponXp"] = self getrankedplayerdata( "prestigeDoubleWeaponXp" );
self.bufferedstats["prestigeDoubleWeaponXpTimePlayed"] = self getrankedplayerdata( "prestigeDoubleWeaponXpTimePlayed" );
self.bufferedstatsmax["prestigeDoubleWeaponXpMaxTimePlayed"] = self getrankedplayerdata( "prestigeDoubleWeaponXpMaxTimePlayed" );
}
}
statget( var_0 )
{
return self getrankedplayerdata( var_0 );
}
statset( var_0, var_1 )
{
if ( !maps\mp\_utility::rankingenabled() )
return;
self setrankedplayerdata( var_0, var_1 );
}
statadd( var_0, var_1, var_2 )
{
if ( !maps\mp\_utility::rankingenabled() )
return;
if ( isdefined( var_2 ) )
{
var_3 = self getrankedplayerdata( var_0, var_2 );
self setrankedplayerdata( var_0, var_2, var_1 + var_3 );
}
else
{
var_3 = self getrankedplayerdata( var_0 );
self setrankedplayerdata( var_0, var_1 + var_3 );
}
}
statgetchild( var_0, var_1 )
{
if ( var_0 == "round" )
return self getcommonplayerdata( var_0, var_1 );
else
return self getrankedplayerdata( var_0, var_1 );
}
statsetchild( var_0, var_1, var_2 )
{
if ( isagent( self ) )
return;
if ( !maps\mp\_utility::rankingenabled() )
return;
if ( var_0 == "round" )
self setcommonplayerdata( var_0, var_1, var_2 );
else
self setrankedplayerdata( var_0, var_1, var_2 );
}
stataddchild( var_0, var_1, var_2 )
{
if ( !maps\mp\_utility::rankingenabled() )
return;
var_3 = self getrankedplayerdata( var_0, var_1 );
self setrankedplayerdata( var_0, var_1, var_3 + var_2 );
}
statgetchildbuffered( var_0, var_1 )
{
if ( !maps\mp\_utility::rankingenabled() )
return 0;
return self.bufferedchildstats[var_0][var_1];
}
statsetchildbuffered( var_0, var_1, var_2 )
{
if ( !maps\mp\_utility::rankingenabled() )
return;
self.bufferedchildstats[var_0][var_1] = var_2;
}
stataddchildbuffered( var_0, var_1, var_2 )
{
if ( !maps\mp\_utility::rankingenabled() )
return;
var_3 = statgetchildbuffered( var_0, var_1 );
statsetchildbuffered( var_0, var_1, var_3 + var_2 );
}
stataddbufferedwithmax( var_0, var_1, var_2 )
{
if ( !maps\mp\_utility::rankingenabled() )
return;
var_3 = statgetbuffered( var_0 ) + var_1;
if ( var_3 > var_2 )
var_3 = var_2;
if ( var_3 < statgetbuffered( var_0 ) )
var_3 = var_2;
statsetbuffered( var_0, var_3 );
}
stataddchildbufferedwithmax( var_0, var_1, var_2, var_3 )
{
if ( !maps\mp\_utility::rankingenabled() )
return;
var_4 = statgetchildbuffered( var_0, var_1 ) + var_2;
if ( var_4 > var_3 )
var_4 = var_3;
if ( var_4 < statgetchildbuffered( var_0, var_1 ) )
var_4 = var_3;
statsetchildbuffered( var_0, var_1, var_4 );
}
statgetbuffered( var_0 )
{
if ( !maps\mp\_utility::rankingenabled() )
return 0;
return self.bufferedstats[var_0];
}
statgetsquadbuffered( var_0 )
{
if ( !maps\mp\_utility::rankingenabled() )
return 0;
return self.squadmemberbufferedstats[var_0];
}
statsetbuffered( var_0, var_1 )
{
if ( !maps\mp\_utility::rankingenabled() )
return;
self.bufferedstats[var_0] = var_1;
}
statsetsquadbuffered( var_0, var_1 )
{
if ( !maps\mp\_utility::rankingenabled() )
return;
self.squadmemberbufferedstats[var_0] = var_1;
}
stataddbuffered( var_0, var_1 )
{
if ( !maps\mp\_utility::rankingenabled() )
return;
var_2 = statgetbuffered( var_0 );
statsetbuffered( var_0, var_2 + var_1 );
}
stataddsquadbuffered( var_0, var_1 )
{
if ( !maps\mp\_utility::rankingenabled() )
return;
var_2 = statgetsquadbuffered( var_0 );
statsetsquadbuffered( var_0, var_2 + var_1 );
}
updatebufferedstats()
{
wait 0.15;
var_0 = 0;
while ( !level.gameended )
{
maps\mp\gametypes\_hostmigration::waittillhostmigrationdone();
var_0++;
if ( var_0 >= level.players.size )
var_0 = 0;
if ( isdefined( level.players[var_0] ) )
{
level.players[var_0] writebufferedstats();
level.players[var_0] updateweaponbufferedstats();
}
wait 2.0;
}
foreach ( var_2 in level.players )
{
var_2 writebufferedstats();
var_2 updateweaponbufferedstats();
}
}
writebufferedstats()
{
var_0 = maps\mp\_utility::rankingenabled();
if ( var_0 )
{
foreach ( var_3, var_2 in self.bufferedstats )
self setrankedplayerdata( var_3, var_2 );
if ( !isai( self ) )
{
foreach ( var_3, var_2 in self.squadmemberbufferedstats )
self setrankedplayerdata( "squadMembers", self.pers["activeSquadMember"], var_3, var_2 );
}
}
foreach ( var_3, var_2 in self.bufferedchildstats )
{
foreach ( var_8, var_7 in var_2 )
{
if ( var_3 == "round" )
{
self setcommonplayerdata( var_3, var_8, var_7 );
continue;
}
if ( var_0 )
self setrankedplayerdata( var_3, var_8, var_7 );
}
}
}
writekdhistorystats()
{
if ( !maps\mp\_utility::matchmakinggame() )
return;
if ( issquadsmode() )
return;
level waittill( "game_ended" );
wait 0.1;
if ( maps\mp\_utility::waslastround() || !maps\mp\_utility::isroundbased() && maps\mp\_utility::hittimelimit() )
{
foreach ( var_1 in level.players )
var_1 incrementrankedreservedhistory( var_1.kills, var_1.deaths );
}
}
incrementrankedreservedhistory( var_0, var_1 )
{
if ( !maps\mp\_utility::rankingenabled() )
return;
for ( var_2 = 0; var_2 < 4; var_2++ )
{
var_3 = self getrankedplayerdatareservedint( "kdHistoryK" + ( var_2 + 1 ) );
self setrankedplayerdatareservedint( "kdHistoryK" + var_2, var_3 );
var_3 = self getrankedplayerdatareservedint( "kdHistoryD" + ( var_2 + 1 ) );
self setrankedplayerdatareservedint( "kdHistoryD" + var_2, var_3 );
}
self setrankedplayerdatareservedint( "kdHistoryK4", int( clamp( var_0, 0, 255 ) ) );
self setrankedplayerdatareservedint( "kdHistoryD4", int( clamp( var_1, 0, 255 ) ) );
}
incrementweaponstat( var_0, var_1, var_2 )
{
if ( var_0 == "iw6_pdwauto" )
var_0 = "iw6_pdw";
else if ( var_0 == "iw6_knifeonlyfast" )
var_0 = "iw6_knifeonly";
if ( maps\mp\_utility::iskillstreakweapon( var_0 ) )
return;
if ( isdefined( level.disableweaponstats ) )
return;
if ( maps\mp\_utility::rankingenabled() )
{
var_3 = self getrankedplayerdata( "weaponStats", var_0, var_1 );
self setrankedplayerdata( "weaponStats", var_0, var_1, var_3 + var_2 );
}
}
incrementattachmentstat( var_0, var_1, var_2 )
{
if ( isdefined( level.disableweaponstats ) )
return;
if ( maps\mp\_utility::rankingenabled() )
{
var_3 = self getrankedplayerdata( "attachmentsStats", var_0, var_1 );
self setrankedplayerdata( "attachmentsStats", var_0, var_1, var_3 + var_2 );
}
}
updateweaponbufferedstats()
{
if ( !isdefined( self.trackingweaponname ) )
return;
if ( self.trackingweaponname == "" || self.trackingweaponname == "none" )
return;
if ( maps\mp\_utility::iskillstreakweapon( self.trackingweaponname ) || maps\mp\_utility::isenvironmentweapon( self.trackingweaponname ) )
return;
var_0 = self.trackingweaponname;
var_1 = undefined;
var_2 = getsubstr( var_0, 0, 4 );
if ( var_2 == "alt_" )
{
var_3 = maps\mp\_utility::getweaponattachmentsbasenames( var_0 );
foreach ( var_5 in var_3 )
{
if ( var_5 == "shotgun" || var_5 == "gl" )
{
var_1 = var_5;
break;
}
}
if ( !isdefined( var_1 ) )
{
var_7 = strtok( var_0, "_" );
var_1 = var_7[1] + "_" + var_7[2];
}
}
else if ( var_2 == "iw5_" || var_2 == "iw6_" )
{
var_7 = strtok( var_0, "_" );
var_1 = var_7[0] + "_" + var_7[1];
}
if ( var_1 == "gl" || var_1 == "shotgun" )
{
perslog_attachmentstats( var_1 );
persclear_stats();
return;
}
if ( !maps\mp\_utility::iscacprimaryweapon( var_1 ) && !maps\mp\_utility::iscacsecondaryweapon( var_1 ) )
return;
perslog_weaponstats( var_1 );
var_3 = getweaponattachments( var_0 );
foreach ( var_5 in var_3 )
{
var_9 = maps\mp\_utility::attachmentmap_tobase( var_5 );
switch ( var_9 )
{
case "scope":
case "gl":
case "shotgun":
continue;
}
perslog_attachmentstats( var_9 );
}
persclear_stats();
}
persclear_stats()
{
self.trackingweaponname = "none";
self.trackingweaponshots = 0;
self.trackingweaponkills = 0;
self.trackingweaponhits = 0;
self.trackingweaponheadshots = 0;
self.trackingweapondeaths = 0;
}
perslog_weaponstats( var_0 )
{
if ( self.trackingweaponshots > 0 )
{
incrementweaponstat( var_0, "shots", self.trackingweaponshots );
maps\mp\_matchdata::logweaponstat( var_0, "shots", self.trackingweaponshots );
}
if ( self.trackingweaponkills > 0 )
{
incrementweaponstat( var_0, "kills", self.trackingweaponkills );
maps\mp\_matchdata::logweaponstat( var_0, "kills", self.trackingweaponkills );
}
if ( self.trackingweaponhits > 0 )
{
incrementweaponstat( var_0, "hits", self.trackingweaponhits );
maps\mp\_matchdata::logweaponstat( var_0, "hits", self.trackingweaponhits );
}
if ( self.trackingweaponheadshots > 0 )
{
incrementweaponstat( var_0, "headShots", self.trackingweaponheadshots );
maps\mp\_matchdata::logweaponstat( var_0, "headShots", self.trackingweaponheadshots );
}
if ( self.trackingweapondeaths > 0 )
{
incrementweaponstat( var_0, "deaths", self.trackingweapondeaths );
maps\mp\_matchdata::logweaponstat( var_0, "deaths", self.trackingweapondeaths );
}
}
perslog_attachmentstats( var_0 )
{
if ( self.trackingweaponshots > 0 && var_0 != "tactical" )
{
incrementattachmentstat( var_0, "shots", self.trackingweaponshots );
maps\mp\_matchdata::logattachmentstat( var_0, "shots", self.trackingweaponshots );
}
if ( self.trackingweaponkills > 0 && var_0 != "tactical" )
{
incrementattachmentstat( var_0, "kills", self.trackingweaponkills );
maps\mp\_matchdata::logattachmentstat( var_0, "kills", self.trackingweaponkills );
}
if ( self.trackingweaponhits > 0 && var_0 != "tactical" )
{
incrementattachmentstat( var_0, "hits", self.trackingweaponhits );
maps\mp\_matchdata::logattachmentstat( var_0, "hits", self.trackingweaponhits );
}
if ( self.trackingweaponheadshots > 0 && var_0 != "tactical" )
{
incrementattachmentstat( var_0, "headShots", self.trackingweaponheadshots );
maps\mp\_matchdata::logattachmentstat( var_0, "headShots", self.trackingweaponheadshots );
}
if ( self.trackingweapondeaths > 0 )
{
incrementattachmentstat( var_0, "deaths", self.trackingweapondeaths );
maps\mp\_matchdata::logattachmentstat( var_0, "deaths", self.trackingweapondeaths );
}
}
uploadglobalstatcounters()
{
level waittill( "game_ended" );
if ( !maps\mp\_utility::matchmakinggame() )
return;
var_0 = 0;
var_1 = 0;
var_2 = 0;
var_3 = 0;
var_4 = 0;
var_5 = 0;
foreach ( var_7 in level.players )
var_5 = var_5 + var_7.timeplayed["total"];
incrementcounter( "global_minutes", int( var_5 / 60 ) );
if ( maps\mp\_utility::isroundbased() && !maps\mp\_utility::waslastround() )
return;
wait 0.05;
foreach ( var_7 in level.players )
{
var_0 = var_0 + var_7.kills;
var_1 = var_1 + var_7.deaths;
var_2 = var_2 + var_7.assists;
var_3 = var_3 + var_7.headshots;
var_4 = var_4 + var_7.suicides;
}
incrementcounter( "global_headshots", var_3 );
incrementcounter( "global_suicides", var_4 );
incrementcounter( "global_games", 1 );
if ( !isdefined( level.assists_disabled ) )
incrementcounter( "global_assists", var_2 );
if ( !isdefined( level.ishorde ) )
incrementcounter( "global_kills", var_0 );
if ( !isdefined( level.ishorde ) )
incrementcounter( "global_deaths", var_1 );
}

View File

@ -0,0 +1,22 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
level thread onplayerconnect();
}
onplayerconnect()
{
for (;;)
{
level waittill( "connected", var_0 );
if ( !isai( var_0 ) )
{
var_0.playercardpatch = var_0 getcacplayerdata( "patch" );
var_0.playercardpatchbacking = var_0 getcacplayerdata( "patchbacking" );
var_0.playercardbackground = var_0 getcacplayerdata( "background" );
}
}
}

File diff suppressed because it is too large Load Diff

1274
maps/mp/gametypes/_rank.gsc Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,107 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
level.hostname = getdvar( "sv_hostname" );
if ( level.hostname == "" )
level.hostname = "CoDHost";
setdvar( "sv_hostname", level.hostname );
level.allowvote = getdvarint( "g_allowvote", 1 );
setdvar( "g_allowvote", level.allowvote );
setdvar( "ui_allowvote", level.allowvote );
setfriendlyfire( maps\mp\gametypes\_tweakables::gettweakablevalue( "team", "fftype" ) );
constraingametype( getdvar( "g_gametype" ) );
for (;;)
{
updateserversettings();
wait 5;
}
}
updateserversettings()
{
var_0 = getdvar( "sv_hostname" );
if ( level.hostname != var_0 )
level.hostname = var_0;
var_1 = getdvarint( "g_allowvote", 1 );
if ( level.allowvote != var_1 )
{
level.allowvote = var_1;
setdvar( "ui_allowvote", level.allowvote );
}
var_2 = maps\mp\gametypes\_tweakables::gettweakablevalue( "team", "fftype" );
if ( level.friendlyfire != var_2 )
setfriendlyfire( var_2 );
}
constraingametype( var_0 )
{
var_1 = getentarray();
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
{
var_3 = var_1[var_2];
if ( var_0 == "dm" )
{
if ( isdefined( var_3.script_gametype_dm ) && var_3.script_gametype_dm != "1" )
var_3 delete();
continue;
}
if ( var_0 == "tdm" )
{
if ( isdefined( var_3.script_gametype_tdm ) && var_3.script_gametype_tdm != "1" )
var_3 delete();
continue;
}
if ( var_0 == "ctf" )
{
if ( isdefined( var_3.script_gametype_ctf ) && var_3.script_gametype_ctf != "1" )
var_3 delete();
continue;
}
if ( var_0 == "hq" )
{
if ( isdefined( var_3.script_gametype_hq ) && var_3.script_gametype_hq != "1" )
var_3 delete();
continue;
}
if ( var_0 == "sd" )
{
if ( isdefined( var_3.script_gametype_sd ) && var_3.script_gametype_sd != "1" )
var_3 delete();
continue;
}
if ( var_0 == "koth" )
{
if ( isdefined( var_3.script_gametype_koth ) && var_3.script_gametype_koth != "1" )
var_3 delete();
}
}
}
setfriendlyfire( var_0 )
{
level.friendlyfire = var_0;
setdvar( "ui_friendlyfire", var_0 );
setdvar( "cg_drawFriendlyHUDGrenades", var_0 );
}

View File

@ -0,0 +1,241 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
level._effect["slide_dust"] = loadfx( "vfx/gameplay/screen_effects/vfx_scrnfx_tocam_slidedust_m" );
level._effect["hit_left"] = loadfx( "vfx/gameplay/screen_effects/vfx_blood_hit_left" );
level._effect["hit_right"] = loadfx( "vfx/gameplay/screen_effects/vfx_blood_hit_right" );
level._effect["melee_spray"] = loadfx( "vfx/gameplay/screen_effects/vfx_melee_blood_spray" );
}
shellshockondamage( var_0, var_1 )
{
if ( maps\mp\_flashgrenades::isflashbanged() )
return;
if ( var_0 == "MOD_EXPLOSIVE" || var_0 == "MOD_GRENADE" || var_0 == "MOD_GRENADE_SPLASH" || var_0 == "MOD_PROJECTILE" || var_0 == "MOD_PROJECTILE_SPLASH" )
{
if ( var_1 > 10 )
{
if ( isdefined( self.shellshockreduction ) && self.shellshockreduction )
self shellshock( "frag_grenade_mp", self.shellshockreduction );
else
self shellshock( "frag_grenade_mp", 0.5 );
}
}
}
endondeath()
{
self waittill( "death" );
waittillframeend;
self notify( "end_explode" );
}
grenade_earthquake()
{
self notify( "grenade_earthQuake" );
self endon( "grenade_earthQuake" );
thread endondeath();
self endon( "end_explode" );
self waittill( "explode", var_0 );
playrumbleonposition( "grenade_rumble", var_0 );
earthquake( 0.5, 0.75, var_0, 800 );
foreach ( var_2 in level.players )
{
if ( var_2 maps\mp\_utility::isusingremote() )
continue;
if ( distancesquared( var_0, var_2.origin ) > 360000 )
continue;
if ( var_2 damageconetrace( var_0 ) )
var_2 thread dirteffect( var_0 );
var_2 setclientomnvar( "ui_hud_shake", 1 );
}
}
dirteffect( var_0 )
{
self notify( "dirtEffect" );
self endon( "dirtEffect" );
self endon( "disconnect" );
if ( !maps\mp\_utility::isreallyalive( self ) )
return;
var_1 = vectornormalize( anglestoforward( self.angles ) );
var_2 = vectornormalize( anglestoright( self.angles ) );
var_3 = vectornormalize( var_0 - self.origin );
var_4 = vectordot( var_3, var_1 );
var_5 = vectordot( var_3, var_2 );
var_6 = [ "death", "damage" ];
if ( var_4 > 0 && var_4 > 0.5 && self getcurrentweapon() != "iw6_riotshield_mp" )
common_scripts\utility::waittill_any_in_array_or_timeout( var_6, 2.0 );
else if ( abs( var_4 ) < 0.866 )
{
if ( var_5 > 0 )
common_scripts\utility::waittill_any_in_array_or_timeout( var_6, 2.0 );
else
common_scripts\utility::waittill_any_in_array_or_timeout( var_6, 2.0 );
}
}
bloodeffect( var_0 )
{
self endon( "disconnect" );
if ( !maps\mp\_utility::isreallyalive( self ) )
return;
var_1 = vectornormalize( anglestoforward( self.angles ) );
var_2 = vectornormalize( anglestoright( self.angles ) );
var_3 = vectornormalize( var_0 - self.origin );
var_4 = vectordot( var_3, var_1 );
var_5 = vectordot( var_3, var_2 );
if ( var_4 > 0 && var_4 > 0.5 )
return;
if ( abs( var_4 ) < 0.866 )
{
var_6 = level._effect["hit_left"];
if ( var_5 > 0 )
var_6 = level._effect["hit_right"];
var_7 = [ "death", "damage" ];
thread play_fx_with_entity( var_6, var_7, 7.0 );
}
else
{
}
}
bloodmeleeeffect()
{
self endon( "disconnect" );
wait 0.5;
var_0 = [ "death" ];
thread play_fx_with_entity( level._effect["melee_spray"], var_0, 1.5 );
}
play_fx_with_entity( var_0, var_1, var_2 )
{
self endon( "disconnect" );
var_3 = spawnfxforclient( var_0, self geteye(), self );
triggerfx( var_3 );
var_3 setfxkilldefondelete();
common_scripts\utility::waittill_any_in_array_or_timeout( var_1, var_2 );
var_3 delete();
}
c4_earthquake()
{
thread endondeath();
self endon( "end_explode" );
self waittill( "explode", var_0 );
playrumbleonposition( "grenade_rumble", var_0 );
earthquake( 0.4, 0.75, var_0, 512 );
foreach ( var_2 in level.players )
{
if ( var_2 maps\mp\_utility::isusingremote() )
continue;
if ( distance( var_0, var_2.origin ) > 512 )
continue;
if ( var_2 damageconetrace( var_0 ) )
var_2 thread dirteffect( var_0 );
var_2 setclientomnvar( "ui_hud_shake", 1 );
}
}
barrel_earthquake()
{
var_0 = self.origin;
playrumbleonposition( "grenade_rumble", var_0 );
earthquake( 0.4, 0.5, var_0, 512 );
foreach ( var_2 in level.players )
{
if ( var_2 maps\mp\_utility::isusingremote() )
continue;
if ( distance( var_0, var_2.origin ) > 512 )
continue;
if ( var_2 damageconetrace( var_0 ) )
var_2 thread dirteffect( var_0 );
var_2 setclientomnvar( "ui_hud_shake", 1 );
}
}
artillery_earthquake()
{
var_0 = self.origin;
playrumbleonposition( "artillery_rumble", self.origin );
earthquake( 0.7, 0.5, self.origin, 800 );
foreach ( var_2 in level.players )
{
if ( var_2 maps\mp\_utility::isusingremote() )
continue;
if ( distance( var_0, var_2.origin ) > 600 )
continue;
if ( var_2 damageconetrace( var_0 ) )
var_2 thread dirteffect( var_0 );
var_2 setclientomnvar( "ui_hud_shake", 1 );
}
}
stealthairstrike_earthquake( var_0 )
{
playrumbleonposition( "grenade_rumble", var_0 );
earthquake( 1.0, 0.6, var_0, 2000 );
foreach ( var_2 in level.players )
{
if ( var_2 maps\mp\_utility::isusingremote() )
continue;
if ( distance( var_0, var_2.origin ) > 1000 )
continue;
if ( var_2 damageconetrace( var_0 ) )
var_2 thread dirteffect( var_0 );
var_2 setclientomnvar( "ui_hud_shake", 1 );
}
}
airstrike_earthquake( var_0 )
{
playrumbleonposition( "artillery_rumble", var_0 );
earthquake( 0.7, 0.75, var_0, 1000 );
foreach ( var_2 in level.players )
{
if ( var_2 maps\mp\_utility::isusingremote() )
continue;
if ( distance( var_0, var_2.origin ) > 900 )
continue;
if ( var_2 damageconetrace( var_0 ) )
var_2 thread dirteffect( var_0 );
var_2 setclientomnvar( "ui_hud_shake", 1 );
}
}

View File

@ -0,0 +1,765 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init_spawn_factors()
{
if ( !isdefined( level.spawn_closeenemydistsq ) )
level.spawn_closeenemydistsq = 250000;
}
score_factor( var_0, var_1, var_2, var_3 )
{
if ( isdefined( var_3 ) )
var_4 = [[ var_1 ]]( var_2, var_3 );
else
var_4 = [[ var_1 ]]( var_2 );
var_4 = clamp( var_4, 0, 100 );
var_4 = var_4 * var_0;
return var_4;
}
critical_factor( var_0, var_1 )
{
var_2 = [[ var_0 ]]( var_1 );
var_2 = clamp( var_2, 0, 100 );
return var_2;
}
avoidcarepackages( var_0 )
{
foreach ( var_2 in level.carepackages )
{
if ( !isdefined( var_2 ) )
continue;
if ( distancesquared( var_0.origin, var_2.origin ) < 22500 )
return 0;
}
return 100;
}
avoidgrenades( var_0 )
{
foreach ( var_2 in level.grenades )
{
if ( !isdefined( var_2 ) || !var_2 isexplosivedangeroustoplayer( var_0 ) )
continue;
if ( distancesquared( var_0.origin, var_2.origin ) < 122500 )
return 0;
}
return 100;
}
avoidmines( var_0 )
{
var_1 = common_scripts\utility::array_combine( level.mines, level.placedims );
if ( isdefined( level.traps ) && level.traps.size > 0 )
var_1 = common_scripts\utility::array_combine( var_1, level.traps );
foreach ( var_3 in var_1 )
{
if ( !isdefined( var_3 ) || !var_3 isexplosivedangeroustoplayer( var_0 ) )
continue;
if ( distancesquared( var_0.origin, var_3.origin ) < 122500 )
return 0;
}
return 100;
}
isexplosivedangeroustoplayer( var_0 )
{
if ( !level.teambased || level.friendlyfire || !isdefined( var_0.team ) )
return 1;
else
{
var_1 = undefined;
if ( isdefined( self.owner ) )
var_1 = self.owner.team;
if ( isdefined( var_1 ) )
return var_1 != var_0.team;
else
return 1;
}
}
avoidairstrikelocations( var_0 )
{
if ( !isdefined( level.artillerydangercenters ) )
return 100;
if ( !var_0.outside )
return 100;
var_1 = maps\mp\killstreaks\_airstrike::getairstrikedanger( var_0.origin );
if ( var_1 > 0 )
return 0;
return 100;
}
avoidcornervisibleenemies( var_0 )
{
var_1 = "all";
if ( level.teambased )
var_1 = maps\mp\gametypes\_gameobjects::getenemyteam( self.team );
if ( var_0.cornersights[var_1] > 0 )
return 0;
return 100;
}
avoidfullvisibleenemies( var_0 )
{
var_1 = "all";
if ( level.teambased )
var_1 = maps\mp\gametypes\_gameobjects::getenemyteam( self.team );
if ( var_0.fullsights[var_1] > 0 )
return 0;
return 100;
}
avoidcloseenemies( var_0 )
{
var_1 = [];
var_2 = [];
if ( level.teambased )
var_1[0] = maps\mp\gametypes\_gameobjects::getenemyteam( self.team );
else
var_1[var_1.size] = "all";
foreach ( var_4 in var_1 )
{
if ( var_0.totalplayers[var_4] == 0 )
continue;
var_2[var_2.size] = var_4;
}
if ( var_2.size == 0 )
return 100;
foreach ( var_4 in var_2 )
{
if ( var_0.mindistsquared[var_4] < level.spawn_closeenemydistsq )
return 0;
}
return 100;
}
avoidtelefrag( var_0 )
{
if ( isdefined( self.allowtelefrag ) )
return 100;
if ( positionwouldtelefrag( var_0.origin ) )
{
foreach ( var_2 in var_0.alternates )
{
if ( !positionwouldtelefrag( var_2 ) )
return 100;
}
return 0;
}
return 100;
}
avoidsamespawn( var_0 )
{
if ( isdefined( self.lastspawnpoint ) && self.lastspawnpoint == var_0 )
return 0;
return 100;
}
avoidenemyspawn( var_0 )
{
if ( isdefined( var_0.lastspawnteam ) && ( !level.teambased || var_0.lastspawnteam != self.team ) )
{
var_1 = var_0.lastspawntime + 500;
if ( gettime() < var_1 )
return 0;
}
return 100;
}
avoidrecentlyusedbyenemies( var_0 )
{
var_1 = !level.teambased || isdefined( var_0.lastspawnteam ) && self.team != var_0.lastspawnteam;
if ( var_1 && isdefined( var_0.lastspawntime ) )
{
var_2 = gettime() - var_0.lastspawntime;
if ( var_2 > 4000 )
return 100;
return var_2 / 4000 * 100;
}
return 100;
}
avoidrecentlyusedbyanyone( var_0 )
{
if ( isdefined( var_0.lastspawntime ) )
{
var_1 = gettime() - var_0.lastspawntime;
if ( var_1 > 4000 )
return 100;
return var_1 / 4000 * 100;
}
return 100;
}
avoidlastdeathlocation( var_0 )
{
if ( !isdefined( self.lastdeathpos ) )
return 100;
var_1 = distancesquared( var_0.origin, self.lastdeathpos );
if ( var_1 > 3240000 )
return 100;
var_2 = var_1 / 3240000;
return var_2 * 100;
}
avoidlastattackerlocation( var_0 )
{
if ( !isdefined( self.lastattacker ) || !isdefined( self.lastattacker.origin ) )
return 100;
if ( !maps\mp\_utility::isreallyalive( self.lastattacker ) )
return 100;
var_1 = distancesquared( var_0.origin, self.lastattacker.origin );
if ( var_1 > 3240000 )
return 100;
var_2 = var_1 / 3240000;
return var_2 * 100;
}
spawnfrontlinethink()
{
if ( !level.teambased )
return;
while ( !isdefined( level.spawnpoints ) )
wait 0.05;
var_0 = undefined;
var_1 = undefined;
var_2 = isdefined( level.matchrecording_logevent ) && isdefined( level.matchrecording_generateid );
var_3 = getdvarint( "scr_draw_frontline" ) == 1;
var_4 = getdvarint( "scr_frontline_min_spawns", 0 );
if ( var_4 == 0 )
var_4 = 3;
var_5 = getdvarint( "scr_frontline_disable_ratio_check", 0 ) != 1;
for (;;)
{
wait 0.5;
var_6 = [];
var_7 = [];
foreach ( var_9 in level.players )
{
if ( !isdefined( var_9 ) )
continue;
if ( !maps\mp\_utility::isreallyalive( var_9 ) )
continue;
if ( var_9.team == "axis" )
{
var_6[var_6.size] = var_9;
continue;
}
var_7[var_7.size] = var_9;
}
var_11 = maps\mp\_utility::getaverageorigin( var_7 );
if ( !isdefined( var_11 ) )
{
wait 0.05;
continue;
}
var_11 = ( var_11[0], var_11[1], 0 );
var_12 = maps\mp\_utility::getaverageorigin( var_6 );
if ( !isdefined( var_12 ) )
{
wait 0.05;
continue;
}
var_12 = ( var_12[0], var_12[1], 0 );
var_13 = var_12 - var_11;
var_14 = vectortoyaw( var_13 );
if ( !isdefined( var_0 ) )
var_0 = var_14;
var_15 = 4.0;
var_16 = var_14 - var_0;
if ( var_16 > 180 )
var_16 = var_16 - 360;
else if ( var_16 < -180 )
var_16 = 360 + var_16;
var_15 = clamp( var_16, var_15 * -1, var_15 );
var_0 = var_0 + var_15;
var_17 = var_11 + var_13 * 0.5;
if ( !isdefined( var_1 ) )
var_1 = var_17;
var_18 = var_17 - var_1;
var_19 = length2d( var_18 );
var_20 = min( var_19, 100 );
if ( var_20 > 0 )
{
var_18 = var_18 * ( var_20 / var_19 );
var_1 = var_1 + var_18;
}
var_21 = anglestoforward( ( 0, var_0, 0 ) );
var_22 = [];
var_22["allies"] = 0;
var_22["axis"] = 0;
var_23 = level.spawnpoints;
var_23 = maps\mp\gametypes\_spawnscoring::checkdynamicspawns( var_23 );
foreach ( var_25 in var_23 )
{
var_26 = undefined;
var_27 = var_1 - var_25.origin;
var_28 = vectordot( var_27, var_21 );
if ( var_28 > 0 )
{
var_26 = "allies";
var_25.forcedteam = var_26;
}
else
{
var_26 = "axis";
var_25.forcedteam = var_26;
}
var_29 = maps\mp\_utility::getotherteam( var_26 );
if ( !isdefined( var_25.fullsights ) || !isdefined( var_25.fullsights[var_29] ) || var_25.fullsights[var_29] <= 0 )
var_22[var_26]++;
}
var_31 = common_scripts\utility::ter_op( var_22["allies"] < var_22["axis"], "allies", "axis" );
var_32 = maps\mp\_utility::getotherteam( var_31 );
var_33 = var_22[var_31] < var_22[var_32] * 0.5;
if ( var_22[var_31] <= var_4 || var_5 && var_33 )
{
foreach ( var_25 in var_23 )
var_25.forcedteam = undefined;
var_1 = undefined;
var_0 = undefined;
}
if ( var_2 || var_3 )
{
if ( var_2 && !isdefined( level.frontlinelogids ) )
{
level.frontlinelogids = [];
level.frontlinelogids["line"] = [[ level.matchrecording_generateid ]]();
level.frontlinelogids["alliesCenter"] = [[ level.matchrecording_generateid ]]();
level.frontlinelogids["axisCenter"] = [[ level.matchrecording_generateid ]]();
}
if ( isdefined( var_1 ) && isdefined( var_0 ) )
{
var_36 = ( var_1[0], var_1[1], level.mapcenter[2] );
var_37 = anglestoright( ( 0, var_0, 0 ) );
var_38 = var_36 + var_37 * 5000;
var_39 = var_36 - var_37 * 5000;
if ( var_2 )
[[ level.matchrecording_logevent ]]( level.frontlinelogids["line"], "allies", "FRONT_LINE", var_38[0], var_38[1], gettime(), undefined, var_39[0], var_39[1] );
}
else if ( var_2 )
[[ level.matchrecording_logevent ]]( level.frontlinelogids["line"], "allies", "FRONT_LINE", 0, 0, gettime(), undefined, 0, 0 );
if ( var_2 )
{
[[ level.matchrecording_logevent ]]( level.frontlinelogids["alliesCenter"], "axis", "ANCHOR", var_12[0], var_12[1], gettime() );
[[ level.matchrecording_logevent ]]( level.frontlinelogids["axisCenter"], "allies", "ANCHOR", var_11[0], var_11[1], gettime() );
}
}
}
}
correcthomogenization()
{
level notify( "correctHomogenization" );
level endon( "correctHomogenization" );
if ( !level.teambased )
return;
var_0 = 2;
var_1 = 0;
var_2 = [];
var_3 = [];
var_4 = [];
var_5 = [];
var_6 = [];
var_7 = [];
var_2 = getspawnarray( "mp_tdm_spawn_allies_start" );
var_3 = getspawnarray( "mp_tdm_spawn_axis_start" );
var_8 = [];
while ( !isdefined( level.spawnpoints ) )
wait 0.05;
var_9 = tolower( getdvar( "mapname" ) );
if ( var_9 == "mp_strikezone" )
{
foreach ( var_11 in level.spawnpoints )
{
if ( var_11.origin[2] < 20000 )
{
var_4[var_4.size] = var_11;
continue;
}
var_5[var_5.size] = var_11;
}
if ( level.teleport_zone_current == "start" )
var_6 = sortbydistance( var_4, level.mapcenter );
else
var_6 = sortbydistance( var_5, level.mapcenter );
for ( var_13 = 0; var_13 < 8; var_13++ )
var_7[var_13] = var_6[var_6.size - ( var_13 + 1 )];
}
else
{
var_6 = sortbydistance( level.spawnpoints, level.mapcenter );
for ( var_13 = 0; var_13 < 8; var_13++ )
var_7[var_13] = var_6[var_6.size - ( var_13 + 1 )];
var_7[var_7.size] = var_2[0];
var_7[var_7.size] = var_3[0];
}
var_14 = int( getdvar( "scr_anchorSpawns" ) );
for (;;)
{
wait 5;
var_15 = [];
var_16 = [];
foreach ( var_18 in level.players )
{
if ( !isdefined( var_18 ) )
continue;
if ( !maps\mp\_utility::isreallyalive( var_18 ) )
continue;
if ( var_18.team == "axis" )
{
var_15[var_15.size] = var_18;
continue;
}
var_16[var_16.size] = var_18;
}
var_20 = maps\mp\_utility::getaverageorigin( var_16 );
if ( !isdefined( var_20 ) )
{
wait 0.05;
continue;
}
var_21 = [];
var_21 = sortbydistance( var_7, var_20 );
var_22 = var_21[0];
var_23 = 0;
var_24 = undefined;
for ( var_13 = 0; var_13 < var_8.size; var_13++ )
{
if ( var_22 == var_8[var_13] )
{
var_23 = 1;
continue;
}
var_23 = 0;
break;
}
if ( var_23 )
{
var_1 = var_1 + 1;
if ( var_1 >= var_0 )
{
var_24 = var_21[var_21.size - 1];
var_8[var_8.size] = var_24;
}
}
if ( !isdefined( var_24 ) )
{
var_24 = var_22;
var_8[var_8.size] = var_24;
}
var_25 = [];
var_25 = sortbydistance( var_7, var_24.origin );
var_26 = var_25[var_25.size - 1];
level.alliesweightorg = var_24.origin;
level.axisweightorg = var_26.origin;
}
}
detecthomogenization()
{
var_0 = [];
var_1 = [];
if ( level.teambased )
{
foreach ( var_3 in level.players )
{
if ( !isdefined( var_3 ) )
continue;
if ( !maps\mp\_utility::isreallyalive( var_3 ) )
continue;
if ( var_3.team == "axis" )
{
var_0[var_0.size] = var_3;
continue;
}
var_1[var_1.size] = var_3;
}
var_5 = maps\mp\_utility::getaverageorigin( var_0 );
var_6 = maps\mp\_utility::getaverageorigin( var_1 );
if ( !isdefined( var_6 ) || !isdefined( var_5 ) )
return 0;
if ( common_scripts\utility::distance_2d_squared( var_6, var_5 ) < 1048576 )
{
return 1;
return;
}
return 0;
return;
}
else
return 0;
}
preferalliesbydistance( var_0 )
{
if ( var_0.totalplayers[self.team] == 0 )
return 0;
var_1 = var_0.distsumsquared[self.team] / var_0.totalplayers[self.team];
var_1 = min( var_1, 3240000 );
var_2 = 1 - var_1 / 3240000;
return var_2 * 100;
}
avoidenemiesbydistance( var_0 )
{
var_1 = [];
var_2 = [];
if ( level.teambased )
var_1[0] = maps\mp\gametypes\_gameobjects::getenemyteam( self.team );
else
var_1[var_1.size] = "all";
foreach ( var_4 in var_1 )
{
if ( var_0.totalplayers[var_4] == 0 )
continue;
var_2[var_2.size] = var_4;
}
if ( var_2.size == 0 )
return 100;
foreach ( var_4 in var_2 )
{
if ( var_0.mindistsquared[var_4] < 250000 )
return 0;
}
var_8 = 0;
var_9 = 0;
foreach ( var_4 in var_2 )
{
var_8 = var_8 + var_0.distsumsquaredcapped[var_4];
var_9 = var_9 + var_0.totalplayers[var_4];
}
var_12 = var_8 / var_9;
var_12 = min( var_12, 3240000 );
var_13 = var_12 / 3240000;
return var_13 * 100;
}
avoidclosestenemy( var_0 )
{
var_1 = [];
var_2 = [];
if ( level.teambased )
var_1[0] = maps\mp\gametypes\_gameobjects::getenemyteam( self.team );
else
var_1[var_1.size] = "all";
foreach ( var_4 in var_1 )
{
if ( var_0.totalplayers[var_4] == 0 )
continue;
var_2[var_2.size] = var_4;
}
if ( var_2.size == 0 )
return 100;
var_6 = 0;
foreach ( var_4 in var_2 )
{
if ( var_0.mindistsquared[var_4] < 250000 )
return 0;
var_8 = min( var_0.mindistsquared[var_4], 3240000 );
var_9 = var_8 / 3240000;
var_6 = var_6 + var_9 * 100;
}
return var_6 / var_2.size;
}
scoredompoint( var_0 )
{
var_1 = undefined;
foreach ( var_3 in level.domflags )
{
if ( isdefined( var_3.dompointnumber ) && var_3.dompointnumber == var_0 )
{
var_1 = var_3;
break;
}
}
if ( !isdefined( var_1 ) )
return 100;
var_5 = var_1 maps\mp\gametypes\_gameobjects::getclaimteam();
if ( var_5 == "none" )
return 100;
else
return 50.0;
}
preferdompoints( var_0, var_1 )
{
if ( var_1[0] && var_0.dompointa )
return scoredompoint( 0 );
if ( var_1[1] && var_0.dompointb )
return scoredompoint( 1 );
if ( var_1[2] && var_0.dompointc )
return scoredompoint( 2 );
return 0;
}
preferclosepoints( var_0, var_1 )
{
foreach ( var_3 in var_1 )
{
if ( var_0 == var_3 )
return 100;
}
return 0;
}
preferbyteambase( var_0, var_1 )
{
if ( isdefined( var_0.teambase ) && var_0.teambase == var_1 )
return 100;
return 0;
}
randomspawnscore( var_0 )
{
return randomintrange( 0, 99 );
}
maxplayerspawninfluencedistsquared( var_0 )
{
return 3240000;
}

View File

@ -0,0 +1,780 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
level.killstreakspawnshield = 5000;
level.forcebuddyspawn = 0;
level.supportbuddyspawn = 1;
level.spawnmins = ( 0, 0, 0 );
level.spawnmaxs = ( 0, 0, 0 );
level.clienttracespawnclass = undefined;
level.disableclientspawntraces = 0;
level.numplayerswaitingtospawn = 0;
level.numplayerswaitingtoenterkillcam = 0;
level.players = [];
level.participants = [];
level.characters = [];
level.spawnpointarray = [];
level.grenades = [];
level.missiles = [];
level.carepackages = [];
level.helis = [];
level.turrets = [];
level.tanks = [];
level.scramblers = [];
level.ims = [];
level.ugvs = [];
level.balldrones = [];
level thread onplayerconnect();
level thread spawnpointupdate();
level thread trackgrenades();
level thread trackmissiles();
level thread trackcarepackages();
level thread trackhostmigrationend();
if ( getdvarint( "scr_frontlineSpawns", 0 ) == 1 )
{
if ( level.gametype == "war" || level.gametype == "conf" || level.gametype == "cranked" )
level thread maps\mp\gametypes\_spawnfactor::spawnfrontlinethink();
}
else
{
var_0 = int( getdvar( "scr_anchorSpawns" ) );
if ( level.gametype == "war" || level.gametype == "conf" || level.gametype == "cranked" )
level thread maps\mp\gametypes\_spawnfactor::correcthomogenization();
}
for ( var_1 = 0; var_1 < level.teamnamelist.size; var_1++ )
level.teamspawnpoints[level.teamnamelist[var_1]] = [];
maps\mp\gametypes\_spawnfactor::init_spawn_factors();
}
trackhostmigrationend()
{
for (;;)
{
self waittill( "host_migration_end" );
foreach ( var_1 in level.participants )
var_1.canperformclienttraces = canperformclienttraces( var_1 );
}
}
onplayerconnect()
{
for (;;)
{
level waittill( "connected", var_0 );
level thread startclientspawnpointtraces( var_0 );
level thread eyesonsightchecks( var_0 );
}
}
eyesonsightchecks( var_0 )
{
var_0 endon( "disconnect" );
for (;;)
{
if ( var_0.sessionstate == "playing" && maps\mp\_utility::isreallyalive( var_0 ) && !var_0 maps\mp\_utility::_hasperk( "specialty_gpsjammer" ) )
{
var_1 = 0;
var_2 = var_0 getplayerssightingme();
foreach ( var_4 in var_2 )
{
if ( level.teambased && var_4.team == var_0.team )
continue;
if ( var_0.sessionstate != "playing" || !maps\mp\_utility::isreallyalive( var_0 ) )
continue;
var_1 = 1;
var_0 notify( "eyesOn" );
break;
}
var_0 markforeyeson( var_1 );
}
else
{
var_0 markforeyeson( 0 );
var_0 notify( "eyesOff" );
}
wait 0.05;
}
}
startclientspawnpointtraces( var_0 )
{
var_0 endon( "disconnect" );
var_0.canperformclienttraces = canperformclienttraces( var_0 );
if ( !var_0.canperformclienttraces )
return;
wait 0.05;
var_0 setclientspawnsighttraces( level.clienttracespawnclass );
}
canperformclienttraces( var_0 )
{
if ( level.disableclientspawntraces )
return 0;
if ( !isdefined( level.clienttracespawnclass ) )
return 0;
if ( isai( var_0 ) )
return 0;
if ( var_0 ishost() )
return 0;
return 1;
}
addstartspawnpoints( var_0 )
{
var_1 = getspawnpointarray( var_0 );
if ( !var_1.size )
return;
if ( !isdefined( level.startspawnpoints ) )
level.startspawnpoints = [];
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
{
var_1[var_2] spawnpointinit();
var_1[var_2].selected = 0;
level.startspawnpoints[level.startspawnpoints.size] = var_1[var_2];
}
foreach ( var_4 in var_1 )
{
var_4.infront = 1;
var_5 = anglestoforward( var_4.angles );
foreach ( var_7 in var_1 )
{
if ( var_4 == var_7 )
continue;
var_8 = vectornormalize( var_7.origin - var_4.origin );
var_9 = vectordot( var_5, var_8 );
if ( var_9 > 0.86 )
{
var_4.infront = 0;
break;
}
}
}
}
addspawnpoints( var_0, var_1, var_2 )
{
if ( !isdefined( level.spawnpoints ) )
level.spawnpoints = [];
if ( !isdefined( level.teamspawnpoints[var_0] ) )
level.teamspawnpoints[var_0] = [];
if ( !isdefined( var_2 ) )
var_2 = 0;
var_3 = [];
var_3 = getspawnpointarray( var_1 );
if ( !isdefined( level.clienttracespawnclass ) )
level.clienttracespawnclass = var_1;
if ( !var_3.size && !var_2 )
return;
foreach ( var_5 in var_3 )
{
if ( !isdefined( var_5.inited ) )
{
var_5 spawnpointinit();
level.spawnpoints[level.spawnpoints.size] = var_5;
}
level.teamspawnpoints[var_0][level.teamspawnpoints[var_0].size] = var_5;
}
}
spawnpointinit()
{
var_0 = self;
level.spawnmins = expandmins( level.spawnmins, var_0.origin );
level.spawnmaxs = expandmaxs( level.spawnmaxs, var_0.origin );
var_0.forward = anglestoforward( var_0.angles );
var_0.sighttracepoint = var_0.origin + ( 0, 0, 50 );
var_0.lastspawntime = gettime();
var_0.outside = 1;
var_0.inited = 1;
var_0.alternates = [];
var_1 = 1024;
if ( !bullettracepassed( var_0.sighttracepoint, var_0.sighttracepoint + ( 0, 0, var_1 ), 0, undefined ) )
{
var_2 = var_0.sighttracepoint + var_0.forward * 100;
if ( !bullettracepassed( var_2, var_2 + ( 0, 0, var_1 ), 0, undefined ) )
var_0.outside = 0;
}
var_3 = anglestoright( var_0.angles );
addalternatespawnpoint( var_0, var_0.origin + var_3 * 45 );
addalternatespawnpoint( var_0, var_0.origin - var_3 * 45 );
initspawnpointvalues( var_0 );
}
addalternatespawnpoint( var_0, var_1 )
{
var_2 = playerphysicstrace( var_0.origin, var_0.origin + ( 0, 0, 18 ), 0, undefined );
var_3 = var_2[2] - var_0.origin[2];
var_4 = ( var_1[0], var_1[1], var_1[2] + var_3 );
var_5 = playerphysicstrace( var_2, var_4, 0, undefined );
if ( var_5 != var_4 )
return;
var_6 = playerphysicstrace( var_4, var_1 );
var_0.alternates[var_0.alternates.size] = var_6;
}
getspawnpointarray( var_0 )
{
if ( !isdefined( level.spawnpointarray ) )
level.spawnpointarray = [];
if ( !isdefined( level.spawnpointarray[var_0] ) )
{
level.spawnpointarray[var_0] = [];
level.spawnpointarray[var_0] = getspawnarray( var_0 );
foreach ( var_2 in level.spawnpointarray[var_0] )
var_2.classname = var_0;
}
return level.spawnpointarray[var_0];
}
getspawnpoint_random( var_0 )
{
if ( !isdefined( var_0 ) )
return undefined;
var_1 = undefined;
var_0 = maps\mp\gametypes\_spawnscoring::checkdynamicspawns( var_0 );
var_0 = common_scripts\utility::array_randomize( var_0 );
foreach ( var_3 in var_0 )
{
var_1 = var_3;
if ( canspawn( var_1.origin ) && !positionwouldtelefrag( var_1.origin ) )
break;
}
return var_1;
}
getspawnpoint_startspawn( var_0 )
{
if ( !isdefined( var_0 ) )
return undefined;
var_1 = undefined;
var_0 = maps\mp\gametypes\_spawnscoring::checkdynamicspawns( var_0 );
foreach ( var_3 in var_0 )
{
if ( var_3.selected )
continue;
if ( var_3.infront )
{
var_1 = var_3;
break;
}
var_1 = var_3;
}
if ( !isdefined( var_1 ) )
var_1 = getspawnpoint_random( var_0 );
var_1.selected = 1;
return var_1;
}
getspawnpoint_nearteam( var_0, var_1 )
{
for (;;)
wait 5;
}
trackgrenades()
{
for (;;)
{
level.grenades = getentarray( "grenade", "classname" );
wait 0.05;
}
}
trackmissiles()
{
for (;;)
{
level.missiles = getentarray( "rocket", "classname" );
wait 0.05;
}
}
trackcarepackages()
{
for (;;)
{
level.carepackages = getentarray( "care_package", "targetname" );
wait 0.05;
}
}
getteamspawnpoints( var_0 )
{
return level.teamspawnpoints[var_0];
}
ispathdataavailable()
{
if ( !isdefined( level.pathdataavailable ) )
{
var_0 = getallnodes();
level.pathdataavailable = isdefined( var_0 ) && var_0.size > 150;
}
return level.pathdataavailable;
}
addtoparticipantsarray()
{
level.participants[level.participants.size] = self;
}
removefromparticipantsarray()
{
var_0 = 0;
for ( var_1 = 0; var_1 < level.participants.size; var_1++ )
{
if ( level.participants[var_1] == self )
{
for ( var_0 = 1; var_1 < level.participants.size - 1; var_1++ )
level.participants[var_1] = level.participants[var_1 + 1];
level.participants[var_1] = undefined;
break;
}
}
}
addtocharactersarray()
{
if ( maps\mp\_utility::is_aliens() )
{
for ( var_0 = 0; var_0 < level.characters.size; var_0++ )
{
if ( level.characters[var_0] == self )
return;
}
}
level.characters[level.characters.size] = self;
}
removefromcharactersarray()
{
var_0 = 0;
for ( var_1 = 0; var_1 < level.characters.size; var_1++ )
{
if ( level.characters[var_1] == self )
{
for ( var_0 = 1; var_1 < level.characters.size - 1; var_1++ )
level.characters[var_1] = level.characters[var_1 + 1];
level.characters[var_1] = undefined;
break;
}
}
}
spawnpointupdate()
{
while ( !isdefined( level.spawnpoints ) || level.spawnpoints.size == 0 )
wait 0.05;
level thread spawnpointsightupdate();
level thread spawnpointdistanceupdate();
for (;;)
{
level.disableclientspawntraces = getdvarint( "scr_disableClientSpawnTraces" ) > 0;
wait 0.05;
}
}
getactiveplayerlist()
{
var_0 = [];
foreach ( var_2 in level.characters )
{
if ( !maps\mp\_utility::isreallyalive( var_2 ) )
continue;
if ( isplayer( var_2 ) && var_2.sessionstate != "playing" )
continue;
if ( var_2 maps\mp\killstreaks\_killstreaks::isusinghelisniper() && isdefined( var_2.chopper ) && ( !isdefined( var_2.chopper.movedlow ) || !var_2.chopper.movedlow ) )
continue;
var_2.spawnlogicteam = getspawnteam( var_2 );
if ( var_2.spawnlogicteam == "spectator" )
continue;
if ( isagent( var_2 ) && var_2.agent_type == "dog" )
{
var_2.spawnlogictraceheight = getplayertraceheight( var_2, 1 );
var_2.spawntracelocation = var_2.origin + ( 0, 0, var_2.spawnlogictraceheight );
}
else if ( !var_2.canperformclienttraces )
{
var_3 = getplayertraceheight( var_2 );
var_4 = var_2 geteye();
var_4 = ( var_4[0], var_4[1], var_2.origin[2] + var_3 );
var_2.spawnlogictraceheight = var_3;
var_2.spawntracelocation = var_4;
}
var_0[var_0.size] = var_2;
}
return var_0;
}
spawnpointsightupdate()
{
var_0 = 18;
var_1 = 0;
var_2 = 0;
var_3 = getactiveplayerlist();
for (;;)
{
if ( var_2 )
{
wait 0.05;
var_1 = 0;
var_2 = 0;
var_3 = getactiveplayerlist();
}
var_4 = level.spawnpoints;
var_4 = maps\mp\gametypes\_spawnscoring::checkdynamicspawns( var_4 );
var_2 = 1;
foreach ( var_6 in var_4 )
{
clearspawnpointsightdata( var_6 );
foreach ( var_8 in var_3 )
{
if ( var_6.fullsights[var_8.spawnlogicteam] )
continue;
if ( var_8.canperformclienttraces )
var_9 = var_8 clientspawnsighttracepassed( var_6.index );
else
{
var_9 = spawnsighttrace( var_6, var_6.origin + ( 0, 0, var_8.spawnlogictraceheight ), var_8.spawntracelocation );
var_1++;
}
if ( !var_9 )
continue;
if ( var_9 > 0.95 )
{
var_6.fullsights[var_8.spawnlogicteam]++;
continue;
}
var_6.cornersights[var_8.spawnlogicteam]++;
}
additionalsighttraceentities( var_6, level.turrets );
additionalsighttraceentities( var_6, level.ugvs );
if ( shouldsighttracewait( var_0, var_1 ) )
{
wait 0.05;
var_1 = 0;
var_2 = 0;
var_3 = getactiveplayerlist();
}
}
}
}
shouldsighttracewait( var_0, var_1 )
{
var_2 = 0;
foreach ( var_4 in level.participants )
{
if ( !var_4.canperformclienttraces )
var_2++;
}
if ( var_1 + var_2 > var_0 )
return 1;
return 0;
}
spawnpointdistanceupdate()
{
var_0 = getactiveplayerlist();
var_1 = gettime();
var_2 = 4;
var_3 = 0;
for (;;)
{
var_4 = level.spawnpoints;
var_4 = maps\mp\gametypes\_spawnscoring::checkdynamicspawns( var_4 );
foreach ( var_6 in var_4 )
{
clearspawnpointdistancedata( var_6 );
var_3++;
foreach ( var_8 in var_0 )
{
var_9 = distancesquared( var_8.origin, var_6.origin );
if ( var_9 < var_6.mindistsquared[var_8.spawnlogicteam] )
var_6.mindistsquared[var_8.spawnlogicteam] = var_9;
if ( var_8.spawnlogicteam == "spectator" )
continue;
var_6.distsumsquared[var_8.spawnlogicteam] = var_6.distsumsquared[var_8.spawnlogicteam] + var_9;
var_6.distsumsquaredcapped[var_8.spawnlogicteam] = var_6.distsumsquaredcapped[var_8.spawnlogicteam] + min( var_9, maps\mp\gametypes\_spawnfactor::maxplayerspawninfluencedistsquared() );
var_6.totalplayers[var_8.spawnlogicteam]++;
}
if ( isdefined( level.alliesweightorg ) )
{
var_11 = 25;
for ( var_12 = 0; var_12 < var_11; var_12++ )
{
var_9 = distancesquared( level.alliesweightorg, var_6.origin );
var_6.totalplayers["allies"]++;
var_6.distsumsquared["allies"] = var_6.distsumsquared["allies"] + var_9;
var_6.distsumsquaredcapped["allies"] = var_6.distsumsquaredcapped["allies"] + var_9;
var_9 = distancesquared( level.axisweightorg, var_6.origin );
var_6.totalplayers["axis"]++;
var_6.distsumsquared["axis"] = var_6.distsumsquared["axis"] + var_9;
var_6.distsumsquaredcapped["axis"] = var_6.distsumsquaredcapped["axis"] + var_9;
}
}
if ( var_3 == var_2 )
{
wait 0.05;
var_0 = getactiveplayerlist();
var_1 = gettime();
var_3 = 0;
}
}
}
}
getspawnteam( var_0 )
{
var_1 = "all";
if ( level.teambased )
var_1 = var_0.team;
return var_1;
}
initspawnpointvalues( var_0 )
{
clearspawnpointsightdata( var_0 );
clearspawnpointdistancedata( var_0 );
}
clearspawnpointsightdata( var_0 )
{
if ( level.teambased )
{
foreach ( var_2 in level.teamnamelist )
clearteamspawnpointsightdata( var_0, var_2 );
}
else
clearteamspawnpointsightdata( var_0, "all" );
}
clearspawnpointdistancedata( var_0 )
{
if ( level.teambased )
{
foreach ( var_2 in level.teamnamelist )
clearteamspawnpointdistancedata( var_0, var_2 );
}
else
clearteamspawnpointdistancedata( var_0, "all" );
}
clearteamspawnpointsightdata( var_0, var_1 )
{
var_0.fullsights[var_1] = 0;
var_0.cornersights[var_1] = 0;
}
clearteamspawnpointdistancedata( var_0, var_1 )
{
var_0.distsumsquared[var_1] = 0;
var_0.distsumsquaredcapped[var_1] = 0;
var_0.mindistsquared[var_1] = 9999999;
var_0.totalplayers[var_1] = 0;
}
getplayertraceheight( var_0, var_1 )
{
if ( isdefined( var_1 ) && var_1 )
return 64;
var_2 = var_0 getstance();
if ( var_2 == "stand" )
return 64;
if ( var_2 == "crouch" )
return 44;
return 32;
}
additionalsighttraceentities( var_0, var_1 )
{
foreach ( var_3 in var_1 )
{
if ( !isdefined( var_3 ) )
continue;
var_4 = getspawnteam( var_3 );
if ( var_0.fullsights[var_4] )
continue;
var_5 = spawnsighttrace( var_0, var_0.sighttracepoint, var_3.origin + ( 0, 0, 50 ) );
if ( !var_5 )
continue;
if ( var_5 > 0.95 )
{
var_0.fullsights[var_4]++;
continue;
}
var_0.cornersights[var_4]++;
}
}
finalizespawnpointchoice( var_0 )
{
var_1 = gettime();
self.lastspawnpoint = var_0;
self.lastspawntime = var_1;
var_0.lastspawntime = var_1;
var_0.lastspawnteam = self.team;
}
expandspawnpointbounds( var_0 )
{
var_1 = getspawnpointarray( var_0 );
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
{
level.spawnmins = expandmins( level.spawnmins, var_1[var_2].origin );
level.spawnmaxs = expandmaxs( level.spawnmaxs, var_1[var_2].origin );
}
}
expandmins( var_0, var_1 )
{
if ( var_0[0] > var_1[0] )
var_0 = ( var_1[0], var_0[1], var_0[2] );
if ( var_0[1] > var_1[1] )
var_0 = ( var_0[0], var_1[1], var_0[2] );
if ( var_0[2] > var_1[2] )
var_0 = ( var_0[0], var_0[1], var_1[2] );
return var_0;
}
expandmaxs( var_0, var_1 )
{
if ( var_0[0] < var_1[0] )
var_0 = ( var_1[0], var_0[1], var_0[2] );
if ( var_0[1] < var_1[1] )
var_0 = ( var_0[0], var_1[1], var_0[2] );
if ( var_0[2] < var_1[2] )
var_0 = ( var_0[0], var_0[1], var_1[2] );
return var_0;
}
findboxcenter( var_0, var_1 )
{
var_2 = ( 0, 0, 0 );
var_2 = var_1 - var_0;
var_2 = ( var_2[0] / 2, var_2[1] / 2, var_2[2] / 2 ) + var_0;
return var_2;
}
setmapcenterfordev()
{
level.spawnmins = ( 0, 0, 0 );
level.spawnmaxs = ( 0, 0, 0 );
expandspawnpointbounds( "mp_tdm_spawn_allies_start" );
expandspawnpointbounds( "mp_tdm_spawn_axis_start" );
level.mapcenter = findboxcenter( level.spawnmins, level.spawnmaxs );
setmapcenter( level.mapcenter );
}
shoulduseteamstartspawn()
{
return level.ingraceperiod && ( !isdefined( level.numkills ) || level.numkills == 0 );
}

View File

@ -0,0 +1,855 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
getspawnpoint_nearteam( var_0 )
{
var_0 = checkdynamicspawns( var_0 );
var_1["primary"] = [];
var_1["secondary"] = [];
var_1["bad"] = [];
foreach ( var_3 in var_0 )
{
initscoredata( var_3 );
var_4 = criticalfactors_nearteam( var_3 );
var_1[var_4][var_1[var_4].size] = var_3;
}
if ( var_1["primary"].size )
return scorespawns_nearteam( var_1["primary"] );
if ( var_1["secondary"].size )
return scorespawns_nearteam( var_1["secondary"] );
logbadspawn( "Buddy Spawn" );
return selectbestspawnpoint( var_0[0], var_0 );
}
scorespawns_nearteam( var_0 )
{
var_1 = var_0[0];
foreach ( var_3 in var_0 )
{
scorefactors_nearteam( var_3 );
if ( var_3.totalscore > var_1.totalscore )
var_1 = var_3;
}
var_1 = selectbestspawnpoint( var_1, var_0 );
return var_1;
}
checkdynamicspawns( var_0 )
{
if ( isdefined( level.dynamicspawns ) )
var_0 = [[ level.dynamicspawns ]]( var_0 );
return var_0;
}
selectbestspawnpoint( var_0, var_1 )
{
var_2 = var_0;
var_3 = 0;
foreach ( var_5 in var_1 )
{
if ( var_5.totalscore > 0 )
var_3++;
}
if ( var_3 == 0 || level.forcebuddyspawn )
{
if ( level.teambased && level.supportbuddyspawn )
{
var_7 = findbuddyspawn();
if ( var_7.buddyspawn )
var_2 = var_7;
}
if ( var_2.totalscore == 0 )
{
logbadspawn( "UNABLE TO BUDDY SPAWN. Extremely bad." );
var_2 = var_1[randomint( var_1.size )];
}
}
return var_2;
}
findsecondhighestspawnscore( var_0, var_1 )
{
if ( var_1.size < 2 )
return var_0;
var_2 = var_1[0];
if ( var_2 == var_0 )
var_2 = var_1[1];
foreach ( var_4 in var_1 )
{
if ( var_4 == var_0 )
continue;
if ( var_4.totalscore > var_2.totalscore )
var_2 = var_4;
}
return var_2;
}
findbuddyspawn()
{
var_0 = spawnstruct();
initscoredata( var_0 );
var_1 = getteammatesoutofcombat( self.team );
var_2 = spawnstruct();
var_2.maxtracecount = 18;
var_2.currenttracecount = 0;
foreach ( var_4 in var_1 )
{
var_5 = findspawnlocationnearplayer( var_4 );
if ( !isdefined( var_5 ) )
continue;
if ( issafetospawnon( var_4, var_5, var_2 ) )
{
var_0.totalscore = 999;
var_0.buddyspawn = 1;
var_0.origin = var_5;
var_0.angles = getbuddyspawnangles( var_4, var_0.origin );
break;
}
if ( var_2.currenttracecount == var_2.maxtracecount )
break;
}
return var_0;
}
getbuddyspawnangles( var_0, var_1 )
{
var_2 = ( 0, var_0.angles[1], 0 );
var_3 = findentrances( var_1 );
if ( isdefined( var_3 ) && var_3.size > 0 )
var_2 = vectortoangles( var_3[0].origin - var_1 );
return var_2;
}
getteammatesoutofcombat( var_0 )
{
var_1 = [];
foreach ( var_3 in level.players )
{
if ( var_3.team != var_0 )
continue;
if ( var_3.sessionstate != "playing" )
continue;
if ( !maps\mp\_utility::isreallyalive( var_3 ) )
continue;
if ( var_3 == self )
continue;
if ( isplayerincombat( var_3 ) )
continue;
var_1[var_1.size] = var_3;
}
return common_scripts\utility::array_randomize( var_1 );
}
isplayerincombat( var_0, var_1 )
{
if ( var_0 issighted() )
{
debugcombatcheck( var_0, "IsSighted" );
return 1;
}
if ( !var_0 isonground() )
{
debugcombatcheck( var_0, "IsOnGround" );
return 1;
}
if ( var_0 isonladder() )
{
debugcombatcheck( var_0, "IsOnLadder" );
return 1;
}
if ( var_0 common_scripts\utility::isflashed() )
{
debugcombatcheck( var_0, "isFlashed" );
return 1;
}
if ( isdefined( var_1 ) && var_1 )
{
if ( var_0.health < var_0.maxhealth && ( !isdefined( var_0.lastdamagedtime ) || gettime() < var_0.lastdamagedtime + 3000 ) )
{
debugcombatcheck( var_0, "RecentDamage" );
return 1;
}
}
else if ( var_0.health < var_0.maxhealth )
{
debugcombatcheck( var_0, "MaxHealth" );
return 1;
}
if ( !maps\mp\gametypes\_spawnfactor::avoidgrenades( var_0 ) )
{
debugcombatcheck( var_0, "Grenades" );
return 1;
}
if ( !maps\mp\gametypes\_spawnfactor::avoidmines( var_0 ) )
{
debugcombatcheck( var_0, "Mines" );
return 1;
}
return 0;
}
debugcombatcheck( var_0, var_1 )
{
var_2 = "none";
if ( isdefined( var_0.battlebuddy ) )
var_2 = var_0.battlebuddy.name;
bbprint( "battlebuddy_spawn", "player %s buddy %s reason %s", var_0.name, var_2, var_1 );
}
findspawnlocationnearplayer( var_0 )
{
var_1 = maps\mp\gametypes\_spawnlogic::getplayertraceheight( var_0, 1 );
var_2 = findbuddypathnode( var_0, var_1, 0.5 );
if ( isdefined( var_2 ) )
return var_2.origin;
return undefined;
}
findbuddypathnode( var_0, var_1, var_2 )
{
var_3 = getnodesinradiussorted( var_0.origin, 192, 64, var_1, "Path" );
var_4 = undefined;
if ( isdefined( var_3 ) && var_3.size > 0 )
{
var_5 = anglestoforward( var_0.angles );
foreach ( var_7 in var_3 )
{
var_8 = vectornormalize( var_7.origin - var_0.origin );
var_9 = vectordot( var_5, var_8 );
if ( maps\mp\_utility::getmapname() == "mp_fahrenheit" )
{
if ( var_7.origin == ( 1778.9, 171.6, 716 ) || var_7.origin == ( 1772.1, 271.4, 716 ) || var_7.origin == ( 1657.2, 259.6, 716 ) || var_7.origin == ( 1633.7, 333.9, 716 ) || var_7.origin == ( 1634.4, 415.7, 716 ) || var_7.origin == ( 1537.3, 419.3, 716 ) || var_7.origin == ( 1410.9, 420.8, 716 ) || var_7.origin == ( 1315.6, 416.6, 716 ) || var_7.origin == ( 1079.4, 414.6, 716 ) || var_7.origin == ( 982.9, 421.8, 716 ) || var_7.origin == ( 896.9, 423.8, 716 ) )
continue;
}
if ( var_9 <= var_2 && !positionwouldtelefrag( var_7.origin ) )
{
if ( sighttracepassed( var_0.origin + ( 0, 0, var_1 ), var_7.origin + ( 0, 0, var_1 ), 0, var_0 ) )
{
var_4 = var_7;
if ( var_9 <= 0.0 )
break;
}
}
}
}
return var_4;
}
finddronepathnode( var_0, var_1, var_2, var_3 )
{
var_4 = getnodesinradiussorted( var_0.origin, var_3, 32, var_1, "Path" );
var_5 = undefined;
if ( isdefined( var_4 ) && var_4.size > 0 )
{
var_6 = anglestoforward( var_0.angles );
foreach ( var_8 in var_4 )
{
var_9 = var_8.origin + ( 0, 0, var_1 );
if ( capsuletracepassed( var_9, var_2, var_2 * 2 + 0.01, undefined, 1, 1 ) )
{
if ( bullettracepassed( var_0 geteye(), var_9, 0, var_0 ) )
{
var_5 = var_9;
break;
}
}
}
}
return var_5;
}
issafetospawnon( var_0, var_1, var_2 )
{
if ( var_0 issighted() )
{
debugcombatcheck( self, "IsSighted-2" );
return 0;
}
foreach ( var_4 in level.players )
{
if ( var_2.currenttracecount == var_2.maxtracecount )
{
debugcombatcheck( self, "TooManyTraces" );
return 0;
}
if ( var_4.team == self.team )
continue;
if ( var_4.sessionstate != "playing" )
continue;
if ( !maps\mp\_utility::isreallyalive( var_4 ) )
continue;
if ( var_4 == self )
continue;
var_2.currenttracecount++;
var_5 = maps\mp\gametypes\_spawnlogic::getplayertraceheight( var_4 );
var_6 = var_4 geteye();
var_6 = ( var_6[0], var_6[1], var_4.origin[2] + var_5 );
var_7 = spawnsighttrace( var_2, var_1 + ( 0, 0, var_5 ), var_6 );
if ( var_7 > 0 )
{
debugcombatcheck( self, "lineOfSight" );
return 0;
}
}
return 1;
}
initscoredata( var_0 )
{
var_0.totalscore = 0;
var_0.numberofpossiblespawnchoices = 0;
var_0.buddyspawn = 0;
}
criticalfactors_nearteam( var_0 )
{
if ( !maps\mp\gametypes\_spawnfactor::critical_factor( maps\mp\gametypes\_spawnfactor::avoidfullvisibleenemies, var_0 ) )
return "bad";
if ( !maps\mp\gametypes\_spawnfactor::critical_factor( maps\mp\gametypes\_spawnfactor::avoidgrenades, var_0 ) )
return "bad";
if ( !maps\mp\gametypes\_spawnfactor::critical_factor( maps\mp\gametypes\_spawnfactor::avoidmines, var_0 ) )
return "bad";
if ( !maps\mp\gametypes\_spawnfactor::critical_factor( maps\mp\gametypes\_spawnfactor::avoidairstrikelocations, var_0 ) )
return "bad";
if ( !maps\mp\gametypes\_spawnfactor::critical_factor( maps\mp\gametypes\_spawnfactor::avoidcarepackages, var_0 ) )
return "bad";
if ( !maps\mp\gametypes\_spawnfactor::critical_factor( maps\mp\gametypes\_spawnfactor::avoidtelefrag, var_0 ) )
return "bad";
if ( !maps\mp\gametypes\_spawnfactor::critical_factor( maps\mp\gametypes\_spawnfactor::avoidenemyspawn, var_0 ) )
return "bad";
if ( isdefined( var_0.forcedteam ) && var_0.forcedteam != self.team )
return "bad";
if ( !maps\mp\gametypes\_spawnfactor::critical_factor( maps\mp\gametypes\_spawnfactor::avoidcornervisibleenemies, var_0 ) )
return "secondary";
if ( !maps\mp\gametypes\_spawnfactor::critical_factor( maps\mp\gametypes\_spawnfactor::avoidcloseenemies, var_0 ) )
return "secondary";
return "primary";
}
scorefactors_nearteam( var_0 )
{
var_1 = maps\mp\gametypes\_spawnfactor::score_factor( 1.25, maps\mp\gametypes\_spawnfactor::preferalliesbydistance, var_0 );
var_0.totalscore = var_0.totalscore + var_1;
var_1 = maps\mp\gametypes\_spawnfactor::score_factor( 1.0, maps\mp\gametypes\_spawnfactor::avoidrecentlyusedbyenemies, var_0 );
var_0.totalscore = var_0.totalscore + var_1;
var_1 = maps\mp\gametypes\_spawnfactor::score_factor( 1.0, maps\mp\gametypes\_spawnfactor::avoidenemiesbydistance, var_0 );
var_0.totalscore = var_0.totalscore + var_1;
var_1 = maps\mp\gametypes\_spawnfactor::score_factor( 0.5, maps\mp\gametypes\_spawnfactor::avoidlastdeathlocation, var_0 );
var_0.totalscore = var_0.totalscore + var_1;
var_1 = maps\mp\gametypes\_spawnfactor::score_factor( 0.5, maps\mp\gametypes\_spawnfactor::avoidlastattackerlocation, var_0 );
var_0.totalscore = var_0.totalscore + var_1;
var_1 = maps\mp\gametypes\_spawnfactor::score_factor( 0.25, maps\mp\gametypes\_spawnfactor::avoidsamespawn, var_0 );
var_0.totalscore = var_0.totalscore + var_1;
var_1 = maps\mp\gametypes\_spawnfactor::score_factor( 0.25, maps\mp\gametypes\_spawnfactor::avoidrecentlyusedbyanyone, var_0 );
var_0.totalscore = var_0.totalscore + var_1;
}
criticalfactors_dz( var_0 )
{
return criticalfactors_nearteam( var_0 );
}
getspawnpoint_dz( var_0, var_1 )
{
var_0 = checkdynamicspawns( var_0 );
var_2["primary"] = [];
var_2["secondary"] = [];
var_2["bad"] = [];
foreach ( var_4 in var_0 )
{
initscoredata( var_4 );
var_5 = criticalfactors_dz( var_4 );
var_2[var_5][var_2[var_5].size] = var_4;
}
if ( var_2["primary"].size )
return scorespawns_dz( var_2["primary"], var_1 );
if ( var_2["secondary"].size )
return scorespawns_dz( var_2["secondary"], var_1 );
return selectbestspawnpoint( var_0[0], var_0 );
}
getspawnpoint_domination( var_0, var_1 )
{
var_0 = checkdynamicspawns( var_0 );
var_2["primary"] = [];
var_2["secondary"] = [];
var_2["bad"] = [];
foreach ( var_4 in var_0 )
{
initscoredata( var_4 );
var_5 = criticalfactors_domination( var_4 );
var_2[var_5][var_2[var_5].size] = var_4;
}
if ( var_2["primary"].size )
return scorespawns_domination( var_2["primary"], var_1 );
if ( var_2["secondary"].size )
return scorespawns_domination( var_2["secondary"], var_1 );
logbadspawn( "Buddy Spawn" );
return selectbestspawnpoint( var_0[0], var_0 );
}
scorespawns_dz( var_0, var_1 )
{
var_2 = var_0[0];
foreach ( var_4 in var_0 )
{
scorefactors_dz( var_4, var_1 );
if ( var_4.totalscore > var_2.totalscore )
var_2 = var_4;
}
var_2 = selectbestspawnpoint( var_2, var_0 );
return var_2;
}
scorespawns_domination( var_0, var_1 )
{
var_2 = var_0[0];
foreach ( var_4 in var_0 )
{
scorefactors_domination( var_4, var_1 );
if ( var_4.totalscore > var_2.totalscore )
var_2 = var_4;
}
var_2 = selectbestspawnpoint( var_2, var_0 );
return var_2;
}
criticalfactors_domination( var_0 )
{
return criticalfactors_nearteam( var_0 );
}
scorefactors_dz( var_0, var_1 )
{
var_2 = maps\mp\gametypes\_spawnfactor::score_factor( 2.5, maps\mp\gametypes\_spawnfactor::preferclosepoints, var_0, var_1 );
var_0.totalscore = var_0.totalscore + var_2;
var_2 = maps\mp\gametypes\_spawnfactor::score_factor( 1.0, maps\mp\gametypes\_spawnfactor::preferalliesbydistance, var_0 );
var_0.totalscore = var_0.totalscore + var_2;
var_2 = maps\mp\gametypes\_spawnfactor::score_factor( 1.0, maps\mp\gametypes\_spawnfactor::avoidrecentlyusedbyenemies, var_0 );
var_0.totalscore = var_0.totalscore + var_2;
var_2 = maps\mp\gametypes\_spawnfactor::score_factor( 1.0, maps\mp\gametypes\_spawnfactor::avoidenemiesbydistance, var_0 );
var_0.totalscore = var_0.totalscore + var_2;
var_2 = maps\mp\gametypes\_spawnfactor::score_factor( 0.25, maps\mp\gametypes\_spawnfactor::avoidlastdeathlocation, var_0 );
var_0.totalscore = var_0.totalscore + var_2;
var_2 = maps\mp\gametypes\_spawnfactor::score_factor( 0.25, maps\mp\gametypes\_spawnfactor::avoidlastattackerlocation, var_0 );
var_0.totalscore = var_0.totalscore + var_2;
var_2 = maps\mp\gametypes\_spawnfactor::score_factor( 0.25, maps\mp\gametypes\_spawnfactor::avoidsamespawn, var_0 );
var_0.totalscore = var_0.totalscore + var_2;
var_2 = maps\mp\gametypes\_spawnfactor::score_factor( 0.25, maps\mp\gametypes\_spawnfactor::avoidrecentlyusedbyanyone, var_0 );
var_0.totalscore = var_0.totalscore + var_2;
}
scorefactors_domination( var_0, var_1 )
{
var_2 = maps\mp\gametypes\_spawnfactor::score_factor( 2.5, maps\mp\gametypes\_spawnfactor::preferdompoints, var_0, var_1 );
var_0.totalscore = var_0.totalscore + var_2;
var_2 = maps\mp\gametypes\_spawnfactor::score_factor( 1.0, maps\mp\gametypes\_spawnfactor::preferalliesbydistance, var_0 );
var_0.totalscore = var_0.totalscore + var_2;
var_2 = maps\mp\gametypes\_spawnfactor::score_factor( 1.0, maps\mp\gametypes\_spawnfactor::avoidrecentlyusedbyenemies, var_0 );
var_0.totalscore = var_0.totalscore + var_2;
var_2 = maps\mp\gametypes\_spawnfactor::score_factor( 1.0, maps\mp\gametypes\_spawnfactor::avoidenemiesbydistance, var_0 );
var_0.totalscore = var_0.totalscore + var_2;
var_2 = maps\mp\gametypes\_spawnfactor::score_factor( 0.25, maps\mp\gametypes\_spawnfactor::avoidlastdeathlocation, var_0 );
var_0.totalscore = var_0.totalscore + var_2;
var_2 = maps\mp\gametypes\_spawnfactor::score_factor( 0.25, maps\mp\gametypes\_spawnfactor::avoidlastattackerlocation, var_0 );
var_0.totalscore = var_0.totalscore + var_2;
var_2 = maps\mp\gametypes\_spawnfactor::score_factor( 0.25, maps\mp\gametypes\_spawnfactor::avoidsamespawn, var_0 );
var_0.totalscore = var_0.totalscore + var_2;
var_2 = maps\mp\gametypes\_spawnfactor::score_factor( 0.25, maps\mp\gametypes\_spawnfactor::avoidrecentlyusedbyanyone, var_0 );
var_0.totalscore = var_0.totalscore + var_2;
}
getstartspawnpoint_freeforall( var_0 )
{
if ( !isdefined( var_0 ) )
return undefined;
var_1 = undefined;
var_2 = maps\mp\gametypes\_spawnlogic::getactiveplayerlist();
var_0 = checkdynamicspawns( var_0 );
if ( !isdefined( var_2 ) || var_2.size == 0 )
return maps\mp\gametypes\_spawnlogic::getspawnpoint_random( var_0 );
var_3 = 0;
foreach ( var_5 in var_0 )
{
if ( canspawn( var_5.origin ) && !positionwouldtelefrag( var_5.origin ) )
{
var_6 = undefined;
foreach ( var_8 in var_2 )
{
var_9 = distancesquared( var_5.origin, var_8.origin );
if ( !isdefined( var_6 ) || var_9 < var_6 )
var_6 = var_9;
}
if ( !isdefined( var_1 ) || var_6 > var_3 )
{
var_1 = var_5;
var_3 = var_6;
}
}
}
if ( !isdefined( var_1 ) )
return maps\mp\gametypes\_spawnlogic::getspawnpoint_random( var_0 );
return var_1;
}
getspawnpoint_freeforall( var_0 )
{
var_0 = checkdynamicspawns( var_0 );
var_1["primary"] = [];
var_1["secondary"] = [];
var_1["bad"] = [];
foreach ( var_3 in var_0 )
{
initscoredata( var_3 );
var_4 = criticalfactors_freeforall( var_3 );
var_1[var_4][var_1[var_4].size] = var_3;
}
if ( var_1["primary"].size )
return scorespawns_freeforall( var_1["primary"] );
if ( var_1["secondary"].size )
return scorespawns_freeforall( var_1["secondary"] );
if ( getdvarint( "scr_altFFASpawns" ) == 1 && var_1["bad"].size )
{
logbadspawn( "Bad FFA Spawn" );
return scorespawns_freeforall( var_1["bad"] );
}
logbadspawn( "FFA Random Spawn" );
return selectbestspawnpoint( var_0[0], var_0 );
}
scorespawns_freeforall( var_0 )
{
var_1 = var_0[0];
foreach ( var_3 in var_0 )
{
scorefactors_freeforall( var_3 );
if ( var_3.totalscore > var_1.totalscore )
var_1 = var_3;
}
var_1 = selectbestspawnpoint( var_1, var_0 );
return var_1;
}
criticalfactors_freeforall( var_0 )
{
return criticalfactors_nearteam( var_0 );
}
scorefactors_freeforall( var_0 )
{
var_1 = 3.0;
if ( getdvarint( "scr_altFFASpawns" ) == 1 )
{
var_2 = maps\mp\gametypes\_spawnfactor::score_factor( 3.0, maps\mp\gametypes\_spawnfactor::avoidclosestenemy, var_0 );
var_0.totalscore = var_0.totalscore + var_2;
var_1 = 2.0;
}
var_2 = maps\mp\gametypes\_spawnfactor::score_factor( var_1, maps\mp\gametypes\_spawnfactor::avoidenemiesbydistance, var_0 );
var_0.totalscore = var_0.totalscore + var_2;
var_2 = maps\mp\gametypes\_spawnfactor::score_factor( 2.0, maps\mp\gametypes\_spawnfactor::avoidrecentlyusedbyenemies, var_0 );
var_0.totalscore = var_0.totalscore + var_2;
var_2 = maps\mp\gametypes\_spawnfactor::score_factor( 0.5, maps\mp\gametypes\_spawnfactor::avoidlastdeathlocation, var_0 );
var_0.totalscore = var_0.totalscore + var_2;
var_2 = maps\mp\gametypes\_spawnfactor::score_factor( 0.5, maps\mp\gametypes\_spawnfactor::avoidlastattackerlocation, var_0 );
var_0.totalscore = var_0.totalscore + var_2;
var_2 = maps\mp\gametypes\_spawnfactor::score_factor( 0.5, maps\mp\gametypes\_spawnfactor::avoidsamespawn, var_0 );
var_0.totalscore = var_0.totalscore + var_2;
}
getspawnpoint_searchandrescue( var_0 )
{
var_0 = checkdynamicspawns( var_0 );
var_1["primary"] = [];
var_1["secondary"] = [];
var_1["bad"] = [];
foreach ( var_3 in var_0 )
{
initscoredata( var_3 );
var_4 = criticalfactors_searchandrescue( var_3 );
var_1[var_4][var_1[var_4].size] = var_3;
}
if ( var_1["primary"].size )
return scorespawns_searchandrescue( var_1["primary"] );
if ( var_1["secondary"].size )
return scorespawns_searchandrescue( var_1["secondary"] );
logbadspawn( "Buddy Spawn" );
return selectbestspawnpoint( var_0[0], var_0 );
}
scorespawns_searchandrescue( var_0 )
{
var_1 = var_0[0];
foreach ( var_3 in var_0 )
{
scorefactors_searchandrescue( var_3 );
if ( var_3.totalscore > var_1.totalscore )
var_1 = var_3;
}
var_1 = selectbestspawnpoint( var_1, var_0 );
return var_1;
}
criticalfactors_searchandrescue( var_0 )
{
return criticalfactors_nearteam( var_0 );
}
scorefactors_searchandrescue( var_0 )
{
var_1 = maps\mp\gametypes\_spawnfactor::score_factor( 3.0, maps\mp\gametypes\_spawnfactor::avoidenemiesbydistance, var_0 );
var_0.totalscore = var_0.totalscore + var_1;
var_1 = maps\mp\gametypes\_spawnfactor::score_factor( 1.0, maps\mp\gametypes\_spawnfactor::preferalliesbydistance, var_0 );
var_0.totalscore = var_0.totalscore + var_1;
var_1 = maps\mp\gametypes\_spawnfactor::score_factor( 0.5, maps\mp\gametypes\_spawnfactor::avoidlastdeathlocation, var_0 );
var_0.totalscore = var_0.totalscore + var_1;
var_1 = maps\mp\gametypes\_spawnfactor::score_factor( 0.5, maps\mp\gametypes\_spawnfactor::avoidlastattackerlocation, var_0 );
var_0.totalscore = var_0.totalscore + var_1;
}
getspawnpoint_awayfromenemies( var_0, var_1, var_2 )
{
if ( !isdefined( var_2 ) )
var_2 = 0;
var_0 = checkdynamicspawns( var_0 );
var_3["primary"] = [];
var_3["secondary"] = [];
var_3["bad"] = [];
foreach ( var_5 in var_0 )
{
initscoredata( var_5 );
var_6 = criticalfactors_awayfromenemies( var_5 );
var_3[var_6][var_3[var_6].size] = var_5;
}
if ( var_3["primary"].size )
return scorespawns_awayfromenemies( var_3["primary"], var_1 );
if ( var_3["secondary"].size )
return scorespawns_awayfromenemies( var_3["secondary"], var_1 );
if ( var_2 )
return undefined;
else
{
logbadspawn( "Buddy Spawn" );
return selectbestspawnpoint( var_0[0], var_0 );
}
}
scorespawns_awayfromenemies( var_0, var_1 )
{
var_2 = var_0[0];
foreach ( var_4 in var_0 )
{
scorefactors_awayfromenemies( var_4, var_1 );
if ( var_4.totalscore > var_2.totalscore )
var_2 = var_4;
}
var_2 = selectbestspawnpoint( var_2, var_0 );
return var_2;
}
criticalfactors_awayfromenemies( var_0 )
{
return criticalfactors_nearteam( var_0 );
}
scorefactors_awayfromenemies( var_0, var_1 )
{
var_2 = maps\mp\gametypes\_spawnfactor::score_factor( 2.0, maps\mp\gametypes\_spawnfactor::avoidenemiesbydistance, var_0 );
var_0.totalscore = var_0.totalscore + var_2;
var_2 = maps\mp\gametypes\_spawnfactor::score_factor( 1.0, maps\mp\gametypes\_spawnfactor::avoidlastattackerlocation, var_0 );
var_0.totalscore = var_0.totalscore + var_2;
var_2 = maps\mp\gametypes\_spawnfactor::score_factor( 1.0, maps\mp\gametypes\_spawnfactor::preferalliesbydistance, var_0 );
var_0.totalscore = var_0.totalscore + var_2;
var_2 = maps\mp\gametypes\_spawnfactor::score_factor( 1.0, maps\mp\gametypes\_spawnfactor::avoidrecentlyusedbyenemies, var_0 );
var_0.totalscore = var_0.totalscore + var_2;
var_2 = maps\mp\gametypes\_spawnfactor::score_factor( 0.25, maps\mp\gametypes\_spawnfactor::avoidlastdeathlocation, var_0 );
var_0.totalscore = var_0.totalscore + var_2;
var_2 = maps\mp\gametypes\_spawnfactor::score_factor( 0.25, maps\mp\gametypes\_spawnfactor::avoidsamespawn, var_0 );
var_0.totalscore = var_0.totalscore + var_2;
var_2 = maps\mp\gametypes\_spawnfactor::score_factor( 0.25, maps\mp\gametypes\_spawnfactor::avoidrecentlyusedbyanyone, var_0 );
var_0.totalscore = var_0.totalscore + var_2;
}
getspawnpoint_safeguard( var_0 )
{
var_0 = checkdynamicspawns( var_0 );
var_1["primary"] = [];
var_1["secondary"] = [];
var_1["bad"] = [];
foreach ( var_3 in var_0 )
{
initscoredata( var_3 );
var_4 = criticalfactors_safeguard( var_3 );
var_1[var_4][var_1[var_4].size] = var_3;
}
if ( var_1["primary"].size )
return scorespawns_safeguard( var_1["primary"] );
if ( var_1["secondary"].size )
return scorespawns_safeguard( var_1["secondary"] );
logbadspawn( "Buddy Spawn" );
return selectbestspawnpoint( var_0[0], var_0 );
}
scorespawns_safeguard( var_0 )
{
var_1 = var_0[0];
foreach ( var_3 in var_0 )
{
scorefactors_safeguard( var_3 );
if ( var_3.totalscore > var_1.totalscore )
var_1 = var_3;
}
var_1 = selectbestspawnpoint( var_1, var_0 );
return var_1;
}
criticalfactors_safeguard( var_0 )
{
return criticalfactors_nearteam( var_0 );
}
scorefactors_safeguard( var_0 )
{
var_1 = maps\mp\gametypes\_spawnfactor::score_factor( 1.0, maps\mp\gametypes\_spawnfactor::randomspawnscore, var_0 );
var_0.totalscore = var_0.totalscore + var_1;
var_1 = maps\mp\gametypes\_spawnfactor::score_factor( 1.0, maps\mp\gametypes\_spawnfactor::preferalliesbydistance, var_0 );
var_0.totalscore = var_0.totalscore + var_1;
var_1 = maps\mp\gametypes\_spawnfactor::score_factor( 0.5, maps\mp\gametypes\_spawnfactor::avoidenemiesbydistance, var_0 );
var_0.totalscore = var_0.totalscore + var_1;
}
logbadspawn( var_0 )
{
if ( !isdefined( var_0 ) )
var_0 = "";
else
var_0 = "(" + var_0 + ")";
if ( isdefined( level.matchrecording_logeventmsg ) )
[[ level.matchrecording_logeventmsg ]]( "LOG_BAD_SPAWN", gettime(), var_0 );
}

View File

@ -0,0 +1,298 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
level.spectateoverride["allies"] = spawnstruct();
level.spectateoverride["axis"] = spawnstruct();
level thread onplayerconnect();
level thread getlevelmlgcams();
}
createmlgcamobject( var_0 )
{
precacheshader( var_0 );
var_1 = spawn( "script_model", ( 0, 0, 0 ) );
var_1 setmodel( "tag_origin" );
var_1.angles = ( 0, 0, 0 );
var_2 = maps\mp\gametypes\_gameobjects::getnextobjid();
objective_add( var_2, "active", ( 0, 0, 0 ) );
objective_icon( var_2, var_0 );
objective_playermask_hidefromall( var_2 );
objective_onentitywithrotation( var_2, var_1 );
var_1.objid = var_2;
return var_1;
}
setmlgcamvisibility( var_0 )
{
for ( var_1 = 0; var_1 < level.cameramapobjs.size; var_1++ )
{
if ( var_0 )
{
objective_playermask_showto( level.cameramapobjs[var_1].objid, self getentitynumber() );
continue;
}
objective_playermask_hidefrom( level.cameramapobjs[var_1].objid, self getentitynumber() );
}
}
getlevelmlgcams()
{
var_0 = tolower( getdvar( "mapname" ) );
var_1 = tablelookup( "mp/CameraPositions.csv", 0, var_0, 1 );
var_2 = tablelookup( "mp/CameraPositions.csv", 0, var_0, 2 );
level.cameramapobjs = [];
level.cameramapobjs[0] = createmlgcamobject( "compass_mlg_cam1" );
level.cameramapobjs[1] = createmlgcamobject( "compass_mlg_cam2" );
level.cameramapobjs[2] = createmlgcamobject( "compass_mlg_cam3" );
level.cameramapobjs[3] = createmlgcamobject( "compass_mlg_cam4" );
if ( var_1 == "" )
return;
var_3 = tablelookup( "mp/CameraPositions.csv", 0, var_0, 3 );
var_4 = tablelookup( "mp/CameraPositions.csv", 0, var_0, 4 );
var_5 = tablelookup( "mp/CameraPositions.csv", 0, var_0, 5 );
var_6 = tablelookup( "mp/CameraPositions.csv", 0, var_0, 6 );
var_7 = tablelookup( "mp/CameraPositions.csv", 0, var_0, 7 );
var_8 = tablelookup( "mp/CameraPositions.csv", 0, var_0, 8 );
level.camera1pos = getcameravecorang( var_1 );
level.camera1ang = getcameravecorang( var_2 );
level.camera2pos = getcameravecorang( var_3 );
level.camera2ang = getcameravecorang( var_4 );
level.camera3pos = getcameravecorang( var_5 );
level.camera3ang = getcameravecorang( var_6 );
level.camera4pos = getcameravecorang( var_7 );
level.camera4ang = getcameravecorang( var_8 );
if ( var_0 == "mp_strikezone" )
{
var_9 = tablelookup( "mp/CameraPositions.csv", 0, var_0 + "_b", 1 );
var_10 = tablelookup( "mp/CameraPositions.csv", 0, var_0 + "_b", 2 );
var_11 = tablelookup( "mp/CameraPositions.csv", 0, var_0 + "_b", 3 );
var_12 = tablelookup( "mp/CameraPositions.csv", 0, var_0 + "_b", 4 );
var_13 = tablelookup( "mp/CameraPositions.csv", 0, var_0 + "_b", 5 );
var_14 = tablelookup( "mp/CameraPositions.csv", 0, var_0 + "_b", 6 );
var_15 = tablelookup( "mp/CameraPositions.csv", 0, var_0 + "_b", 7 );
var_16 = tablelookup( "mp/CameraPositions.csv", 0, var_0 + "_b", 8 );
level.camera5pos = getcameravecorang( var_9 );
level.camera5ang = getcameravecorang( var_10 );
level.camera6pos = getcameravecorang( var_11 );
level.camera6ang = getcameravecorang( var_12 );
level.camera7pos = getcameravecorang( var_13 );
level.camera7ang = getcameravecorang( var_14 );
level.camera8pos = getcameravecorang( var_15 );
level.camera8ang = getcameravecorang( var_16 );
}
}
getcameravecorang( var_0 )
{
var_1 = strtok( var_0, " " );
var_2 = ( int( var_1[0] ), int( var_1[1] ), int( var_1[2] ) );
return var_2;
}
onplayerconnect()
{
for (;;)
{
level waittill( "connected", var_0 );
var_0 thread onjoinedteam();
var_0 thread onjoinedspectators();
var_0 thread onspectatingclient();
var_0 thread onfreecam();
}
}
onjoinedteam()
{
self endon( "disconnect" );
for (;;)
{
self waittill( "joined_team" );
setspectatepermissions();
setmlgcamvisibility( 0 );
}
}
onjoinedspectators()
{
self endon( "disconnect" );
for (;;)
{
self waittill( "joined_spectators" );
setspectatepermissions();
if ( self ismlgspectator() || isdefined( self.pers["mlgSpectator"] ) && self.pers["mlgSpectator"] )
{
self setmlgspectator( 1 );
self setclientomnvar( "ui_use_mlg_hud", 1 );
setmlgcamvisibility( 1 );
}
}
}
onspectatingclient()
{
self endon( "disconnect" );
for (;;)
{
self waittill( "spectating_cycle" );
var_0 = self getspectatingplayer();
if ( isdefined( var_0 ) )
{
}
}
}
onfreecam()
{
self endon( "disconnect" );
for (;;)
{
self waittill( "luinotifyserver", var_0, var_1 );
if ( var_0 == "mlg_view_change" )
maps\mp\gametypes\_playerlogic::resetuidvarsonspectate();
}
}
updatespectatesettings()
{
level endon( "game_ended" );
for ( var_0 = 0; var_0 < level.players.size; var_0++ )
level.players[var_0] setspectatepermissions();
}
setspectatepermissions()
{
var_0 = self.sessionteam;
if ( level.gameended && gettime() - level.gameendtime >= 2000 )
{
if ( level.multiteambased )
{
for ( var_1 = 0; var_1 < level.teamnamelist.size; var_1++ )
self allowspectateteam( level.teamnamelist[var_1], 0 );
}
else
{
self allowspectateteam( "allies", 0 );
self allowspectateteam( "axis", 0 );
}
self allowspectateteam( "freelook", 0 );
self allowspectateteam( "none", 1 );
return;
}
var_2 = maps\mp\gametypes\_tweakables::gettweakablevalue( "game", "spectatetype" );
if ( self ismlgspectator() )
var_2 = 2;
if ( maps\mp\_utility::bot_is_fireteam_mode() )
var_2 = 1;
switch ( var_2 )
{
case 0:
if ( level.multiteambased )
{
for ( var_1 = 0; var_1 < level.teamnamelist.size; var_1++ )
self allowspectateteam( level.teamnamelist[var_1], 0 );
}
else
{
self allowspectateteam( "allies", 0 );
self allowspectateteam( "axis", 0 );
}
self allowspectateteam( "freelook", 0 );
self allowspectateteam( "none", 0 );
break;
case 1:
if ( !level.teambased )
{
self allowspectateteam( "allies", 1 );
self allowspectateteam( "axis", 1 );
self allowspectateteam( "none", 1 );
self allowspectateteam( "freelook", 0 );
}
else if ( isdefined( var_0 ) && ( var_0 == "allies" || var_0 == "axis" ) && !level.multiteambased )
{
self allowspectateteam( var_0, 1 );
self allowspectateteam( maps\mp\_utility::getotherteam( var_0 ), 0 );
self allowspectateteam( "freelook", 0 );
self allowspectateteam( "none", 0 );
}
else if ( isdefined( var_0 ) && issubstr( var_0, "team_" ) && level.multiteambased )
{
for ( var_1 = 0; var_1 < level.teamnamelist.size; var_1++ )
{
if ( var_0 == level.teamnamelist[var_1] )
{
self allowspectateteam( level.teamnamelist[var_1], 1 );
continue;
}
self allowspectateteam( level.teamnamelist[var_1], 0 );
}
self allowspectateteam( "freelook", 0 );
self allowspectateteam( "none", 0 );
}
else
{
if ( level.multiteambased )
{
for ( var_1 = 0; var_1 < level.teamnamelist.size; var_1++ )
self allowspectateteam( level.teamnamelist[var_1], 0 );
}
else
{
self allowspectateteam( "allies", 0 );
self allowspectateteam( "axis", 0 );
}
self allowspectateteam( "freelook", 0 );
self allowspectateteam( "none", 0 );
}
break;
case 2:
if ( level.multiteambased )
{
for ( var_1 = 0; var_1 < level.teamnamelist.size; var_1++ )
self allowspectateteam( level.teamnamelist[var_1], 1 );
}
else
{
self allowspectateteam( "allies", 1 );
self allowspectateteam( "axis", 1 );
}
self allowspectateteam( "freelook", 1 );
self allowspectateteam( "none", 1 );
break;
}
if ( isdefined( var_0 ) && ( var_0 == "axis" || var_0 == "allies" ) )
{
if ( isdefined( level.spectateoverride[var_0].allowfreespectate ) )
self allowspectateteam( "freelook", 1 );
if ( isdefined( level.spectateoverride[var_0].allowenemyspectate ) )
self allowspectateteam( maps\mp\_utility::getotherteam( var_0 ), 1 );
}
}

View File

@ -0,0 +1,853 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
initscoreboard();
level.teambalance = getdvarint( "scr_teambalance" );
level.maxclients = getdvarint( "sv_maxclients" );
setplayermodels();
level.freeplayers = [];
if ( level.teambased )
{
level thread onplayerconnect();
level thread updateteambalance();
wait 0.15;
if ( !maps\mp\_utility::is_aliens() )
level thread updateplayertimes();
}
else
{
level thread onfreeplayerconnect();
wait 0.15;
level thread updatefreeplayertimes();
}
}
initscoreboard()
{
setdvar( "g_TeamName_Allies", getteamshortname( "allies" ) );
setdvar( "g_TeamIcon_Allies", getteamicon( "allies" ) );
setdvar( "g_TeamIcon_MyAllies", getteamicon( "allies" ) );
setdvar( "g_TeamIcon_EnemyAllies", getteamicon( "allies" ) );
var_0 = getteamcolor( "allies" );
setdvar( "g_ScoresColor_Allies", var_0[0] + " " + var_0[1] + " " + var_0[2] );
setdvar( "g_TeamName_Axis", getteamshortname( "axis" ) );
setdvar( "g_TeamIcon_Axis", getteamicon( "axis" ) );
setdvar( "g_TeamIcon_MyAxis", getteamicon( "axis" ) );
setdvar( "g_TeamIcon_EnemyAxis", getteamicon( "axis" ) );
var_0 = getteamcolor( "axis" );
setdvar( "g_ScoresColor_Axis", var_0[0] + " " + var_0[1] + " " + var_0[2] );
setdvar( "g_ScoresColor_Spectator", ".25 .25 .25" );
setdvar( "g_ScoresColor_Free", ".76 .78 .10" );
setdvar( "g_teamTitleColor_MyTeam", ".6 .8 .6" );
setdvar( "g_teamTitleColor_EnemyTeam", "1 .45 .5" );
}
onplayerconnect()
{
for (;;)
{
level waittill( "connected", var_0 );
var_0 thread onjoinedteam();
var_0 thread onjoinedspectators();
var_0 thread onplayerspawned();
var_0 thread trackplayedtime();
}
}
onfreeplayerconnect()
{
for (;;)
{
level waittill( "connected", var_0 );
var_0 thread trackfreeplayedtime();
}
}
onjoinedteam()
{
self endon( "disconnect" );
for (;;)
{
self waittill( "joined_team" );
updateteamtime();
}
}
onjoinedspectators()
{
self endon( "disconnect" );
for (;;)
{
self waittill( "joined_spectators" );
self.pers["teamTime"] = undefined;
}
}
trackplayedtime()
{
self endon( "disconnect" );
self.timeplayed["allies"] = 0;
self.timeplayed["axis"] = 0;
self.timeplayed["free"] = 0;
self.timeplayed["other"] = 0;
self.timeplayed["total"] = 0;
maps\mp\_utility::gameflagwait( "prematch_done" );
for (;;)
{
if ( game["state"] == "playing" )
{
if ( self.sessionteam == "allies" )
{
self.timeplayed["allies"]++;
self.timeplayed["total"]++;
}
else if ( self.sessionteam == "axis" )
{
self.timeplayed["axis"]++;
self.timeplayed["total"]++;
}
else if ( self.sessionteam == "spectator" )
self.timeplayed["other"]++;
}
wait 1.0;
}
}
updateplayertimes()
{
if ( !level.rankedmatch )
return;
level endon( "game_ended" );
for (;;)
{
maps\mp\gametypes\_hostmigration::waittillhostmigrationdone();
foreach ( var_1 in level.players )
var_1 updateplayedtime();
wait 1.0;
}
}
updateplayedtime()
{
if ( isai( self ) )
return;
if ( !maps\mp\_utility::rankingenabled() )
return;
if ( self.timeplayed["allies"] )
{
if ( !issquadsmode() )
{
maps\mp\gametypes\_persistence::stataddbuffered( "timePlayedAllies", self.timeplayed["allies"] );
maps\mp\gametypes\_persistence::stataddbuffered( "timePlayedTotal", self.timeplayed["allies"] );
}
maps\mp\gametypes\_persistence::stataddchildbuffered( "round", "timePlayed", self.timeplayed["allies"] );
maps\mp\gametypes\_persistence::stataddchildbufferedwithmax( "xpMultiplierTimePlayed", 0, self.timeplayed["allies"], self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][0] );
maps\mp\gametypes\_persistence::stataddchildbufferedwithmax( "xpMultiplierTimePlayed", 1, self.timeplayed["allies"], self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][1] );
maps\mp\gametypes\_persistence::stataddchildbufferedwithmax( "xpMultiplierTimePlayed", 2, self.timeplayed["allies"], self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][2] );
maps\mp\gametypes\_persistence::stataddchildbufferedwithmax( "challengeXPMultiplierTimePlayed", 0, self.timeplayed["allies"], self.bufferedchildstatsmax["challengeXPMaxMultiplierTimePlayed"][0] );
maps\mp\gametypes\_persistence::stataddchildbufferedwithmax( "weaponXPMultiplierTimePlayed", 0, self.timeplayed["allies"], self.bufferedchildstatsmax["weaponXPMaxMultiplierTimePlayed"][0] );
if ( issquadsmode() )
{
maps\mp\gametypes\_persistence::stataddbufferedwithmax( "prestigeDoubleXpTimePlayed", self.timeplayed["allies"], self.bufferedstatsmax["prestigeDoubleXpMaxTimePlayed"] );
maps\mp\gametypes\_persistence::stataddbufferedwithmax( "prestigeDoubleWeaponXpTimePlayed", self.timeplayed["allies"], self.bufferedstatsmax["prestigeDoubleWeaponXpMaxTimePlayed"] );
}
}
if ( self.timeplayed["axis"] )
{
if ( !issquadsmode() )
{
maps\mp\gametypes\_persistence::stataddbuffered( "timePlayedOpfor", self.timeplayed["axis"] );
maps\mp\gametypes\_persistence::stataddbuffered( "timePlayedTotal", self.timeplayed["axis"] );
}
maps\mp\gametypes\_persistence::stataddchildbuffered( "round", "timePlayed", self.timeplayed["axis"] );
maps\mp\gametypes\_persistence::stataddchildbufferedwithmax( "xpMultiplierTimePlayed", 0, self.timeplayed["axis"], self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][0] );
maps\mp\gametypes\_persistence::stataddchildbufferedwithmax( "xpMultiplierTimePlayed", 1, self.timeplayed["axis"], self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][1] );
maps\mp\gametypes\_persistence::stataddchildbufferedwithmax( "xpMultiplierTimePlayed", 2, self.timeplayed["axis"], self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][2] );
maps\mp\gametypes\_persistence::stataddchildbufferedwithmax( "challengeXPMultiplierTimePlayed", 0, self.timeplayed["axis"], self.bufferedchildstatsmax["challengeXPMaxMultiplierTimePlayed"][0] );
maps\mp\gametypes\_persistence::stataddchildbufferedwithmax( "weaponXPMultiplierTimePlayed", 0, self.timeplayed["axis"], self.bufferedchildstatsmax["weaponXPMaxMultiplierTimePlayed"][0] );
if ( issquadsmode() )
{
maps\mp\gametypes\_persistence::stataddbufferedwithmax( "prestigeDoubleXpTimePlayed", self.timeplayed["axis"], self.bufferedstatsmax["prestigeDoubleXpMaxTimePlayed"] );
maps\mp\gametypes\_persistence::stataddbufferedwithmax( "prestigeDoubleWeaponXpTimePlayed", self.timeplayed["axis"], self.bufferedstatsmax["prestigeDoubleWeaponXpMaxTimePlayed"] );
}
}
if ( self.timeplayed["other"] )
{
if ( !issquadsmode() )
{
maps\mp\gametypes\_persistence::stataddbuffered( "timePlayedOther", self.timeplayed["other"] );
maps\mp\gametypes\_persistence::stataddbuffered( "timePlayedTotal", self.timeplayed["other"] );
}
maps\mp\gametypes\_persistence::stataddchildbuffered( "round", "timePlayed", self.timeplayed["other"] );
maps\mp\gametypes\_persistence::stataddchildbufferedwithmax( "xpMultiplierTimePlayed", 0, self.timeplayed["other"], self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][0] );
maps\mp\gametypes\_persistence::stataddchildbufferedwithmax( "xpMultiplierTimePlayed", 1, self.timeplayed["other"], self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][1] );
maps\mp\gametypes\_persistence::stataddchildbufferedwithmax( "xpMultiplierTimePlayed", 2, self.timeplayed["other"], self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][2] );
maps\mp\gametypes\_persistence::stataddchildbufferedwithmax( "challengeXPMultiplierTimePlayed", 0, self.timeplayed["other"], self.bufferedchildstatsmax["challengeXPMaxMultiplierTimePlayed"][0] );
maps\mp\gametypes\_persistence::stataddchildbufferedwithmax( "weaponXPMultiplierTimePlayed", 0, self.timeplayed["other"], self.bufferedchildstatsmax["weaponXPMaxMultiplierTimePlayed"][0] );
if ( issquadsmode() )
{
maps\mp\gametypes\_persistence::stataddbufferedwithmax( "prestigeDoubleXpTimePlayed", self.timeplayed["other"], self.bufferedstatsmax["prestigeDoubleXpMaxTimePlayed"] );
maps\mp\gametypes\_persistence::stataddbufferedwithmax( "prestigeDoubleWeaponXpTimePlayed", self.timeplayed["other"], self.bufferedstatsmax["prestigeDoubleWeaponXpMaxTimePlayed"] );
}
}
if ( self.pers["rank"] != level.maxrank )
{
if ( self.timeplayed["allies"] )
maps\mp\gametypes\_persistence::stataddsquadbuffered( "experienceToPrestige", self.timeplayed["allies"] );
else if ( self.timeplayed["axis"] )
maps\mp\gametypes\_persistence::stataddsquadbuffered( "experienceToPrestige", self.timeplayed["axis"] );
else if ( self.timeplayed["other"] )
maps\mp\gametypes\_persistence::stataddsquadbuffered( "experienceToPrestige", self.timeplayed["other"] );
}
if ( game["state"] == "postgame" )
return;
self.timeplayed["allies"] = 0;
self.timeplayed["axis"] = 0;
self.timeplayed["other"] = 0;
}
updateteamtime()
{
if ( game["state"] != "playing" )
return;
self.pers["teamTime"] = gettime();
}
updateteambalancedvar()
{
for (;;)
{
var_0 = getdvarint( "scr_teambalance" );
if ( level.teambalance != var_0 )
level.teambalance = getdvarint( "scr_teambalance" );
wait 1;
}
}
updateteambalance()
{
level.teamlimit = level.maxclients / 2;
level thread updateteambalancedvar();
wait 0.15;
if ( level.teambalance && maps\mp\_utility::isroundbased() )
{
if ( isdefined( game["BalanceTeamsNextRound"] ) )
iprintlnbold( &"MP_AUTOBALANCE_NEXT_ROUND" );
level waittill( "restarting" );
if ( isdefined( game["BalanceTeamsNextRound"] ) )
{
level balanceteams();
game["BalanceTeamsNextRound"] = undefined;
}
else if ( !getteambalance() )
game["BalanceTeamsNextRound"] = 1;
}
else
{
level endon( "game_ended" );
for (;;)
{
if ( level.teambalance )
{
if ( !getteambalance() )
{
iprintlnbold( &"MP_AUTOBALANCE_SECONDS", 15 );
wait 15.0;
if ( !getteambalance() )
level balanceteams();
}
wait 59.0;
}
wait 1.0;
}
}
}
getteambalance()
{
level.team["allies"] = 0;
level.team["axis"] = 0;
var_0 = level.players;
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
{
if ( isdefined( var_0[var_1].pers["team"] ) && var_0[var_1].pers["team"] == "allies" )
{
level.team["allies"]++;
continue;
}
if ( isdefined( var_0[var_1].pers["team"] ) && var_0[var_1].pers["team"] == "axis" )
level.team["axis"]++;
}
if ( level.team["allies"] > level.team["axis"] + level.teambalance || level.team["axis"] > level.team["allies"] + level.teambalance )
return 0;
else
return 1;
}
balanceteams()
{
iprintlnbold( game["strings"]["autobalance"] );
var_0 = [];
var_1 = [];
var_2 = level.players;
for ( var_3 = 0; var_3 < var_2.size; var_3++ )
{
if ( !isdefined( var_2[var_3].pers["teamTime"] ) )
continue;
if ( isdefined( var_2[var_3].pers["team"] ) && var_2[var_3].pers["team"] == "allies" )
{
var_0[var_0.size] = var_2[var_3];
continue;
}
if ( isdefined( var_2[var_3].pers["team"] ) && var_2[var_3].pers["team"] == "axis" )
var_1[var_1.size] = var_2[var_3];
}
var_4 = undefined;
while ( var_0.size > var_1.size + 1 || var_1.size > var_0.size + 1 )
{
if ( var_0.size > var_1.size + 1 )
{
for ( var_5 = 0; var_5 < var_0.size; var_5++ )
{
if ( isdefined( var_0[var_5].dont_auto_balance ) )
continue;
if ( !isdefined( var_4 ) )
{
var_4 = var_0[var_5];
continue;
}
if ( var_0[var_5].pers["teamTime"] > var_4.pers["teamTime"] )
var_4 = var_0[var_5];
}
var_4 [[ level.onteamselection ]]( "axis" );
}
else if ( var_1.size > var_0.size + 1 )
{
for ( var_5 = 0; var_5 < var_1.size; var_5++ )
{
if ( isdefined( var_1[var_5].dont_auto_balance ) )
continue;
if ( !isdefined( var_4 ) )
{
var_4 = var_1[var_5];
continue;
}
if ( var_1[var_5].pers["teamTime"] > var_4.pers["teamTime"] )
var_4 = var_1[var_5];
}
var_4 [[ level.onteamselection ]]( "allies" );
}
var_4 = undefined;
var_0 = [];
var_1 = [];
var_2 = level.players;
for ( var_3 = 0; var_3 < var_2.size; var_3++ )
{
if ( isdefined( var_2[var_3].pers["team"] ) && var_2[var_3].pers["team"] == "allies" )
{
var_0[var_0.size] = var_2[var_3];
continue;
}
if ( isdefined( var_2[var_3].pers["team"] ) && var_2[var_3].pers["team"] == "axis" )
var_1[var_1.size] = var_2[var_3];
}
}
}
setplayermodels()
{
setdefaultcharacterdata();
game["allies_model"]["JUGGERNAUT"] = maps\mp\killstreaks\_juggernaut::setjugg;
game["axis_model"]["JUGGERNAUT"] = maps\mp\killstreaks\_juggernaut::setjugg;
game["allies_model"]["JUGGERNAUT_MANIAC"] = maps\mp\killstreaks\_juggernaut::setjuggmaniac;
game["axis_model"]["JUGGERNAUT_MANIAC"] = maps\mp\killstreaks\_juggernaut::setjuggmaniac;
}
playermodelforweapon( var_0, var_1 )
{
}
countplayers()
{
var_0 = [];
for ( var_1 = 0; var_1 < level.teamnamelist.size; var_1++ )
var_0[level.teamnamelist[var_1]] = 0;
for ( var_1 = 0; var_1 < level.players.size; var_1++ )
{
if ( level.players[var_1] == self )
continue;
if ( level.players[var_1].pers["team"] == "spectator" )
continue;
if ( isdefined( level.players[var_1].pers["team"] ) )
var_0[level.players[var_1].pers["team"]]++;
}
return var_0;
}
setdefaultcharacterdata()
{
if ( !isdefined( level.defaultheadmodels ) )
{
level.defaultheadmodels = [];
level.defaultheadmodels["allies"] = "head_mp_head_a";
level.defaultheadmodels["axis"] = "head_mp_head_a";
}
if ( !isdefined( level.defaultbodymodels ) )
{
level.defaultbodymodels = [];
level.defaultbodymodels["allies"] = "mp_body_us_rangers_assault_a_urban";
level.defaultbodymodels["axis"] = "mp_body_us_rangers_assault_a_woodland";
}
if ( !isdefined( level.defaultviewarmmodels ) )
{
level.defaultviewarmmodels = [];
level.defaultviewarmmodels["allies"] = "viewhands_us_rangers_urban";
level.defaultviewarmmodels["axis"] = "viewhands_us_rangers_woodland";
}
if ( !isdefined( level.defaultvoices ) )
{
level.defaultvoices = [];
level.defaultvoices["allies"] = "delta";
level.defaultvoices["axis"] = "delta";
}
}
setcharactermodels( var_0, var_1, var_2 )
{
self setmodel( var_0 );
self setviewmodel( var_2 );
self attach( var_1, "", 1 );
self.headmodel = var_1;
}
setmodelfromcustomization()
{
var_0 = self getcustomizationbody();
var_1 = self getcustomizationhead();
var_2 = self getcustomizationviewmodel();
setcharactermodels( var_0, var_1, var_2 );
}
setdefaultmodel()
{
var_0 = level.defaultbodymodels[self.team];
var_1 = level.defaultheadmodels[self.team];
var_2 = level.defaultviewarmmodels[self.team];
setcharactermodels( var_0, var_1, var_2 );
}
getplayermodelindex()
{
if ( level.rankedmatch )
return self getrankedplayerdata( "squadMembers", self.pers["activeSquadMember"], "body" );
else
return self getprivateplayerdata( "privateMatchSquadMembers", self.pers["activeSquadMember"], "body" );
}
getplayerfoleytype( var_0 )
{
return tablelookup( "mp/cac/bodies.csv", 0, var_0, 5 );
}
getplayermodelname( var_0 )
{
return tablelookup( "mp/cac/bodies.csv", 0, var_0, 1 );
}
setupplayermodel()
{
if ( isplayer( self ) )
setmodelfromcustomization();
else
setdefaultmodel();
if ( !isai( self ) )
{
var_0 = getplayermodelindex();
self.bodyindex = var_0;
var_1 = getplayerfoleytype( var_0 );
self setclothtype( var_1 );
}
else
self setclothtype( "vestLight" );
self.voice = level.defaultvoices[self.team];
if ( maps\mp\_utility::isanymlgmatch() && !isai( self ) )
{
var_2 = getplayermodelname( getplayermodelindex() );
if ( issubstr( var_2, "fullbody_sniper" ) )
thread forcedefaultmodel();
}
if ( maps\mp\_utility::isjuggernaut() )
{
if ( isdefined( self.isjuggernautmaniac ) && self.isjuggernautmaniac )
thread [[ game[self.team + "_model"]["JUGGERNAUT_MANIAC"] ]]();
else if ( isdefined( self.isjuggernautlevelcustom ) && self.isjuggernautlevelcustom )
thread [[ game[self.team + "_model"]["JUGGERNAUT_CUSTOM"] ]]();
else
thread [[ game[self.team + "_model"]["JUGGERNAUT"] ]]();
}
}
forcedefaultmodel()
{
if ( isdefined( self.headmodel ) )
{
self detach( self.headmodel, "" );
self.headmodel = undefined;
}
if ( self.team == "axis" )
{
self setmodel( "mp_body_juggernaut_light_black" );
self setviewmodel( "viewhands_juggernaut_ally" );
}
else
{
self setmodel( "mp_body_infected_a" );
self setviewmodel( "viewhands_gs_hostage" );
}
if ( isdefined( self.headmodel ) )
{
self detach( self.headmodel, "" );
self.headmodel = undefined;
}
self attach( "head_mp_infected", "", 1 );
self.headmodel = "head_mp_infected";
self setclothtype( "cloth" );
}
trackfreeplayedtime()
{
self endon( "disconnect" );
self.timeplayed["allies"] = 0;
self.timeplayed["axis"] = 0;
self.timeplayed["other"] = 0;
self.timeplayed["total"] = 0;
for (;;)
{
if ( game["state"] == "playing" )
{
if ( isdefined( self.pers["team"] ) && self.pers["team"] == "allies" && self.sessionteam != "spectator" )
{
self.timeplayed["allies"]++;
self.timeplayed["total"]++;
}
else if ( isdefined( self.pers["team"] ) && self.pers["team"] == "axis" && self.sessionteam != "spectator" )
{
self.timeplayed["axis"]++;
self.timeplayed["total"]++;
}
else
self.timeplayed["other"]++;
}
wait 1.0;
}
}
updatefreeplayertimes()
{
if ( !level.rankedmatch )
return;
var_0 = 0;
for (;;)
{
var_0++;
if ( var_0 >= level.players.size )
var_0 = 0;
if ( isdefined( level.players[var_0] ) )
level.players[var_0] updatefreeplayedtime();
wait 1.0;
}
}
updatefreeplayedtime()
{
if ( !maps\mp\_utility::rankingenabled() )
return;
if ( isai( self ) )
return;
if ( self.timeplayed["allies"] )
{
if ( !issquadsmode() )
{
maps\mp\gametypes\_persistence::stataddbuffered( "timePlayedAllies", self.timeplayed["allies"] );
maps\mp\gametypes\_persistence::stataddbuffered( "timePlayedTotal", self.timeplayed["allies"] );
}
maps\mp\gametypes\_persistence::stataddchildbuffered( "round", "timePlayed", self.timeplayed["allies"] );
maps\mp\gametypes\_persistence::stataddchildbufferedwithmax( "xpMultiplierTimePlayed", 0, self.timeplayed["allies"], self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][0] );
maps\mp\gametypes\_persistence::stataddchildbufferedwithmax( "xpMultiplierTimePlayed", 1, self.timeplayed["allies"], self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][1] );
maps\mp\gametypes\_persistence::stataddchildbufferedwithmax( "xpMultiplierTimePlayed", 2, self.timeplayed["allies"], self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][2] );
if ( issquadsmode() )
{
maps\mp\gametypes\_persistence::stataddbufferedwithmax( "prestigeDoubleXpTimePlayed", self.timeplayed["allies"], self.bufferedstatsmax["prestigeDoubleXpMaxTimePlayed"] );
maps\mp\gametypes\_persistence::stataddbufferedwithmax( "prestigeDoubleWeaponXpTimePlayed", self.timeplayed["allies"], self.bufferedstatsmax["prestigeDoubleWeaponXpMaxTimePlayed"] );
}
}
if ( self.timeplayed["axis"] )
{
if ( !issquadsmode() )
{
maps\mp\gametypes\_persistence::stataddbuffered( "timePlayedOpfor", self.timeplayed["axis"] );
maps\mp\gametypes\_persistence::stataddbuffered( "timePlayedTotal", self.timeplayed["axis"] );
}
maps\mp\gametypes\_persistence::stataddchildbuffered( "round", "timePlayed", self.timeplayed["axis"] );
maps\mp\gametypes\_persistence::stataddchildbufferedwithmax( "xpMultiplierTimePlayed", 0, self.timeplayed["axis"], self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][0] );
maps\mp\gametypes\_persistence::stataddchildbufferedwithmax( "xpMultiplierTimePlayed", 1, self.timeplayed["axis"], self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][1] );
maps\mp\gametypes\_persistence::stataddchildbufferedwithmax( "xpMultiplierTimePlayed", 2, self.timeplayed["axis"], self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][2] );
if ( issquadsmode() )
{
maps\mp\gametypes\_persistence::stataddbufferedwithmax( "prestigeDoubleXpTimePlayed", self.timeplayed["axis"], self.bufferedstatsmax["prestigeDoubleXpMaxTimePlayed"] );
maps\mp\gametypes\_persistence::stataddbufferedwithmax( "prestigeDoubleWeaponXpTimePlayed", self.timeplayed["axis"], self.bufferedstatsmax["prestigeDoubleWeaponXpMaxTimePlayed"] );
}
}
if ( self.timeplayed["other"] )
{
if ( !issquadsmode() )
{
maps\mp\gametypes\_persistence::stataddbuffered( "timePlayedOther", self.timeplayed["other"] );
maps\mp\gametypes\_persistence::stataddbuffered( "timePlayedTotal", self.timeplayed["other"] );
}
maps\mp\gametypes\_persistence::stataddchildbuffered( "round", "timePlayed", self.timeplayed["other"] );
maps\mp\gametypes\_persistence::stataddchildbufferedwithmax( "xpMultiplierTimePlayed", 0, self.timeplayed["other"], self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][0] );
maps\mp\gametypes\_persistence::stataddchildbufferedwithmax( "xpMultiplierTimePlayed", 1, self.timeplayed["other"], self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][1] );
maps\mp\gametypes\_persistence::stataddchildbufferedwithmax( "xpMultiplierTimePlayed", 2, self.timeplayed["other"], self.bufferedchildstatsmax["xpMaxMultiplierTimePlayed"][2] );
if ( issquadsmode() )
{
maps\mp\gametypes\_persistence::stataddbufferedwithmax( "prestigeDoubleXpTimePlayed", self.timeplayed["other"], self.bufferedstatsmax["prestigeDoubleXpMaxTimePlayed"] );
maps\mp\gametypes\_persistence::stataddbufferedwithmax( "prestigeDoubleWeaponXpTimePlayed", self.timeplayed["other"], self.bufferedstatsmax["prestigeDoubleWeaponXpMaxTimePlayed"] );
}
}
if ( game["state"] == "postgame" )
return;
self.timeplayed["allies"] = 0;
self.timeplayed["axis"] = 0;
self.timeplayed["other"] = 0;
}
getjointeampermissions( var_0 )
{
if ( maps\mp\_utility::is_aliens() )
return 1;
var_1 = 0;
var_2 = 0;
var_3 = level.players;
for ( var_4 = 0; var_4 < var_3.size; var_4++ )
{
var_5 = var_3[var_4];
if ( isdefined( var_5.pers["team"] ) && var_5.pers["team"] == var_0 )
{
var_1++;
if ( isbot( var_5 ) )
var_2++;
}
}
if ( var_1 < level.teamlimit )
return 1;
else if ( var_2 > 0 )
return 1;
else if ( !maps\mp\_utility::matchmakinggame() )
return 1;
else if ( level.gametype == "infect" )
return 1;
else
return 0;
}
onplayerspawned()
{
level endon( "game_ended" );
for (;;)
self waittill( "spawned_player" );
}
mt_getteamname( var_0 )
{
return tablelookupistring( "mp/MTTable.csv", 0, var_0, 1 );
}
mt_getteamicon( var_0 )
{
return tablelookup( "mp/MTTable.csv", 0, var_0, 2 );
}
mt_getteamheadicon( var_0 )
{
return tablelookup( "mp/MTTable.csv", 0, var_0, 3 );
}
getteamname( var_0 )
{
return tablelookupistring( "mp/factionTable.csv", 0, game[var_0], 1 );
}
getteamshortname( var_0 )
{
return tablelookupistring( "mp/factionTable.csv", 0, game[var_0], 2 );
}
getteamforfeitedstring( var_0 )
{
return tablelookupistring( "mp/factionTable.csv", 0, game[var_0], 4 );
}
getteameliminatedstring( var_0 )
{
return tablelookupistring( "mp/factionTable.csv", 0, game[var_0], 3 );
}
getteamicon( var_0 )
{
return tablelookup( "mp/factionTable.csv", 0, game[var_0], 5 );
}
getteamhudicon( var_0 )
{
return tablelookup( "mp/factionTable.csv", 0, game[var_0], 6 );
}
getteamheadicon( var_0 )
{
return tablelookup( "mp/factionTable.csv", 0, game[var_0], 17 );
}
getteamvoiceprefix( var_0 )
{
return tablelookup( "mp/factionTable.csv", 0, game[var_0], 7 );
}
getteamspawnmusic( var_0 )
{
return tablelookup( "mp/factionTable.csv", 0, game[var_0], 8 );
}
getteamwinmusic( var_0 )
{
return tablelookup( "mp/factionTable.csv", 0, game[var_0], 9 );
}
getteamflagmodel( var_0 )
{
return tablelookup( "mp/factionTable.csv", 0, game[var_0], 10 );
}
getteamflagcarrymodel( var_0 )
{
return tablelookup( "mp/factionTable.csv", 0, game[var_0], 11 );
}
getteamflagicon( var_0 )
{
return tablelookup( "mp/factionTable.csv", 0, game[var_0], 12 );
}
getteamflagfx( var_0 )
{
return tablelookup( "mp/factionTable.csv", 0, game[var_0], 13 );
}
getteamcolor( var_0 )
{
return ( maps\mp\_utility::stringtofloat( tablelookup( "mp/factionTable.csv", 0, game[var_0], 14 ) ), maps\mp\_utility::stringtofloat( tablelookup( "mp/factionTable.csv", 0, game[var_0], 15 ) ), maps\mp\_utility::stringtofloat( tablelookup( "mp/factionTable.csv", 0, game[var_0], 16 ) ) );
}
getteamcratemodel( var_0 )
{
return tablelookup( "mp/factionTable.csv", 0, game[var_0], 18 );
}
getteamdeploymodel( var_0 )
{
return tablelookup( "mp/factionTable.csv", 0, game[var_0], 19 );
}

View File

@ -0,0 +1,417 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
trophyused( var_0 )
{
self endon( "spawned_player" );
self endon( "disconnect" );
if ( !isalive( self ) )
{
var_0 delete();
return;
}
if ( self isonladder() || !self isonground() )
{
restocktrophy( var_0.weapon_name );
var_0 delete();
return;
}
if ( isdefined( self.onhelisniper ) && self.onhelisniper )
{
var_0 delete();
self.helisniper thread trophyactive( self );
return;
}
var_0 hide();
var_1 = self canplayerplacesentry( 1, 12 );
if ( var_1["result"] && is_normal_upright( anglestoup( var_1["angles"] ) ) )
{
var_0.origin = var_1["origin"];
var_0.angles = var_1["angles"];
}
else
{
var_0.origin = self.origin;
var_0.angles = self.angles;
}
var_0 show();
self playlocalsound( "trophy_turret_plant_plr" );
self playsoundtoteam( "trophy_turret_plant_npc", "allies", self );
self playsoundtoteam( "trophy_turret_plant_npc", "axis", self );
var_2 = spawn( "script_model", var_0.origin );
var_2 setmodel( "mp_trophy_system_iw6" );
var_2 thread maps\mp\gametypes\_weapons::createbombsquadmodel( "mp_trophy_system_iw6_bombsquad", "tag_origin", self );
var_2.angles = var_0.angles;
var_2.team = self.team;
var_2.owner = self;
var_2.istallforwaterchecks = 1;
if ( isdefined( self.trophyremainingammo ) && self.trophyremainingammo > 0 )
var_2.ammo = self.trophyremainingammo;
else if ( maps\mp\_utility::is_aliens() )
var_2.ammo = 5;
else
var_2.ammo = 2;
var_3 = 16;
var_4 = anglestoup( var_2.angles );
var_4 = var_3 * var_4;
var_5 = var_2.origin + var_4;
var_2.trigger = spawn( "script_origin", var_5 );
var_2.trigger linkto( var_2 );
var_2 thread trophydamage( self );
var_2 thread trophywaitfordetonation();
var_2 thread trophyactive( self );
var_2 thread trophydisconnectwaiter( self );
var_2 thread trophyplayerspawnwaiter( self );
var_2 thread trophyuselistener( self );
var_2 setotherent( self );
var_2 maps\mp\gametypes\_weapons::makeexplosivetargetablebyai( 1 );
var_2 maps\mp\gametypes\_weapons::explosivehandlemovers( var_1["entity"], 1 );
if ( level.teambased )
var_2 maps\mp\_entityheadicons::setteamheadicon( self.team, ( 0, 0, 65 ) );
else
var_2 maps\mp\_entityheadicons::setplayerheadicon( self, ( 0, 0, 65 ) );
maps\mp\gametypes\_weapons::ontacticalequipmentplanted( var_2 );
var_2 thread playanimations();
if ( isdefined( var_0 ) )
{
common_scripts\utility::waitframe();
var_0 delete();
}
if ( maps\mp\_utility::is_aliens() )
self takeweapon( "alientrophy_mp" );
}
trophyuselistener( var_0 )
{
self endon( "death" );
level endon( "game_ended" );
var_0 endon( "disconnect" );
var_0 endon( "death" );
self.trigger setcursorhint( "HINT_NOICON" );
self.trigger sethintstring( &"MP_PICKUP_TROPHY" );
self.trigger maps\mp\_utility::setselfusable( var_0 );
self.trigger thread maps\mp\_utility::notusableforjoiningplayers( var_0 );
for (;;)
{
self.trigger waittill( "trigger", var_0 );
self stoploopsound();
if ( maps\mp\_utility::is_aliens() )
{
var_1 = var_0 getweaponslistoffhands();
var_2 = undefined;
foreach ( var_4 in var_1 )
{
if ( var_4 == "alienflare_mp" || var_4 == "alientrophy_mp" || var_4 == "alienthrowingknife_mp" || isdefined( level.trophy_use_pickupfunc ) && [[ level.trophy_use_pickupfunc ]]( var_4 ) )
{
var_5 = var_0 getammocount( var_4 );
if ( var_5 > 0 )
{
var_0 maps\mp\_utility::setlowermessage( "slots_full", &"ALIEN_COLLECTIBLES_TACTICAL_FULL", 3 );
var_2 = 1;
break;
}
}
}
if ( !isdefined( var_2 ) )
{
var_0 setoffhandsecondaryclass( "flash" );
var_0 playlocalsound( "scavenger_pack_pickup" );
var_0.trophyremainingammo = self.ammo;
var_0 takeweapon( "alientrophy_mp" );
var_0 maps\mp\_utility::_giveweapon( "alientrophy_mp" );
self scriptmodelclearanim();
maps\mp\gametypes\_weapons::deleteexplosive();
self notify( "death" );
}
continue;
}
if ( !var_0 maps\mp\_utility::isjuggernaut() )
{
var_0 restocktrophy( "trophy_mp" );
var_0.trophyremainingammo = self.ammo;
self scriptmodelclearanim();
maps\mp\gametypes\_weapons::deleteexplosive();
self notify( "death" );
}
}
}
trophyplayerspawnwaiter( var_0 )
{
self endon( "disconnect" );
self endon( "death" );
var_0 waittill( "spawned" );
self notify( "detonateExplosive" );
}
trophydisconnectwaiter( var_0 )
{
self endon( "death" );
var_0 waittill( "disconnect" );
self notify( "detonateExplosive" );
}
trophyactive( var_0 )
{
var_0 endon( "disconnect" );
self endon( "death" );
if ( maps\mp\_utility::is_aliens() && self.model == "mp_weapon_alien_crate" )
var_1 = self.origin;
else
var_1 = self gettagorigin( "camera_jnt" );
if ( isdefined( self.cameraoffset ) )
self.cameraoffsetvector = ( 0, 0, self.cameraoffset );
else
self.cameraoffsetvector = var_1 - self.origin;
var_2 = 65536;
var_3 = 147456;
self.killcament = spawn( "script_model", var_1 + ( 0, 0, 5 ) );
self.killcament linkto( self );
if ( !isdefined( level.grenades ) )
level.grenades = [];
if ( !isdefined( level.missiles ) )
level.missiles = [];
for (;;)
{
if ( isdefined( self.disabled ) || level.grenades.size < 1 && level.missiles.size < 1 )
{
wait 0.05;
continue;
}
var_4 = common_scripts\utility::array_combine( level.grenades, level.missiles );
foreach ( var_6 in var_4 )
{
if ( !isdefined( var_6 ) )
continue;
if ( var_6 == self )
continue;
if ( isdefined( var_6.exploding ) )
continue;
if ( isdefined( var_6.weapon_name ) )
{
switch ( var_6.weapon_name )
{
case "odin_projectile_airdrop_mp":
case "odin_projectile_smoke_mp":
case "odin_projectile_marking_mp":
case "odin_projectile_small_rod_mp":
case "odin_projectile_large_rod_mp":
case "deployable_weapon_crate_marker_mp":
case "deployable_vest_marker_mp":
case "airdrop_marker_mp":
case "trophy_mp":
case "throwingknifejugg_mp":
case "throwingknife_mp":
case "claymore_mp":
continue;
}
}
if ( !isdefined( var_6.owner ) )
var_6.owner = getmissileowner( var_6 );
if ( isdefined( var_6.owner ) && !var_0 maps\mp\_utility::isenemy( var_6.owner ) )
continue;
if ( isdefined( self.cameraoffsetvector ) )
var_1 = self.origin + self.cameraoffsetvector;
var_7 = distancesquared( var_6.origin, var_1 );
var_8 = trophy_getprotectiondistance( var_6 );
if ( var_7 < var_8 )
{
var_9 = bullettrace( var_1, var_6.origin, 0, self );
if ( var_9["fraction"] == 1 || isdefined( var_9["entity"] ) && var_9["entity"] == var_6 )
{
playfx( level.sentry_fire, var_1, var_6.origin - var_1, anglestoup( self.angles ) );
self playsound( "trophy_detect_projectile" );
if ( trophy_grenadeiskillstreakmissile( var_6 ) )
{
if ( isdefined( var_6.type ) && var_6.type == "remote" )
{
level thread maps\mp\gametypes\_missions::killstreakkilled( var_6.owner, var_0, undefined, var_0, undefined, "MOD_EXPLOSIVE", "trophy_mp" );
level thread maps\mp\_utility::teamplayercardsplash( "callout_destroyed_predator_missile", var_0 );
var_0 thread maps\mp\gametypes\_rank::giverankxp( "kill", 100, "trophy_mp", "MOD_EXPLOSIVE" );
var_0 notify( "destroyed_killstreak", "trophy_mp" );
}
if ( isdefined( level.chopper_fx["explode"]["medium"] ) )
playfx( level.chopper_fx["explode"]["medium"], var_6.origin );
if ( isdefined( level.barrelexpsound ) )
var_6 playsound( level.barrelexpsound );
}
var_0 thread projectileexplode( var_6, self );
var_0 maps\mp\gametypes\_missions::processchallenge( "ch_noboomforyou" );
if ( !maps\mp\_utility::is_aliens() )
var_0 thread maps\mp\gametypes\_gamelogic::threadedsetweaponstatbyname( "trophy_mp", 1, "hits" );
self.ammo--;
if ( self.ammo <= 0 )
{
var_0.trophyremainingammo = undefined;
self notify( "detonateExplosive" );
}
}
}
}
wait 0.05;
}
}
trophy_grenadeiskillstreakmissile( var_0 )
{
return isdefined( var_0.classname ) && var_0.classname == "rocket" && ( isdefined( var_0.type ) && ( var_0.type == "remote" || var_0.type == "remote_mortar" ) );
}
trophy_getprotectiondistance( var_0 )
{
if ( isdefined( var_0.weapon_name ) && var_0.weapon_name == "switch_blade_child_mp" )
return 1048576;
else if ( trophy_grenadeiskillstreakmissile( var_0 ) )
return 147456;
else if ( isdefined( var_0.weapon_name ) && ( var_0.weapon_name == "hind_missile_mp" || var_0.weapon_name == "hind_bomb_mp" ) )
return 147456;
else
return 65536;
}
projectileexplode( var_0, var_1 )
{
self endon( "death" );
var_2 = var_0.origin;
var_3 = var_0.model;
var_4 = var_0.angles;
var_0 stopsounds();
var_0.exploding = 1;
if ( var_3 == "weapon_light_marker" )
{
playfx( level.empgrenadeexplode, var_2, anglestoforward( var_4 ), anglestoup( var_4 ) );
var_1 notify( "detonateExplosive" );
common_scripts\utility::waitframe();
var_0 delete();
return;
}
var_1 playsound( "trophy_fire" );
playfx( level.mine_explode, var_2, anglestoforward( var_4 ), anglestoup( var_4 ) );
if ( maps\mp\_utility::is_aliens() )
var_1 radiusdamage( var_2, 128, 105, 10, self, "MOD_EXPLOSIVE", "alientrophy_mp" );
else
var_1 radiusdamage( var_2, 128, 105, 10, self, "MOD_EXPLOSIVE", "trophy_mp" );
common_scripts\utility::waitframe();
if ( isdefined( var_0 ) )
var_0 delete();
}
trophydamage( var_0 )
{
maps\mp\gametypes\_damage::monitordamage( 100, "trophy", ::trophyhandledeathdamage, ::trophymodifydamage, 0 );
}
trophymodifydamage( var_0, var_1, var_2, var_3 )
{
var_4 = var_3;
var_4 = maps\mp\gametypes\_damage::handlemeleedamage( var_1, var_2, var_4 );
var_4 = maps\mp\gametypes\_damage::handleempdamage( var_1, var_2, var_4 );
var_4 = maps\mp\gametypes\_damage::handleapdamage( var_1, var_2, var_4, var_0 );
return var_4;
}
trophyhandledeathdamage( var_0, var_1, var_2, var_3 )
{
if ( isdefined( self.owner ) && var_0 != self.owner )
var_0 notify( "destroyed_equipment" );
self notify( "detonateExplosive" );
}
trophywaitfordetonation()
{
level endon( "game_ended" );
self waittill( "detonateExplosive" );
self scriptmodelclearanim();
self stoploopsound();
maps\mp\gametypes\_weapons::equipmentdeathvfx();
self notify( "death" );
var_0 = self.origin;
self.trigger makeunusable();
self freeentitysentient();
wait 3;
if ( isdefined( self ) )
{
if ( isdefined( self.killcament ) )
self.killcament delete();
maps\mp\gametypes\_weapons::equipmentdeletevfx();
maps\mp\gametypes\_weapons::deleteexplosive();
}
}
#using_animtree("animated_props");
playanimations()
{
self endon( "emp_damage" );
self endon( "death" );
self scriptmodelplayanim( "trophy_system_deploy" );
var_0 = getanimlength( %trophy_system_deploy );
wait( var_0 );
self scriptmodelplayanim( "trophy_system_idle" );
self playloopsound( "trophy_turret_rotate_lp" );
}
restocktrophy( var_0 )
{
self playlocalsound( "scavenger_pack_pickup" );
self setweaponammostock( var_0, self getweaponammostock( var_0 ) + 1 );
}
is_normal_upright( var_0 )
{
var_1 = ( 0, 0, 1 );
var_2 = 0.85;
return vectordot( var_0, var_1 ) > var_2;
}

View File

@ -0,0 +1,347 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
gettweakabledvarvalue( var_0, var_1 )
{
switch ( var_0 )
{
case "rule":
var_2 = level.rules[var_1].dvar;
break;
case "game":
var_2 = level.gametweaks[var_1].dvar;
break;
case "team":
var_2 = level.teamtweaks[var_1].dvar;
break;
case "player":
var_2 = level.playertweaks[var_1].dvar;
break;
case "class":
var_2 = level.classtweaks[var_1].dvar;
break;
case "weapon":
var_2 = level.weapontweaks[var_1].dvar;
break;
case "hardpoint":
var_2 = level.hardpointtweaks[var_1].dvar;
break;
case "hud":
var_2 = level.hudtweaks[var_1].dvar;
break;
default:
var_2 = undefined;
break;
}
var_3 = getdvarint( var_2 );
return var_3;
}
gettweakabledvar( var_0, var_1 )
{
switch ( var_0 )
{
case "rule":
var_2 = level.rules[var_1].dvar;
break;
case "game":
var_2 = level.gametweaks[var_1].dvar;
break;
case "team":
var_2 = level.teamtweaks[var_1].dvar;
break;
case "player":
var_2 = level.playertweaks[var_1].dvar;
break;
case "class":
var_2 = level.classtweaks[var_1].dvar;
break;
case "weapon":
var_2 = level.weapontweaks[var_1].dvar;
break;
case "hardpoint":
var_2 = level.hardpointtweaks[var_1].dvar;
break;
case "hud":
var_2 = level.hudtweaks[var_1].dvar;
break;
default:
var_2 = undefined;
break;
}
return var_2;
}
gettweakablevalue( var_0, var_1 )
{
switch ( var_0 )
{
case "rule":
var_2 = level.rules[var_1].value;
break;
case "game":
var_2 = level.gametweaks[var_1].value;
break;
case "team":
var_2 = level.teamtweaks[var_1].value;
break;
case "player":
var_2 = level.playertweaks[var_1].value;
break;
case "class":
var_2 = level.classtweaks[var_1].value;
break;
case "weapon":
var_2 = level.weapontweaks[var_1].value;
break;
case "hardpoint":
var_2 = level.hardpointtweaks[var_1].value;
break;
case "hud":
var_2 = level.hudtweaks[var_1].value;
break;
default:
var_2 = undefined;
break;
}
return var_2;
}
gettweakablelastvalue( var_0, var_1 )
{
switch ( var_0 )
{
case "rule":
var_2 = level.rules[var_1].lastvalue;
break;
case "game":
var_2 = level.gametweaks[var_1].lastvalue;
break;
case "team":
var_2 = level.teamtweaks[var_1].lastvalue;
break;
case "player":
var_2 = level.playertweaks[var_1].lastvalue;
break;
case "class":
var_2 = level.classtweaks[var_1].lastvalue;
break;
case "weapon":
var_2 = level.weapontweaks[var_1].lastvalue;
break;
case "hardpoint":
var_2 = level.hardpointtweaks[var_1].lastvalue;
break;
case "hud":
var_2 = level.hudtweaks[var_1].lastvalue;
break;
default:
var_2 = undefined;
break;
}
return var_2;
}
settweakablevalue( var_0, var_1, var_2 )
{
switch ( var_0 )
{
case "rule":
var_3 = level.rules[var_1].dvar;
break;
case "game":
var_3 = level.gametweaks[var_1].dvar;
break;
case "team":
var_3 = level.teamtweaks[var_1].dvar;
break;
case "player":
var_3 = level.playertweaks[var_1].dvar;
break;
case "class":
var_3 = level.classtweaks[var_1].dvar;
break;
case "weapon":
var_3 = level.weapontweaks[var_1].dvar;
break;
case "hardpoint":
var_3 = level.hardpointtweaks[var_1].dvar;
break;
case "hud":
var_3 = level.hudtweaks[var_1].dvar;
break;
default:
var_3 = undefined;
break;
}
setdvar( var_3, var_2 );
}
settweakablelastvalue( var_0, var_1, var_2 )
{
switch ( var_0 )
{
case "rule":
level.rules[var_1].lastvalue = var_2;
break;
case "game":
level.gametweaks[var_1].lastvalue = var_2;
break;
case "team":
level.teamtweaks[var_1].lastvalue = var_2;
break;
case "player":
level.playertweaks[var_1].lastvalue = var_2;
break;
case "class":
level.classtweaks[var_1].lastvalue = var_2;
break;
case "weapon":
level.weapontweaks[var_1].lastvalue = var_2;
break;
case "hardpoint":
level.hardpointtweaks[var_1].lastvalue = var_2;
break;
case "hud":
level.hudtweaks[var_1].lastvalue = var_2;
break;
default:
break;
}
}
registertweakable( var_0, var_1, var_2, var_3 )
{
if ( isstring( var_3 ) )
var_3 = getdvar( var_2, var_3 );
else
var_3 = getdvarint( var_2, var_3 );
switch ( var_0 )
{
case "rule":
if ( !isdefined( level.rules[var_1] ) )
level.rules[var_1] = spawnstruct();
level.rules[var_1].value = var_3;
level.rules[var_1].lastvalue = var_3;
level.rules[var_1].dvar = var_2;
break;
case "game":
if ( !isdefined( level.gametweaks[var_1] ) )
level.gametweaks[var_1] = spawnstruct();
level.gametweaks[var_1].value = var_3;
level.gametweaks[var_1].lastvalue = var_3;
level.gametweaks[var_1].dvar = var_2;
break;
case "team":
if ( !isdefined( level.teamtweaks[var_1] ) )
level.teamtweaks[var_1] = spawnstruct();
level.teamtweaks[var_1].value = var_3;
level.teamtweaks[var_1].lastvalue = var_3;
level.teamtweaks[var_1].dvar = var_2;
break;
case "player":
if ( !isdefined( level.playertweaks[var_1] ) )
level.playertweaks[var_1] = spawnstruct();
level.playertweaks[var_1].value = var_3;
level.playertweaks[var_1].lastvalue = var_3;
level.playertweaks[var_1].dvar = var_2;
break;
case "class":
if ( !isdefined( level.classtweaks[var_1] ) )
level.classtweaks[var_1] = spawnstruct();
level.classtweaks[var_1].value = var_3;
level.classtweaks[var_1].lastvalue = var_3;
level.classtweaks[var_1].dvar = var_2;
break;
case "weapon":
if ( !isdefined( level.weapontweaks[var_1] ) )
level.weapontweaks[var_1] = spawnstruct();
level.weapontweaks[var_1].value = var_3;
level.weapontweaks[var_1].lastvalue = var_3;
level.weapontweaks[var_1].dvar = var_2;
break;
case "hardpoint":
if ( !isdefined( level.hardpointtweaks[var_1] ) )
level.hardpointtweaks[var_1] = spawnstruct();
level.hardpointtweaks[var_1].value = var_3;
level.hardpointtweaks[var_1].lastvalue = var_3;
level.hardpointtweaks[var_1].dvar = var_2;
break;
case "hud":
if ( !isdefined( level.hudtweaks[var_1] ) )
level.hudtweaks[var_1] = spawnstruct();
level.hudtweaks[var_1].value = var_3;
level.hudtweaks[var_1].lastvalue = var_3;
level.hudtweaks[var_1].dvar = var_2;
break;
}
}
init()
{
level.clienttweakables = [];
level.tweakablesinitialized = 1;
level.rules = [];
level.gametweaks = [];
level.teamtweaks = [];
level.playertweaks = [];
level.classtweaks = [];
level.weapontweaks = [];
level.hardpointtweaks = [];
level.hudtweaks = [];
if ( level.console )
{
if ( level.xb3 || level.ps4 )
registertweakable( "game", "graceperiod", "scr_game_graceperiod", 20 );
else
registertweakable( "game", "graceperiod", "scr_game_graceperiod", 15 );
registertweakable( "game", "graceperiod_comp", "scr_game_graceperiod_comp", 60 );
}
else
{
registertweakable( "game", "playerwaittime", "scr_game_playerwaittime", 15 );
registertweakable( "game", "playerwaittime_comp", "scr_game_playerwaittime_comp", 60 );
}
registertweakable( "game", "matchstarttime", "scr_game_matchstarttime", 15 );
registertweakable( "game", "onlyheadshots", "scr_game_onlyheadshots", 0 );
registertweakable( "game", "allowkillcam", "scr_game_allowkillcam", 1 );
registertweakable( "game", "spectatetype", "scr_game_spectatetype", 2 );
registertweakable( "game", "deathpointloss", "scr_game_deathpointloss", 0 );
registertweakable( "game", "suicidepointloss", "scr_game_suicidepointloss", 0 );
registertweakable( "team", "teamkillpointloss", "scr_team_teamkillpointloss", 0 );
registertweakable( "team", "fftype", "scr_team_fftype", 0 );
registertweakable( "team", "teamkillspawndelay", "scr_team_teamkillspawndelay", 0 );
registertweakable( "player", "maxhealth", "scr_player_maxhealth", 100 );
registertweakable( "player", "healthregentime", "scr_player_healthregentime", 5 );
registertweakable( "player", "forcerespawn", "scr_player_forcerespawn", 1 );
registertweakable( "weapon", "allowfrag", "scr_weapon_allowfrags", 1 );
registertweakable( "weapon", "allowsmoke", "scr_weapon_allowsmoke", 1 );
registertweakable( "weapon", "allowflash", "scr_weapon_allowflash", 1 );
registertweakable( "weapon", "allowc4", "scr_weapon_allowc4", 1 );
registertweakable( "weapon", "allowclaymores", "scr_weapon_allowclaymores", 1 );
registertweakable( "weapon", "allowrpgs", "scr_weapon_allowrpgs", 1 );
registertweakable( "weapon", "allowmines", "scr_weapon_allowmines", 1 );
registertweakable( "hardpoint", "allowartillery", "scr_hardpoint_allowartillery", 1 );
registertweakable( "hardpoint", "allowuav", "scr_hardpoint_allowuav", 1 );
registertweakable( "hardpoint", "allowsupply", "scr_hardpoint_allowsupply", 1 );
registertweakable( "hardpoint", "allowhelicopter", "scr_hardpoint_allowhelicopter", 1 );
registertweakable( "hud", "showobjicons", "ui_hud_showobjicons", 1 );
setdvar( "ui_hud_showobjicons", 1 );
}

File diff suppressed because it is too large Load Diff

2168
maps/mp/gametypes/aliens.gsc Normal file

File diff suppressed because it is too large Load Diff

1060
maps/mp/gametypes/blitz.gsc Normal file

File diff suppressed because it is too large Load Diff

371
maps/mp/gametypes/conf.gsc Normal file
View File

@ -0,0 +1,371 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
if ( getdvar( "mapname" ) == "mp_background" )
return;
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::setupcallbacks();
maps\mp\gametypes\_globallogic::setupcallbacks();
if ( isusingmatchrulesdata() )
{
level.initializematchrules = ::initializematchrules;
[[ level.initializematchrules ]]();
level thread maps\mp\_utility::reinitializematchrulesonmigration();
}
else
{
maps\mp\_utility::registerroundswitchdvar( level.gametype, 0, 0, 9 );
maps\mp\_utility::registertimelimitdvar( level.gametype, 10 );
maps\mp\_utility::registerscorelimitdvar( level.gametype, 65 );
maps\mp\_utility::registerroundlimitdvar( level.gametype, 1 );
maps\mp\_utility::registerwinlimitdvar( level.gametype, 1 );
maps\mp\_utility::registernumlivesdvar( level.gametype, 0 );
maps\mp\_utility::registerhalftimedvar( level.gametype, 0 );
level.matchrules_damagemultiplier = 0;
level.matchrules_vampirism = 0;
}
level.teambased = 1;
level.initgametypeawards = ::initgametypeawards;
level.onstartgametype = ::onstartgametype;
level.getspawnpoint = ::getspawnpoint;
level.onnormaldeath = ::onnormaldeath;
level.onprecachegametype = ::onprecachegametype;
if ( level.matchrules_damagemultiplier || level.matchrules_vampirism )
level.modifyplayerdamage = maps\mp\gametypes\_damage::gamemodemodifyplayerdamage;
game["dialog"]["gametype"] = "kill_confirmed";
game["dialog"]["kill_confirmed"] = "kill_confirmed";
if ( getdvarint( "g_hardcore" ) )
game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"];
level.conf_fx["vanish"] = loadfx( "fx/impacts/small_snowhit" );
}
initializematchrules()
{
maps\mp\_utility::setcommonrulesfrommatchrulesdata();
setdynamicdvar( "scr_conf_roundswitch", 0 );
maps\mp\_utility::registerroundswitchdvar( "conf", 0, 0, 9 );
setdynamicdvar( "scr_conf_roundlimit", 1 );
maps\mp\_utility::registerroundlimitdvar( "conf", 1 );
setdynamicdvar( "scr_conf_winlimit", 1 );
maps\mp\_utility::registerwinlimitdvar( "conf", 1 );
setdynamicdvar( "scr_conf_halftime", 0 );
maps\mp\_utility::registerhalftimedvar( "conf", 0 );
setdynamicdvar( "scr_conf_promode", 0 );
}
onprecachegametype()
{
precachempanim( "mp_dogtag_spin" );
precacheshader( "waypoint_dogtags" );
}
onstartgametype()
{
setclientnamemode( "auto_change" );
if ( !isdefined( game["switchedsides"] ) )
game["switchedsides"] = 0;
if ( game["switchedsides"] )
{
var_0 = game["attackers"];
var_1 = game["defenders"];
game["attackers"] = var_1;
game["defenders"] = var_0;
}
maps\mp\_utility::setobjectivetext( "allies", &"OBJECTIVES_CONF" );
maps\mp\_utility::setobjectivetext( "axis", &"OBJECTIVES_CONF" );
if ( level.splitscreen )
{
maps\mp\_utility::setobjectivescoretext( "allies", &"OBJECTIVES_CONF" );
maps\mp\_utility::setobjectivescoretext( "axis", &"OBJECTIVES_CONF" );
}
else
{
maps\mp\_utility::setobjectivescoretext( "allies", &"OBJECTIVES_CONF_SCORE" );
maps\mp\_utility::setobjectivescoretext( "axis", &"OBJECTIVES_CONF_SCORE" );
}
maps\mp\_utility::setobjectivehinttext( "allies", &"OBJECTIVES_CONF_HINT" );
maps\mp\_utility::setobjectivehinttext( "axis", &"OBJECTIVES_CONF_HINT" );
initspawns();
level.dogtags = [];
var_2[0] = level.gametype;
maps\mp\gametypes\_gameobjects::main( var_2 );
}
initspawns()
{
level.spawnmins = ( 0, 0, 0 );
level.spawnmaxs = ( 0, 0, 0 );
maps\mp\gametypes\_spawnlogic::addstartspawnpoints( "mp_tdm_spawn_allies_start" );
maps\mp\gametypes\_spawnlogic::addstartspawnpoints( "mp_tdm_spawn_axis_start" );
maps\mp\gametypes\_spawnlogic::addspawnpoints( "allies", "mp_tdm_spawn" );
maps\mp\gametypes\_spawnlogic::addspawnpoints( "axis", "mp_tdm_spawn" );
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter( level.spawnmins, level.spawnmaxs );
setmapcenter( level.mapcenter );
}
getspawnpoint()
{
var_0 = self.pers["team"];
if ( game["switchedsides"] )
var_0 = maps\mp\_utility::getotherteam( var_0 );
if ( maps\mp\gametypes\_spawnlogic::shoulduseteamstartspawn() )
{
var_1 = maps\mp\gametypes\_spawnlogic::getspawnpointarray( "mp_tdm_spawn_" + var_0 + "_start" );
var_2 = maps\mp\gametypes\_spawnlogic::getspawnpoint_startspawn( var_1 );
}
else
{
var_1 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints( var_0 );
var_2 = maps\mp\gametypes\_spawnscoring::getspawnpoint_nearteam( var_1 );
}
return var_2;
}
onnormaldeath( var_0, var_1, var_2 )
{
level thread spawndogtags( var_0, var_1 );
if ( game["state"] == "postgame" && game["teamScores"][var_1.team] > game["teamScores"][level.otherteam[var_1.team]] )
var_1.finalkill = 1;
}
spawndogtags( var_0, var_1 )
{
if ( var_0 maps\mp\killstreaks\_killstreaks::isusinghelisniper() )
return;
var_2 = var_0.pers["team"];
if ( isdefined( level.dogtags[var_0.guid] ) )
{
playfx( level.conf_fx["vanish"], level.dogtags[var_0.guid].curorigin );
level.dogtags[var_0.guid] notify( "reset" );
}
else
{
var_3[0] = spawn( "script_model", ( 0, 0, 0 ) );
var_3[0] setmodel( "prop_dogtags_foe_iw6" );
var_3[1] = spawn( "script_model", ( 0, 0, 0 ) );
var_3[1] setmodel( "prop_dogtags_friend_iw6" );
var_4 = spawn( "trigger_radius", ( 0, 0, 0 ), 0, 32, 32 );
level.dogtags[var_0.guid] = maps\mp\gametypes\_gameobjects::createuseobject( "any", var_4, var_3, ( 0, 0, 16 ) );
maps\mp\_utility::_objective_delete( level.dogtags[var_0.guid].teamobjids["allies"] );
maps\mp\_utility::_objective_delete( level.dogtags[var_0.guid].teamobjids["axis"] );
maps\mp\gametypes\_objpoints::deleteobjpoint( level.dogtags[var_0.guid].objpoints["allies"] );
maps\mp\gametypes\_objpoints::deleteobjpoint( level.dogtags[var_0.guid].objpoints["axis"] );
level.dogtags[var_0.guid] maps\mp\gametypes\_gameobjects::setusetime( 0 );
level.dogtags[var_0.guid].onuse = ::onuse;
level.dogtags[var_0.guid].victim = var_0;
level.dogtags[var_0.guid].victimteam = var_2;
level.dogtags[var_0.guid].objid = maps\mp\gametypes\_gameobjects::getnextobjid();
objective_add( level.dogtags[var_0.guid].objid, "invisible", ( 0, 0, 0 ) );
objective_icon( level.dogtags[var_0.guid].objid, "waypoint_dogtags" );
level thread clearonvictimdisconnect( var_0 );
var_0 thread tagteamupdater( level.dogtags[var_0.guid] );
}
var_5 = var_0.origin + ( 0, 0, 14 );
level.dogtags[var_0.guid].curorigin = var_5;
level.dogtags[var_0.guid].trigger.origin = var_5;
level.dogtags[var_0.guid].visuals[0].origin = var_5;
level.dogtags[var_0.guid].visuals[1].origin = var_5;
level.dogtags[var_0.guid] maps\mp\gametypes\_gameobjects::initializetagpathvariables();
level.dogtags[var_0.guid] maps\mp\gametypes\_gameobjects::allowuse( "any" );
level.dogtags[var_0.guid].visuals[0] thread showtoteam( level.dogtags[var_0.guid], maps\mp\_utility::getotherteam( var_2 ) );
level.dogtags[var_0.guid].visuals[1] thread showtoteam( level.dogtags[var_0.guid], var_2 );
level.dogtags[var_0.guid].attacker = var_1;
if ( isplayer( var_1 ) )
{
objective_position( level.dogtags[var_0.guid].objid, var_5 );
objective_state( level.dogtags[var_0.guid].objid, "active" );
objective_player( level.dogtags[var_0.guid].objid, var_1 getentitynumber() );
}
playsoundatpos( var_5, "mp_killconfirm_tags_drop" );
level notify( "new_tag_spawned", level.dogtags[var_0.guid] );
level.dogtags[var_0.guid].visuals[0] scriptmodelplayanim( "mp_dogtag_spin" );
level.dogtags[var_0.guid].visuals[1] scriptmodelplayanim( "mp_dogtag_spin" );
}
showtoteam( var_0, var_1 )
{
var_0 endon( "death" );
var_0 endon( "reset" );
self hide();
foreach ( var_3 in level.players )
{
if ( var_3.team == var_1 )
self showtoplayer( var_3 );
if ( var_3.team == "spectator" && var_1 == "allies" )
self showtoplayer( var_3 );
}
for (;;)
{
level waittill( "joined_team" );
self hide();
foreach ( var_3 in level.players )
{
if ( var_3.team == var_1 )
self showtoplayer( var_3 );
if ( var_3.team == "spectator" && var_1 == "allies" )
self showtoplayer( var_3 );
if ( var_0.victimteam == var_3.team && var_3 == var_0.attacker )
objective_state( var_0.objid, "invisible" );
}
}
}
onuse( var_0 )
{
if ( isdefined( var_0.owner ) )
var_0 = var_0.owner;
var_0 maps\mp\_events::giveobjectivepointstreaks();
var_1 = var_0.pers["team"];
if ( var_1 == self.victimteam )
{
self.trigger playsound( "mp_killconfirm_tags_deny" );
var_0 maps\mp\_utility::incplayerstat( "killsdenied", 1 );
var_0 maps\mp\_utility::incpersstat( "denied", 1 );
var_0 maps\mp\gametypes\_persistence::statsetchild( "round", "denied", var_0.pers["denied"] );
if ( isplayer( var_0 ) )
var_0 maps\mp\_utility::setextrascore0( var_0.pers["confirmed"] + var_0.pers["denied"] );
if ( self.victim == var_0 )
var_2 = "tags_retrieved";
else
var_2 = "kill_denied";
if ( isdefined( self.attacker ) )
self.attacker thread maps\mp\gametypes\_rank::xpeventpopup( "kill_denied" );
var_0 thread onpickup( var_2 );
var_0 maps\mp\gametypes\_missions::processchallenge( "ch_denier" );
}
else
{
self.trigger playsound( "mp_killconfirm_tags_pickup" );
var_2 = "kill_confirmed";
var_0 maps\mp\_utility::incplayerstat( "killsconfirmed", 1 );
var_0 maps\mp\_utility::incpersstat( "confirmed", 1 );
var_0 maps\mp\gametypes\_persistence::statsetchild( "round", "confirmed", var_0.pers["confirmed"] );
if ( self.attacker != var_0 )
self.attacker thread onpickup( var_2 );
var_0 onpickup( var_2 );
if ( isplayer( var_0 ) )
{
var_0 maps\mp\_utility::leaderdialogonplayer( "kill_confirmed" );
var_0 maps\mp\_utility::setextrascore0( var_0.pers["confirmed"] + var_0.pers["denied"] );
}
var_0 maps\mp\gametypes\_missions::processchallenge( "ch_collector" );
var_0 maps\mp\gametypes\_gamescore::giveteamscoreforobjective( var_1, 1 );
}
resettags();
}
onpickup( var_0 )
{
level endon( "game_ended" );
self endon( "disconnect" );
while ( !isdefined( self.pers ) )
wait 0.05;
thread maps\mp\gametypes\_rank::xpeventpopup( var_0 );
maps\mp\gametypes\_gamescore::giveplayerscore( var_0, self, undefined, 1 );
thread maps\mp\gametypes\_rank::giverankxp( var_0 );
}
resettags()
{
self.attacker = undefined;
self notify( "reset" );
self.visuals[0] hide();
self.visuals[1] hide();
self.curorigin = ( 0, 0, 1000 );
self.trigger.origin = ( 0, 0, 1000 );
self.visuals[0].origin = ( 0, 0, 1000 );
self.visuals[1].origin = ( 0, 0, 1000 );
maps\mp\gametypes\_gameobjects::allowuse( "none" );
objective_state( self.objid, "invisible" );
}
tagteamupdater( var_0 )
{
level endon( "game_ended" );
self endon( "disconnect" );
for (;;)
{
self waittill( "joined_team" );
var_0.victimteam = self.pers["team"];
var_0 resettags();
}
}
clearonvictimdisconnect( var_0 )
{
level endon( "game_ended" );
var_1 = var_0.guid;
var_0 waittill( "disconnect" );
if ( isdefined( level.dogtags[var_1] ) )
{
level.dogtags[var_1] maps\mp\gametypes\_gameobjects::allowuse( "none" );
if ( isdefined( level.dogtags[var_1].attacker ) )
level.dogtags[var_1].attacker thread maps\mp\gametypes\_rank::xpeventpopup( "kill_denied" );
playfx( level.conf_fx["vanish"], level.dogtags[var_1].curorigin );
level.dogtags[var_1] notify( "reset" );
wait 0.05;
if ( isdefined( level.dogtags[var_1] ) )
{
objective_delete( level.dogtags[var_1].objid );
level.dogtags[var_1].trigger delete();
for ( var_2 = 0; var_2 < level.dogtags[var_1].visuals.size; var_2++ )
level.dogtags[var_1].visuals[var_2] delete();
level.dogtags[var_1] notify( "deleted" );
level.dogtags[var_1] = undefined;
}
}
}
initgametypeawards()
{
}

View File

@ -0,0 +1,443 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
if ( getdvar( "mapname" ) == "mp_background" )
return;
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::setupcallbacks();
maps\mp\gametypes\_globallogic::setupcallbacks();
if ( isusingmatchrulesdata() )
{
level.initializematchrules = ::initializematchrules;
[[ level.initializematchrules ]]();
level thread maps\mp\_utility::reinitializematchrulesonmigration();
}
else
{
maps\mp\_utility::registerroundswitchdvar( level.gametype, 0, 0, 9 );
maps\mp\_utility::registertimelimitdvar( level.gametype, 10 );
maps\mp\_utility::registerscorelimitdvar( level.gametype, 100 );
maps\mp\_utility::registerroundlimitdvar( level.gametype, 1 );
maps\mp\_utility::registerwinlimitdvar( level.gametype, 1 );
maps\mp\_utility::registernumlivesdvar( level.gametype, 0 );
maps\mp\_utility::registerhalftimedvar( level.gametype, 0 );
level.matchrules_damagemultiplier = 0;
level.matchrules_vampirism = 0;
}
level.teambased = getdvarint( "scr_cranked_teambased", 1 ) == 1;
level.onstartgametype = ::onstartgametype;
level.getspawnpoint = ::getspawnpoint;
level.onnormaldeath = ::onnormaldeath;
level.onsuicidedeath = ::onsuicidedeath;
level.onteamchangedeath = ::onteamchangedeath;
if ( !level.teambased )
{
level.onplayerscore = ::onplayerscore;
setdvar( "scr_cranked_scorelimit", getdvarint( "scr_cranked_scorelimit_ffa", 60 ) );
setteammode( "ffa" );
}
if ( level.matchrules_damagemultiplier || level.matchrules_vampirism )
level.modifyplayerdamage = maps\mp\gametypes\_damage::gamemodemodifyplayerdamage;
game["dialog"]["gametype"] = "cranked";
if ( getdvarint( "g_hardcore" ) )
game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"];
else if ( getdvarint( "camera_thirdPerson" ) )
game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"];
else if ( getdvarint( "scr_diehard" ) )
game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"];
else if ( getdvarint( "scr_" + level.gametype + "_promode" ) )
game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro";
game["dialog"]["offense_obj"] = "crnk_hint";
game["dialog"]["begin_cranked"] = "crnk_cranked";
game["dialog"]["five_seconds_left"] = "crnk_det";
game["strings"]["overtime_hint"] = &"MP_FIRST_BLOOD";
level thread onplayerconnect();
}
onplayerconnect()
{
for (;;)
{
level waittill( "connected", var_0 );
var_0 thread onplayerspawned();
}
}
onplayerspawned()
{
self endon( "disconnect" );
for (;;)
self waittill( "spawned_player" );
}
initializematchrules()
{
maps\mp\_utility::setcommonrulesfrommatchrulesdata();
setdynamicdvar( "scr_cranked_roundswitch", 0 );
maps\mp\_utility::registerroundswitchdvar( "cranked", 0, 0, 9 );
setdynamicdvar( "scr_cranked_roundlimit", 1 );
maps\mp\_utility::registerroundlimitdvar( "cranked", 1 );
setdynamicdvar( "scr_cranked_winlimit", 1 );
maps\mp\_utility::registerwinlimitdvar( "cranked", 1 );
setdynamicdvar( "scr_cranked_halftime", 0 );
maps\mp\_utility::registerhalftimedvar( "cranked", 0 );
setdynamicdvar( "scr_cranked_promode", 0 );
}
onstartgametype()
{
setclientnamemode( "auto_change" );
if ( !isdefined( game["switchedsides"] ) )
game["switchedsides"] = 0;
if ( game["switchedsides"] )
{
var_0 = game["attackers"];
var_1 = game["defenders"];
game["attackers"] = var_1;
game["defenders"] = var_0;
}
var_2 = &"OBJECTIVES_WAR";
var_3 = &"OBJECTIVES_WAR_SCORE";
var_4 = &"OBJECTIVES_WAR_HINT";
if ( !level.teambased )
{
var_2 = &"OBJECTIVES_DM";
var_3 = &"OBJECTIVES_DM_SCORE";
var_4 = &"OBJECTIVES_DM_HINT";
}
maps\mp\_utility::setobjectivetext( "allies", var_2 );
maps\mp\_utility::setobjectivetext( "axis", var_2 );
if ( level.splitscreen )
{
maps\mp\_utility::setobjectivescoretext( "allies", var_2 );
maps\mp\_utility::setobjectivescoretext( "axis", var_2 );
}
else
{
maps\mp\_utility::setobjectivescoretext( "allies", var_3 );
maps\mp\_utility::setobjectivescoretext( "axis", var_3 );
}
maps\mp\_utility::setobjectivehinttext( "allies", var_4 );
maps\mp\_utility::setobjectivehinttext( "axis", var_4 );
initspawns();
cranked();
var_5[0] = level.gametype;
maps\mp\gametypes\_gameobjects::main( var_5 );
}
initspawns()
{
level.spawnmins = ( 0, 0, 0 );
level.spawnmaxs = ( 0, 0, 0 );
if ( level.teambased )
{
maps\mp\gametypes\_spawnlogic::addstartspawnpoints( "mp_tdm_spawn_allies_start" );
maps\mp\gametypes\_spawnlogic::addstartspawnpoints( "mp_tdm_spawn_axis_start" );
maps\mp\gametypes\_spawnlogic::addspawnpoints( "allies", "mp_tdm_spawn" );
maps\mp\gametypes\_spawnlogic::addspawnpoints( "axis", "mp_tdm_spawn" );
}
else
{
maps\mp\gametypes\_spawnlogic::addspawnpoints( "allies", "mp_dm_spawn" );
maps\mp\gametypes\_spawnlogic::addspawnpoints( "axis", "mp_dm_spawn" );
}
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter( level.spawnmins, level.spawnmaxs );
setmapcenter( level.mapcenter );
}
getspawnpoint()
{
if ( level.teambased )
{
var_0 = self.pers["team"];
if ( game["switchedsides"] )
var_0 = maps\mp\_utility::getotherteam( var_0 );
if ( maps\mp\gametypes\_spawnlogic::shoulduseteamstartspawn() )
{
var_1 = maps\mp\gametypes\_spawnlogic::getspawnpointarray( "mp_tdm_spawn_" + var_0 + "_start" );
var_2 = maps\mp\gametypes\_spawnlogic::getspawnpoint_startspawn( var_1 );
}
else
{
var_1 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints( var_0 );
var_2 = maps\mp\gametypes\_spawnscoring::getspawnpoint_nearteam( var_1 );
}
}
else
{
var_1 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints( self.team );
if ( level.ingraceperiod )
var_2 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random( var_1 );
else
var_2 = maps\mp\gametypes\_spawnscoring::getspawnpoint_freeforall( var_1 );
}
return var_2;
}
onnormaldeath( var_0, var_1, var_2 )
{
if ( isdefined( var_0.cranked ) && var_1 maps\mp\_utility::isenemy( var_0 ) )
var_1 maps\mp\gametypes\_missions::processchallenge( "ch_cranky" );
var_0 cleanupcrankedtimer();
var_3 = maps\mp\gametypes\_rank::getscoreinfovalue( "score_increment" );
if ( isdefined( var_1.cranked ) )
{
if ( var_1.cranked_end_time - gettime() <= 1000 )
var_1 maps\mp\gametypes\_missions::processchallenge( "ch_cranked_reset" );
var_3 = var_3 * 2;
var_4 = "kill_cranked";
var_1 thread onkill( var_4 );
var_1.pers["killChains"]++;
var_1 maps\mp\gametypes\_persistence::statsetchild( "round", "killChains", var_1.pers["killChains"] );
}
else if ( maps\mp\_utility::isreallyalive( var_1 ) )
var_1 makecranked( "begin_cranked" );
if ( isdefined( var_0.attackers ) && !isdefined( level.assists_disabled ) )
{
foreach ( var_6 in var_0.attackers )
{
if ( !isdefined( maps\mp\_utility::_validateattacker( var_6 ) ) )
continue;
if ( var_6 == var_1 )
continue;
if ( var_0 == var_6 )
continue;
if ( !isdefined( var_6.cranked ) )
continue;
var_6 thread onassist( "assist_cranked" );
}
}
if ( level.teambased )
{
level maps\mp\gametypes\_gamescore::giveteamscoreforobjective( var_1.pers["team"], var_3 );
if ( game["state"] == "postgame" && game["teamScores"][var_1.team] > game["teamScores"][level.otherteam[var_1.team]] )
var_1.finalkill = 1;
}
else
{
var_8 = 0;
foreach ( var_6 in level.players )
{
if ( isdefined( var_6.score ) && var_6.score > var_8 )
var_8 = var_6.score;
}
if ( game["state"] == "postgame" && var_1.score >= var_8 )
var_1.finalkill = 1;
}
}
onsuicidedeath( var_0 )
{
var_0 cleanupcrankedtimer();
}
onteamchangedeath( var_0 )
{
var_0 cleanupcrankedtimer();
}
cleanupcrankedtimer()
{
self setclientomnvar( "ui_cranked_bomb_timer_end_milliseconds", 0 );
self.cranked = undefined;
self.cranked_end_time = undefined;
}
ontimelimit()
{
level.finalkillcam_winner = "none";
if ( game["status"] == "overtime" )
var_0 = "forfeit";
else if ( game["teamScores"]["allies"] == game["teamScores"]["axis"] )
var_0 = "overtime";
else if ( game["teamScores"]["axis"] > game["teamScores"]["allies"] )
{
level.finalkillcam_winner = "axis";
var_0 = "axis";
}
else
{
level.finalkillcam_winner = "allies";
var_0 = "allies";
}
thread maps\mp\gametypes\_gamelogic::endgame( var_0, game["end_reason"]["time_limit_reached"] );
}
onplayerscore( var_0, var_1, var_2 )
{
if ( var_0 == "kill" )
{
var_3 = maps\mp\gametypes\_rank::getscoreinfovalue( "score_increment" );
if ( isdefined( var_1.cranked ) )
var_3 = var_3 * 2;
return var_3;
}
return 0;
}
cranked()
{
level.crankedbombtimer = 30;
}
makecranked( var_0 )
{
maps\mp\_utility::leaderdialogonplayer( var_0 );
thread maps\mp\gametypes\_rank::xpeventpopup( var_0 );
setcrankedbombtimer( "kill" );
self.cranked = 1;
maps\mp\_utility::giveperk( "specialty_fastreload", 0 );
maps\mp\_utility::giveperk( "specialty_quickdraw", 0 );
maps\mp\_utility::giveperk( "specialty_fastoffhand", 0 );
maps\mp\_utility::giveperk( "specialty_fastsprintrecovery", 0 );
maps\mp\_utility::giveperk( "specialty_marathon", 0 );
maps\mp\_utility::giveperk( "specialty_quickswap", 0 );
maps\mp\_utility::giveperk( "specialty_stalker", 0 );
self.movespeedscaler = 1.2;
maps\mp\gametypes\_weapons::updatemovespeedscale();
}
onkill( var_0 )
{
level endon( "game_ended" );
self endon( "disconnect" );
while ( !isdefined( self.pers ) )
wait 0.05;
thread maps\mp\gametypes\_rank::xpeventpopup( var_0 );
maps\mp\gametypes\_gamescore::giveplayerscore( var_0, self, undefined, 1 );
thread maps\mp\gametypes\_rank::giverankxp( var_0 );
setcrankedbombtimer( "kill" );
}
onassist( var_0 )
{
level endon( "game_ended" );
self endon( "disconnect" );
thread maps\mp\gametypes\_rank::xpeventpopup( var_0 );
setcrankedbombtimer( "assist" );
}
watchbombtimer( var_0 )
{
self notify( "watchBombTimer" );
self endon( "watchBombTimer" );
self endon( "death" );
self endon( "disconnect" );
level endon( "game_ended" );
var_1 = 5;
maps\mp\gametypes\_hostmigration::waitlongdurationwithgameendtimeupdate( var_0 - var_1 - 1 );
maps\mp\_utility::leaderdialogonplayer( "five_seconds_left" );
maps\mp\gametypes\_hostmigration::waitlongdurationwithgameendtimeupdate( 1.0 );
self setclientomnvar( "ui_cranked_bomb_timer_final_seconds", 1 );
while ( var_1 > 0 )
{
self playsoundtoplayer( "mp_cranked_countdown", self );
maps\mp\gametypes\_hostmigration::waitlongdurationwithgameendtimeupdate( 1.0 );
var_1--;
}
if ( isdefined( self ) && maps\mp\_utility::isreallyalive( self ) )
{
self playsound( "grenade_explode_metal" );
playfx( level.mine_explode, self.origin + ( 0, 0, 32 ) );
maps\mp\_utility::_suicide();
self setclientomnvar( "ui_cranked_bomb_timer_end_milliseconds", 0 );
}
}
setcrankedbombtimer( var_0 )
{
var_1 = level.crankedbombtimer;
if ( var_0 == "assist" )
var_1 = int( min( ( self.cranked_end_time - gettime() ) / 1000 + level.crankedbombtimer * 0.5, level.crankedbombtimer ) );
var_2 = var_1 * 1000 + gettime();
self setclientomnvar( "ui_cranked_bomb_timer_end_milliseconds", var_2 );
self.cranked_end_time = var_2;
thread watchcrankedhostmigration();
thread watchbombtimer( var_1 );
thread watchendgame();
}
watchcrankedhostmigration()
{
self notify( "watchCrankedHostMigration" );
self endon( "watchCrankedHostMigration" );
level endon( "game_ended" );
self endon( "death" );
self endon( "disconnect" );
level waittill( "host_migration_begin" );
var_0 = maps\mp\gametypes\_hostmigration::waittillhostmigrationdone();
if ( self.cranked_end_time + var_0 < 5 )
self setclientomnvar( "ui_cranked_bomb_timer_final_seconds", 1 );
if ( var_0 > 0 )
self setclientomnvar( "ui_cranked_bomb_timer_end_milliseconds", self.cranked_end_time + var_0 );
else
self setclientomnvar( "ui_cranked_bomb_timer_end_milliseconds", self.cranked_end_time );
}
watchendgame()
{
self notify( "watchEndGame" );
self endon( "watchEndGame" );
self endon( "death" );
self endon( "disconnect" );
for (;;)
{
if ( game["state"] == "postgame" || level.gameended )
{
self setclientomnvar( "ui_cranked_bomb_timer_end_milliseconds", 0 );
break;
}
wait 0.1;
}
}

140
maps/mp/gametypes/dm.gsc Normal file
View File

@ -0,0 +1,140 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::setupcallbacks();
maps\mp\gametypes\_globallogic::setupcallbacks();
if ( isusingmatchrulesdata() )
{
level.initializematchrules = ::initializematchrules;
[[ level.initializematchrules ]]();
level thread maps\mp\_utility::reinitializematchrulesonmigration();
}
else
{
maps\mp\_utility::registertimelimitdvar( level.gametype, 10 );
maps\mp\_utility::registerscorelimitdvar( level.gametype, 30 );
maps\mp\_utility::registerwinlimitdvar( level.gametype, 1 );
maps\mp\_utility::registerroundlimitdvar( level.gametype, 1 );
maps\mp\_utility::registernumlivesdvar( level.gametype, 0 );
maps\mp\_utility::registerhalftimedvar( level.gametype, 0 );
level.matchrules_damagemultiplier = 0;
level.matchrules_vampirism = 0;
}
level.onstartgametype = ::onstartgametype;
level.getspawnpoint = ::getspawnpoint;
level.onspawnplayer = ::onspawnplayer;
level.onnormaldeath = ::onnormaldeath;
level.onplayerscore = ::onplayerscore;
level.assists_disabled = 1;
if ( level.matchrules_damagemultiplier || level.matchrules_vampirism )
level.modifyplayerdamage = maps\mp\gametypes\_damage::gamemodemodifyplayerdamage;
setteammode( "ffa" );
game["dialog"]["gametype"] = "freeforall";
if ( getdvarint( "g_hardcore" ) )
game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"];
else if ( getdvarint( "camera_thirdPerson" ) )
game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"];
else if ( getdvarint( "scr_diehard" ) )
game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"];
else if ( getdvarint( "scr_" + level.gametype + "_promode" ) )
game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro";
}
initializematchrules()
{
maps\mp\_utility::setcommonrulesfrommatchrulesdata( 1 );
setdynamicdvar( "scr_dm_winlimit", 1 );
maps\mp\_utility::registerwinlimitdvar( "dm", 1 );
setdynamicdvar( "scr_dm_roundlimit", 1 );
maps\mp\_utility::registerroundlimitdvar( "dm", 1 );
setdynamicdvar( "scr_dm_halftime", 0 );
maps\mp\_utility::registerhalftimedvar( "dm", 0 );
}
onstartgametype()
{
setclientnamemode( "auto_change" );
maps\mp\_utility::setobjectivetext( "allies", &"OBJECTIVES_DM" );
maps\mp\_utility::setobjectivetext( "axis", &"OBJECTIVES_DM" );
if ( level.splitscreen )
{
maps\mp\_utility::setobjectivescoretext( "allies", &"OBJECTIVES_DM" );
maps\mp\_utility::setobjectivescoretext( "axis", &"OBJECTIVES_DM" );
}
else
{
maps\mp\_utility::setobjectivescoretext( "allies", &"OBJECTIVES_DM_SCORE" );
maps\mp\_utility::setobjectivescoretext( "axis", &"OBJECTIVES_DM_SCORE" );
}
maps\mp\_utility::setobjectivehinttext( "allies", &"OBJECTIVES_DM_HINT" );
maps\mp\_utility::setobjectivehinttext( "axis", &"OBJECTIVES_DM_HINT" );
level.spawnmins = ( 0, 0, 0 );
level.spawnmaxs = ( 0, 0, 0 );
maps\mp\gametypes\_spawnlogic::addspawnpoints( "allies", "mp_dm_spawn" );
maps\mp\gametypes\_spawnlogic::addspawnpoints( "axis", "mp_dm_spawn" );
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter( level.spawnmins, level.spawnmaxs );
setmapcenter( level.mapcenter );
var_0[0] = "dm";
maps\mp\gametypes\_gameobjects::main( var_0 );
level.quickmessagetoall = 1;
}
getspawnpoint()
{
var_0 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints( self.team );
if ( level.ingraceperiod )
var_1 = maps\mp\gametypes\_spawnscoring::getstartspawnpoint_freeforall( var_0 );
else
var_1 = maps\mp\gametypes\_spawnscoring::getspawnpoint_freeforall( var_0 );
return var_1;
}
onspawnplayer()
{
level notify( "spawned_player" );
if ( !isdefined( self.eventvalue ) )
{
self.eventvalue = maps\mp\gametypes\_rank::getscoreinfovalue( "kill" );
maps\mp\_utility::setextrascore0( self.eventvalue );
}
}
onnormaldeath( var_0, var_1, var_2 )
{
var_3 = 0;
foreach ( var_5 in level.players )
{
if ( isdefined( var_5.score ) && var_5.score > var_3 )
var_3 = var_5.score;
}
if ( game["state"] == "postgame" && var_1.score >= var_3 )
var_1.finalkill = 1;
}
onplayerscore( var_0, var_1, var_2 )
{
var_1.assists = var_1 maps\mp\_utility::getpersstat( "longestStreak" );
if ( var_0 == "kill" )
{
var_3 = maps\mp\gametypes\_rank::getscoreinfovalue( "score_increment" );
return var_3;
}
return 0;
}

956
maps/mp/gametypes/dom.gsc Normal file
View File

@ -0,0 +1,956 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
if ( getdvar( "mapname" ) == "mp_background" )
return;
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::setupcallbacks();
maps\mp\gametypes\_globallogic::setupcallbacks();
if ( isusingmatchrulesdata() )
{
level.initializematchrules = ::initializematchrules;
[[ level.initializematchrules ]]();
level thread maps\mp\_utility::reinitializematchrulesonmigration();
}
else
{
maps\mp\_utility::registertimelimitdvar( level.gametype, 30 );
maps\mp\_utility::registerscorelimitdvar( level.gametype, 300 );
maps\mp\_utility::registerroundlimitdvar( level.gametype, 1 );
maps\mp\_utility::registerwinlimitdvar( level.gametype, 1 );
maps\mp\_utility::registernumlivesdvar( level.gametype, 0 );
maps\mp\_utility::registerhalftimedvar( level.gametype, 0 );
level.matchrules_damagemultiplier = 0;
level.matchrules_vampirism = 0;
}
level.teambased = 1;
level.onstartgametype = ::onstartgametype;
level.getspawnpoint = ::getspawnpoint;
level.onplayerkilled = ::onplayerkilled;
level.initgametypeawards = ::initgametypeawards;
level.onspawnplayer = ::onspawnplayer;
level.lastcaptime = gettime();
level.alliescapturing = [];
level.axiscapturing = [];
if ( level.matchrules_damagemultiplier || level.matchrules_vampirism )
level.modifyplayerdamage = maps\mp\gametypes\_damage::gamemodemodifyplayerdamage;
game["dialog"]["gametype"] = "domination";
if ( getdvarint( "g_hardcore" ) )
game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"];
else if ( getdvarint( "camera_thirdPerson" ) )
game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"];
else if ( getdvarint( "scr_diehard" ) )
game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"];
else if ( getdvarint( "scr_" + level.gametype + "_promode" ) )
game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro";
game["dialog"]["offense_obj"] = "capture_objs";
game["dialog"]["defense_obj"] = "capture_objs";
thread onplayerconnect();
}
initializematchrules()
{
maps\mp\_utility::setcommonrulesfrommatchrulesdata();
if ( getdvarint( "scr_playlist_type", 0 ) == 1 || maps\mp\_utility::ismlgmatch() )
{
setdynamicdvar( "scr_dom_roundswitch", 1 );
maps\mp\_utility::registerroundswitchdvar( "dom", 1, 0, 1 );
setdynamicdvar( "scr_dom_roundlimit", 2 );
maps\mp\_utility::registerroundlimitdvar( "dom", 2 );
setdynamicdvar( "scr_dom_winlimit", 0 );
maps\mp\_utility::registerwinlimitdvar( "dom", 0 );
}
else
{
setdynamicdvar( "scr_dom_roundlimit", 1 );
maps\mp\_utility::registerroundlimitdvar( "dom", 1 );
setdynamicdvar( "scr_dom_winlimit", 1 );
maps\mp\_utility::registerwinlimitdvar( "dom", 1 );
}
setdynamicdvar( "scr_dom_halftime", 0 );
maps\mp\_utility::registerhalftimedvar( "dom", 0 );
setdynamicdvar( "scr_dom_promode", 0 );
}
onstartgametype()
{
maps\mp\_utility::setobjectivetext( "allies", &"OBJECTIVES_DOM" );
maps\mp\_utility::setobjectivetext( "axis", &"OBJECTIVES_DOM" );
if ( level.splitscreen )
{
maps\mp\_utility::setobjectivescoretext( "allies", &"OBJECTIVES_DOM" );
maps\mp\_utility::setobjectivescoretext( "axis", &"OBJECTIVES_DOM" );
}
else
{
maps\mp\_utility::setobjectivescoretext( "allies", &"OBJECTIVES_DOM_SCORE" );
maps\mp\_utility::setobjectivescoretext( "axis", &"OBJECTIVES_DOM_SCORE" );
}
maps\mp\_utility::setobjectivehinttext( "allies", &"OBJECTIVES_DOM_HINT" );
maps\mp\_utility::setobjectivehinttext( "axis", &"OBJECTIVES_DOM_HINT" );
setclientnamemode( "auto_change" );
if ( !isdefined( game["switchedsides"] ) )
game["switchedsides"] = 0;
level.flagbasefxid["neutral"] = loadfx( "vfx/gameplay/mp/core/vfx_marker_base_grey" );
level.flagbasefxid["friendly"] = loadfx( "vfx/gameplay/mp/core/vfx_marker_base_cyan" );
level.flagbasefxid["enemy"] = loadfx( "vfx/gameplay/mp/core/vfx_marker_base_orange" );
initspawns();
var_0[0] = "dom";
maps\mp\gametypes\_gameobjects::main( var_0 );
thread domflags();
thread updatedomscores();
}
initspawns()
{
level.spawnmins = ( 0, 0, 0 );
level.spawnmaxs = ( 0, 0, 0 );
maps\mp\gametypes\_spawnlogic::addstartspawnpoints( "mp_dom_spawn_allies_start" );
maps\mp\gametypes\_spawnlogic::addstartspawnpoints( "mp_dom_spawn_axis_start" );
maps\mp\gametypes\_spawnlogic::addspawnpoints( "allies", "mp_dom_spawn" );
maps\mp\gametypes\_spawnlogic::addspawnpoints( "axis", "mp_dom_spawn" );
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter( level.spawnmins, level.spawnmaxs );
setmapcenter( level.mapcenter );
}
getspawnpoint()
{
var_0 = self.pers["team"];
var_1 = maps\mp\_utility::getotherteam( var_0 );
if ( level.usestartspawns )
{
if ( game["switchedsides"] )
{
var_2 = maps\mp\gametypes\_spawnlogic::getspawnpointarray( "mp_dom_spawn_" + var_1 + "_start" );
var_3 = maps\mp\gametypes\_spawnlogic::getspawnpoint_startspawn( var_2 );
}
else
{
var_2 = maps\mp\gametypes\_spawnlogic::getspawnpointarray( "mp_dom_spawn_" + var_0 + "_start" );
var_3 = maps\mp\gametypes\_spawnlogic::getspawnpoint_startspawn( var_2 );
}
}
else
{
var_4 = getteamdompoints( var_0 );
var_5 = maps\mp\_utility::getotherteam( var_0 );
var_6 = getteamdompoints( var_5 );
var_7 = getperfereddompoints( var_4, var_6 );
var_2 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints( var_0 );
var_3 = maps\mp\gametypes\_spawnscoring::getspawnpoint_domination( var_2, var_7 );
}
return var_3;
}
getteamdompoints( var_0 )
{
var_1 = [];
foreach ( var_3 in level.domflags )
{
if ( var_3.ownerteam == var_0 )
var_1[var_1.size] = var_3;
}
return var_1;
}
getperfereddompoints( var_0, var_1 )
{
var_2 = [];
var_2[0] = 0;
var_2[1] = 0;
var_2[2] = 0;
var_3 = self.pers["team"];
if ( var_0.size == level.domflags.size )
{
var_4 = var_3;
var_5 = level.bestspawnflag[var_3];
var_2[var_5.useobj.dompointnumber] = 1;
return var_2;
}
if ( var_0.size == 1 && var_1.size == 2 && !maps\mp\_utility::isanymlgmatch() )
{
var_6 = maps\mp\_utility::getotherteam( self.team );
var_7 = maps\mp\gametypes\_gamescore::_getteamscore( var_6 ) - maps\mp\gametypes\_gamescore::_getteamscore( self.team );
if ( var_7 > 15 )
{
var_8 = gettimesincedompointcapture( var_0[0] );
var_9 = gettimesincedompointcapture( var_1[0] );
var_10 = gettimesincedompointcapture( var_1[1] );
if ( var_8 > 40000 && var_9 > 40000 && var_10 > 40000 )
return var_2;
}
}
if ( var_0.size > 0 )
{
foreach ( var_12 in var_0 )
var_2[var_12.dompointnumber] = 1;
return var_2;
}
if ( var_0.size == 0 )
{
var_4 = var_3;
var_5 = level.bestspawnflag[var_4];
if ( var_1.size > 0 && var_1.size < level.domflags.size )
{
var_5 = getunownedflagneareststart( var_4 );
level.bestspawnflag[var_4] = var_5;
}
var_2[var_5.useobj.dompointnumber] = 1;
return var_2;
}
return var_2;
}
gettimesincedompointcapture( var_0 )
{
return gettime() - var_0.capturetime;
}
domflags()
{
level.laststatus["allies"] = 0;
level.laststatus["axis"] = 0;
game["flagmodels"] = [];
game["flagmodels"]["neutral"] = "prop_flag_neutral";
game["flagmodels"]["allies"] = maps\mp\gametypes\_teams::getteamflagmodel( "allies" );
game["flagmodels"]["axis"] = maps\mp\gametypes\_teams::getteamflagmodel( "axis" );
var_0 = getentarray( "flag_primary", "targetname" );
var_1 = getentarray( "flag_secondary", "targetname" );
if ( var_0.size + var_1.size < 2 )
return;
level.flags = [];
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
level.flags[level.flags.size] = var_0[var_2];
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
level.flags[level.flags.size] = var_1[var_2];
level.domflags = [];
for ( var_2 = 0; var_2 < level.flags.size; var_2++ )
{
var_3 = level.flags[var_2];
if ( isdefined( var_3.target ) )
var_4[0] = getent( var_3.target, "targetname" );
else
{
var_4[0] = spawn( "script_model", var_3.origin );
var_4[0].angles = var_3.angles;
}
var_5 = maps\mp\gametypes\_gameobjects::createuseobject( "neutral", var_3, var_4, ( 0, 0, 100 ) );
var_5 maps\mp\gametypes\_gameobjects::allowuse( "enemy" );
var_5 maps\mp\gametypes\_gameobjects::setusetime( 10 );
var_5 maps\mp\gametypes\_gameobjects::setusetext( &"MP_SECURING_POSITION" );
var_6 = var_5 maps\mp\gametypes\_gameobjects::getlabel();
var_5.label = var_6;
var_5 maps\mp\gametypes\_gameobjects::set2dicon( "friendly", "waypoint_defend" + var_6 );
var_5 maps\mp\gametypes\_gameobjects::set3dicon( "friendly", "waypoint_defend" + var_6 );
var_5 maps\mp\gametypes\_gameobjects::set2dicon( "enemy", "waypoint_captureneutral" + var_6 );
var_5 maps\mp\gametypes\_gameobjects::set3dicon( "enemy", "waypoint_captureneutral" + var_6 );
var_5 maps\mp\gametypes\_gameobjects::setvisibleteam( "any" );
var_5.onuse = ::onuse;
var_5.onbeginuse = ::onbeginuse;
var_5.onuseupdate = ::onuseupdate;
var_5.onenduse = ::onenduse;
var_5.nousebar = 1;
var_5.id = "domFlag";
var_5.firstcapture = 1;
var_7 = var_4[0].origin + ( 0, 0, 32 );
var_8 = var_4[0].origin + ( 0, 0, -32 );
var_9 = bullettrace( var_7, var_8, 0, undefined );
var_5.baseeffectpos = var_9["position"];
var_10 = vectortoangles( var_9["normal"] );
var_5.baseeffectforward = anglestoforward( var_10 );
var_5 thread setflagneutral();
level.flags[var_2].useobj = var_5;
var_5.levelflag = level.flags[var_2];
level.domflags[level.domflags.size] = var_5;
}
var_11 = maps\mp\gametypes\_spawnlogic::getspawnpointarray( "mp_dom_spawn_axis_start" );
var_12 = maps\mp\gametypes\_spawnlogic::getspawnpointarray( "mp_dom_spawn_allies_start" );
level.startpos["allies"] = var_12[0].origin;
level.startpos["axis"] = var_11[0].origin;
level.bestspawnflag = [];
level.bestspawnflag["allies"] = getunownedflagneareststart( "allies", undefined );
level.bestspawnflag["axis"] = getunownedflagneareststart( "axis", level.bestspawnflag["allies"] );
flagsetup();
}
getunownedflagneareststart( var_0, var_1 )
{
var_2 = undefined;
var_3 = undefined;
for ( var_4 = 0; var_4 < level.flags.size; var_4++ )
{
var_5 = level.flags[var_4];
if ( var_5 getflagteam() != "neutral" )
continue;
var_6 = distancesquared( var_5.origin, level.startpos[var_0] );
if ( ( !isdefined( var_1 ) || var_5 != var_1 ) && ( !isdefined( var_2 ) || var_6 < var_3 ) )
{
var_3 = var_6;
var_2 = var_5;
}
}
return var_2;
}
onbeginuse( var_0 )
{
var_1 = maps\mp\gametypes\_gameobjects::getownerteam();
self.didstatusnotify = 0;
if ( var_1 == "neutral" )
{
statusdialog( "securing" + self.label, var_0.team );
if ( !self.firstcapture )
{
if ( self.curprogress == 0 )
maps\mp\gametypes\_gameobjects::setusetime( 5.0 );
}
}
else
{
maps\mp\gametypes\_gameobjects::setusetime( 10 );
if ( var_1 == "allies" )
{
level.alliescapturing[level.alliescapturing.size] = self.label;
var_2 = "axis";
return;
}
level.axiscapturing[level.axiscapturing.size] = self.label;
var_2 = "allies";
}
}
onuseupdate( var_0, var_1, var_2 )
{
var_3 = maps\mp\gametypes\_gameobjects::getownerteam();
if ( var_1 > 0.05 && var_2 && !self.didstatusnotify )
{
if ( var_3 == "neutral" )
{
statusdialog( "securing" + self.label, var_0 );
self.prevownerteam = maps\mp\_utility::getotherteam( var_0 );
}
else
{
statusdialog( "losing" + self.label, var_3, 1 );
statusdialog( "securing" + self.label, var_0 );
}
maps\mp\gametypes\_gameobjects::set2dicon( "enemy", "waypoint_taking" + self.label );
maps\mp\gametypes\_gameobjects::set3dicon( "enemy", "waypoint_taking" + self.label );
maps\mp\gametypes\_gameobjects::set2dicon( "friendly", "waypoint_losing" + self.label );
maps\mp\gametypes\_gameobjects::set3dicon( "friendly", "waypoint_losing" + self.label );
self.didstatusnotify = 1;
}
else if ( var_1 > 0.49 && var_2 && self.didstatusnotify && var_3 != "neutral" )
{
thread setflagneutral();
statusdialog( "lost" + self.label, var_3, 1 );
maps\mp\_utility::playsoundonplayers( "mp_dom_flag_lost", var_3 );
level.lastcaptime = gettime();
thread giveflagassistedcapturepoints( self.touchlist[var_0] );
}
}
giveflagassistedcapturepoints( var_0 )
{
level endon( "game_ended" );
var_1 = getarraykeys( var_0 );
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
{
var_3 = var_0[var_1[var_2]].player;
if ( !isdefined( var_3 ) )
continue;
if ( isdefined( var_3.owner ) )
var_3 = var_3.owner;
if ( !isplayer( var_3 ) )
continue;
var_3 maps\mp\_events::giveobjectivepointstreaks();
wait 0.05;
}
}
statusdialog( var_0, var_1, var_2 )
{
var_3 = gettime();
if ( gettime() < level.laststatus[var_1] + 5000 && ( !isdefined( var_2 ) || !var_2 ) )
return;
thread delayedleaderdialog( var_0, var_1 );
level.laststatus[var_1] = gettime();
}
onenduse( var_0, var_1, var_2 )
{
if ( isplayer( var_1 ) )
{
var_1 setclientomnvar( "ui_dom_securing", 0 );
var_1.ui_dom_securing = undefined;
}
var_3 = maps\mp\gametypes\_gameobjects::getownerteam();
if ( var_3 != "neutral" )
{
maps\mp\gametypes\_gameobjects::set2dicon( "enemy", "waypoint_capture" + self.label );
maps\mp\gametypes\_gameobjects::set3dicon( "enemy", "waypoint_capture" + self.label );
maps\mp\gametypes\_gameobjects::set2dicon( "friendly", "waypoint_defend" + self.label );
maps\mp\gametypes\_gameobjects::set3dicon( "friendly", "waypoint_defend" + self.label );
}
else
{
maps\mp\gametypes\_gameobjects::set2dicon( "enemy", "waypoint_captureneutral" + self.label );
maps\mp\gametypes\_gameobjects::set3dicon( "enemy", "waypoint_captureneutral" + self.label );
maps\mp\gametypes\_gameobjects::set2dicon( "friendly", "waypoint_captureneutral" + self.label );
maps\mp\gametypes\_gameobjects::set3dicon( "friendly", "waypoint_captureneutral" + self.label );
}
if ( var_0 == "allies" )
common_scripts\utility::array_remove( level.alliescapturing, self.label );
else
common_scripts\utility::array_remove( level.axiscapturing, self.label );
}
resetflagbaseeffect()
{
var_0 = maps\mp\gametypes\_gameobjects::getownerteam();
if ( var_0 == "neutral" )
playflagneutralfx();
else
{
foreach ( var_2 in level.players )
showcapturedbaseeffecttoplayer( var_0, var_2 );
}
}
onuse( var_0 )
{
var_1 = var_0.team;
var_2 = maps\mp\gametypes\_gameobjects::getownerteam();
self.capturetime = gettime();
self.firstcapture = 0;
setflagcaptured( var_1 );
level.usestartspawns = 0;
if ( var_2 == "neutral" )
{
var_3 = maps\mp\_utility::getotherteam( var_1 );
thread maps\mp\_utility::printandsoundoneveryone( var_1, var_3, undefined, undefined, "mp_dom_flag_captured", undefined, var_0 );
if ( getteamflagcount( var_1 ) < level.flags.size )
{
statusdialog( "secured" + self.label, var_1, 1 );
statusdialog( "enemy_has" + self.label, var_3, 1 );
}
else
{
statusdialog( "secure_all", var_1 );
statusdialog( "lost_all", var_3 );
foreach ( var_5 in level.players )
{
if ( var_5.team == var_1 )
var_5 maps\mp\gametypes\_missions::processchallenge( "ch_domdom" );
}
}
}
var_0 maps\mp\_events::giveobjectivepointstreaks();
thread giveflagcapturexp( self.touchlist[var_1] );
}
giveflagcapturexp( var_0 )
{
level endon( "game_ended" );
var_1 = maps\mp\gametypes\_gameobjects::getearliestclaimplayer();
if ( isdefined( var_1.owner ) )
var_1 = var_1.owner;
level.lastcaptime = gettime();
if ( isplayer( var_1 ) )
{
level thread maps\mp\_utility::teamplayercardsplash( "callout_securedposition" + self.label, var_1 );
var_1 thread maps\mp\_matchdata::loggameevent( "capture", var_1.origin );
}
var_2 = getarraykeys( var_0 );
for ( var_3 = 0; var_3 < var_2.size; var_3++ )
{
var_4 = var_0[var_2[var_3]].player;
if ( isdefined( var_4.owner ) )
var_4 = var_4.owner;
if ( !isplayer( var_4 ) )
continue;
var_4 thread maps\mp\gametypes\_hud_message::splashnotify( "capture", maps\mp\gametypes\_rank::getscoreinfovalue( "capture" ) );
var_4 thread updatecpm();
var_4 thread maps\mp\gametypes\_rank::giverankxp( "capture", maps\mp\gametypes\_rank::getscoreinfovalue( "capture" ) * var_4 getcapxpscale() );
maps\mp\gametypes\_gamescore::giveplayerscore( "capture", var_4 );
var_4 maps\mp\_utility::incplayerstat( "pointscaptured", 1 );
var_4 maps\mp\_utility::incpersstat( "captures", 1 );
var_4 maps\mp\gametypes\_persistence::statsetchild( "round", "captures", var_4.pers["captures"] );
var_4 maps\mp\gametypes\_missions::processchallenge( "ch_domcap" );
var_4 maps\mp\_utility::setextrascore0( var_4.pers["captures"] );
if ( var_4 != var_1 )
var_4 maps\mp\_events::giveobjectivepointstreaks();
wait 0.05;
}
}
delayedleaderdialog( var_0, var_1 )
{
level endon( "game_ended" );
wait 0.1;
maps\mp\_utility::waittillslowprocessallowed();
maps\mp\_utility::leaderdialog( var_0, var_1 );
}
updatedomscores()
{
level endon( "game_ended" );
while ( !level.gameended )
{
var_0 = getowneddomflags();
if ( var_0.size )
{
for ( var_1 = 1; var_1 < var_0.size; var_1++ )
{
var_2 = var_0[var_1];
var_3 = gettime() - var_2.capturetime;
for ( var_4 = var_1 - 1; var_4 >= 0 && var_3 > gettime() - var_0[var_4].capturetime; var_4-- )
var_0[var_4 + 1] = var_0[var_4];
var_0[var_4 + 1] = var_2;
}
foreach ( var_2 in var_0 )
{
var_6 = var_2 maps\mp\gametypes\_gameobjects::getownerteam();
maps\mp\gametypes\_gamescore::giveteamscoreforobjective( var_6, 1 );
}
}
var_8 = gettime() - level.lastcaptime;
if ( maps\mp\_utility::matchmakinggame() && var_0.size < 2 && var_8 > 120000 )
{
level.finalkillcam_winner = "none";
thread maps\mp\gametypes\_gamelogic::endgame( "none", game["end_reason"]["time_limit_reached"] );
return;
}
wait 5.0;
maps\mp\gametypes\_hostmigration::waittillhostmigrationdone();
}
}
onplayerkilled( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
if ( !isplayer( var_1 ) || var_1.team == self.team )
return;
var_10 = 0;
var_11 = 0;
var_12 = self;
foreach ( var_14 in var_12.touchtriggers )
{
if ( var_14 != level.flags[0] && var_14 != level.flags[1] && var_14 != level.flags[2] )
continue;
var_15 = var_14.useobj.ownerteam;
var_16 = var_12.team;
if ( var_15 == "neutral" )
continue;
if ( var_16 == var_15 )
{
var_10 = 1;
var_1 thread maps\mp\gametypes\_hud_message::splashnotify( "assault", maps\mp\gametypes\_rank::getscoreinfovalue( "assault" ) );
var_1 thread maps\mp\gametypes\_rank::giverankxp( "assault" );
maps\mp\gametypes\_gamescore::giveplayerscore( "assault", var_1 );
thread maps\mp\_matchdata::logkillevent( var_9, "defending" );
continue;
}
var_11 = 1;
var_1 thread maps\mp\gametypes\_hud_message::splashnotify( "defend", maps\mp\gametypes\_rank::getscoreinfovalue( "defend" ) );
var_1 thread maps\mp\gametypes\_rank::giverankxp( "defend" );
maps\mp\gametypes\_gamescore::giveplayerscore( "defend", var_1 );
var_1 maps\mp\_utility::incpersstat( "defends", 1 );
var_1 maps\mp\gametypes\_persistence::statsetchild( "round", "defends", var_1.pers["defends"] );
var_1 maps\mp\gametypes\_missions::processchallenge( "ch_domprotector" );
thread maps\mp\_matchdata::logkillevent( var_9, "assaulting" );
}
foreach ( var_14 in var_1.touchtriggers )
{
if ( var_14 != level.flags[0] && var_14 != level.flags[1] && var_14 != level.flags[2] )
continue;
var_15 = var_14.useobj.ownerteam;
var_19 = var_1.team;
if ( var_15 == "neutral" )
continue;
if ( var_19 != var_15 )
{
if ( !var_10 )
var_1 thread maps\mp\gametypes\_hud_message::splashnotify( "assault", maps\mp\gametypes\_rank::getscoreinfovalue( "assault" ) );
var_1 thread maps\mp\gametypes\_rank::giverankxp( "assault" );
maps\mp\gametypes\_gamescore::giveplayerscore( "assault", var_1 );
thread maps\mp\_matchdata::logkillevent( var_9, "defending" );
}
}
foreach ( var_14 in level.flags )
{
var_15 = var_14.useobj.ownerteam;
var_19 = var_1.team;
var_22 = distancesquared( var_14.origin, var_12.origin );
var_23 = 90000;
if ( var_19 == var_15 && var_22 < var_23 )
{
if ( !var_11 )
var_1 thread maps\mp\gametypes\_hud_message::splashnotify( "defend", maps\mp\gametypes\_rank::getscoreinfovalue( "defend" ) );
var_1 thread maps\mp\gametypes\_rank::giverankxp( "defend" );
maps\mp\gametypes\_gamescore::giveplayerscore( "defend", var_1 );
var_1 maps\mp\_utility::incpersstat( "defends", 1 );
var_1 maps\mp\gametypes\_persistence::statsetchild( "round", "defends", var_1.pers["defends"] );
thread maps\mp\_matchdata::logkillevent( var_9, "assaulting" );
}
}
}
getowneddomflags()
{
var_0 = [];
foreach ( var_2 in level.domflags )
{
if ( var_2 maps\mp\gametypes\_gameobjects::getownerteam() != "neutral" && isdefined( var_2.capturetime ) )
var_0[var_0.size] = var_2;
}
return var_0;
}
getteamflagcount( var_0 )
{
var_1 = 0;
for ( var_2 = 0; var_2 < level.flags.size; var_2++ )
{
if ( level.domflags[var_2] maps\mp\gametypes\_gameobjects::getownerteam() == var_0 )
var_1++;
}
return var_1;
}
getflagteam()
{
return self.useobj maps\mp\gametypes\_gameobjects::getownerteam();
}
flagsetup()
{
foreach ( var_1 in level.domflags )
{
switch ( var_1.label )
{
case "_a":
var_1.dompointnumber = 0;
break;
case "_b":
var_1.dompointnumber = 1;
break;
case "_c":
var_1.dompointnumber = 2;
break;
}
}
var_3 = maps\mp\gametypes\_spawnlogic::getspawnpointarray( "mp_dom_spawn" );
foreach ( var_5 in var_3 )
{
var_5.dompointa = 0;
var_5.dompointb = 0;
var_5.dompointc = 0;
var_5.nearflagpoint = getnearestflagpoint( var_5 );
switch ( var_5.nearflagpoint.useobj.dompointnumber )
{
case 0:
var_5.dompointa = 1;
break;
case 1:
var_5.dompointb = 1;
break;
case 2:
var_5.dompointc = 1;
break;
}
}
}
getnearestflagpoint( var_0 )
{
var_1 = maps\mp\gametypes\_spawnlogic::ispathdataavailable();
var_2 = undefined;
var_3 = undefined;
foreach ( var_5 in level.domflags )
{
var_6 = undefined;
if ( var_1 )
var_6 = getpathdist( var_0.origin, var_5.levelflag.origin, 999999 );
if ( !isdefined( var_6 ) || var_6 == -1 )
var_6 = distancesquared( var_5.levelflag.origin, var_0.origin );
if ( !isdefined( var_2 ) || var_6 < var_3 )
{
var_2 = var_5;
var_3 = var_6;
}
}
return var_2.levelflag;
}
initgametypeawards()
{
maps\mp\_awards::initstataward( "pointscaptured", 0, maps\mp\_awards::highestwins );
}
onspawnplayer()
{
maps\mp\_utility::setextrascore0( 0 );
if ( isdefined( self.pers["captures"] ) )
maps\mp\_utility::setextrascore0( self.pers["captures"] );
}
updatecpm()
{
if ( !isdefined( self.cpm ) )
{
self.numcaps = 0;
self.cpm = 0;
}
self.numcaps++;
if ( maps\mp\_utility::getminutespassed() < 1 )
return;
self.cpm = self.numcaps / maps\mp\_utility::getminutespassed();
}
getcapxpscale()
{
if ( self.cpm < 4 )
return 1;
else
return 0.25;
}
setflagneutral()
{
self notify( "flag_neutral" );
maps\mp\gametypes\_gameobjects::setownerteam( "neutral" );
self.visuals[0] setmodel( game["flagmodels"]["neutral"] );
foreach ( var_1 in level.players )
{
var_2 = var_1._domflageffect[self.label];
if ( isdefined( var_2 ) )
var_2 delete();
}
playflagneutralfx();
}
playflagneutralfx()
{
if ( isdefined( self.neutralflagfx ) )
self.neutralflagfx delete();
self.neutralflagfx = spawnfx( level.flagbasefxid["neutral"], self.baseeffectpos, self.baseeffectforward );
triggerfx( self.neutralflagfx );
}
setflagcaptured( var_0 )
{
var_1 = maps\mp\gametypes\_gameobjects::getlabel();
maps\mp\gametypes\_gameobjects::setownerteam( var_0 );
maps\mp\gametypes\_gameobjects::set2dicon( "enemy", "waypoint_capture" + var_1 );
maps\mp\gametypes\_gameobjects::set3dicon( "enemy", "waypoint_capture" + var_1 );
maps\mp\gametypes\_gameobjects::set2dicon( "friendly", "waypoint_defend" + self.label );
maps\mp\gametypes\_gameobjects::set3dicon( "friendly", "waypoint_defend" + self.label );
self.visuals[0] setmodel( game["flagmodels"][var_0] );
self.neutralflagfx delete();
foreach ( var_3 in level.players )
showcapturedbaseeffecttoplayer( var_0, var_3 );
thread baseeffectswaitforjoined();
}
showcapturedbaseeffecttoplayer( var_0, var_1 )
{
if ( isdefined( var_1._domflageffect[self.label] ) )
var_1._domflageffect[self.label] delete();
var_2 = undefined;
var_3 = var_1.team;
var_4 = var_1 ismlgspectator();
if ( var_4 )
var_3 = var_1 getmlgspectatorteam();
else if ( var_3 == "spectator" )
var_3 = "allies";
if ( var_3 == var_0 )
var_2 = spawnfxforclient( level.flagbasefxid["friendly"], self.baseeffectpos, var_1, self.baseeffectforward );
else
var_2 = spawnfxforclient( level.flagbasefxid["enemy"], self.baseeffectpos, var_1, self.baseeffectforward );
var_1._domflageffect[self.label] = var_2;
triggerfx( var_2 );
}
baseeffectswaitforjoined()
{
level endon( "game_ended" );
self endon( "flag_neutral" );
for (;;)
{
level waittill( "joined_team", var_0 );
if ( isdefined( var_0._domflageffect[self.label] ) )
{
var_0._domflageffect[self.label] delete();
var_0._domflageffect[self.label] = undefined;
}
if ( var_0.team != "spectator" )
showcapturedbaseeffecttoplayer( self.ownerteam, var_0 );
}
}
onplayerconnect()
{
for (;;)
{
level waittill( "connected", var_0 );
var_0._domflageffect = [];
var_0 thread ondisconnect();
var_0 thread refreshfreecambasefx();
}
}
ondisconnect()
{
self waittill( "disconnect" );
foreach ( var_1 in self._domflageffect )
{
if ( isdefined( var_1 ) )
var_1 delete();
}
}
refreshfreecambasefx()
{
self endon( "disconnect" );
level endon( "game_ended" );
for (;;)
{
self waittill( "luinotifyserver", var_0, var_1 );
if ( var_0 == "mlg_view_change" )
{
foreach ( var_3 in level.domflags )
{
if ( var_3.ownerteam != "neutral" )
var_3 showcapturedbaseeffecttoplayer( var_3.ownerteam, self );
}
}
}
}

524
maps/mp/gametypes/grind.gsc Normal file
View File

@ -0,0 +1,524 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::setupcallbacks();
maps\mp\gametypes\_globallogic::setupcallbacks();
if ( isusingmatchrulesdata() )
{
level.initializematchrules = ::initializematchrules;
[[ level.initializematchrules ]]();
level thread maps\mp\_utility::reinitializematchrulesonmigration();
}
else
{
maps\mp\_utility::registerroundswitchdvar( level.gametype, 0, 0, 9 );
maps\mp\_utility::registertimelimitdvar( level.gametype, 10 );
maps\mp\_utility::registerscorelimitdvar( level.gametype, 500 );
maps\mp\_utility::registerroundlimitdvar( level.gametype, 1 );
maps\mp\_utility::registerwinlimitdvar( level.gametype, 1 );
maps\mp\_utility::registernumlivesdvar( level.gametype, 0 );
maps\mp\_utility::registerhalftimedvar( level.gametype, 0 );
}
level.teambased = 1;
level.onstartgametype = ::onstartgametype;
level.getspawnpoint = ::getspawnpoint;
level.onnormaldeath = ::onnormaldeath;
level.onprecachegametype = ::onprecachegametype;
level.onspawnplayer = ::onspawnplayer;
}
onprecachegametype()
{
level.flagbasefxid["friendly"] = loadfx( "vfx/gameplay/mp/core/vfx_marker_base_cyan" );
}
initializematchrules()
{
maps\mp\_utility::setcommonrulesfrommatchrulesdata();
setdynamicdvar( "scr_grind_roundswitch", 0 );
maps\mp\_utility::registerroundswitchdvar( "grind", 0, 0, 9 );
setdynamicdvar( "scr_grind_roundlimit", 1 );
maps\mp\_utility::registerroundlimitdvar( "grind", 1 );
setdynamicdvar( "scr_grind_winlimit", 1 );
maps\mp\_utility::registerwinlimitdvar( "grind", 1 );
setdynamicdvar( "scr_grind_halftime", 0 );
maps\mp\_utility::registerhalftimedvar( "grind", 0 );
setdynamicdvar( "scr_grind_promode", 0 );
}
onstartgametype()
{
setclientnamemode( "auto_change" );
if ( !isdefined( game["switchedsides"] ) )
game["switchedsides"] = 0;
maps\mp\_utility::setobjectivetext( "allies", &"OBJECTIVES_WAR" );
maps\mp\_utility::setobjectivetext( "axis", &"OBJECTIVES_WAR" );
if ( level.splitscreen )
{
maps\mp\_utility::setobjectivescoretext( "allies", &"OBJECTIVES_WAR" );
maps\mp\_utility::setobjectivescoretext( "axis", &"OBJECTIVES_WAR" );
}
else
{
maps\mp\_utility::setobjectivescoretext( "allies", &"OBJECTIVES_WAR_SCORE" );
maps\mp\_utility::setobjectivescoretext( "axis", &"OBJECTIVES_WAR_SCORE" );
}
maps\mp\_utility::setobjectivehinttext( "allies", &"OBJECTIVES_WAR_HINT" );
maps\mp\_utility::setobjectivehinttext( "axis", &"OBJECTIVES_WAR_HINT" );
initspawns();
createtags();
var_0[0] = level.gametype;
maps\mp\gametypes\_gameobjects::main( var_0 );
createzones();
level thread onplayerconnect();
level thread runzones();
level thread removetagsongameended();
}
onspawnplayer()
{
if ( isdefined( self.tagscarried ) )
self setclientomnvar( "ui_grind_tags", self.tagscarried );
}
createtags()
{
level.dogtags = [];
for ( var_0 = 0; var_0 < 50; var_0++ )
{
var_1 = spawn( "script_model", ( 0, 0, 0 ) );
var_1 setmodel( "prop_dogtags_foe_iw6" );
var_1.baseorigin = var_1.origin;
var_1 scriptmodelplayanim( "mp_dogtag_spin" );
var_1 hide();
var_2 = spawn( "trigger_radius", ( 0, 0, 0 ), 0, 32, 32 );
var_2.targetname = "trigger_dogtag";
var_2 hide();
var_3 = spawnstruct();
var_3.type = "useObject";
var_3.curorigin = var_2.origin;
var_3.entnum = var_2 getentitynumber();
var_3.lastusedtime = 0;
var_3.visual = var_1;
var_3.offset3d = ( 0, 0, 16 );
var_3.trigger = var_2;
var_3.triggertype = "proximity";
var_3 maps\mp\gametypes\_gameobjects::allowuse( "none" );
level.dogtags[level.dogtags.size] = var_3;
}
}
gettag()
{
var_0 = level.dogtags[0];
var_1 = gettime();
foreach ( var_3 in level.dogtags )
{
if ( var_3.interactteam == "none" )
{
var_0 = var_3;
break;
}
if ( var_3.lastusedtime < var_1 )
{
var_1 = var_3.lastusedtime;
var_0 = var_3;
}
}
var_0 notify( "reset" );
var_0 maps\mp\gametypes\_gameobjects::initializetagpathvariables();
var_0.lastusedtime = gettime();
return var_0;
}
spawntag( var_0, var_1 )
{
var_2 = var_0 + ( 0, 0, 14 );
if ( isdefined( var_1 ) && var_1 )
{
var_3 = ( 0, randomfloat( 360 ), 0 );
var_4 = anglestoforward( var_3 );
var_5 = randomfloatrange( 40, 300 );
var_6 = var_2 + var_5 * var_4;
var_2 = playerphysicstrace( var_2, var_6 );
}
var_7 = gettag();
var_7.curorigin = var_2;
var_7.trigger.origin = var_2;
var_7.visual.origin = var_2;
var_7.trigger show();
var_7.visual show();
var_7 maps\mp\gametypes\_gameobjects::allowuse( "any" );
playsoundatpos( var_2, "mp_grind_token_drop" );
return var_7;
}
monitortaguse( var_0 )
{
level endon( "game_ended" );
var_0 endon( "deleted" );
var_0 endon( "reset" );
for (;;)
{
var_0.trigger waittill( "trigger", var_1 );
if ( !maps\mp\_utility::isreallyalive( var_1 ) )
continue;
if ( var_1 maps\mp\_utility::isusingremote() || isdefined( var_1.spawningafterremotedeath ) )
continue;
if ( isdefined( var_1.classname ) && var_1.classname == "script_vehicle" )
continue;
if ( isagent( var_1 ) && isdefined( var_1.owner ) )
var_1 = var_1.owner;
var_0.visual hide();
var_0.trigger hide();
var_0.curorigin = ( 0, 0, 1000 );
var_0.trigger.origin = ( 0, 0, 1000 );
var_0.visual.origin = ( 0, 0, 1000 );
var_0 maps\mp\gametypes\_gameobjects::allowuse( "none" );
var_1 thread maps\mp\gametypes\_rank::giverankxp( "tag" );
var_1 playersettagcount( var_1.tagscarried + 1 );
var_1 playsound( "mp_killconfirm_tags_pickup" );
playsoundatpos( var_1.origin, "mp_grind_token_pickup" );
break;
}
}
onplayerconnect()
{
for (;;)
{
level waittill( "connected", var_0 );
var_0.isscoring = 0;
var_0 thread monitorjointeam();
}
}
playersettagcount( var_0 )
{
self.tagscarried = var_0;
self.game_extrainfo = var_0;
if ( var_0 > 999 )
var_0 = 999;
self setclientomnvar( "ui_grind_tags", var_0 );
}
monitorjointeam()
{
self endon( "disconnect" );
for (;;)
{
common_scripts\utility::waittill_any( "joined_team", "joined_spectators" );
if ( level.ingraceperiod )
{
playersettagcount( 1 );
continue;
}
playersettagcount( 0 );
}
}
hidehudelementongameend( var_0 )
{
level waittill( "game_ended" );
if ( isdefined( var_0 ) )
var_0.alpha = 0;
}
createzones()
{
level.zonelist = [];
game["flagmodels"] = [];
game["flagmodels"]["neutral"] = "prop_flag_neutral";
game["flagmodels"]["allies"] = maps\mp\gametypes\_teams::getteamflagmodel( "allies" );
game["flagmodels"]["axis"] = maps\mp\gametypes\_teams::getteamflagmodel( "axis" );
var_0 = getentarray( "grind_location", "targetname" );
foreach ( var_2 in var_0 )
level.zonelist[level.zonelist.size] = addzone( var_2 );
}
addzone( var_0 )
{
var_1 = spawnstruct();
var_1.origin = var_0.origin;
var_1.angles = var_0.angles;
var_1.trigger = var_0;
var_1.ownerteam = "neutral";
var_2 = var_1.origin + ( 0, 0, 32 );
var_3 = var_1.origin + ( 0, 0, -32 );
var_4 = bullettrace( var_2, var_3, 0, undefined );
var_1.origin = var_4["position"];
var_1.upangles = vectortoangles( var_4["normal"] );
var_1.forward = anglestoforward( var_1.upangles );
var_1.right = anglestoright( var_1.upangles );
var_1.visuals[0] = spawn( "script_model", var_1.origin );
var_1.visuals[0].angles = var_1.angles;
var_1.visuals[0] setmodel( game["flagmodels"]["neutral"] );
return var_1;
}
runzones()
{
foreach ( var_1 in level.zonelist )
level thread startzone( var_1, var_1.trigger.script_label );
}
startzone( var_0, var_1 )
{
level thread runzonefx( var_0 );
level thread runzonestatus( var_0, var_1 );
level thread runzonethink( var_0 );
}
runzonefx( var_0 )
{
maps\mp\_utility::gameflagwait( "prematch_done" );
var_1 = spawnfx( level.flagbasefxid["friendly"], var_0.origin, var_0.forward, var_0.upangles );
triggerfx( var_1 );
}
runzonestatus( var_0, var_1 )
{
var_2 = ( 0, 0, 100 );
var_0.objid_axis = maps\mp\gametypes\_gameobjects::getnextobjid();
objective_add( var_0.objid_axis, "active", var_0.origin + var_2, "waypoint_target_" + var_1 );
objective_team( var_0.objid_axis, "axis" );
var_0.objid_allies = maps\mp\gametypes\_gameobjects::getnextobjid();
objective_add( var_0.objid_allies, "active", var_0.origin + var_2, "waypoint_target_" + var_1 );
objective_team( var_0.objid_allies, "allies" );
var_3 = 0;
var_4 = "none";
for (;;)
{
var_5 = "neutral";
foreach ( var_7 in level.players )
{
if ( !maps\mp\_utility::isreallyalive( var_7 ) )
continue;
if ( !var_7.tagscarried )
continue;
if ( var_7.team == var_5 )
continue;
if ( isinzone( var_7, var_0 ) )
{
if ( var_5 == "neutral" )
{
var_5 = var_7.team;
continue;
}
var_5 = "contested";
break;
}
}
var_0.ownerteam = var_5;
if ( var_4 == var_5 )
{
common_scripts\utility::waitframe();
continue;
}
switch ( var_5 )
{
case "neutral":
if ( var_3 + 1250 > gettime() )
break;
var_4 = var_5;
var_0.grind_headicon_allies = var_0 maps\mp\_entityheadicons::setheadicon( "allies", "waypoint_bank_" + var_1, var_2, 4, 4, undefined, undefined, undefined, 1, undefined, 0 );
var_0.grind_headicon_axis = var_0 maps\mp\_entityheadicons::setheadicon( "axis", "waypoint_bank_" + var_1, var_2, 4, 4, undefined, undefined, undefined, 1, undefined, 0 );
objective_icon( var_0.objid_allies, "waypoint_bank_" + var_1 );
objective_icon( var_0.objid_axis, "waypoint_bank_" + var_1 );
break;
case "contested":
var_4 = var_5;
var_0.grind_headicon_allies = var_0 maps\mp\_entityheadicons::setheadicon( "allies", "waypoint_contested_" + var_1, var_2, 4, 4, undefined, undefined, undefined, 1, undefined, 0 );
var_0.grind_headicon_axis = var_0 maps\mp\_entityheadicons::setheadicon( "axis", "waypoint_contested_" + var_1, var_2, 4, 4, undefined, undefined, undefined, 1, undefined, 0 );
objective_icon( var_0.objid_allies, "waypoint_contested_" + var_1 );
objective_icon( var_0.objid_axis, "waypoint_contested_" + var_1 );
break;
case "axis":
var_4 = var_5;
var_0.grind_headicon_allies = var_0 maps\mp\_entityheadicons::setheadicon( "allies", "waypoint_scoring_foe_" + var_1, var_2, 4, 4, undefined, undefined, undefined, 1, undefined, 0 );
var_0.grind_headicon_axis = var_0 maps\mp\_entityheadicons::setheadicon( "axis", "waypoint_scoring_friend_" + var_1, var_2, 4, 4, undefined, undefined, undefined, 1, undefined, 0 );
objective_icon( var_0.objid_allies, "waypoint_scoring_foe_" + var_1 );
objective_icon( var_0.objid_axis, "waypoint_scoring_friend_" + var_1 );
var_3 = gettime();
break;
case "allies":
var_4 = var_5;
var_0.grind_headicon_allies = var_0 maps\mp\_entityheadicons::setheadicon( "allies", "waypoint_scoring_friend_" + var_1, var_2, 4, 4, undefined, undefined, undefined, 1, undefined, 0 );
var_0.grind_headicon_axis = var_0 maps\mp\_entityheadicons::setheadicon( "axis", "waypoint_scoring_foe_" + var_1, var_2, 4, 4, undefined, undefined, undefined, 1, undefined, 0 );
objective_icon( var_0.objid_allies, "waypoint_scoring_friend_" + var_1 );
objective_icon( var_0.objid_axis, "waypoint_scoring_foe_" + var_1 );
var_3 = gettime();
break;
}
common_scripts\utility::waitframe();
}
}
isinzone( var_0, var_1 )
{
if ( maps\mp\_utility::isreallyalive( var_0 ) && var_0 istouching( var_1.trigger ) )
return 1;
return 0;
}
runzonethink( var_0 )
{
level endon( "game_ended" );
for (;;)
{
var_0.trigger waittill( "trigger", var_1 );
if ( isagent( var_1 ) )
continue;
if ( !isplayer( var_1 ) )
continue;
if ( var_1.isscoring )
continue;
var_1.isscoring = 1;
level thread processscoring( var_1, var_0 );
}
}
removetagsongameended()
{
level waittill( "game_ended" );
foreach ( var_1 in level.players )
{
if ( !isdefined( var_1 ) )
continue;
if ( !isdefined( var_1.tagscarried ) )
continue;
var_1.tagscarried = 0;
}
}
processscoring( var_0, var_1 )
{
while ( var_0.tagscarried && isinzone( var_0, var_1 ) )
{
var_0 playsoundtoplayer( "mp_grind_token_banked", var_0 );
var_0 playersettagcount( var_0.tagscarried - 1 );
maps\mp\gametypes\_gamescore::giveteamscoreforobjective( var_0.team, 1 );
var_0 maps\mp\_utility::setextrascore0( var_0.extrascore0 + 1 );
maps\mp\gametypes\_gamescore::giveplayerscore( "tagScore", var_0 );
var_0 maps\mp\_events::giveobjectivepointstreaks();
var_0 maps\mp\gametypes\_missions::processchallenge( "ch_grinder" );
wait 2;
}
var_0.isscoring = 0;
}
initspawns()
{
level.spawnmins = ( 0, 0, 0 );
level.spawnmaxs = ( 0, 0, 0 );
maps\mp\gametypes\_spawnlogic::addstartspawnpoints( "mp_tdm_spawn_allies_start" );
maps\mp\gametypes\_spawnlogic::addstartspawnpoints( "mp_tdm_spawn_axis_start" );
maps\mp\gametypes\_spawnlogic::addspawnpoints( "allies", "mp_tdm_spawn" );
maps\mp\gametypes\_spawnlogic::addspawnpoints( "axis", "mp_tdm_spawn" );
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter( level.spawnmins, level.spawnmaxs );
setmapcenter( level.mapcenter );
}
getspawnpoint()
{
var_0 = self.pers["team"];
if ( game["switchedsides"] )
var_0 = maps\mp\_utility::getotherteam( var_0 );
if ( maps\mp\gametypes\_spawnlogic::shoulduseteamstartspawn() )
{
var_1 = maps\mp\gametypes\_spawnlogic::getspawnpointarray( "mp_tdm_spawn_" + var_0 + "_start" );
var_2 = maps\mp\gametypes\_spawnlogic::getspawnpoint_startspawn( var_1 );
}
else
{
var_1 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints( var_0 );
var_2 = maps\mp\gametypes\_spawnscoring::getspawnpoint_nearteam( var_1 );
}
return var_2;
}
onnormaldeath( var_0, var_1, var_2 )
{
level thread droptags( var_0, var_1 );
if ( game["state"] == "postgame" && game["teamScores"][var_1.team] > game["teamScores"][level.otherteam[var_1.team]] )
var_1.finalkill = 1;
}
droptags( var_0, var_1 )
{
if ( isagent( var_0 ) )
return;
var_2 = 1;
var_3 = 0;
for ( var_4 = 0; var_4 < var_2; var_4++ )
{
if ( var_4 > 0 )
var_3 = 1;
var_5 = spawntag( var_0.origin, var_3 );
var_5.victim = var_0;
var_5.attacker = var_1;
level notify( "new_tag_spawned", var_5 );
level thread monitortaguse( var_5 );
}
playsoundatpos( var_0.origin, "mp_killconfirm_tags_drop" );
var_6 = var_0.tagscarried - var_2;
var_6 = int( max( 0, var_6 ) );
var_0 playersettagcount( var_6 );
}

760
maps/mp/gametypes/grnd.gsc Normal file
View File

@ -0,0 +1,760 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
if ( getdvar( "mapname" ) == "mp_background" )
return;
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::setupcallbacks();
maps\mp\gametypes\_globallogic::setupcallbacks();
if ( isusingmatchrulesdata() )
{
level.initializematchrules = ::initializematchrules;
[[ level.initializematchrules ]]();
level thread maps\mp\_utility::reinitializematchrulesonmigration();
}
else
{
maps\mp\_utility::registerroundswitchdvar( level.gametype, 0, 0, 9 );
maps\mp\_utility::registertimelimitdvar( level.gametype, 10 );
maps\mp\_utility::registerscorelimitdvar( level.gametype, 7500 );
maps\mp\_utility::registerroundlimitdvar( level.gametype, 1 );
maps\mp\_utility::registerwinlimitdvar( level.gametype, 1 );
maps\mp\_utility::registernumlivesdvar( level.gametype, 0 );
maps\mp\_utility::registerhalftimedvar( level.gametype, 0 );
level.matchrules_droptime = 15;
level.matchrules_zoneswitchtime = 60;
level.matchrules_damagemultiplier = 0;
level.matchrules_vampirism = 0;
setdvar( "scr_game_hardpoints", 0 );
}
level.teambased = 1;
level.onstartgametype = ::onstartgametype;
level.getspawnpoint = ::getspawnpoint;
level.onspawnplayer = ::onspawnplayer;
if ( level.matchrules_damagemultiplier || level.matchrules_vampirism )
level.modifyplayerdamage = maps\mp\gametypes\_damage::gamemodemodifyplayerdamage;
level.grnd_fx["smoke"] = loadfx( "smoke/airdrop_flare_mp_effect_now" );
level.grnd_fx["flare"] = loadfx( "smoke/signal_smoke_airdrop" );
level.grnd_targetfxid = loadfx( "vfx/gameplay/mp/core/vfx_marker_base_cyan" );
level.dangermaxradius["drop_zone"] = 1200;
level.dangerminradius["drop_zone"] = 1190;
level.dangerforwardpush["drop_zone"] = 0;
level.dangerovalscale["drop_zone"] = 1;
}
initializematchrules()
{
maps\mp\_utility::setcommonrulesfrommatchrulesdata();
level.matchrules_droptime = getmatchrulesdata( "grndData", "dropTime" );
level.matchrules_zoneswitchtime = 60 * getmatchrulesdata( "grndData", "zoneSwitchTime" );
if ( level.matchrules_zoneswitchtime < 60 )
level.matchrules_zoneswitchtime = 60;
setdynamicdvar( "scr_grnd_roundswitch", 0 );
maps\mp\_utility::registerroundswitchdvar( "grnd", 0, 0, 9 );
setdynamicdvar( "scr_grnd_roundlimit", 1 );
maps\mp\_utility::registerroundlimitdvar( "grnd", 1 );
setdynamicdvar( "scr_grnd_winlimit", 1 );
maps\mp\_utility::registerwinlimitdvar( "grnd", 1 );
setdynamicdvar( "scr_grnd_halftime", 0 );
maps\mp\_utility::registerhalftimedvar( "grnd", 0 );
setdynamicdvar( "scr_grnd_promode", 0 );
}
onstartgametype()
{
setclientnamemode( "auto_change" );
if ( !isdefined( game["switchedsides"] ) )
game["switchedsides"] = 0;
maps\mp\_utility::setobjectivetext( "allies", &"OBJECTIVES_GRND" );
maps\mp\_utility::setobjectivetext( "axis", &"OBJECTIVES_GRND" );
if ( level.splitscreen )
{
maps\mp\_utility::setobjectivescoretext( "allies", &"OBJECTIVES_GRND" );
maps\mp\_utility::setobjectivescoretext( "axis", &"OBJECTIVES_GRND" );
}
else
{
maps\mp\_utility::setobjectivescoretext( "allies", &"OBJECTIVES_GRND_SCORE" );
maps\mp\_utility::setobjectivescoretext( "axis", &"OBJECTIVES_GRND_SCORE" );
}
maps\mp\_utility::setobjectivehinttext( "allies", &"OBJECTIVES_DOM_HINT" );
maps\mp\_utility::setobjectivehinttext( "axis", &"OBJECTIVES_DOM_HINT" );
level.spawnmins = ( 0, 0, 0 );
level.spawnmaxs = ( 0, 0, 0 );
maps\mp\gametypes\_spawnlogic::addstartspawnpoints( "mp_tdm_spawn_allies_start" );
maps\mp\gametypes\_spawnlogic::addstartspawnpoints( "mp_tdm_spawn_axis_start" );
maps\mp\gametypes\_spawnlogic::addspawnpoints( "allies", "mp_tdm_spawn" );
maps\mp\gametypes\_spawnlogic::addspawnpoints( "axis", "mp_tdm_spawn" );
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter( level.spawnmins, level.spawnmaxs );
setmapcenter( level.mapcenter );
var_0 = getentarray( "flag_primary", "targetname" );
var_1 = sortbydistance( var_0, level.mapcenter );
var_2 = var_1[0];
level.grnd_centerloc = level.mapcenter;
maps\mp\gametypes\_rank::registerscoreinfo( "kill", 50 );
maps\mp\gametypes\_rank::registerscoreinfo( "zone_kill", 100 );
maps\mp\gametypes\_rank::registerscoreinfo( "zone_tick", 20 );
var_3[0] = level.gametype;
var_3[1] = "tdm";
maps\mp\gametypes\_gameobjects::main( var_3 );
level.grnd_hud["timerDisplay"] = maps\mp\gametypes\_hud_util::createservertimer( "objective", 1.4 );
level.grnd_hud["timerDisplay"].label = &"MP_NEXT_DROP_ZONE_IN";
level.grnd_hud["timerDisplay"] maps\mp\gametypes\_hud_util::setpoint( "BOTTOMCENTER", "BOTTOMCENTER", 0, -28 );
level.grnd_hud["timerDisplay"].alpha = 0;
level.grnd_hud["timerDisplay"].archived = 0;
level.grnd_hud["timerDisplay"].hidewheninmenu = 1;
level.grnd_hud["timerDisplay"].hidewhenindemo = 1;
thread hidehudelementongameend( level.grnd_hud["timerDisplay"] );
createzones();
initzones();
initfirstzone();
}
initfirstzone()
{
level.zonescycling = 0;
level.firstzoneactive = 0;
var_0 = 999999;
var_1 = 0;
if ( tolower( getdvar( "mapname" ) ) == "mp_shipment_ns" )
var_2 = ( 1.6, 63, 192 );
else
{
for ( var_3 = 0; var_3 < level.grnd_zones.size; var_3++ )
{
var_4 = level.grnd_zones[var_3];
var_5 = distance2d( level.grnd_centerloc, var_4.origin );
if ( var_5 < var_0 )
{
var_0 = var_5;
var_1 = var_3;
}
}
level.grnd_initialindex = var_1;
var_2 = level.grnd_zones[var_1].origin;
}
level.grnd_initialpos = var_2;
level.grnd_zone = spawn( "script_model", var_2 );
level.grnd_zone.origin = var_2;
level.grnd_zone.angles = ( 90, 0, 0 );
level.grnd_zone setmodel( "weapon_us_smoke_grenade_burnt2" );
var_6 = spawn( "script_model", level.grnd_zone.origin );
var_6 setmodel( "tag_origin" );
var_6.angles = vectortoangles( ( 0, 0, 1 ) );
var_6 linkto( level.grnd_zone );
level.grnd_zone.ringvfx = var_6;
level.grnd_dangercenter = spawnstruct();
level.grnd_dangercenter.origin = var_2;
level.grnd_dangercenter.forward = anglestoforward( ( 0, 0, 0 ) );
level.grnd_dangercenter.streakname = "drop_zone";
level.favorclosespawnent = level.grnd_zone;
}
initzones()
{
level.grnd_zones = [];
if ( getdvar( "mapname" ) == "mp_strikezone" )
{
if ( isdefined( level.teleport_zone_current ) && level.teleport_zone_current == "start" )
{
for ( var_0 = 0; var_0 < level.grnd_dropzones1.size; var_0++ )
{
var_1 = level.grnd_dropzones1[var_0].origin;
level.grnd_zones[var_0] = spawn( "script_origin", var_1 );
level.grnd_zones[var_0].origin = var_1;
wait 0.05;
}
}
else
{
for ( var_0 = 0; var_0 < level.grnd_dropzones2.size; var_0++ )
{
var_1 = level.grnd_dropzones2[var_0].origin;
level.grnd_zones[var_0] = spawn( "script_origin", var_1 );
level.grnd_zones[var_0].origin = var_1;
wait 0.05;
}
}
}
else
{
for ( var_0 = 0; var_0 < level.grnd_dropzones.size; var_0++ )
{
var_1 = level.grnd_dropzones[var_0].origin;
level.grnd_zones[var_0] = spawn( "script_origin", var_1 );
level.grnd_zones[var_0].origin = var_1;
wait 0.05;
}
}
}
getspawnpoint()
{
var_0 = self.pers["team"];
if ( game["switchedsides"] )
var_0 = maps\mp\_utility::getotherteam( var_0 );
if ( maps\mp\gametypes\_spawnlogic::shoulduseteamstartspawn() )
{
var_1 = maps\mp\gametypes\_spawnlogic::getspawnpointarray( "mp_tdm_spawn_" + var_0 + "_start" );
var_2 = maps\mp\gametypes\_spawnlogic::getspawnpoint_startspawn( var_1 );
}
else
{
var_1 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints( var_0 );
var_3 = sortbydistance( var_1, level.favorclosespawnent.origin );
var_4 = [];
for ( var_5 = 0; var_5 < var_3.size; var_5++ )
{
var_4[var_5] = var_3[var_5];
if ( common_scripts\utility::distance_2d_squared( var_4[var_5].origin, level.favorclosespawnent.origin ) > 589824 && var_5 > 5 )
break;
}
var_2 = maps\mp\gametypes\_spawnscoring::getspawnpoint_dz( var_1, var_4 );
}
return var_2;
}
onspawnplayer()
{
if ( !isdefined( self.ingrindzone ) )
{
if ( isagent( self ) )
return;
level thread setplayermessages( self );
if ( !level.zonescycling )
{
level.zonescycling = 1;
level thread cyclezones();
level thread locationstatus();
level thread locationscoring();
}
thread waitreplaysmokefxfornewplayer();
}
level notify( "spawned_player" );
}
waitreplaysmokefxfornewplayer()
{
level endon( "game_ended" );
self endon( "disconnect" );
maps\mp\_utility::gameflagwait( "prematch_done" );
wait 0.5;
if ( !isdefined( self.grnd_fx_playing ) )
{
playfxontagforclients( level.grnd_fx["smoke"], level.grnd_zone, "tag_fx", self );
self.grnd_fx_playing = 1;
}
}
createhudinfo( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
{
var_7 = maps\mp\gametypes\_hud_util::createfontstring( var_1, var_2 );
var_7 settext( var_5 );
if ( level.splitscreen )
var_7 maps\mp\gametypes\_hud_util::setpoint( "TOPLEFT", "TOPLEFT", var_3 - 35, var_4 - 5 );
else
var_7 maps\mp\gametypes\_hud_util::setpoint( "TOPLEFT", "TOPLEFT", var_3, var_4 );
var_7.alpha = 1;
var_7.color = var_6;
var_7.glowcolor = var_6;
var_7.archived = 0;
var_7.hidewheninmenu = 1;
thread hidehudelementongameend( var_7 );
self.grnd_hud[var_0] = var_7;
}
setplayermessages( var_0 )
{
level endon( "game_ended" );
maps\mp\_utility::gameflagwait( "prematch_done" );
if ( !isdefined( var_0 ) )
return;
var_0.ingrindzonepoints = 0;
var_0.grndheadicon = level.grnd_zone maps\mp\_entityheadicons::setheadicon( var_0, "waypoint_captureneutral_b", ( 0, 0, 0 ), 14, 14, undefined, undefined, undefined, 1, undefined, 0 );
var_0.grndobjid = maps\mp\gametypes\_gameobjects::getnextobjid();
objective_add( var_0.grndobjid, "invisible", ( 0, 0, 0 ) );
objective_player( var_0.grndobjid, var_0 getentitynumber() );
objective_onentity( var_0.grndobjid, level.grnd_zone );
objective_icon( var_0.grndobjid, "waypoint_captureneutral_b" );
objective_state( var_0.grndobjid, "active" );
if ( var_0 isingrindzone() )
{
var_0.ingrindzone = 1;
var_0.grndheadicon.alpha = 0;
}
else
{
var_0.ingrindzone = 0;
var_0.grndheadicon.alpha = 0.85;
}
var_0.grnd_wasspectator = 0;
if ( var_0.team == "spectator" )
{
var_0.ingrindzone = 0;
var_0.ingrindzonepoints = 0;
var_0.grndheadicon.alpha = 0;
var_0.grnd_hud["axisScore"].alpha = 0;
var_0.grnd_hud["axisText"].alpha = 0;
var_0.grnd_hud["alliesScore"].alpha = 0;
var_0.grnd_hud["alliesText"].alpha = 0;
var_0.grnd_wasspectator = 1;
}
if ( !isai( var_0 ) )
var_0 thread grndtracking();
}
getnextzone()
{
var_0 = undefined;
var_1 = undefined;
var_2 = 99999999;
var_3 = 0;
if ( isdefined( level.teleport_zone_current ) && level.teleport_zone_current == "start" )
var_4 = sortbydistance( level.grnd_dropzones1, level.grnd_zone.origin );
else if ( isdefined( level.teleport_zone_current ) && level.teleport_zone_current != "start" )
{
if ( !isdefined( level.grnd_dropzones2 ) || !level.grnd_dropzones2.size )
level initzones();
var_4 = sortbydistance( level.grnd_dropzones2, level.grnd_zone.origin );
}
else
var_4 = sortbydistance( level.grnd_zones, level.grnd_zone.origin );
var_0 = var_4[randomintrange( 1, var_4.size )].origin;
return var_0;
}
cyclezones()
{
level notify( "cycleZones" );
level endon( "cycleZones" );
level endon( "game_ended" );
maps\mp\_utility::gameflagwait( "prematch_done" );
for (;;)
{
var_0 = undefined;
if ( !level.firstzoneactive )
{
level.firstzoneactive = 1;
var_0 = level.grnd_zone.origin;
}
else
{
var_0 = getnextzone();
stopfxontag( level.grnd_fx["smoke"], level.grnd_zone, "tag_fx" );
wait 0.05;
}
var_1 = var_0 + ( 0, 0, 30 );
var_2 = var_0 + ( 0, 0, -1000 );
var_3 = bullettrace( var_1, var_2, 0, level.grnd_zone );
level.grnd_zone.origin = var_3["position"] + ( 0, 0, 1 );
var_4 = var_3["entity"];
if ( isdefined( var_4 ) )
{
for ( var_5 = var_4 getlinkedparent(); isdefined( var_5 ); var_5 = var_4 getlinkedparent() )
var_4 = var_5;
}
if ( isdefined( var_4 ) )
level.grnd_zone linkto( var_4 );
else if ( level.grnd_zone islinked() )
level.grnd_zone unlink();
level.alliesweightorg = level.grnd_zone.origin;
level.axisweightorg = level.grnd_zone.origin;
level.grnd_dangercenter.origin = level.grnd_zone.origin;
thread spawnregionvfx( level.grnd_zone.ringvfx, var_3["position"], vectortoangles( var_3["normal"] ), 0.5 );
wait 0.05;
playfxontag( level.grnd_fx["smoke"], level.grnd_zone, "tag_fx" );
foreach ( var_7 in level.players )
var_7.grnd_fx_playing = 1;
if ( level.matchrules_droptime )
level thread randomdrops();
level.grnd_hud["timerDisplay"].label = &"MP_NEXT_DROP_ZONE_IN";
level.grnd_hud["timerDisplay"] settimer( level.matchrules_zoneswitchtime );
level.grnd_hud["timerDisplay"].alpha = 1;
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( level.matchrules_zoneswitchtime );
level.grnd_hud["timerDisplay"].alpha = 0;
maps\mp\_utility::playsoundonplayers( "mp_dropzone_obj_new" );
foreach ( var_7 in level.players )
{
if ( isai( var_7 ) )
var_7 thread maps\mp\bots\_bots_gametype_grnd::bot_grnd_think();
}
}
}
spawnfxdelay( var_0, var_1, var_2, var_3 )
{
if ( isdefined( level.grnd_targetfx ) )
level.grnd_targetfx delete();
wait( var_3 );
level.grnd_targetfx = spawnfx( level.grnd_targetfxid, var_0, var_1, var_2 );
triggerfx( level.grnd_targetfx );
}
spawnregionvfx( var_0, var_1, var_2, var_3 )
{
stopfxontag( level.grnd_targetfxid, var_0, "tag_origin" );
wait( var_3 );
var_0.origin = var_1;
var_0.angles = var_2;
playfxontag( level.grnd_targetfxid, var_0, "tag_origin" );
}
grndtracking()
{
self endon( "disconnect" );
level endon( "game_ended" );
if ( !isdefined( self.team ) )
return;
for (;;)
{
if ( !isdefined( self.grnd_wasspectator ) )
self.grnd_wasspectator = 0;
if ( !self.grnd_wasspectator && self.pers["team"] == "spectator" )
{
self.ingrindzone = 0;
self.ingrindzonepoints = 0;
self.grndheadicon.alpha = 0;
self.grnd_wasspectator = 1;
}
else if ( self.team != "spectator" )
{
if ( ( self.grnd_wasspectator || !self.ingrindzone ) && isingrindzone() )
{
self.ingrindzone = 1;
self.ingrindzonepoints = 0;
self iprintlnbold( &"OBJECTIVES_GRND_CONFIRM" );
self.grndheadicon.alpha = 0;
}
else if ( ( self.grnd_wasspectator || self.ingrindzone ) && !isingrindzone() )
{
self.ingrindzone = 0;
self.ingrindzonepoints = 0;
self iprintlnbold( &"OBJECTIVES_GRND_HINT" );
self.grndheadicon.alpha = 0.85;
}
self.grnd_wasspectator = 0;
}
wait 0.05;
}
}
locationstatus()
{
level endon( "game_ended" );
level.grnd_numplayers["axis"] = 0;
level.grnd_numplayers["allies"] = 0;
maps\mp\_utility::gameflagwait( "prematch_done" );
for (;;)
{
level.grnd_numplayers["axis"] = 0;
level.grnd_numplayers["allies"] = 0;
foreach ( var_1 in level.players )
{
if ( isdefined( var_1.ingrindzone ) && maps\mp\_utility::isreallyalive( var_1 ) && var_1.pers["team"] != "spectator" && var_1 isingrindzone() )
level.grnd_numplayers[var_1.pers["team"]]++;
}
foreach ( var_1 in level.players )
{
if ( isdefined( var_1.ingrindzone ) && var_1.pers["team"] != "spectator" )
{
if ( level.grnd_numplayers["axis"] == level.grnd_numplayers["allies"] )
{
var_1.grndheadicon setshader( "waypoint_captureneutral_b", 14, 14 );
var_1.grndheadicon setwaypoint( 0, 1, 0, 0 );
objective_icon( var_1.grndobjid, "waypoint_captureneutral_b" );
continue;
}
if ( level.grnd_numplayers[var_1.pers["team"]] > level.grnd_numplayers[level.otherteam[var_1.pers["team"]]] )
{
var_1.grndheadicon setshader( "waypoint_defend_b", 14, 14 );
var_1.grndheadicon setwaypoint( 0, 1, 0, 0 );
objective_icon( var_1.grndobjid, "waypoint_defend_b" );
continue;
}
var_1.grndheadicon setshader( "waypoint_capture_b", 14, 14 );
var_1.grndheadicon setwaypoint( 0, 1, 0, 0 );
objective_icon( var_1.grndobjid, "waypoint_capture_b" );
}
}
wait 0.5;
}
}
locationscoring()
{
level endon( "game_ended" );
maps\mp\_utility::gameflagwait( "prematch_done" );
var_0 = maps\mp\gametypes\_rank::getscoreinfovalue( "zone_tick" );
for (;;)
{
foreach ( var_2 in level.players )
{
if ( isdefined( var_2.ingrindzone ) && maps\mp\_utility::isreallyalive( var_2 ) && var_2.pers["team"] != "spectator" && var_2 isingrindzone() )
{
var_2.ingrindzonepoints = var_2.ingrindzonepoints + var_0;
maps\mp\gametypes\_gamescore::giveplayerscore( "zone_tick", var_2, undefined, 0, 1 );
if ( isai( var_2 ) )
continue;
var_2.xpupdatetotal = 0;
var_2 thread maps\mp\gametypes\_rank::xppointspopup( 20 );
}
}
if ( level.grnd_numplayers["axis"] )
maps\mp\gametypes\_gamescore::giveteamscoreforobjective( "axis", var_0 * level.grnd_numplayers["axis"] );
if ( level.grnd_numplayers["allies"] )
maps\mp\gametypes\_gamescore::giveteamscoreforobjective( "allies", var_0 * level.grnd_numplayers["allies"] );
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( 1.0 );
}
}
randomdrops()
{
level endon( "game_ended" );
level notify( "reset_grnd_drops" );
level endon( "reset_grnd_drops" );
level.grnd_previouscratetypes = [];
for (;;)
{
var_0 = getbestplayer();
var_1 = 1;
if ( isdefined( var_0 ) && maps\mp\_utility::currentactivevehiclecount() < maps\mp\_utility::maxvehiclesallowed() && level.fauxvehiclecount + var_1 < maps\mp\_utility::maxvehiclesallowed() && level.numdropcrates < 8 )
{
var_0 thread maps\mp\gametypes\_rank::xpeventpopup( "earned_care_package" );
var_0 thread maps\mp\gametypes\_hud_message::splashnotifyurgent( "callout_earned_carepackage" );
var_0 thread maps\mp\_utility::leaderdialog( level.otherteam[var_0.team] + "_enemy_airdrop_assault_inbound", level.otherteam[var_0.team] );
var_0 thread maps\mp\_utility::leaderdialog( var_0.team + "_friendly_airdrop_assault_inbound", var_0.team );
maps\mp\_utility::playsoundonplayers( "mp_dropzone_obj_taken", var_0.team );
maps\mp\_utility::playsoundonplayers( "mp_dropzone_obj_lost", level.otherteam[var_0.team] );
var_2 = level.grnd_zone.origin + ( randomintrange( -50, 50 ), randomintrange( -50, 50 ), 0 );
var_3 = getdropzonecratetype();
if ( issubstr( tolower( var_3 ), "juggernaut" ) )
level thread maps\mp\killstreaks\_airdrop::doc130flyby( var_0, var_2, randomfloat( 360 ), var_3 );
else if ( var_3 == "mega" )
level thread maps\mp\killstreaks\_airdrop::domegac130flyby( var_0, var_2, randomfloat( 360 ), "airdrop_grnd", -360 );
else
{
maps\mp\_utility::incrementfauxvehiclecount();
level thread maps\mp\killstreaks\_airdrop::doflyby( var_0, var_2, randomfloat( 360 ), "airdrop_grnd", 0, var_3 );
}
var_4 = level.matchrules_droptime;
}
else
var_4 = 0.5;
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( var_4 );
}
}
getbestplayer()
{
var_0 = undefined;
var_1 = 0;
foreach ( var_3 in level.players )
{
if ( maps\mp\_utility::isreallyalive( var_3 ) && var_3.pers["team"] != "spectator" )
{
if ( var_3 isingrindzone() && var_3.ingrindzonepoints > var_1 )
{
var_0 = var_3;
var_1 = var_3.ingrindzonepoints;
}
}
}
return var_0;
}
getdropzonecratetype()
{
var_0 = undefined;
if ( !isdefined( level.grnd_previouscratetypes["mega"] ) && level.numdropcrates == 0 && randomintrange( 0, 100 ) < 5 )
var_0 = "mega";
else
{
if ( level.grnd_previouscratetypes.size )
{
for ( var_1 = 200; var_1; var_1-- )
{
var_0 = maps\mp\killstreaks\_airdrop::getrandomcratetype( "airdrop_grnd" );
if ( isdefined( level.grnd_previouscratetypes[var_0] ) )
{
var_0 = undefined;
continue;
}
break;
}
}
if ( !isdefined( var_0 ) )
var_0 = maps\mp\killstreaks\_airdrop::getrandomcratetype( "airdrop_grnd" );
}
level.grnd_previouscratetypes[var_0] = 1;
if ( level.grnd_previouscratetypes.size == 15 )
level.grnd_previouscratetypes = [];
return var_0;
}
isingrindzone()
{
if ( distance2d( level.grnd_zone.origin, self.origin ) < 300 && self.origin[2] > level.grnd_zone.origin[2] - 50 )
return 1;
else
return 0;
}
hidehudelementongameend( var_0 )
{
level waittill( "game_ended" );
if ( isdefined( var_0 ) )
var_0.alpha = 0;
}
createzones()
{
level.grnd_dropzones = [];
level.grnd_dropzones1 = [];
level.grnd_dropzones2 = [];
var_0 = common_scripts\utility::getstructarray( "sotf_chest_spawnpoint", "targetname" );
if ( getdvar( "mapname" ) == "mp_strikezone" )
{
var_1 = [];
var_2 = [];
foreach ( var_4 in var_0 )
{
if ( var_4.origin[2] > 10000 )
{
level.grnd_dropzones2[level.grnd_dropzones2.size] = var_4;
continue;
}
level.grnd_dropzones1[level.grnd_dropzones1.size] = var_4;
}
}
else
{
foreach ( var_4 in var_0 )
level.grnd_dropzones[level.grnd_dropzones.size] = var_4;
}
adjustzones();
}
adjustzones()
{
var_0 = tolower( getdvar( "mapname" ) );
if ( var_0 == "mp_strikezone" )
{
level.grnd_dropzones1[level.grnd_dropzones1.size] = spawnstruct();
level.grnd_dropzones1[level.grnd_dropzones1.size - 1].origin = ( -121, -1334, -73 );
}
if ( var_0 == "mp_flooded" )
{
foreach ( var_2 in level.grnd_dropzones )
{
if ( var_2.origin == ( -1596.9, 1315.7, 374.1 ) )
var_2.origin = ( -1561, 1278, 431 );
}
}
if ( var_0 == "mp_zebra" )
{
foreach ( var_2 in level.grnd_dropzones )
{
if ( var_2.origin == ( 4008.3, -2066.3, 482.1 ) )
var_2.origin = ( 4048, -1985, 539 );
}
}
if ( issubstr( var_0, "descent" ) )
{
foreach ( var_2 in level.grnd_dropzones )
{
if ( var_2.origin == ( 1101, 116, 5373.1 ) )
var_2.origin = ( 1072, -80, 5378 );
}
}
}

572
maps/mp/gametypes/gun.gsc Normal file
View File

@ -0,0 +1,572 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::setupcallbacks();
maps\mp\gametypes\_globallogic::setupcallbacks();
setguns();
if ( isusingmatchrulesdata() )
{
level.initializematchrules = ::initializematchrules;
[[ level.initializematchrules ]]();
level thread maps\mp\_utility::reinitializematchrulesonmigration();
}
else
{
maps\mp\_utility::registertimelimitdvar( level.gametype, 10 );
var_0 = level.gun_guns.size;
setdynamicdvar( "scr_gun_scorelimit", var_0 );
maps\mp\_utility::registerscorelimitdvar( level.gametype, var_0 );
maps\mp\_utility::registerroundlimitdvar( level.gametype, 1 );
maps\mp\_utility::registerwinlimitdvar( level.gametype, 0 );
maps\mp\_utility::registernumlivesdvar( level.gametype, 0 );
maps\mp\_utility::registerhalftimedvar( level.gametype, 0 );
level.matchrules_randomize = 0;
level.matchrules_damagemultiplier = 0;
level.matchrules_vampirism = 0;
}
setspecialloadout();
setteammode( "ffa" );
level.teambased = 0;
level.doprematch = 1;
level.killstreakrewards = 0;
level.supportintel = 0;
level.supportnuke = 0;
level.assists_disabled = 1;
level.onprecachegametype = ::onprecachegametype;
level.onstartgametype = ::onstartgametype;
level.onspawnplayer = ::onspawnplayer;
level.getspawnpoint = ::getspawnpoint;
level.onplayerkilled = ::onplayerkilled;
level.ontimelimit = ::ontimelimit;
level.onplayerscore = ::onplayerscore;
if ( level.matchrules_damagemultiplier || level.matchrules_vampirism )
level.modifyplayerdamage = maps\mp\gametypes\_damage::gamemodemodifyplayerdamage;
}
initializematchrules()
{
maps\mp\_utility::setcommonrulesfrommatchrulesdata( 1 );
level.matchrules_randomize = getmatchrulesdata( "gunData", "randomize" );
var_0 = level.gun_guns.size;
setdynamicdvar( "scr_gun_scorelimit", var_0 );
maps\mp\_utility::registerscorelimitdvar( level.gametype, var_0 );
setdynamicdvar( "scr_gun_winlimit", 1 );
maps\mp\_utility::registerwinlimitdvar( "gun", 1 );
setdynamicdvar( "scr_gun_roundlimit", 1 );
maps\mp\_utility::registerroundlimitdvar( "gun", 1 );
setdynamicdvar( "scr_gun_halftime", 0 );
maps\mp\_utility::registerhalftimedvar( "gun", 0 );
setdynamicdvar( "scr_gun_playerrespawndelay", 0 );
setdynamicdvar( "scr_gun_waverespawndelay", 0 );
setdynamicdvar( "scr_player_forcerespawn", 1 );
setdynamicdvar( "scr_gun_promode", 0 );
}
onprecachegametype()
{
}
onstartgametype()
{
var_0 = maps\mp\gametypes\_rank::getscoreinfovalue( "gained_gun_score" );
maps\mp\gametypes\_rank::registerscoreinfo( "dropped_gun_score", -1 * var_0 );
setgunsfinal();
setclientnamemode( "auto_change" );
maps\mp\_utility::setobjectivetext( "allies", &"OBJECTIVES_DM" );
maps\mp\_utility::setobjectivetext( "axis", &"OBJECTIVES_DM" );
if ( level.splitscreen )
{
maps\mp\_utility::setobjectivescoretext( "allies", &"OBJECTIVES_DM" );
maps\mp\_utility::setobjectivescoretext( "axis", &"OBJECTIVES_DM" );
}
else
{
maps\mp\_utility::setobjectivescoretext( "allies", &"OBJECTIVES_DM_SCORE" );
maps\mp\_utility::setobjectivescoretext( "axis", &"OBJECTIVES_DM_SCORE" );
}
maps\mp\_utility::setobjectivehinttext( "allies", &"OBJECTIVES_DM_HINT" );
maps\mp\_utility::setobjectivehinttext( "axis", &"OBJECTIVES_DM_HINT" );
level.spawnmins = ( 0, 0, 0 );
level.spawnmaxs = ( 0, 0, 0 );
maps\mp\gametypes\_spawnlogic::addspawnpoints( "allies", "mp_dm_spawn" );
maps\mp\gametypes\_spawnlogic::addspawnpoints( "axis", "mp_dm_spawn" );
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter( level.spawnmins, level.spawnmaxs );
setmapcenter( level.mapcenter );
var_1 = [];
maps\mp\gametypes\_gameobjects::main( var_1 );
level.quickmessagetoall = 1;
level.blockweapondrops = 1;
level thread onplayerconnect();
level.killstreakrewards = 0;
}
onplayerconnect()
{
for (;;)
{
level waittill( "connected", var_0 );
var_0.gun_firstspawn = 1;
var_0.gungamegunindex = 0;
var_0.gungameprevgunindex = 0;
if ( level.matchrules_randomize )
{
var_0.gun_nextguns = level.gun_guns;
var_0.gun_prevguns = [];
}
var_0 thread refillammo();
var_0 thread refillsinglecountammo();
var_0 maps\mp\_utility::setfakeloadoutweaponslot( level.gun_guns[0], 1 );
}
}
getspawnpoint()
{
if ( self.gun_firstspawn )
{
self.gun_firstspawn = 0;
self.pers["class"] = "gamemode";
self.pers["lastClass"] = "";
self.class = self.pers["class"];
self.lastclass = self.pers["lastClass"];
if ( common_scripts\utility::cointoss() )
maps\mp\gametypes\_menus::addtoteam( "axis", 1 );
else
maps\mp\gametypes\_menus::addtoteam( "allies", 1 );
}
var_0 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints( self.pers["team"] );
var_1 = maps\mp\gametypes\_spawnscoring::getspawnpoint_freeforall( var_0 );
return var_1;
}
onspawnplayer()
{
self.pers["gamemodeLoadout"] = level.gun_loadouts[self.pers["team"]];
thread waitloadoutdone();
level notify( "spawned_player" );
}
waitloadoutdone()
{
level endon( "game_ended" );
self endon( "disconnect" );
self waittill( "spawned_player" );
maps\mp\_utility::giveperk( "specialty_bling", 0 );
givenextgun( 1 );
}
onplayerkilled( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
if ( var_3 == "MOD_FALLING" || isdefined( var_1 ) && isplayer( var_1 ) )
{
var_10 = maps\mp\gametypes\_weapons::isriotshield( var_4 );
if ( var_3 == "MOD_FALLING" || var_1 == self || var_3 == "MOD_MELEE" && !var_10 )
{
self playlocalsound( "mp_war_objective_lost" );
self.gungameprevgunindex = self.gungamegunindex;
self.gungamegunindex = int( max( 0, self.gungamegunindex - 1 ) );
if ( self.gungameprevgunindex > self.gungamegunindex )
{
thread maps\mp\gametypes\_rank::xpeventpopup( "dropped_gun_rank" );
maps\mp\gametypes\_gamescore::giveplayerscore( "dropped_gun_score", self, undefined, 1, 1 );
maps\mp\_utility::setfakeloadoutweaponslot( level.gun_guns[self.gungamegunindex], 1 );
}
if ( var_3 == "MOD_MELEE" )
{
if ( self.gungameprevgunindex )
{
var_1 thread maps\mp\gametypes\_rank::xpeventpopup( "dropped_enemy_gun_rank" );
var_1 thread maps\mp\gametypes\_rank::giverankxp( "dropped_enemy_gun_rank" );
}
var_1.assists++;
var_1 maps\mp\gametypes\_persistence::statsetchild( "round", "sguardWave", var_1.assists );
}
}
else if ( var_3 == "MOD_PISTOL_BULLET" || var_3 == "MOD_RIFLE_BULLET" || var_3 == "MOD_HEAD_SHOT" || var_3 == "MOD_PROJECTILE" || var_3 == "MOD_PROJECTILE_SPLASH" || var_3 == "MOD_IMPACT" || var_3 == "MOD_GRENADE" || var_3 == "MOD_GRENADE_SPLASH" || var_3 == "MOD_MELEE" && var_10 )
{
if ( var_4 != var_1.primaryweapon && !var_1 isvalidthrowingknifekill( var_4 ) )
return;
var_1.gungameprevgunindex = var_1.gungamegunindex;
var_1.gungamegunindex++;
var_1 thread maps\mp\gametypes\_rank::giverankxp( "gained_gun_rank" );
maps\mp\gametypes\_gamescore::giveplayerscore( "gained_gun_score", var_1, self, 1, 1 );
if ( var_1.gungamegunindex == level.gun_guns.size - 1 )
{
maps\mp\_utility::playsoundonplayers( "mp_enemy_obj_captured" );
level thread maps\mp\_utility::teamplayercardsplash( "callout_top_gun_rank", var_1 );
}
if ( var_1.gungamegunindex < level.gun_guns.size )
{
var_1 thread maps\mp\gametypes\_rank::xpeventpopup( "gained_gun_rank" );
var_1 playlocalsound( "mp_war_objective_taken" );
var_1 givenextgun();
var_1 maps\mp\_utility::setfakeloadoutweaponslot( level.gun_guns[var_1.gungamegunindex], 1 );
}
}
}
}
givenextgun( var_0 )
{
var_1 = getnextgun();
self takeallweapons();
maps\mp\_utility::_giveweapon( var_1 );
if ( isdefined( var_0 ) )
self setspawnweapon( var_1 );
self.pers["primaryWeapon"] = var_1;
self.primaryweapon = var_1;
self givestartammo( var_1 );
self switchtoweapon( var_1 );
giveortakethrowingknife( var_1 );
maps\mp\gametypes\_weapons::updatetogglescopestate( var_1 );
if ( self.gungameprevgunindex > self.gungamegunindex )
thread maps\mp\gametypes\_rank::xpeventpopup( "dropped_gun_rank" );
else if ( self.gungameprevgunindex < self.gungamegunindex )
thread maps\mp\gametypes\_rank::xpeventpopup( "gained_gun_rank" );
self.gungameprevgunindex = self.gungamegunindex;
}
getnextgun()
{
var_0 = level.gun_guns[self.gungamegunindex];
return var_0;
}
ontimelimit()
{
level.finalkillcam_winner = "none";
var_0 = gethighestprogressedplayers();
if ( !isdefined( var_0 ) || !var_0.size )
thread maps\mp\gametypes\_gamelogic::endgame( "tie", game["end_reason"]["time_limit_reached"] );
else if ( var_0.size == 1 )
thread maps\mp\gametypes\_gamelogic::endgame( var_0[0], game["end_reason"]["time_limit_reached"] );
else if ( var_0[var_0.size - 1].gungamegunindex > var_0[var_0.size - 2].gungamegunindex )
thread maps\mp\gametypes\_gamelogic::endgame( var_0[var_0.size - 1], game["end_reason"]["time_limit_reached"] );
else
thread maps\mp\gametypes\_gamelogic::endgame( "tie", game["end_reason"]["time_limit_reached"] );
}
gethighestprogressedplayers()
{
var_0 = -1;
var_1 = [];
foreach ( var_3 in level.players )
{
if ( isdefined( var_3.gungamegunindex ) && var_3.gungamegunindex >= var_0 )
{
var_0 = var_3.gungamegunindex;
var_1[var_1.size] = var_3;
}
}
return var_1;
}
refillammo()
{
level endon( "game_ended" );
self endon( "disconnect" );
for (;;)
{
self waittill( "reload" );
self givestartammo( self.primaryweapon );
}
}
refillsinglecountammo()
{
level endon( "game_ended" );
self endon( "disconnect" );
for (;;)
{
if ( maps\mp\_utility::isreallyalive( self ) && self.team != "spectator" && isdefined( self.primaryweapon ) && self getammocount( self.primaryweapon ) == 0 )
{
wait 2;
self notify( "reload" );
wait 1;
continue;
}
wait 0.05;
}
}
setguns()
{
level.gun_guns = [];
level.selectedweapons = [];
var_0 = 0;
if ( isusingmatchrulesdata() )
var_0 = getmatchrulesdata( "gunData", "numGuns" );
if ( var_0 > 20 )
var_0 = 20;
if ( var_0 )
{
for ( var_1 = 0; var_1 < var_0; var_1++ )
level.gun_guns[var_1] = getmatchrulesdata( "gunData", "guns", var_1 );
}
else
{
level.gun_guns[0] = "rand_pistol";
level.gun_guns[1] = "rand_shotgun";
level.gun_guns[2] = "rand_smg";
level.gun_guns[3] = "rand_assault";
level.gun_guns[4] = "rand_lmg";
level.gun_guns[5] = "rand_dmr";
level.gun_guns[6] = "rand_smg";
level.gun_guns[7] = "rand_assault";
level.gun_guns[8] = "rand_lmg2";
level.gun_guns[9] = "rand_launcher";
level.gun_guns[10] = "rand_sniper";
level.gun_guns[11] = "rand_smg";
level.gun_guns[12] = "rand_assault2";
level.gun_guns[13] = "rand_shotgun2";
level.gun_guns[14] = "rand_dmr";
level.gun_guns[15] = "rand_sniper2";
level.gun_guns[16] = "iw6_magnum_mp_acogpistol_akimbo";
level.gun_guns[17] = "iw6_knifeonly_mp";
}
}
setgunsfinal()
{
level.selectedweapons = [];
buildrandomweapontable();
for ( var_0 = 0; var_0 < level.gun_guns.size; var_0++ )
{
var_1 = level.gun_guns[var_0];
if ( maps\mp\_utility::isstrstart( var_1, "rand_" ) )
{
level.gun_guns[var_0] = getrandomweaponfromcategory( var_1 );
continue;
}
var_2 = maps\mp\_utility::getbaseweaponname( level.gun_guns[var_0] );
level.selectedweapons[var_2] = 1;
}
level.selectedweapons = undefined;
}
setspecialloadout()
{
level.gun_loadouts["axis"]["loadoutPrimary"] = "iw6_sc2010";
level.gun_loadouts["axis"]["loadoutPrimaryAttachment"] = "none";
level.gun_loadouts["axis"]["loadoutPrimaryAttachment2"] = "none";
level.gun_loadouts["axis"]["loadoutPrimaryBuff"] = "specialty_null";
level.gun_loadouts["axis"]["loadoutPrimaryCamo"] = "none";
level.gun_loadouts["axis"]["loadoutPrimaryReticle"] = "none";
level.gun_loadouts["axis"]["loadoutSecondary"] = "none";
level.gun_loadouts["axis"]["loadoutSecondaryAttachment"] = "none";
level.gun_loadouts["axis"]["loadoutSecondaryAttachment2"] = "none";
level.gun_loadouts["axis"]["loadoutSecondaryBuff"] = "specialty_null";
level.gun_loadouts["axis"]["loadoutSecondaryCamo"] = "none";
level.gun_loadouts["axis"]["loadoutSecondaryReticle"] = "none";
level.gun_loadouts["axis"]["loadoutEquipment"] = "specialty_null";
level.gun_loadouts["axis"]["loadoutOffhand"] = "none";
level.gun_loadouts["axis"]["loadoutStreakType"] = "assault";
level.gun_loadouts["axis"]["loadoutKillstreak1"] = "none";
level.gun_loadouts["axis"]["loadoutKillstreak2"] = "none";
level.gun_loadouts["axis"]["loadoutKillstreak3"] = "none";
level.gun_loadouts["axis"]["loadoutPerks"] = [ "specialty_quickswap", "specialty_marathon" ];
level.gun_loadouts["axis"]["loadoutJuggernaut"] = 0;
level.gun_loadouts["allies"] = level.gun_loadouts["axis"];
}
buildrandomweapontable()
{
level.weaponcategories = [];
var_0 = 0;
for (;;)
{
var_1 = tablelookupbyrow( "mp/gunGameWeapons.csv", var_0, 0 );
if ( var_1 == "" )
break;
if ( !isdefined( level.weaponcategories[var_1] ) )
level.weaponcategories[var_1] = [];
var_2 = tablelookupbyrow( "mp/gunGameWeapons.csv", var_0, 5 );
if ( var_2 == "" || getdvarint( var_2, 0 ) == 1 )
{
var_3 = [];
var_3["weapon"] = tablelookupbyrow( "mp/gunGameWeapons.csv", var_0, 1 );
var_3["min"] = int( tablelookupbyrow( "mp/gunGameWeapons.csv", var_0, 2 ) );
var_3["max"] = int( tablelookupbyrow( "mp/gunGameWeapons.csv", var_0, 3 ) );
var_3["perk"] = tablelookupbyrow( "mp/gunGameWeapons.csv", var_0, 4 );
level.weaponcategories[var_1][level.weaponcategories[var_1].size] = var_3;
}
var_0++;
}
}
getrandomweaponfromcategory( var_0 )
{
var_1 = level.weaponcategories[var_0];
if ( isdefined( var_1 ) && var_1.size > 0 )
{
var_2 = "";
var_3 = undefined;
var_4 = 0;
for (;;)
{
var_5 = randomintrange( 0, var_1.size );
var_3 = var_1[var_5];
var_6 = maps\mp\_utility::getbaseweaponname( var_3["weapon"] );
if ( !isdefined( level.selectedweapons[var_6] ) || var_4 > var_1.size )
{
level.selectedweapons[var_6] = 1;
var_2 = var_3["weapon"];
break;
}
var_4++;
}
if ( var_2 == var_6 )
{
var_7 = randomintrange( var_3["min"], var_3["max"] + 1 );
var_2 = modifyweapon( var_2, var_7 );
}
return var_2;
}
else
return "none";
}
modifyweapon( var_0, var_1 )
{
var_2 = [];
var_3 = 0;
if ( var_1 > 0 )
{
var_4 = maps\mp\_utility::getweaponattachmentarrayfromstats( var_0 );
if ( var_4.size > 0 )
{
var_5 = getvalidattachments( var_4 );
var_6 = var_5.size;
for ( var_7 = 0; var_7 < var_1; var_7++ )
{
var_8 = "";
while ( var_8 == "" && var_6 > 0 )
{
var_6--;
var_9 = randomint( var_5.size );
if ( maps\mp\gametypes\sotf::attachmentcheck( var_5[var_9], var_2 ) )
{
var_8 = maps\mp\_utility::attachmentmap_tounique( var_5[var_9], var_0 );
var_2[var_2.size] = var_8;
if ( maps\mp\_utility::getattachmenttype( var_8 ) == "rail" )
var_3 = 1;
}
}
}
}
}
var_10 = 0;
var_11 = 0;
var_12 = maps\mp\gametypes\_class::buildweaponname( var_0, var_2, var_10, var_11 );
return var_12;
}
getvalidattachments( var_0 )
{
var_1 = [];
foreach ( var_3 in var_0 )
{
switch ( var_3 )
{
case "silencer":
case "ammoslug":
case "gl":
case "shotgun":
case "firetypesingle":
case "firetypeauto":
case "firetypeburst":
break;
default:
var_1[var_1.size] = var_3;
}
}
return var_1;
}
giveortakethrowingknife( var_0 )
{
if ( maps\mp\gametypes\_weapons::isknifeonly( var_0 ) )
{
maps\mp\_utility::giveperkequipment( "throwingknife_mp", 1 );
self.loadoutperkequipment = "throwingknife_mp";
maps\mp\_utility::giveperk( "specialty_extra_deadly", 0 );
maps\mp\_utility::giveperk( "specialty_scavenger", 0 );
}
else
{
self takeweapon( "throwingknife_mp" );
maps\mp\_utility::giveperkequipment( "specialty_null", 1 );
}
}
isvalidthrowingknifekill( var_0 )
{
return var_0 == "throwingknife_mp" && isdefined( self.loadoutperkequipment ) && self.loadoutperkequipment == "throwingknife_mp";
}
onplayerscore( var_0, var_1, var_2 )
{
var_3 = 0;
if ( var_0 == "gained_gun_score" || var_0 == "dropped_gun_score" )
var_3 = maps\mp\gametypes\_rank::getscoreinfovalue( var_0 );
return var_3;
}

2105
maps/mp/gametypes/horde.gsc Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,967 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::setupcallbacks();
maps\mp\gametypes\_globallogic::setupcallbacks();
if ( isusingmatchrulesdata() )
{
level.initializematchrules = ::initializematchrules;
[[ level.initializematchrules ]]();
level thread maps\mp\_utility::reinitializematchrulesonmigration();
}
else
{
maps\mp\_utility::registertimelimitdvar( level.gametype, 10 );
maps\mp\_utility::setoverridewatchdvar( "scorelimit", 0 );
maps\mp\_utility::registerroundlimitdvar( level.gametype, 1 );
maps\mp\_utility::registerwinlimitdvar( level.gametype, 1 );
maps\mp\_utility::registernumlivesdvar( level.gametype, 0 );
maps\mp\_utility::registerhalftimedvar( level.gametype, 0 );
level.matchrules_numinitialinfected = 1;
level.matchrules_damagemultiplier = 0;
}
setspecialloadouts();
level.teambased = 1;
level.supportintel = 0;
level.disableforfeit = 1;
level.nobuddyspawns = 1;
level.onstartgametype = ::onstartgametype;
level.onspawnplayer = ::onspawnplayer;
level.getspawnpoint = ::getspawnpoint;
level.onplayerkilled = ::onplayerkilled;
level.ondeadevent = ::ondeadevent;
level.ontimelimit = ::ontimelimit;
level.bypassclasschoicefunc = ::alwaysgamemodeclass;
if ( level.matchrules_damagemultiplier )
level.modifyplayerdamage = maps\mp\gametypes\_damage::gamemodemodifyplayerdamage;
game["dialog"]["gametype"] = "infected";
if ( getdvarint( "g_hardcore" ) )
game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"];
game["dialog"]["offense_obj"] = "infct_hint";
}
initializematchrules()
{
maps\mp\_utility::setcommonrulesfrommatchrulesdata();
level.matchrules_numinitialinfected = getmatchrulesdata( "infectData", "numInitialInfected" );
setdynamicdvar( "scr_" + level.gametype + "_numLives", 0 );
maps\mp\_utility::registernumlivesdvar( level.gametype, 0 );
maps\mp\_utility::setoverridewatchdvar( "scorelimit", 0 );
setdynamicdvar( "scr_infect_roundswitch", 0 );
maps\mp\_utility::registerroundswitchdvar( "infect", 0, 0, 9 );
setdynamicdvar( "scr_infect_roundlimit", 1 );
maps\mp\_utility::registerroundlimitdvar( "infect", 1 );
setdynamicdvar( "scr_infect_winlimit", 1 );
maps\mp\_utility::registerwinlimitdvar( "infect", 1 );
setdynamicdvar( "scr_infect_halftime", 0 );
maps\mp\_utility::registerhalftimedvar( "infect", 0 );
setdynamicdvar( "scr_infect_playerrespawndelay", 0 );
setdynamicdvar( "scr_infect_waverespawndelay", 0 );
setdynamicdvar( "scr_player_forcerespawn", 1 );
setdynamicdvar( "scr_team_fftype", 0 );
setdynamicdvar( "scr_infect_promode", 0 );
}
onstartgametype()
{
setclientnamemode( "auto_change" );
maps\mp\_utility::setobjectivetext( "allies", &"OBJECTIVES_INFECT" );
maps\mp\_utility::setobjectivetext( "axis", &"OBJECTIVES_INFECT" );
if ( level.splitscreen )
{
maps\mp\_utility::setobjectivescoretext( "allies", &"OBJECTIVES_INFECT" );
maps\mp\_utility::setobjectivescoretext( "axis", &"OBJECTIVES_INFECT" );
}
else
{
maps\mp\_utility::setobjectivescoretext( "allies", &"OBJECTIVES_INFECT_SCORE" );
maps\mp\_utility::setobjectivescoretext( "axis", &"OBJECTIVES_INFECT_SCORE" );
}
maps\mp\_utility::setobjectivehinttext( "allies", &"OBJECTIVES_INFECT_HINT" );
maps\mp\_utility::setobjectivehinttext( "axis", &"OBJECTIVES_INFECT_HINT" );
initspawns();
var_0[0] = level.gametype;
maps\mp\gametypes\_gameobjects::main( var_0 );
level.quickmessagetoall = 1;
level.blockweapondrops = 1;
level.infect_allowsuicide = 0;
level.infect_chosefirstinfected = 0;
level.infect_choosingfirstinfected = 0;
level.infect_awardedfinalsurvivor = 0;
level.infect_countdowninprogress = 0;
level.infect_teamscores["axis"] = 0;
level.infect_teamscores["allies"] = 0;
level.infect_players = [];
level thread onplayerconnect();
level thread gametimer();
}
gametimer()
{
level endon( "game_ended" );
setdynamicdvar( "scr_infect_timelimit", 0 );
for (;;)
{
level waittill( "update_game_time", var_0 );
if ( !isdefined( var_0 ) )
var_0 = ( maps\mp\_utility::gettimepassed() + 1500 ) / 60000 + 2;
setdynamicdvar( "scr_infect_timelimit", var_0 );
level thread watchhostmigration( var_0 );
}
}
watchhostmigration( var_0 )
{
level notify( "watchHostMigration" );
level endon( "watchHostMigration" );
level endon( "game_ended" );
level waittill( "host_migration_begin" );
setdynamicdvar( "scr_infect_timelimit", 0 );
waittillframeend;
setdynamicdvar( "scr_infect_timelimit", 0 );
level waittill( "host_migration_end" );
level notify( "update_game_time", var_0 );
}
onplayerconnect()
{
for (;;)
{
level waittill( "connected", var_0 );
var_0.gamemodefirstspawn = 1;
var_0.gamemodejoinedatstart = 1;
var_0.infectedrejoined = 0;
if ( maps\mp\_utility::gameflag( "prematch_done" ) )
{
var_0.gamemodejoinedatstart = 0;
if ( isdefined( level.infect_chosefirstinfected ) && level.infect_chosefirstinfected )
var_0.survivalstarttime = gettime();
}
if ( isdefined( level.infect_players[var_0.name] ) )
var_0.infectedrejoined = 1;
var_0 thread monitorsurvivaltime();
}
}
initspawns()
{
level.spawnmins = ( 0, 0, 0 );
level.spawnmaxs = ( 0, 0, 0 );
maps\mp\gametypes\_spawnlogic::addspawnpoints( "allies", "mp_tdm_spawn" );
maps\mp\gametypes\_spawnlogic::addspawnpoints( "axis", "mp_tdm_spawn" );
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter( level.spawnmins, level.spawnmaxs );
setmapcenter( level.mapcenter );
}
alwaysgamemodeclass()
{
return "gamemode";
}
getspawnpoint()
{
if ( self.gamemodefirstspawn )
{
self.gamemodefirstspawn = 0;
self.pers["class"] = "gamemode";
self.pers["lastClass"] = "";
self.class = self.pers["class"];
self.lastclass = self.pers["lastClass"];
var_0 = "allies";
if ( self.infectedrejoined )
var_0 = "axis";
maps\mp\gametypes\_menus::addtoteam( var_0, 1 );
thread monitordisconnect();
}
if ( level.ingraceperiod )
{
var_1 = maps\mp\gametypes\_spawnlogic::getspawnpointarray( "mp_tdm_spawn" );
var_2 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random( var_1 );
}
else
{
var_1 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints( self.pers["team"] );
var_2 = maps\mp\gametypes\_spawnscoring::getspawnpoint_nearteam( var_1 );
}
return var_2;
}
onspawnplayer()
{
self.teamchangedthisframe = undefined;
self.infect_spawnpos = self.origin;
updateteamscores();
if ( !level.infect_choosingfirstinfected )
{
level.infect_choosingfirstinfected = 1;
level thread choosefirstinfected();
}
if ( self.infectedrejoined )
{
if ( !level.infect_allowsuicide )
{
level notify( "infect_stopCountdown" );
level.infect_chosefirstinfected = 1;
level.infect_allowsuicide = 1;
foreach ( var_1 in level.players )
{
if ( isdefined( var_1.infect_isbeingchosen ) )
var_1.infect_isbeingchosen = undefined;
}
}
foreach ( var_1 in level.players )
{
if ( isdefined( var_1.isinitialinfected ) )
var_1 thread setinitialtonormalinfected();
}
if ( level.infect_teamscores["axis"] == 1 )
self.isinitialinfected = 1;
initsurvivaltime( 1 );
}
if ( isdefined( self.isinitialinfected ) )
{
self.pers["gamemodeLoadout"] = level.infect_loadouts["axis_initial"];
self.infected_class = "axis_initial";
}
else
{
self.pers["gamemodeLoadout"] = level.infect_loadouts[self.pers["team"]];
self.infected_class = self.pers["team"];
}
thread onspawnfinished();
level notify( "spawned_player" );
}
spawnwithplayersecondary()
{
var_0 = self getweaponslistprimaries();
var_1 = self getcurrentprimaryweapon();
if ( var_0.size > 1 )
{
if ( var_1 == "iw6_knifeonly_mp" )
{
foreach ( var_3 in var_0 )
{
if ( var_3 != var_1 )
self setspawnweapon( var_3 );
}
}
}
}
setdefaultammoclip( var_0 )
{
var_1 = 1;
if ( isdefined( self.isinitialinfected ) )
{
if ( maps\mp\_utility::isusingdefaultclass( var_0, 1 ) )
var_1 = 0;
}
else if ( maps\mp\_utility::isusingdefaultclass( var_0, 0 ) )
var_1 = 0;
return var_1;
}
onspawnfinished()
{
self endon( "death" );
self endon( "disconnect" );
self waittill( "giveLoadout" );
self.last_infected_class = self.infected_class;
if ( self.pers["team"] == "allies" )
{
spawnwithplayersecondary();
if ( setdefaultammoclip( "allies" ) )
{
self setweaponammoclip( "proximity_explosive_mp", 1 );
self setweaponammoclip( "concussion_grenade_mp", 1 );
}
}
else if ( self.pers["team"] == "axis" )
{
thread setinfectedmsg();
self setmovespeedscale( 1.2 );
if ( setdefaultammoclip( "axis" ) )
self setweaponammoclip( "throwingknife_mp", 1 );
thread setinfectedmodels();
}
self.faux_spawn_infected = undefined;
}
setinfectedmodels()
{
self setmodel( "mp_body_infected_a" );
if ( isdefined( self.headmodel ) )
{
self detach( self.headmodel, "" );
self.headmodel = undefined;
}
self attach( "head_mp_infected", "", 1 );
self.headmodel = "head_mp_infected";
self setviewmodel( "viewhands_gs_hostage" );
self setclothtype( "cloth" );
}
setinfectedmsg()
{
if ( isdefined( self.isinitialinfected ) )
{
if ( !isdefined( self.showninfected ) || !self.showninfected )
{
thread maps\mp\gametypes\_rank::xpeventpopup( "first_infected" );
self.showninfected = 1;
}
}
else if ( isdefined( self.changingtoregularinfected ) )
{
self.changingtoregularinfected = undefined;
if ( isdefined( self.changingtoregularinfectedbykill ) )
{
self.changingtoregularinfectedbykill = undefined;
thread maps\mp\gametypes\_rank::xpeventpopup( "firstblood" );
maps\mp\gametypes\_gamescore::giveplayerscore( "first_infected", self );
thread maps\mp\gametypes\_rank::giverankxp( "first_infected" );
}
}
else if ( !isdefined( self.showninfected ) || !self.showninfected )
{
thread maps\mp\gametypes\_rank::xpeventpopup( "got_infected" );
self.showninfected = 1;
}
}
choosefirstinfected()
{
level endon( "game_ended" );
level endon( "infect_stopCountdown" );
level.infect_allowsuicide = 0;
maps\mp\_utility::gameflagwait( "prematch_done" );
level.infect_countdowninprogress = 1;
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( 1.0 );
setomnvar( "ui_match_start_text", "first_infected_in" );
var_0 = 15;
while ( var_0 > 0 && !level.gameended )
{
setomnvar( "ui_match_start_countdown", var_0 );
var_0--;
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( 1.0 );
}
setomnvar( "ui_match_start_countdown", 0 );
level.infect_countdowninprogress = 0;
var_1 = [];
foreach ( var_3 in level.players )
{
if ( maps\mp\_utility::matchmakinggame() && level.players.size > 1 && var_3 ishost() )
continue;
if ( var_3.team == "spectator" )
continue;
if ( !var_3.hasspawned )
continue;
var_1[var_1.size] = var_3;
}
var_5 = var_1[randomint( var_1.size )];
var_5 setfirstinfected( 1 );
foreach ( var_3 in level.players )
{
if ( var_3 == var_5 )
continue;
var_3.survivalstarttime = gettime();
}
}
setfirstinfected( var_0 )
{
self endon( "disconnect" );
if ( var_0 )
self.infect_isbeingchosen = 1;
while ( !maps\mp\_utility::isreallyalive( self ) || maps\mp\_utility::isusingremote() )
wait 0.05;
if ( isdefined( self.iscarrying ) && self.iscarrying == 1 )
{
self notify( "force_cancel_placement" );
wait 0.05;
}
while ( self ismantling() )
wait 0.05;
while ( !self isonground() && !self isonladder() )
wait 0.05;
if ( maps\mp\_utility::isjuggernaut() )
{
self notify( "lost_juggernaut" );
wait 0.05;
}
while ( !isalive( self ) )
common_scripts\utility::waitframe();
if ( var_0 )
{
maps\mp\gametypes\_menus::addtoteam( "axis", undefined, 1 );
thread monitordisconnect();
level.infect_chosefirstinfected = 1;
self.infect_isbeingchosen = undefined;
level notify( "update_game_time" );
updateteamscores();
level.infect_allowsuicide = 1;
}
self.isinitialinfected = 1;
self.pers["gamemodeLoadout"] = level.infect_loadouts["axis_initial"];
if ( isdefined( self.setspawnpoint ) )
maps\mp\perks\_perkfunctions::deleteti( self.setspawnpoint );
var_1 = spawn( "script_model", self.origin );
var_1.angles = self.angles;
var_1.playerspawnpos = self.origin;
var_1.notti = 1;
self.setspawnpoint = var_1;
self notify( "faux_spawn" );
self.faux_spawn_stance = self getstance();
self.faux_spawn_infected = 1;
thread maps\mp\gametypes\_playerlogic::spawnplayer( 1 );
if ( var_0 )
level.infect_players[self.name] = 1;
foreach ( var_3 in level.players )
var_3 thread maps\mp\gametypes\_hud_message::splashnotify( "first_infected" );
level thread maps\mp\_utility::teamplayercardsplash( "callout_first_infected", self );
maps\mp\_utility::playsoundonplayers( "mp_enemy_obj_captured" );
initsurvivaltime( 1 );
}
setinitialtonormalinfected( var_0, var_1 )
{
level endon( "game_ended" );
self.isinitialinfected = undefined;
self.changingtoregularinfected = 1;
if ( isdefined( var_0 ) )
self.changingtoregularinfectedbykill = 1;
while ( !maps\mp\_utility::isreallyalive( self ) )
wait 0.05;
if ( isdefined( self.iscarrying ) && self.iscarrying == 1 )
{
self notify( "force_cancel_placement" );
wait 0.05;
}
while ( self ismantling() )
wait 0.05;
while ( !self isonground() )
wait 0.05;
if ( maps\mp\_utility::isjuggernaut() )
{
self notify( "lost_juggernaut" );
wait 0.05;
}
if ( isdefined( var_1 ) && var_1 == "MOD_MELEE" )
wait 1.2;
while ( !maps\mp\_utility::isreallyalive( self ) )
wait 0.05;
self.pers["gamemodeLoadout"] = level.infect_loadouts["axis"];
if ( isdefined( self.setspawnpoint ) )
maps\mp\perks\_perkfunctions::deleteti( self.setspawnpoint );
var_2 = spawn( "script_model", self.origin );
var_2.angles = self.angles;
var_2.playerspawnpos = self.origin;
var_2.notti = 1;
self.setspawnpoint = var_2;
self notify( "faux_spawn" );
self.faux_spawn_stance = self getstance();
self.faux_spawn_infected = 1;
thread maps\mp\gametypes\_playerlogic::spawnplayer( 1 );
}
onplayerkilled( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
var_10 = 0;
var_11 = 0;
if ( self.team == "allies" && isdefined( var_1 ) )
{
if ( isplayer( var_1 ) && var_1 != self )
var_10 = 1;
else if ( level.infect_allowsuicide && ( var_1 == self || !isplayer( var_1 ) ) )
{
var_10 = 1;
var_11 = 1;
}
}
if ( isplayer( var_1 ) && var_1.team == "allies" && var_1 != self )
{
var_1.pers["killsAsSurvivor"]++;
var_1 maps\mp\gametypes\_persistence::statsetchild( "round", "killsAsSurvivor", var_1.pers["killsAsSurvivor"] );
}
else if ( isplayer( var_1 ) && var_1.team == "axis" && var_1 != self )
{
var_1.pers["killsAsInfected"]++;
var_1 maps\mp\gametypes\_persistence::statsetchild( "round", "killsAsInfected", var_1.pers["killsAsInfected"] );
}
if ( var_10 )
{
self.teamchangedthisframe = 1;
maps\mp\gametypes\_menus::addtoteam( "axis" );
thread monitordisconnect();
level notify( "update_game_time" );
updateteamscores();
level.infect_players[self.name] = 1;
if ( var_11 )
{
if ( level.infect_teamscores["axis"] > 1 )
{
foreach ( var_13 in level.players )
{
if ( isdefined( var_13.isinitialinfected ) )
var_13 thread setinitialtonormalinfected();
}
}
}
else if ( isdefined( var_1.isinitialinfected ) )
var_1 thread setinitialtonormalinfected( 1, var_3 );
else
{
var_1 thread maps\mp\gametypes\_rank::xpeventpopup( "infected_survivor" );
maps\mp\gametypes\_gamescore::giveplayerscore( "infected_survivor", var_1, self, 1 );
var_1 thread maps\mp\gametypes\_rank::giverankxp( "infected_survivor" );
}
if ( level.infect_teamscores["allies"] > 1 )
{
maps\mp\_utility::playsoundonplayers( "mp_enemy_obj_captured", "allies" );
maps\mp\_utility::playsoundonplayers( "mp_war_objective_taken", "axis" );
thread maps\mp\_utility::teamplayercardsplash( "callout_got_infected", self, "allies" );
if ( !var_11 )
{
thread maps\mp\_utility::teamplayercardsplash( "callout_infected", var_1, "axis" );
foreach ( var_13 in level.players )
{
if ( !maps\mp\_utility::isreallyalive( var_13 ) || self.sessionstate == "spectator" )
continue;
if ( var_13.team == "allies" && var_13 != self && distance( var_13.infect_spawnpos, var_13.origin ) > 32 )
{
var_13 thread maps\mp\gametypes\_rank::xpeventpopup( "survivor" );
maps\mp\gametypes\_gamescore::giveplayerscore( "survivor", var_13, undefined, 1 );
var_13 thread maps\mp\gametypes\_rank::giverankxp( "survivor" );
}
}
}
}
else if ( level.infect_teamscores["allies"] == 1 )
onfinalsurvivor();
else if ( level.infect_teamscores["allies"] == 0 )
onsurvivorseliminated();
setsurvivaltime( 1 );
}
}
onfinalsurvivor()
{
maps\mp\_utility::playsoundonplayers( "mp_obj_captured" );
foreach ( var_1 in level.players )
{
if ( !isdefined( var_1 ) )
continue;
if ( var_1.team == "allies" )
{
var_1 thread maps\mp\gametypes\_rank::xpeventpopup( "final_survivor" );
if ( !level.infect_awardedfinalsurvivor )
{
if ( var_1.gamemodejoinedatstart && isdefined( var_1.infect_spawnpos ) && distance( var_1.infect_spawnpos, var_1.origin ) > 32 )
{
maps\mp\gametypes\_gamescore::giveplayerscore( "final_survivor", var_1, undefined, 1 );
var_1 thread maps\mp\gametypes\_rank::giverankxp( "final_survivor" );
}
level.infect_awardedfinalsurvivor = 1;
}
thread maps\mp\_utility::teamplayercardsplash( "callout_final_survivor", var_1 );
if ( !var_1 maps\mp\_utility::isjuggernaut() )
level thread finalsurvivoruav( var_1 );
break;
}
}
}
finalsurvivoruav( var_0 )
{
level endon( "game_ended" );
var_0 endon( "disconnect" );
var_0 endon( "eliminated" );
level endon( "infect_lateJoiner" );
level thread enduavonlatejoiner( var_0 );
var_1 = 0;
level.radarmode["axis"] = "normal_radar";
foreach ( var_3 in level.players )
{
if ( var_3.team == "axis" )
var_3.radarmode = "normal_radar";
}
setteamradarstrength( "axis", 1 );
for (;;)
{
var_5 = var_0.origin;
wait 4;
if ( var_1 )
{
setteamradar( "axis", 0 );
var_1 = 0;
}
wait 6;
if ( distance( var_5, var_0.origin ) < 200 )
{
setteamradar( "axis", 1 );
var_1 = 1;
foreach ( var_3 in level.players )
var_3 playlocalsound( "recondrone_tag" );
}
}
}
enduavonlatejoiner( var_0 )
{
level endon( "game_ended" );
var_0 endon( "disconnect" );
var_0 endon( "eliminated" );
for (;;)
{
if ( level.infect_teamscores["allies"] > 1 )
{
level notify( "infect_lateJoiner" );
wait 0.05;
setteamradar( "axis", 0 );
break;
}
wait 0.05;
}
}
monitordisconnect()
{
level endon( "game_ended" );
self endon( "eliminated" );
self notify( "infect_monitor_disconnect" );
self endon( "infect_monitor_disconnect" );
var_0 = self.team;
if ( !isdefined( var_0 ) && isdefined( self.bot_team ) )
var_0 = self.bot_team;
self waittill( "disconnect" );
updateteamscores();
if ( isdefined( self.infect_isbeingchosen ) || level.infect_chosefirstinfected )
{
if ( level.infect_teamscores["axis"] && level.infect_teamscores["allies"] )
{
if ( var_0 == "allies" && level.infect_teamscores["allies"] == 1 )
onfinalsurvivor();
else if ( var_0 == "axis" && level.infect_teamscores["axis"] == 1 )
{
foreach ( var_2 in level.players )
{
if ( var_2 != self && var_2.team == "axis" )
var_2 setfirstinfected( 0 );
}
}
}
else if ( level.infect_teamscores["allies"] == 0 )
onsurvivorseliminated();
else if ( level.infect_teamscores["axis"] == 0 )
{
if ( level.infect_teamscores["allies"] == 1 )
{
level.finalkillcam_winner = "allies";
level thread maps\mp\gametypes\_gamelogic::endgame( "allies", game["end_reason"]["axis_eliminated"] );
}
else if ( level.infect_teamscores["allies"] > 1 )
{
level.infect_chosefirstinfected = 0;
level thread choosefirstinfected();
}
}
}
else if ( level.infect_countdowninprogress && level.infect_teamscores["allies"] == 0 && level.infect_teamscores["axis"] == 0 )
{
level notify( "infect_stopCountdown" );
level.infect_choosingfirstinfected = 0;
setomnvar( "ui_match_start_countdown", 0 );
}
self.isinitialinfected = undefined;
}
ondeadevent( var_0 )
{
return;
}
ontimelimit()
{
level.finalkillcam_winner = "allies";
level thread maps\mp\gametypes\_gamelogic::endgame( "allies", game["end_reason"]["time_limit_reached"] );
}
onsurvivorseliminated()
{
level.finalkillcam_winner = "axis";
level thread maps\mp\gametypes\_gamelogic::endgame( "axis", game["end_reason"]["allies_eliminated"] );
}
getteamsize( var_0 )
{
var_1 = 0;
foreach ( var_3 in level.players )
{
if ( var_3.sessionstate == "spectator" && !var_3.spectatekillcam )
continue;
if ( var_3.team == var_0 )
var_1++;
}
return var_1;
}
updateteamscores()
{
level.infect_teamscores["allies"] = getteamsize( "allies" );
game["teamScores"]["allies"] = level.infect_teamscores["allies"];
setteamscore( "allies", level.infect_teamscores["allies"] );
level.infect_teamscores["axis"] = getteamsize( "axis" );
game["teamScores"]["axis"] = level.infect_teamscores["axis"];
setteamscore( "axis", level.infect_teamscores["axis"] );
}
setspecialloadouts()
{
if ( maps\mp\_utility::isusingdefaultclass( "allies", 0 ) )
level.infect_loadouts["allies"] = maps\mp\_utility::getmatchrulesspecialclass( "allies", 0 );
else
{
level.infect_loadouts["allies"]["loadoutPrimary"] = "iw6_maul";
level.infect_loadouts["allies"]["loadoutPrimaryAttachment"] = "none";
level.infect_loadouts["allies"]["loadoutPrimaryAttachment2"] = "none";
level.infect_loadouts["allies"]["loadoutPrimaryBuff"] = "specialty_longerrange";
level.infect_loadouts["allies"]["loadoutPrimaryCamo"] = "none";
level.infect_loadouts["allies"]["loadoutPrimaryReticle"] = "none";
level.infect_loadouts["allies"]["loadoutSecondary"] = "none";
level.infect_loadouts["allies"]["loadoutSecondaryAttachment"] = "none";
level.infect_loadouts["allies"]["loadoutSecondaryAttachment2"] = "none";
level.infect_loadouts["allies"]["loadoutSecondaryBuff"] = "specialty_null";
level.infect_loadouts["allies"]["loadoutSecondaryCamo"] = "none";
level.infect_loadouts["allies"]["loadoutSecondaryReticle"] = "none";
level.infect_loadouts["allies"]["loadoutEquipment"] = "proximity_explosive_mp";
level.infect_loadouts["allies"]["loadoutOffhand"] = "concussion_grenade_mp";
level.infect_loadouts["allies"]["loadoutStreakType"] = "assault";
level.infect_loadouts["allies"]["loadoutKillstreak1"] = "none";
level.infect_loadouts["allies"]["loadoutKillstreak2"] = "none";
level.infect_loadouts["allies"]["loadoutKillstreak3"] = "none";
level.infect_loadouts["allies"]["loadoutJuggernaut"] = 0;
level.infect_loadouts["allies"]["loadoutPerks"] = [ "specialty_scavenger", "specialty_quickdraw", "specialty_quieter" ];
}
if ( maps\mp\_utility::isusingdefaultclass( "axis", 1 ) )
{
level.infect_loadouts["axis_initial"] = maps\mp\_utility::getmatchrulesspecialclass( "axis", 1 );
level.infect_loadouts["axis_initial"]["loadoutStreakType"] = "assault";
level.infect_loadouts["axis_initial"]["loadoutKillstreak1"] = "none";
level.infect_loadouts["axis_initial"]["loadoutKillstreak2"] = "none";
level.infect_loadouts["axis_initial"]["loadoutKillstreak3"] = "none";
}
else
{
level.infect_loadouts["axis_initial"]["loadoutPrimary"] = "iw6_m9a1";
level.infect_loadouts["axis_initial"]["loadoutPrimaryAttachment"] = "none";
level.infect_loadouts["axis_initial"]["loadoutPrimaryAttachment2"] = "none";
level.infect_loadouts["axis_initial"]["loadoutPrimaryBuff"] = "specialty_bling";
level.infect_loadouts["axis_initial"]["loadoutPrimaryCamo"] = "none";
level.infect_loadouts["axis_initial"]["loadoutPrimaryReticle"] = "none";
level.infect_loadouts["axis_initial"]["loadoutSecondary"] = "none";
level.infect_loadouts["axis_initial"]["loadoutSecondaryAttachment"] = "none";
level.infect_loadouts["axis_initial"]["loadoutSecondaryAttachment2"] = "none";
level.infect_loadouts["axis_initial"]["loadoutSecondaryBuff"] = "specialty_null";
level.infect_loadouts["axis_initial"]["loadoutSecondaryCamo"] = "none";
level.infect_loadouts["axis_initial"]["loadoutSecondaryReticle"] = "none";
level.infect_loadouts["axis_initial"]["loadoutEquipment"] = "throwingknife_mp";
level.infect_loadouts["axis_initial"]["loadoutOffhand"] = "specialty_tacticalinsertion";
level.infect_loadouts["axis_initial"]["loadoutStreakType"] = "assault";
level.infect_loadouts["axis_initial"]["loadoutKillstreak1"] = "none";
level.infect_loadouts["axis_initial"]["loadoutKillstreak2"] = "none";
level.infect_loadouts["axis_initial"]["loadoutKillstreak3"] = "none";
level.infect_loadouts["axis_initial"]["loadoutJuggernaut"] = 0;
level.infect_loadouts["axis_initial"]["loadoutPerks"] = [ "specialty_longersprint", "specialty_quickdraw", "specialty_quieter", "specialty_falldamage", "specialty_bulletaccuracy" ];
}
if ( maps\mp\_utility::isusingdefaultclass( "axis", 0 ) )
{
level.infect_loadouts["axis"] = maps\mp\_utility::getmatchrulesspecialclass( "axis", 0 );
level.infect_loadouts["axis"]["loadoutStreakType"] = "assault";
level.infect_loadouts["axis"]["loadoutKillstreak1"] = "none";
level.infect_loadouts["axis"]["loadoutKillstreak2"] = "none";
level.infect_loadouts["axis"]["loadoutKillstreak3"] = "none";
}
else
{
level.infect_loadouts["axis"]["loadoutPrimary"] = "iw6_knifeonly";
level.infect_loadouts["axis"]["loadoutPrimaryAttachment"] = "none";
level.infect_loadouts["axis"]["loadoutPrimaryAttachment2"] = "none";
level.infect_loadouts["axis"]["loadoutPrimaryBuff"] = "specialty_null";
level.infect_loadouts["axis"]["loadoutPrimaryCamo"] = "none";
level.infect_loadouts["axis"]["loadoutPrimaryReticle"] = "none";
level.infect_loadouts["axis"]["loadoutSecondary"] = "none";
level.infect_loadouts["axis"]["loadoutSecondaryAttachment"] = "none";
level.infect_loadouts["axis"]["loadoutSecondaryAttachment2"] = "none";
level.infect_loadouts["axis"]["loadoutSecondaryBuff"] = "specialty_null";
level.infect_loadouts["axis"]["loadoutSecondaryCamo"] = "none";
level.infect_loadouts["axis"]["loadoutSecondaryReticle"] = "none";
level.infect_loadouts["axis"]["loadoutEquipment"] = "throwingknife_mp";
level.infect_loadouts["axis"]["loadoutOffhand"] = "specialty_tacticalinsertion";
level.infect_loadouts["axis"]["loadoutStreakType"] = "assault";
level.infect_loadouts["axis"]["loadoutKillstreak1"] = "none";
level.infect_loadouts["axis"]["loadoutKillstreak2"] = "none";
level.infect_loadouts["axis"]["loadoutKillstreak3"] = "none";
level.infect_loadouts["axis"]["loadoutJuggernaut"] = 0;
level.infect_loadouts["axis"]["loadoutPerks"] = [ "specialty_longersprint", "specialty_quickdraw", "specialty_quieter", "specialty_falldamage" ];
}
}
monitorsurvivaltime()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "infected" );
level endon( "game_ended" );
for (;;)
{
if ( !level.infect_chosefirstinfected || !isdefined( self.survivalstarttime ) || !isalive( self ) )
{
wait 0.05;
continue;
}
setsurvivaltime( 0 );
wait 1.0;
}
}
initsurvivaltime( var_0 )
{
maps\mp\_utility::setextrascore0( 0 );
if ( isdefined( var_0 ) && var_0 )
{
self notify( "infected" );
self.extrascore1 = 1;
}
}
setsurvivaltime( var_0 )
{
if ( !isdefined( self.survivalstarttime ) )
self.survivalstarttime = self.spawntime;
var_1 = int( ( gettime() - self.survivalstarttime ) / 1000 );
if ( var_1 > 999 )
var_1 = 999;
maps\mp\_utility::setextrascore0( var_1 );
if ( isdefined( var_0 ) && var_0 )
{
self notify( "infected" );
self.extrascore1 = 1;
}
}

1248
maps/mp/gametypes/mugger.gsc Normal file

File diff suppressed because it is too large Load Diff

1041
maps/mp/gametypes/sd.gsc Normal file

File diff suppressed because it is too large Load Diff

1410
maps/mp/gametypes/siege.gsc Normal file

File diff suppressed because it is too large Load Diff

841
maps/mp/gametypes/sotf.gsc Normal file
View File

@ -0,0 +1,841 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
if ( getdvar( "mapname" ) == "mp_background" )
return;
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::setupcallbacks();
maps\mp\gametypes\_globallogic::setupcallbacks();
if ( isusingmatchrulesdata() )
{
level.initializematchrules = ::initializematchrules;
[[ level.initializematchrules ]]();
level thread maps\mp\_utility::reinitializematchrulesonmigration();
}
else
{
maps\mp\_utility::registerscorelimitdvar( level.gametype, 65 );
maps\mp\_utility::registertimelimitdvar( level.gametype, 10 );
maps\mp\_utility::registerroundlimitdvar( level.gametype, 1 );
maps\mp\_utility::registerwinlimitdvar( level.gametype, 1 );
maps\mp\_utility::registernumlivesdvar( level.gametype, 0 );
maps\mp\_utility::registerhalftimedvar( level.gametype, 0 );
level.matchrules_randomize = 0;
level.matchrules_damagemultiplier = 0;
level.matchrules_vampirism = 0;
}
setplayerloadout();
level.teambased = 1;
level.overridecrateusetime = 500;
level.onprecachegametype = ::onprecachegametype;
level.onstartgametype = ::onstartgametype;
level.getspawnpoint = ::getspawnpoint;
level.onspawnplayer = ::onspawnplayer;
level.onnormaldeath = ::onnormaldeath;
level.customcratefunc = ::sotfcratecontents;
level.cratekill = ::cratekill;
level.pickupweaponhandler = ::pickupweaponhandler;
level.iconvisall = ::iconvisall;
level.objvisall = ::objvisall;
level.supportintel = 0;
level.supportnuke = 0;
level.vehicleoverride = "littlebird_neutral_mp";
level.usedlocations = [];
level.emptylocations = 1;
level.firstcratedrop = 1;
if ( level.matchrules_damagemultiplier || level.matchrules_vampirism )
level.modifyplayerdamage = maps\mp\gametypes\_damage::gamemodemodifyplayerdamage;
game["dialog"]["gametype"] = "hunted";
if ( getdvarint( "g_hardcore" ) )
game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"];
game["dialog"]["offense_obj"] = "sotf_hint";
game["dialog"]["defense_obj"] = "sotf_hint";
}
initializematchrules()
{
maps\mp\_utility::setcommonrulesfrommatchrulesdata();
setdynamicdvar( "scr_sotf_crateamount", getmatchrulesdata( "sotfData", "crateAmount" ) );
setdynamicdvar( "scr_sotf_crategunamount", getmatchrulesdata( "sotfData", "crateGunAmount" ) );
setdynamicdvar( "scr_sotf_cratetimer", getmatchrulesdata( "sotfData", "crateDropTimer" ) );
setdynamicdvar( "scr_sotf_roundlimit", 1 );
maps\mp\_utility::registerroundlimitdvar( "sotf", 1 );
setdynamicdvar( "scr_sotf_winlimit", 1 );
maps\mp\_utility::registerwinlimitdvar( "sotf", 1 );
setdynamicdvar( "scr_sotf_halftime", 0 );
maps\mp\_utility::registerhalftimedvar( "sotf", 0 );
setdynamicdvar( "scr_sotf_promode", 0 );
}
onprecachegametype()
{
level._effect["signal_chest_drop"] = loadfx( "smoke/signal_smoke_airdrop" );
level._effect["signal_chest_drop_mover"] = loadfx( "smoke/airdrop_flare_mp_effect_now" );
}
onstartgametype()
{
setclientnamemode( "auto_change" );
if ( !isdefined( game["switchedsides"] ) )
game["switchedsides"] = 0;
if ( game["switchedsides"] )
{
var_0 = game["attackers"];
var_1 = game["defenders"];
game["attackers"] = var_1;
game["defenders"] = var_0;
}
var_2 = &"OBJECTIVES_WAR";
var_3 = &"OBJECTIVES_WAR_SCORE";
var_4 = &"OBJECTIVES_WAR_HINT";
maps\mp\_utility::setobjectivetext( "allies", var_2 );
maps\mp\_utility::setobjectivetext( "axis", var_2 );
if ( level.splitscreen )
{
maps\mp\_utility::setobjectivescoretext( "allies", var_2 );
maps\mp\_utility::setobjectivescoretext( "axis", var_2 );
}
else
{
maps\mp\_utility::setobjectivescoretext( "allies", var_3 );
maps\mp\_utility::setobjectivescoretext( "axis", var_3 );
}
maps\mp\_utility::setobjectivehinttext( "allies", var_4 );
maps\mp\_utility::setobjectivehinttext( "axis", var_4 );
initspawns();
var_5 = [];
maps\mp\gametypes\_gameobjects::main( var_5 );
level thread sotf();
}
initspawns()
{
level.spawnmins = ( 0, 0, 0 );
level.spawnmaxs = ( 0, 0, 0 );
maps\mp\gametypes\_spawnlogic::addstartspawnpoints( "mp_tdm_spawn_allies_start" );
maps\mp\gametypes\_spawnlogic::addstartspawnpoints( "mp_tdm_spawn_axis_start" );
maps\mp\gametypes\_spawnlogic::addspawnpoints( "allies", "mp_tdm_spawn" );
maps\mp\gametypes\_spawnlogic::addspawnpoints( "axis", "mp_tdm_spawn" );
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter( level.spawnmins, level.spawnmaxs );
setmapcenter( level.mapcenter );
}
setplayerloadout()
{
definechestweapons();
var_0 = getrandomweapon( level.pistolarray );
var_1 = maps\mp\_utility::getbaseweaponname( var_0["name"] );
var_2 = tablelookup( "mp/sotfWeapons.csv", 2, var_1, 0 );
setomnvar( "ui_sotf_pistol", int( var_2 ) );
level.sotf_loadouts["axis"]["loadoutPrimary"] = "none";
level.sotf_loadouts["axis"]["loadoutPrimaryAttachment"] = "none";
level.sotf_loadouts["axis"]["loadoutPrimaryAttachment2"] = "none";
level.sotf_loadouts["axis"]["loadoutPrimaryBuff"] = "specialty_null";
level.sotf_loadouts["axis"]["loadoutPrimaryCamo"] = "none";
level.sotf_loadouts["axis"]["loadoutPrimaryReticle"] = "none";
level.sotf_loadouts["axis"]["loadoutSecondary"] = var_0["name"];
level.sotf_loadouts["axis"]["loadoutSecondaryAttachment"] = "none";
level.sotf_loadouts["axis"]["loadoutSecondaryAttachment2"] = "none";
level.sotf_loadouts["axis"]["loadoutSecondaryBuff"] = "specialty_null";
level.sotf_loadouts["axis"]["loadoutSecondaryCamo"] = "none";
level.sotf_loadouts["axis"]["loadoutSecondaryReticle"] = "none";
level.sotf_loadouts["axis"]["loadoutEquipment"] = "throwingknife_mp";
level.sotf_loadouts["axis"]["loadoutOffhand"] = "flash_grenade_mp";
level.sotf_loadouts["axis"]["loadoutStreakType"] = "assault";
level.sotf_loadouts["axis"]["loadoutKillstreak1"] = "none";
level.sotf_loadouts["axis"]["loadoutKillstreak2"] = "none";
level.sotf_loadouts["axis"]["loadoutKillstreak3"] = "none";
level.sotf_loadouts["axis"]["loadoutJuggernaut"] = 0;
level.sotf_loadouts["axis"]["loadoutPerks"] = [ "specialty_longersprint", "specialty_extra_deadly" ];
level.sotf_loadouts["allies"] = level.sotf_loadouts["axis"];
}
getspawnpoint()
{
var_0 = self.pers["team"];
if ( game["switchedsides"] )
var_0 = maps\mp\_utility::getotherteam( var_0 );
if ( maps\mp\gametypes\_spawnlogic::shoulduseteamstartspawn() )
{
var_1 = maps\mp\gametypes\_spawnlogic::getspawnpointarray( "mp_tdm_spawn_" + var_0 + "_start" );
var_2 = maps\mp\gametypes\_spawnlogic::getspawnpoint_startspawn( var_1 );
}
else
{
var_1 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints( var_0 );
var_2 = maps\mp\gametypes\_spawnscoring::getspawnpoint_nearteam( var_1 );
}
return var_2;
}
onspawnplayer()
{
self.pers["class"] = "gamemode";
self.pers["lastClass"] = "";
self.class = self.pers["class"];
self.lastclass = self.pers["lastClass"];
self.pers["gamemodeLoadout"] = level.sotf_loadouts[self.pers["team"]];
level notify( "sotf_player_spawned", self );
self.oldprimarygun = undefined;
self.newprimarygun = undefined;
thread waitloadoutdone();
}
waitloadoutdone()
{
level endon( "game_ended" );
self endon( "disconnect" );
self waittill( "giveLoadout" );
var_0 = self getcurrentweapon();
self setweaponammostock( var_0, 0 );
self.oldprimarygun = var_0;
thread pickupweaponhandler();
}
onplayerscore( var_0, var_1, var_2 )
{
if ( var_0 == "kill" )
{
var_3 = maps\mp\gametypes\_rank::getscoreinfovalue( "score_increment" );
return var_3;
}
return 0;
}
onnormaldeath( var_0, var_1, var_2 )
{
var_1 perkwatcher();
var_3 = maps\mp\gametypes\_rank::getscoreinfovalue( "score_increment" );
level maps\mp\gametypes\_gamescore::giveteamscoreforobjective( var_1.pers["team"], var_3 );
if ( game["state"] == "postgame" && game["teamScores"][var_1.team] > game["teamScores"][level.otherteam[var_1.team]] )
var_1.finalkill = 1;
}
sotf()
{
level thread startspawnchest();
}
startspawnchest()
{
level endon( "game_ended" );
self endon( "disconnect" );
var_0 = getdvarint( "scr_sotf_crateamount", 1 );
var_1 = getdvarint( "scr_sotf_cratetimer", 30 );
level waittill( "sotf_player_spawned", var_2 );
for (;;)
{
if ( !isalive( var_2 ) )
{
var_2 = findnewowner( level.players );
if ( !isdefined( var_2 ) )
continue;
}
else
{
while ( isalive( var_2 ) )
{
if ( level.emptylocations )
{
for ( var_3 = 0; var_3 < var_0; var_3++ )
level thread spawnchests( var_2 );
level thread showcratesplash( "sotf_crate_incoming" );
wait( var_1 );
continue;
}
wait 0.05;
}
}
}
}
showcratesplash( var_0 )
{
foreach ( var_2 in level.players )
var_2 thread maps\mp\gametypes\_hud_message::splashnotify( var_0 );
}
findnewowner( var_0 )
{
foreach ( var_2 in var_0 )
{
if ( isalive( var_2 ) )
return var_2;
}
level waittill( "sotf_player_spawned", var_4 );
return var_4;
}
spawnchests( var_0 )
{
var_1 = common_scripts\utility::getstructarray( "sotf_chest_spawnpoint", "targetname" );
if ( level.firstcratedrop )
{
var_2 = getcenterpoint( var_1 );
level.firstcratedrop = 0;
}
else
var_2 = getrandompoint( var_1 );
if ( isdefined( var_2 ) )
{
playfxatpoint( var_2 );
level thread maps\mp\killstreaks\_airdrop::doflyby( var_0, var_2, randomfloat( 360 ), "airdrop_sotf" );
}
}
playfxatpoint( var_0 )
{
var_1 = var_0 + ( 0, 0, 30 );
var_2 = var_0 + ( 0, 0, -1000 );
var_3 = bullettrace( var_1, var_2, 0, undefined );
var_4 = var_3["position"] + ( 0, 0, 1 );
var_5 = var_3["entity"];
if ( isdefined( var_5 ) )
{
for ( var_6 = var_5 getlinkedparent(); isdefined( var_6 ); var_6 = var_5 getlinkedparent() )
var_5 = var_6;
}
if ( isdefined( var_5 ) )
{
var_7 = spawn( "script_model", var_4 );
var_7 setmodel( "tag_origin" );
var_7.angles = ( 90, randomintrange( -180, 179 ), 0 );
var_7 linkto( var_5 );
thread playlinkedsmokeeffect( common_scripts\utility::getfx( "signal_chest_drop_mover" ), var_7 );
}
else
playfx( common_scripts\utility::getfx( "signal_chest_drop" ), var_4 );
}
playlinkedsmokeeffect( var_0, var_1 )
{
level endon( "game_ended" );
wait 0.05;
playfxontag( var_0, var_1, "tag_origin" );
wait 6;
stopfxontag( var_0, var_1, "tag_origin" );
wait 0.05;
var_1 delete();
}
getcenterpoint( var_0 )
{
var_1 = undefined;
var_2 = undefined;
foreach ( var_4 in var_0 )
{
var_5 = distance2dsquared( level.mapcenter, var_4.origin );
if ( !isdefined( var_1 ) || var_5 < var_2 )
{
var_1 = var_4;
var_2 = var_5;
}
}
level.usedlocations[level.usedlocations.size] = var_1.origin;
return var_1.origin;
}
getrandompoint( var_0 )
{
var_1 = [];
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
{
var_3 = 0;
if ( isdefined( level.usedlocations ) && level.usedlocations.size > 0 )
{
foreach ( var_5 in level.usedlocations )
{
if ( var_0[var_2].origin == var_5 )
{
var_3 = 1;
break;
}
}
if ( var_3 )
continue;
var_1[var_1.size] = var_0[var_2].origin;
continue;
}
var_1[var_1.size] = var_0[var_2].origin;
}
if ( var_1.size > 0 )
{
var_7 = randomint( var_1.size );
var_8 = var_1[var_7];
level.usedlocations[level.usedlocations.size] = var_8;
return var_8;
}
level.emptylocations = 0;
return undefined;
}
definechestweapons()
{
var_0 = [];
var_1 = [];
for ( var_2 = 0; tablelookupbyrow( "mp/sotfWeapons.csv", var_2, 0 ) != ""; var_2++ )
{
var_3 = tablelookupistringbyrow( "mp/sotfWeapons.csv", var_2, 2 );
var_4 = tablelookupistringbyrow( "mp/sotfWeapons.csv", var_2, 1 );
var_5 = isselectableweapon( var_3 );
if ( isdefined( var_4 ) && var_5 && var_4 == "weapon_pistol" )
{
var_6 = 30;
var_0[var_0.size]["name"] = var_3;
var_0[var_0.size - 1]["weight"] = var_6;
continue;
}
if ( isdefined( var_4 ) && var_5 && ( var_4 == "weapon_shotgun" || var_4 == "weapon_smg" || var_4 == "weapon_assault" || var_4 == "weapon_sniper" || var_4 == "weapon_dmr" || var_4 == "weapon_lmg" || var_4 == "weapon_projectile" ) )
{
var_6 = 0;
switch ( var_4 )
{
case "weapon_shotgun":
var_6 = 35;
break;
case "weapon_assault":
case "weapon_smg":
var_6 = 25;
break;
case "weapon_dmr":
case "weapon_sniper":
var_6 = 15;
break;
case "weapon_lmg":
var_6 = 10;
break;
case "weapon_projectile":
var_6 = 30;
break;
}
var_1[var_1.size]["name"] = var_3 + "_mp";
var_1[var_1.size - 1]["group"] = var_4;
var_1[var_1.size - 1]["weight"] = var_6;
continue;
}
continue;
}
var_1 = sortbyweight( var_1 );
level.pistolarray = var_0;
level.weaponarray = var_1;
}
sotfcratecontents( var_0, var_1 )
{
maps\mp\killstreaks\_airdrop::addcratetype( "airdrop_sotf", "sotf_weapon", 100, ::sotfcratethink, var_0, var_0, &"KILLSTREAKS_HINTS_WEAPON_PICKUP" );
}
sotfcratethink( var_0 )
{
self endon( "death" );
self endon( "restarting_physics" );
level endon( "game_ended" );
if ( isdefined( game["strings"][self.cratetype + "_hint"] ) )
var_1 = game["strings"][self.cratetype + "_hint"];
else
var_1 = &"PLATFORM_GET_KILLSTREAK";
var_2 = "icon_hunted";
maps\mp\killstreaks\_airdrop::cratesetupforuse( var_1, var_2 );
thread maps\mp\killstreaks\_airdrop::crateallcapturethink();
childthread cratewatcher( 60 );
childthread playerjoinwatcher();
var_3 = 0;
var_4 = getdvarint( "scr_sotf_crategunamount", 6 );
for (;;)
{
self waittill( "captured", var_5 );
var_5 playlocalsound( "ammo_crate_use" );
var_6 = getrandomweapon( level.weaponarray );
var_6 = getrandomattachments( var_6 );
var_7 = var_5.lastdroppableweapon;
var_8 = var_5 getammocount( var_7 );
if ( var_6 == var_7 )
{
var_5 givestartammo( var_6 );
var_5 setweaponammostock( var_6, var_8 );
}
else
{
if ( isdefined( var_7 ) && var_7 != "none" )
{
var_9 = var_5 dropitem( var_7 );
if ( isdefined( var_9 ) && var_8 > 0 )
var_9.targetname = "dropped_weapon";
}
var_5 giveweapon( var_6, 0, 0, 0, 1 );
var_5 setweaponammostock( var_6, 0 );
var_5 switchtoweaponimmediate( var_6 );
if ( var_5 getweaponammoclip( var_6 ) == 1 )
var_5 setweaponammostock( var_6, 1 );
var_5.oldprimarygun = var_6;
}
var_3++;
var_4 = var_4 - 1;
if ( var_4 > 0 )
{
foreach ( var_5 in level.players )
{
maps\mp\_entityheadicons::setheadicon( var_5, "blitz_time_0" + var_4 + "_blue", ( 0, 0, 24 ), 14, 14, undefined, undefined, undefined, undefined, undefined, 0 );
self.crateheadicon = "blitz_time_0" + var_4 + "_blue";
}
}
if ( self.cratetype == "sotf_weapon" && var_3 == getdvarint( "scr_sotf_crategunamount", 6 ) )
maps\mp\killstreaks\_airdrop::deletecrate();
}
}
cratewatcher( var_0 )
{
wait( var_0 );
while ( isdefined( self.inuse ) && self.inuse )
common_scripts\utility::waitframe();
maps\mp\killstreaks\_airdrop::deletecrate();
}
playerjoinwatcher()
{
for (;;)
{
level waittill( "connected", var_0 );
if ( !isdefined( var_0 ) )
continue;
maps\mp\_entityheadicons::setheadicon( var_0, self.crateheadicon, ( 0, 0, 24 ), 14, 14, undefined, undefined, undefined, undefined, undefined, 0 );
}
}
cratekill( var_0 )
{
for ( var_1 = 0; var_1 < level.usedlocations.size; var_1++ )
{
if ( var_0 != level.usedlocations[var_1] )
continue;
level.usedlocations = common_scripts\utility::array_remove( level.usedlocations, var_0 );
}
level.emptylocations = 1;
}
isselectableweapon( var_0 )
{
var_1 = tablelookup( "mp/sotfWeapons.csv", 2, var_0, 3 );
var_2 = tablelookup( "mp/sotfWeapons.csv", 2, var_0, 4 );
if ( var_1 == "TRUE" && ( var_2 == "" || getdvarint( var_2, 0 ) == 1 ) )
return 1;
return 0;
}
getrandomweapon( var_0 )
{
var_1 = setbucketval( var_0 );
var_2 = randomint( level.weaponmaxval["sum"] );
var_3 = undefined;
for ( var_4 = 0; var_4 < var_1.size; var_4++ )
{
if ( !var_1[var_4]["weight"] )
continue;
if ( var_1[var_4]["weight"] > var_2 )
{
var_3 = var_1[var_4];
break;
}
}
return var_3;
}
getrandomattachments( var_0 )
{
var_1 = [];
var_2 = [];
var_3 = [];
var_4 = maps\mp\_utility::getbaseweaponname( var_0["name"] );
var_5 = maps\mp\_utility::getweaponattachmentarrayfromstats( var_4 );
if ( var_5.size > 0 )
{
var_6 = randomint( 5 );
for ( var_7 = 0; var_7 < var_6; var_7++ )
{
var_1 = getvalidattachments( var_0, var_2, var_5 );
if ( var_1.size == 0 )
break;
var_8 = randomint( var_1.size );
var_2[var_2.size] = var_1[var_8];
var_9 = maps\mp\_utility::attachmentmap_tounique( var_1[var_8], var_4 );
var_3[var_3.size] = var_9;
}
var_10 = maps\mp\_utility::getweaponclass( var_0["name"] );
if ( var_10 == "weapon_dmr" || var_10 == "weapon_sniper" || var_4 == "iw6_dlcweap02" )
{
var_11 = 0;
foreach ( var_13 in var_2 )
{
if ( maps\mp\_utility::getattachmenttype( var_13 ) == "rail" )
{
var_11 = 1;
break;
}
}
if ( !var_11 )
{
var_15 = strtok( var_4, "_" )[1];
var_3[var_3.size] = var_15 + "scope";
}
}
if ( var_3.size > 0 )
{
var_3 = common_scripts\utility::alphabetize( var_3 );
foreach ( var_17 in var_3 )
var_0["name"] = var_0["name"] + "_" + var_17;
}
}
return var_0["name"];
}
getvalidattachments( var_0, var_1, var_2 )
{
var_3 = [];
foreach ( var_5 in var_2 )
{
if ( var_5 == "gl" || var_5 == "shotgun" )
continue;
var_6 = attachmentcheck( var_5, var_1 );
if ( !var_6 )
continue;
var_3[var_3.size] = var_5;
}
return var_3;
}
attachmentcheck( var_0, var_1 )
{
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
{
if ( var_0 == var_1[var_2] || !maps\mp\_utility::attachmentscompatible( var_0, var_1[var_2] ) )
return 0;
}
return 1;
}
checkscopes( var_0 )
{
foreach ( var_2 in var_0 )
{
if ( var_2 == "thermal" || var_2 == "vzscope" || var_2 == "acog" || var_2 == "ironsight" )
return 1;
}
return 0;
}
pickupweaponhandler()
{
self endon( "death" );
self endon( "disconnect" );
level endon( "game_ended" );
for (;;)
{
common_scripts\utility::waitframe();
var_0 = self getweaponslistprimaries();
if ( var_0.size > 1 )
{
foreach ( var_2 in var_0 )
{
if ( var_2 == self.oldprimarygun )
{
var_3 = self getammocount( var_2 );
var_4 = self dropitem( var_2 );
if ( isdefined( var_4 ) && var_3 > 0 )
var_4.targetname = "dropped_weapon";
break;
}
}
var_0 = common_scripts\utility::array_remove( var_0, self.oldprimarygun );
self.oldprimarygun = var_0[0];
}
}
}
loginckillchain()
{
self.pers["killChains"]++;
maps\mp\gametypes\_persistence::statsetchild( "round", "killChains", self.pers["killChains"] );
}
perkwatcher()
{
if ( getdvarint( "scr_game_perks" ) )
{
switch ( self.adrenaline )
{
case 2:
maps\mp\_utility::giveperk( "specialty_fastsprintrecovery", 0 );
thread maps\mp\gametypes\_hud_message::splashnotify( "specialty_fastsprintrecovery_sotf", self.adrenaline );
thread loginckillchain();
break;
case 3:
maps\mp\_utility::giveperk( "specialty_lightweight", 0 );
thread maps\mp\gametypes\_hud_message::splashnotify( "specialty_lightweight_sotf", self.adrenaline );
thread loginckillchain();
break;
case 4:
maps\mp\_utility::giveperk( "specialty_stalker", 0 );
thread maps\mp\gametypes\_hud_message::splashnotify( "specialty_stalker_sotf", self.adrenaline );
thread loginckillchain();
break;
case 5:
maps\mp\_utility::giveperk( "specialty_regenfaster", 0 );
thread maps\mp\gametypes\_hud_message::splashnotify( "specialty_regenfaster_sotf", self.adrenaline );
thread loginckillchain();
break;
case 6:
maps\mp\_utility::giveperk( "specialty_deadeye", 0 );
thread maps\mp\gametypes\_hud_message::splashnotify( "specialty_deadeye_sotf", self.adrenaline );
thread loginckillchain();
break;
}
}
}
iconvisall( var_0, var_1 )
{
foreach ( var_3 in level.players )
{
var_0 maps\mp\_entityheadicons::setheadicon( var_3, var_1, ( 0, 0, 24 ), 14, 14, undefined, undefined, undefined, undefined, undefined, 0 );
self.crateheadicon = var_1;
}
}
objvisall( var_0 )
{
objective_playermask_showtoall( var_0 );
}
setbucketval( var_0 )
{
level.weaponmaxval["sum"] = 0;
var_1 = var_0;
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
{
if ( !var_1[var_2]["weight"] )
continue;
level.weaponmaxval["sum"] = level.weaponmaxval["sum"] + var_1[var_2]["weight"];
var_1[var_2]["weight"] = level.weaponmaxval["sum"];
}
return var_1;
}
sortbyweight( var_0 )
{
var_1 = [];
var_2 = [];
for ( var_3 = 1; var_3 < var_0.size; var_3++ )
{
var_4 = var_0[var_3]["weight"];
var_1 = var_0[var_3];
for ( var_5 = var_3 - 1; var_5 >= 0 && is_weight_a_less_than_b( var_0[var_5]["weight"], var_4 ); var_5-- )
{
var_2 = var_0[var_5];
var_0[var_5] = var_1;
var_0[var_5 + 1] = var_2;
}
}
return var_0;
}
is_weight_a_less_than_b( var_0, var_1 )
{
return var_0 < var_1;
}

View File

@ -0,0 +1,828 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
if ( getdvar( "mapname" ) == "mp_background" )
return;
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::setupcallbacks();
maps\mp\gametypes\_globallogic::setupcallbacks();
if ( isusingmatchrulesdata() )
{
level.initializematchrules = ::initializematchrules;
[[ level.initializematchrules ]]();
level thread maps\mp\_utility::reinitializematchrulesonmigration();
}
else
{
maps\mp\_utility::registerscorelimitdvar( level.gametype, 65 );
maps\mp\_utility::registertimelimitdvar( level.gametype, 10 );
maps\mp\_utility::registerroundlimitdvar( level.gametype, 1 );
maps\mp\_utility::registerwinlimitdvar( level.gametype, 1 );
maps\mp\_utility::registernumlivesdvar( level.gametype, 0 );
maps\mp\_utility::registerhalftimedvar( level.gametype, 0 );
level.matchrules_randomize = 0;
level.matchrules_damagemultiplier = 0;
level.matchrules_vampirism = 0;
}
setplayerloadout();
setteammode( "ffa" );
level.teambased = 0;
level.overridecrateusetime = 500;
level.onplayerscore = ::onplayerscore;
level.onprecachegametype = ::onprecachegametype;
level.onstartgametype = ::onstartgametype;
level.getspawnpoint = ::getspawnpoint;
level.onspawnplayer = ::onspawnplayer;
level.onnormaldeath = ::onnormaldeath;
level.customcratefunc = ::sotfcratecontents;
level.cratekill = ::cratekill;
level.pickupweaponhandler = ::pickupweaponhandler;
level.iconvisall = ::iconvisall;
level.objvisall = ::objvisall;
level.supportintel = 0;
level.supportnuke = 0;
level.vehicleoverride = "littlebird_neutral_mp";
level.usedlocations = [];
level.emptylocations = 1;
level.assists_disabled = 1;
if ( level.matchrules_damagemultiplier || level.matchrules_vampirism )
level.modifyplayerdamage = maps\mp\gametypes\_damage::gamemodemodifyplayerdamage;
game["dialog"]["gametype"] = "hunted";
if ( getdvarint( "g_hardcore" ) )
game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"];
game["dialog"]["offense_obj"] = "sotf_hint";
game["dialog"]["defense_obj"] = "sotf_hint";
}
initializematchrules()
{
maps\mp\_utility::setcommonrulesfrommatchrulesdata();
setdynamicdvar( "scr_sotf_ffa_crateamount", getmatchrulesdata( "sotfFFAData", "crateAmount" ) );
setdynamicdvar( "scr_sotf_ffa_crategunamount", getmatchrulesdata( "sotfFFAData", "crateGunAmount" ) );
setdynamicdvar( "scr_sotf_ffa_cratetimer", getmatchrulesdata( "sotfFFAData", "crateDropTimer" ) );
setdynamicdvar( "scr_sotf_ffa_roundlimit", 1 );
maps\mp\_utility::registerroundlimitdvar( "sotf_ffa", 1 );
setdynamicdvar( "scr_sotf_ffa_winlimit", 1 );
maps\mp\_utility::registerwinlimitdvar( "sotf_ffa", 1 );
setdynamicdvar( "scr_sotf_ffa_halftime", 0 );
maps\mp\_utility::registerhalftimedvar( "sotf_ffa", 0 );
setdynamicdvar( "scr_sotf_ffa_promode", 0 );
}
onprecachegametype()
{
level._effect["signal_chest_drop"] = loadfx( "smoke/signal_smoke_airdrop" );
level._effect["signal_chest_drop_mover"] = loadfx( "smoke/airdrop_flare_mp_effect_now" );
}
onstartgametype()
{
setclientnamemode( "auto_change" );
var_0 = &"OBJECTIVES_DM";
var_1 = &"OBJECTIVES_DM_SCORE";
var_2 = &"OBJECTIVES_DM_HINT";
maps\mp\_utility::setobjectivetext( "allies", var_0 );
maps\mp\_utility::setobjectivetext( "axis", var_0 );
if ( level.splitscreen )
{
maps\mp\_utility::setobjectivescoretext( "allies", var_0 );
maps\mp\_utility::setobjectivescoretext( "axis", var_0 );
}
else
{
maps\mp\_utility::setobjectivescoretext( "allies", var_1 );
maps\mp\_utility::setobjectivescoretext( "axis", var_1 );
}
maps\mp\_utility::setobjectivehinttext( "allies", var_2 );
maps\mp\_utility::setobjectivehinttext( "axis", var_2 );
initspawns();
var_3 = [];
maps\mp\gametypes\_gameobjects::main( var_3 );
level thread sotf();
}
initspawns()
{
level.spawnmins = ( 0, 0, 0 );
level.spawnmaxs = ( 0, 0, 0 );
maps\mp\gametypes\_spawnlogic::addspawnpoints( "allies", "mp_dm_spawn" );
maps\mp\gametypes\_spawnlogic::addspawnpoints( "axis", "mp_dm_spawn" );
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter( level.spawnmins, level.spawnmaxs );
setmapcenter( level.mapcenter );
}
setplayerloadout()
{
definechestweapons();
var_0 = getrandomweapon( level.pistolarray );
var_1 = maps\mp\_utility::getbaseweaponname( var_0["name"] );
var_2 = tablelookup( "mp/sotfWeapons.csv", 2, var_1, 0 );
setomnvar( "ui_sotf_pistol", int( var_2 ) );
level.sotf_loadouts["axis"]["loadoutPrimary"] = "none";
level.sotf_loadouts["axis"]["loadoutPrimaryAttachment"] = "none";
level.sotf_loadouts["axis"]["loadoutPrimaryAttachment2"] = "none";
level.sotf_loadouts["axis"]["loadoutPrimaryBuff"] = "specialty_null";
level.sotf_loadouts["axis"]["loadoutPrimaryCamo"] = "none";
level.sotf_loadouts["axis"]["loadoutPrimaryReticle"] = "none";
level.sotf_loadouts["axis"]["loadoutSecondary"] = var_0["name"];
level.sotf_loadouts["axis"]["loadoutSecondaryAttachment"] = "none";
level.sotf_loadouts["axis"]["loadoutSecondaryAttachment2"] = "none";
level.sotf_loadouts["axis"]["loadoutSecondaryBuff"] = "specialty_null";
level.sotf_loadouts["axis"]["loadoutSecondaryCamo"] = "none";
level.sotf_loadouts["axis"]["loadoutSecondaryReticle"] = "none";
level.sotf_loadouts["axis"]["loadoutEquipment"] = "throwingknife_mp";
level.sotf_loadouts["axis"]["loadoutOffhand"] = "flash_grenade_mp";
level.sotf_loadouts["axis"]["loadoutStreakType"] = "assault";
level.sotf_loadouts["axis"]["loadoutKillstreak1"] = "none";
level.sotf_loadouts["axis"]["loadoutKillstreak2"] = "none";
level.sotf_loadouts["axis"]["loadoutKillstreak3"] = "none";
level.sotf_loadouts["axis"]["loadoutJuggernaut"] = 0;
level.sotf_loadouts["axis"]["loadoutPerks"] = [ "specialty_longersprint", "specialty_extra_deadly" ];
level.sotf_loadouts["allies"] = level.sotf_loadouts["axis"];
}
getspawnpoint()
{
var_0 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints( self.team );
if ( level.ingraceperiod )
var_1 = maps\mp\gametypes\_spawnlogic::getspawnpoint_random( var_0 );
else
var_1 = maps\mp\gametypes\_spawnscoring::getspawnpoint_freeforall( var_0 );
return var_1;
}
onspawnplayer()
{
self.pers["class"] = "gamemode";
self.pers["lastClass"] = "";
self.class = self.pers["class"];
self.lastclass = self.pers["lastClass"];
self.pers["gamemodeLoadout"] = level.sotf_loadouts[self.pers["team"]];
level notify( "sotf_player_spawned", self );
if ( !isdefined( self.eventvalue ) )
{
self.eventvalue = maps\mp\gametypes\_rank::getscoreinfovalue( "kill" );
maps\mp\_utility::setextrascore0( self.eventvalue );
}
self.oldprimarygun = undefined;
self.newprimarygun = undefined;
thread waitloadoutdone();
}
waitloadoutdone()
{
level endon( "game_ended" );
self endon( "disconnect" );
self waittill( "giveLoadout" );
var_0 = self getcurrentweapon();
self setweaponammostock( var_0, 0 );
self.oldprimarygun = var_0;
thread pickupweaponhandler();
}
onplayerscore( var_0, var_1, var_2 )
{
var_1.assists = var_1 maps\mp\_utility::getpersstat( "longestStreak" );
if ( var_0 == "kill" )
{
var_3 = maps\mp\gametypes\_rank::getscoreinfovalue( "score_increment" );
return var_3;
}
return 0;
}
onnormaldeath( var_0, var_1, var_2 )
{
var_1 perkwatcher();
var_3 = maps\mp\gametypes\_rank::getscoreinfovalue( "score_increment" );
var_4 = 0;
foreach ( var_6 in level.players )
{
if ( isdefined( var_6.score ) && var_6.score > var_4 )
var_4 = var_6.score;
}
if ( game["state"] == "postgame" && var_1.score >= var_4 )
var_1.finalkill = 1;
}
sotf()
{
level thread startspawnchest();
}
startspawnchest()
{
level endon( "game_ended" );
self endon( "disconnect" );
var_0 = getdvarint( "scr_sotf_ffa_crateamount", 3 );
var_1 = getdvarint( "scr_sotf_ffa_cratetimer", 30 );
level waittill( "sotf_player_spawned", var_2 );
for (;;)
{
if ( !isalive( var_2 ) )
{
var_2 = findnewowner( level.players );
if ( !isdefined( var_2 ) )
continue;
}
else
{
while ( isalive( var_2 ) )
{
if ( level.emptylocations )
{
for ( var_3 = 0; var_3 < var_0; var_3++ )
level thread spawnchests( var_2 );
level thread showcratesplash( "sotf_crates_incoming" );
wait( var_1 );
continue;
}
wait 0.05;
}
}
}
}
showcratesplash( var_0 )
{
foreach ( var_2 in level.players )
var_2 thread maps\mp\gametypes\_hud_message::splashnotify( var_0 );
}
findnewowner( var_0 )
{
foreach ( var_2 in var_0 )
{
if ( isalive( var_2 ) )
return var_2;
}
level waittill( "sotf_player_spawned", var_4 );
return var_4;
}
spawnchests( var_0 )
{
var_1 = common_scripts\utility::getstructarray( "sotf_chest_spawnpoint", "targetname" );
var_2 = getrandompoint( var_1 );
if ( isdefined( var_2 ) )
{
playfxatpoint( var_2 );
level thread maps\mp\killstreaks\_airdrop::doflyby( var_0, var_2, randomfloat( 360 ), "airdrop_sotf" );
}
}
playfxatpoint( var_0 )
{
var_1 = var_0 + ( 0, 0, 30 );
var_2 = var_0 + ( 0, 0, -1000 );
var_3 = bullettrace( var_1, var_2, 0, undefined );
var_4 = var_3["position"] + ( 0, 0, 1 );
var_5 = var_3["entity"];
if ( isdefined( var_5 ) )
{
for ( var_6 = var_5 getlinkedparent(); isdefined( var_6 ); var_6 = var_5 getlinkedparent() )
var_5 = var_6;
}
if ( isdefined( var_5 ) )
{
var_7 = spawn( "script_model", var_4 );
var_7 setmodel( "tag_origin" );
var_7.angles = ( 90, randomintrange( -180, 179 ), 0 );
var_7 linkto( var_5 );
thread playlinkedsmokeeffect( common_scripts\utility::getfx( "signal_chest_drop_mover" ), var_7 );
}
else
playfx( common_scripts\utility::getfx( "signal_chest_drop" ), var_4 );
}
playlinkedsmokeeffect( var_0, var_1 )
{
level endon( "game_ended" );
wait 0.05;
playfxontag( var_0, var_1, "tag_origin" );
wait 6;
stopfxontag( var_0, var_1, "tag_origin" );
wait 0.05;
var_1 delete();
}
getcenterpoint( var_0 )
{
var_1 = undefined;
var_2 = undefined;
foreach ( var_4 in var_0 )
{
var_5 = distance2dsquared( level.mapcenter, var_4.origin );
if ( !isdefined( var_1 ) || var_5 < var_2 )
{
var_1 = var_4;
var_2 = var_5;
}
}
level.usedlocations[level.usedlocations.size] = var_1.origin;
return var_1.origin;
}
getrandompoint( var_0 )
{
var_1 = [];
for ( var_2 = 0; var_2 < var_0.size; var_2++ )
{
var_3 = 0;
if ( isdefined( level.usedlocations ) && level.usedlocations.size > 0 )
{
foreach ( var_5 in level.usedlocations )
{
if ( var_0[var_2].origin == var_5 )
{
var_3 = 1;
break;
}
}
if ( var_3 )
continue;
var_1[var_1.size] = var_0[var_2].origin;
continue;
}
var_1[var_1.size] = var_0[var_2].origin;
}
if ( var_1.size > 0 )
{
var_7 = randomint( var_1.size );
var_8 = var_1[var_7];
level.usedlocations[level.usedlocations.size] = var_8;
return var_8;
}
level.emptylocations = 0;
return undefined;
}
definechestweapons()
{
var_0 = [];
var_1 = [];
for ( var_2 = 0; tablelookupbyrow( "mp/sotfWeapons.csv", var_2, 0 ) != ""; var_2++ )
{
var_3 = tablelookupistringbyrow( "mp/sotfWeapons.csv", var_2, 2 );
var_4 = tablelookupistringbyrow( "mp/sotfWeapons.csv", var_2, 1 );
var_5 = isselectableweapon( var_3 );
if ( isdefined( var_4 ) && var_5 && var_4 == "weapon_pistol" )
{
var_6 = 30;
var_0[var_0.size]["name"] = var_3;
var_0[var_0.size - 1]["weight"] = var_6;
continue;
}
if ( isdefined( var_4 ) && var_5 && ( var_4 == "weapon_shotgun" || var_4 == "weapon_smg" || var_4 == "weapon_assault" || var_4 == "weapon_sniper" || var_4 == "weapon_dmr" || var_4 == "weapon_lmg" || var_4 == "weapon_projectile" ) )
{
var_6 = 0;
switch ( var_4 )
{
case "weapon_shotgun":
var_6 = 35;
break;
case "weapon_assault":
case "weapon_smg":
var_6 = 25;
break;
case "weapon_dmr":
case "weapon_sniper":
var_6 = 15;
break;
case "weapon_lmg":
var_6 = 10;
break;
case "weapon_projectile":
var_6 = 30;
break;
}
var_1[var_1.size]["name"] = var_3 + "_mp";
var_1[var_1.size - 1]["group"] = var_4;
var_1[var_1.size - 1]["weight"] = var_6;
continue;
}
continue;
}
var_1 = sortbyweight( var_1 );
level.pistolarray = var_0;
level.weaponarray = var_1;
}
sotfcratecontents( var_0, var_1 )
{
maps\mp\killstreaks\_airdrop::addcratetype( "airdrop_sotf", "sotf_weapon", 100, ::sotfcratethink, var_0, var_0, &"KILLSTREAKS_HINTS_WEAPON_PICKUP" );
}
sotfcratethink( var_0 )
{
self endon( "death" );
self endon( "restarting_physics" );
level endon( "game_ended" );
if ( isdefined( game["strings"][self.cratetype + "_hint"] ) )
var_1 = game["strings"][self.cratetype + "_hint"];
else
var_1 = &"PLATFORM_GET_KILLSTREAK";
var_2 = "icon_hunted";
maps\mp\killstreaks\_airdrop::cratesetupforuse( var_1, var_2 );
thread maps\mp\killstreaks\_airdrop::crateallcapturethink();
childthread cratewatcher( 60 );
childthread playerjoinwatcher();
var_3 = 0;
var_4 = getdvarint( "scr_sotf_ffa_crategunamount", 1 );
for (;;)
{
self waittill( "captured", var_5 );
var_5 playlocalsound( "ammo_crate_use" );
var_6 = getrandomweapon( level.weaponarray );
var_6 = getrandomattachments( var_6 );
var_7 = var_5.lastdroppableweapon;
var_8 = var_5 getammocount( var_7 );
if ( var_6 == var_7 )
{
var_5 givestartammo( var_6 );
var_5 setweaponammostock( var_6, var_8 );
}
else
{
if ( isdefined( var_7 ) && var_7 != "none" )
{
var_9 = var_5 dropitem( var_7 );
if ( isdefined( var_9 ) && var_8 > 0 )
var_9.targetname = "dropped_weapon";
}
var_5 giveweapon( var_6, 0, 0, 0, 1 );
var_5 setweaponammostock( var_6, 0 );
var_5 switchtoweaponimmediate( var_6 );
if ( var_5 getweaponammoclip( var_6 ) == 1 )
var_5 setweaponammostock( var_6, 1 );
var_5.oldprimarygun = var_6;
}
var_3++;
var_4 = var_4 - 1;
if ( var_4 > 0 )
{
foreach ( var_5 in level.players )
{
maps\mp\_entityheadicons::setheadicon( var_5, "blitz_time_0" + var_4 + "_blue", ( 0, 0, 24 ), 14, 14, undefined, undefined, undefined, undefined, undefined, 0 );
self.crateheadicon = "blitz_time_0" + var_4 + "_blue";
}
}
if ( self.cratetype == "sotf_weapon" && var_3 == getdvarint( "scr_sotf_ffa_crategunamount", 1 ) )
maps\mp\killstreaks\_airdrop::deletecrate();
}
}
cratewatcher( var_0 )
{
wait( var_0 );
while ( isdefined( self.inuse ) && self.inuse )
common_scripts\utility::waitframe();
maps\mp\killstreaks\_airdrop::deletecrate();
}
playerjoinwatcher()
{
for (;;)
{
level waittill( "connected", var_0 );
if ( !isdefined( var_0 ) )
continue;
maps\mp\_entityheadicons::setheadicon( var_0, self.crateheadicon, ( 0, 0, 24 ), 14, 14, undefined, undefined, undefined, undefined, undefined, 0 );
}
}
cratekill( var_0 )
{
for ( var_1 = 0; var_1 < level.usedlocations.size; var_1++ )
{
if ( var_0 != level.usedlocations[var_1] )
continue;
level.usedlocations = common_scripts\utility::array_remove( level.usedlocations, var_0 );
}
level.emptylocations = 1;
}
isselectableweapon( var_0 )
{
var_1 = tablelookup( "mp/sotfWeapons.csv", 2, var_0, 3 );
var_2 = tablelookup( "mp/sotfWeapons.csv", 2, var_0, 4 );
if ( var_1 == "TRUE" && ( var_2 == "" || getdvarint( var_2, 0 ) == 1 ) )
return 1;
return 0;
}
getrandomweapon( var_0 )
{
var_1 = setbucketval( var_0 );
var_2 = randomint( level.weaponmaxval["sum"] );
var_3 = undefined;
for ( var_4 = 0; var_4 < var_1.size; var_4++ )
{
if ( !var_1[var_4]["weight"] )
continue;
if ( var_1[var_4]["weight"] > var_2 )
{
var_3 = var_1[var_4];
break;
}
}
return var_3;
}
getrandomattachments( var_0 )
{
var_1 = [];
var_2 = [];
var_3 = [];
var_4 = maps\mp\_utility::getbaseweaponname( var_0["name"] );
var_5 = maps\mp\_utility::getweaponattachmentarrayfromstats( var_4 );
if ( var_5.size > 0 )
{
var_6 = randomint( 5 );
for ( var_7 = 0; var_7 < var_6; var_7++ )
{
var_1 = getvalidattachments( var_0, var_2, var_5 );
if ( var_1.size == 0 )
break;
var_8 = randomint( var_1.size );
var_2[var_2.size] = var_1[var_8];
var_9 = maps\mp\_utility::attachmentmap_tounique( var_1[var_8], var_4 );
var_3[var_3.size] = var_9;
}
var_10 = maps\mp\_utility::getweaponclass( var_0["name"] );
if ( var_10 == "weapon_dmr" || var_10 == "weapon_sniper" || var_4 == "iw6_dlcweap02" )
{
var_11 = 0;
foreach ( var_13 in var_2 )
{
if ( maps\mp\_utility::getattachmenttype( var_13 ) == "rail" )
{
var_11 = 1;
break;
}
}
if ( !var_11 )
{
var_15 = strtok( var_4, "_" )[1];
var_3[var_3.size] = var_15 + "scope";
}
}
if ( var_3.size > 0 )
{
var_3 = common_scripts\utility::alphabetize( var_3 );
foreach ( var_17 in var_3 )
var_0["name"] = var_0["name"] + "_" + var_17;
}
}
return var_0["name"];
}
getvalidattachments( var_0, var_1, var_2 )
{
var_3 = [];
foreach ( var_5 in var_2 )
{
if ( var_5 == "gl" || var_5 == "shotgun" )
continue;
var_6 = attachmentcheck( var_5, var_1 );
if ( !var_6 )
continue;
var_3[var_3.size] = var_5;
}
return var_3;
}
attachmentcheck( var_0, var_1 )
{
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
{
if ( var_0 == var_1[var_2] || !maps\mp\_utility::attachmentscompatible( var_0, var_1[var_2] ) )
return 0;
}
return 1;
}
checkscopes( var_0 )
{
foreach ( var_2 in var_0 )
{
if ( var_2 == "thermal" || var_2 == "vzscope" || var_2 == "acog" || var_2 == "ironsight" )
return 1;
}
return 0;
}
pickupweaponhandler()
{
self endon( "death" );
self endon( "disconnect" );
level endon( "game_ended" );
for (;;)
{
common_scripts\utility::waitframe();
var_0 = self getweaponslistprimaries();
if ( var_0.size > 1 )
{
foreach ( var_2 in var_0 )
{
if ( var_2 == self.oldprimarygun )
{
var_3 = self getammocount( var_2 );
var_4 = self dropitem( var_2 );
if ( isdefined( var_4 ) && var_3 > 0 )
var_4.targetname = "dropped_weapon";
break;
}
}
var_0 = common_scripts\utility::array_remove( var_0, self.oldprimarygun );
self.oldprimarygun = var_0[0];
}
}
}
loginckillchain()
{
self.pers["killChains"]++;
maps\mp\gametypes\_persistence::statsetchild( "round", "killChains", self.pers["killChains"] );
}
perkwatcher()
{
if ( getdvarint( "scr_game_perks" ) )
{
switch ( self.adrenaline )
{
case 2:
maps\mp\_utility::giveperk( "specialty_fastsprintrecovery", 0 );
thread maps\mp\gametypes\_hud_message::splashnotify( "specialty_fastsprintrecovery_sotf", self.adrenaline );
thread loginckillchain();
break;
case 3:
maps\mp\_utility::giveperk( "specialty_lightweight", 0 );
thread maps\mp\gametypes\_hud_message::splashnotify( "specialty_lightweight_sotf", self.adrenaline );
thread loginckillchain();
break;
case 4:
maps\mp\_utility::giveperk( "specialty_stalker", 0 );
thread maps\mp\gametypes\_hud_message::splashnotify( "specialty_stalker_sotf", self.adrenaline );
thread loginckillchain();
break;
case 5:
maps\mp\_utility::giveperk( "specialty_regenfaster", 0 );
thread maps\mp\gametypes\_hud_message::splashnotify( "specialty_regenfaster_sotf", self.adrenaline );
thread loginckillchain();
break;
case 6:
maps\mp\_utility::giveperk( "specialty_deadeye", 0 );
thread maps\mp\gametypes\_hud_message::splashnotify( "specialty_deadeye_sotf", self.adrenaline );
thread loginckillchain();
break;
}
}
}
iconvisall( var_0, var_1 )
{
foreach ( var_3 in level.players )
{
var_0 maps\mp\_entityheadicons::setheadicon( var_3, var_1, ( 0, 0, 24 ), 14, 14, undefined, undefined, undefined, undefined, undefined, 0 );
self.crateheadicon = var_1;
}
}
objvisall( var_0 )
{
objective_playermask_showtoall( var_0 );
}
setbucketval( var_0 )
{
level.weaponmaxval["sum"] = 0;
var_1 = var_0;
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
{
if ( !var_1[var_2]["weight"] )
continue;
level.weaponmaxval["sum"] = level.weaponmaxval["sum"] + var_1[var_2]["weight"];
var_1[var_2]["weight"] = level.weaponmaxval["sum"];
}
return var_1;
}
sortbyweight( var_0 )
{
var_1 = [];
var_2 = [];
for ( var_3 = 1; var_3 < var_0.size; var_3++ )
{
var_4 = var_0[var_3]["weight"];
var_1 = var_0[var_3];
for ( var_5 = var_3 - 1; var_5 >= 0 && is_weight_a_less_than_b( var_0[var_5]["weight"], var_4 ); var_5-- )
{
var_2 = var_0[var_5];
var_0[var_5] = var_1;
var_0[var_5 + 1] = var_2;
}
}
return var_0;
}
is_weight_a_less_than_b( var_0, var_1 )
{
return var_0 < var_1;
}

1423
maps/mp/gametypes/sr.gsc Normal file

File diff suppressed because it is too large Load Diff

166
maps/mp/gametypes/war.gsc Normal file
View File

@ -0,0 +1,166 @@
// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
if ( getdvar( "mapname" ) == "mp_background" )
return;
maps\mp\gametypes\_globallogic::init();
maps\mp\gametypes\_callbacksetup::setupcallbacks();
maps\mp\gametypes\_globallogic::setupcallbacks();
if ( isusingmatchrulesdata() )
{
level.initializematchrules = ::initializematchrules;
[[ level.initializematchrules ]]();
level thread maps\mp\_utility::reinitializematchrulesonmigration();
}
else
{
maps\mp\_utility::registerroundswitchdvar( level.gametype, 0, 0, 9 );
maps\mp\_utility::registertimelimitdvar( level.gametype, 10 );
maps\mp\_utility::registerscorelimitdvar( level.gametype, 75 );
maps\mp\_utility::registerroundlimitdvar( level.gametype, 1 );
maps\mp\_utility::registerwinlimitdvar( level.gametype, 1 );
maps\mp\_utility::registernumlivesdvar( level.gametype, 0 );
maps\mp\_utility::registerhalftimedvar( level.gametype, 0 );
level.matchrules_damagemultiplier = 0;
level.matchrules_vampirism = 0;
}
level.teambased = 1;
level.onstartgametype = ::onstartgametype;
level.getspawnpoint = ::getspawnpoint;
level.onnormaldeath = ::onnormaldeath;
if ( level.matchrules_damagemultiplier || level.matchrules_vampirism )
level.modifyplayerdamage = maps\mp\gametypes\_damage::gamemodemodifyplayerdamage;
game["dialog"]["gametype"] = "tm_death";
if ( getdvarint( "g_hardcore" ) )
game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"];
else if ( getdvarint( "camera_thirdPerson" ) )
game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"];
else if ( getdvarint( "scr_diehard" ) )
game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"];
else if ( getdvarint( "scr_" + level.gametype + "_promode" ) )
game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro";
game["strings"]["overtime_hint"] = &"MP_FIRST_BLOOD";
}
initializematchrules()
{
maps\mp\_utility::setcommonrulesfrommatchrulesdata();
setdynamicdvar( "scr_war_roundswitch", 0 );
maps\mp\_utility::registerroundswitchdvar( "war", 0, 0, 9 );
setdynamicdvar( "scr_war_roundlimit", 1 );
maps\mp\_utility::registerroundlimitdvar( "war", 1 );
setdynamicdvar( "scr_war_winlimit", 1 );
maps\mp\_utility::registerwinlimitdvar( "war", 1 );
setdynamicdvar( "scr_war_halftime", 0 );
maps\mp\_utility::registerhalftimedvar( "war", 0 );
setdynamicdvar( "scr_war_promode", 0 );
}
onstartgametype()
{
setclientnamemode( "auto_change" );
if ( !isdefined( game["switchedsides"] ) )
game["switchedsides"] = 0;
if ( game["switchedsides"] )
{
var_0 = game["attackers"];
var_1 = game["defenders"];
game["attackers"] = var_1;
game["defenders"] = var_0;
}
maps\mp\_utility::setobjectivetext( "allies", &"OBJECTIVES_WAR" );
maps\mp\_utility::setobjectivetext( "axis", &"OBJECTIVES_WAR" );
if ( level.splitscreen )
{
maps\mp\_utility::setobjectivescoretext( "allies", &"OBJECTIVES_WAR" );
maps\mp\_utility::setobjectivescoretext( "axis", &"OBJECTIVES_WAR" );
}
else
{
maps\mp\_utility::setobjectivescoretext( "allies", &"OBJECTIVES_WAR_SCORE" );
maps\mp\_utility::setobjectivescoretext( "axis", &"OBJECTIVES_WAR_SCORE" );
}
maps\mp\_utility::setobjectivehinttext( "allies", &"OBJECTIVES_WAR_HINT" );
maps\mp\_utility::setobjectivehinttext( "axis", &"OBJECTIVES_WAR_HINT" );
initspawns();
var_2[0] = level.gametype;
maps\mp\gametypes\_gameobjects::main( var_2 );
}
initspawns()
{
level.spawnmins = ( 0, 0, 0 );
level.spawnmaxs = ( 0, 0, 0 );
maps\mp\gametypes\_spawnlogic::addstartspawnpoints( "mp_tdm_spawn_allies_start" );
maps\mp\gametypes\_spawnlogic::addstartspawnpoints( "mp_tdm_spawn_axis_start" );
maps\mp\gametypes\_spawnlogic::addspawnpoints( "allies", "mp_tdm_spawn" );
maps\mp\gametypes\_spawnlogic::addspawnpoints( "axis", "mp_tdm_spawn" );
level.mapcenter = maps\mp\gametypes\_spawnlogic::findboxcenter( level.spawnmins, level.spawnmaxs );
setmapcenter( level.mapcenter );
}
getspawnpoint()
{
var_0 = self.pers["team"];
if ( game["switchedsides"] )
var_0 = maps\mp\_utility::getotherteam( var_0 );
if ( maps\mp\gametypes\_spawnlogic::shoulduseteamstartspawn() )
{
var_1 = maps\mp\gametypes\_spawnlogic::getspawnpointarray( "mp_tdm_spawn_" + var_0 + "_start" );
var_2 = maps\mp\gametypes\_spawnlogic::getspawnpoint_startspawn( var_1 );
}
else
{
var_1 = maps\mp\gametypes\_spawnlogic::getteamspawnpoints( var_0 );
var_2 = maps\mp\gametypes\_spawnscoring::getspawnpoint_nearteam( var_1 );
}
return var_2;
}
onnormaldeath( var_0, var_1, var_2 )
{
var_3 = maps\mp\gametypes\_rank::getscoreinfovalue( "score_increment" );
level maps\mp\gametypes\_gamescore::giveteamscoreforobjective( var_1.pers["team"], var_3 );
if ( game["state"] == "postgame" && game["teamScores"][var_1.team] > game["teamScores"][level.otherteam[var_1.team]] )
var_1.finalkill = 1;
}
ontimelimit()
{
level.finalkillcam_winner = "none";
if ( game["status"] == "overtime" )
var_0 = "forfeit";
else if ( game["teamScores"]["allies"] == game["teamScores"]["axis"] )
var_0 = "overtime";
else if ( game["teamScores"]["axis"] > game["teamScores"]["allies"] )
{
level.finalkillcam_winner = "axis";
var_0 = "axis";
}
else
{
level.finalkillcam_winner = "allies";
var_0 = "allies";
}
thread maps\mp\gametypes\_gamelogic::endgame( var_0, game["end_reason"]["time_limit_reached"] );
}