iw6-scripts/maps/mp/killstreaks/_juggernaut_predator.gsc
2024-02-13 13:20:49 +01:00

1249 lines
35 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
juggpredatorinit()
{
maps\mp\killstreaks\_juggernaut::initlevelcustomjuggernaut( ::juggpredatorcreate, ::setjuggpredatorclass, ::setjuggpredatormodel, "callout_killed_juggernaut_predator" );
level.mapcustomcratefunc = ::customcratefunc;
level.mapcustomkillstreakfunc = ::customkillstreakfunc;
level.mapcustombotkillstreakfunc = ::custombotkillstreakfunc;
level._effect["predator_uncloak_sparks"] = loadfx( "vfx/_requests/pred/vfx_fade_distortion" );
level._effect["predator_uncloak_chest"] = loadfx( "vfx/_requests/pred/vfx_fade_distortion_chest" );
level._effect["predator_uncloak_limbs"] = loadfx( "vfx/_requests/pred/vfx_fade_distortion_long" );
level._effect["predator_eyes"] = loadfx( "vfx/gameplay/mp/events/vfx_mp_battery3_glowing_eyes" );
level._effect["predator_kill"] = loadfx( "vfx/gameplay/mp/events/vfx_mp_battery3_pred_kill" );
level._effect["predator_self_destruct"] = loadfx( "vfx/_requests/pred/vfx_pred_self_dest" );
level.previouslaststandcallback = level.callbackplayerlaststand;
level.callbackplayerlaststand = ::callback_playerlaststandpredator;
}
juggpredatorcreate( var_0 )
{
self.isjuggernautlevelcustom = 1;
self.juggmovespeedscaler = 1.05;
maps\mp\gametypes\_class::giveloadout( self.pers["team"], var_0, 0 );
maps\mp\_utility::giveperk( "specialty_spygame", 0 );
maps\mp\_utility::giveperk( "specialty_longersprint", 0 );
maps\mp\_utility::giveperk( "specialty_falldamage", 0 );
maps\mp\_utility::giveperk( "specialty_pistoldeath", 0 );
maps\mp\_utility::giveperk( "specialty_selectivehearing", 0 );
maps\mp\_utility::giveperk( "specialty_quieter", 0 );
self.movespeedscaler = 1.05;
self.healthregendisabled = 1;
self.breathingstoptime = 0;
self playsound( "scn_predator_spawn_whip" );
thread juggturnonpredatoraudiozoneuponcreate();
self setclientomnvar( "ui_predator_hud", 1 );
thread watchjugghostmigrationfinishedinit();
self setsurfacetype( "fruit" );
thread juggpredatorondeath();
thread juggpredatorondisconnect();
thread juggpredatorongameended();
thread predatorcannonupdate();
thread predatoronenemykilled();
thread watchempdamage();
thread watchempevent();
thread predatorvocalclicks();
thread predatorpaincry();
thread maps\mp\_utility::teamplayercardsplash( "used_juggernaut_predator", self );
if ( !isai( self ) )
self notifyonplayercommand( "player_melee", "+melee_zoom" );
inittimestamp( "victoryCry" );
inittimestamp( "painCry" );
self.canusekillstreakcallback = ::juggpredatorcanuseotherkillstreaks;
self.killstreakerrormsg = ::juggpredatorkillsteakerrormsg;
thread predatorbeginmusic();
maps\mp\gametypes\_battlechatter_mp::disablebattlechatter( self );
self playsound( "scn_predator_first_raise_shing_npc" );
level notify( "update_bombsquad" );
level.predatoruser = self;
return 0;
}
juggturnonpredatoraudiozoneuponcreate()
{
self endon( "death" );
self endon( "disconnect" );
level endon( "game_ended" );
self setclientomnvar( "enableCustomAudioZone", 1 );
}
juggpredatorongameended()
{
self endon( "jugg_removed" );
self endon( "disconnect" );
level waittill( "game_ended" );
juggpredatorcleanup();
}
juggpredatorondeath()
{
self endon( "disconnect" );
level endon( "game_ended" );
common_scripts\utility::waittill_any( "death", "joined_team", "joined_spectators", "lost_juggernaut" );
resetcannonlock();
predatorunsetcloaked( 0 );
juggpredatorcleanup();
}
juggpredatorondisconnect()
{
self endon( "death" );
self waittill( "disconnect" );
thread predatorendmusic();
}
juggpredatorcleanup()
{
predatorvisiondisable();
self setclientomnvar( "enableCustomAudioZone", 0 );
self setclientomnvar( "ui_predator_hud", 0 );
self setclientomnvar( "ui_predator_hud_scanline", 0 );
self setsurfacetype( "flesh" );
if ( !isai( self ) )
{
self notifyonplayercommand( "", "+speed_throw" );
if ( !level.console )
self notifyonplayercommand( "", "+toggleads_throw" );
self notifyonplayercommand( "", "+melee" );
}
resettimestamps();
self.cloaktimestamp = undefined;
self.predatorvisionenabled = undefined;
self.canusekillstreakcallback = undefined;
self.killstreakerrormsg = undefined;
self.predmoveslowtimestamp = undefined;
self.predfastslowtimestamp = undefined;
self.healthregendisabled = undefined;
self.breathingstoptime = undefined;
thread predatorendmusic();
maps\mp\gametypes\_battlechatter_mp::enablebattlechatter( self );
level notify( "update_bombsquad" );
self notify( "jugg_removed" );
}
setjuggpredatorclass( var_0 )
{
var_1 = [];
var_1["loadoutPrimary"] = "iw6_predatorcannon";
var_1["loadoutPrimaryBuff"] = "specialty_null";
var_1["loadoutSecondaryBuff"] = "specialty_null";
var_1["loadoutEquipment"] = "specialty_null";
return var_1;
}
setjuggpredatormodel()
{
if ( isdefined( self.headmodel ) )
{
self detach( self.headmodel, "" );
self.headmodel = undefined;
}
self setclothtype( "nylon" );
self.predatorvisionenabled = 0;
self.iscloaked = 1;
predatorunsetcloaked( 0, 1 );
thread setinitialcloak();
}
setinitialcloak()
{
self endon( "death" );
self endon( "disconnect" );
level endon( "game_ended" );
wait 3;
thread predatorvisiontoggle();
if ( !maps\mp\_utility::isemped() )
predatorsetcloaked( 0 );
thread predatorcloakmovementmonitor();
}
watchjugghostmigrationfinishedinit()
{
level endon( "game_ended" );
for (;;)
{
level waittill( "host_migration_end" );
if ( isdefined( self ) && isdefined( self.isjuggernautlevelcustom ) && self.isjuggernautlevelcustom )
{
self setclientomnvar( "enableCustomAudioZone", 1 );
self setclientomnvar( "ui_predator_hud", 1 );
}
}
}
juggpredatorcanuseotherkillstreaks( var_0 )
{
return 0;
}
juggpredatorkillsteakerrormsg()
{
self iprintlnbold( &"MP_JUGG_PREDATOR_NO_KILLSTREAKS" );
}
tryusecustomjuggernaut( var_0, var_1 )
{
maps\mp\killstreaks\_juggernaut::givejuggernaut( var_1 );
game["player_holding_level_killstrek"] = 0;
return 1;
}
enable_level_killstreak()
{
maps\mp\killstreaks\_airdrop::changecrateweight( "airdrop_assault", "juggernaut_predator", 85 );
}
disable_level_killstreak()
{
maps\mp\killstreaks\_airdrop::changecrateweight( "airdrop_assault", "juggernaut_predator", 0 );
}
customcratefunc()
{
if ( !isdefined( game["player_holding_level_killstrek"] ) )
game["player_holding_level_killstrek"] = 0;
if ( !maps\mp\_utility::allowlevelkillstreaks() || game["player_holding_level_killstrek"] )
return;
maps\mp\killstreaks\_airdrop::addcratetype( "airdrop_assault", "juggernaut_predator", 85, maps\mp\killstreaks\_airdrop::juggernautcratethink, maps\mp\killstreaks\_airdrop::get_friendly_juggernaut_crate_model(), maps\mp\killstreaks\_airdrop::get_enemy_juggernaut_crate_model(), &"MP_JUGG_PREDATOR_PICKUP" );
level thread watch_for_jugg_crate();
}
watch_for_jugg_crate()
{
for (;;)
{
level waittill( "createAirDropCrate", var_0 );
if ( isdefined( var_0 ) && isdefined( var_0.cratetype ) && var_0.cratetype == "juggernaut_predator" )
{
disable_level_killstreak();
var_1 = wait_for_capture( var_0 );
if ( !var_1 )
{
enable_level_killstreak();
continue;
}
game["player_holding_level_killstrek"] = 1;
break;
}
}
}
wait_for_capture( var_0 )
{
var_1 = watch_for_air_drop_death( var_0 );
return !isdefined( var_1 );
}
watch_for_air_drop_death( var_0 )
{
var_0 endon( "captured" );
var_0 waittill( "death" );
waittillframeend;
return 1;
}
customkillstreakfunc()
{
level.killstreakfuncs["juggernaut_predator"] = ::tryusecustomjuggernaut;
}
custombotkillstreakfunc()
{
maps\mp\bots\_bots_ks::bot_register_killstreak_func( "juggernaut_predator", maps\mp\bots\_bots_ks::bot_killstreak_simple_use );
}
predatorsetcloaked( var_0 )
{
if ( !self.iscloaked )
{
self.iscloaked = 1;
self.cloaktimestamp = gettime() + 500;
if ( var_0 )
{
self playlocalsound( "scn_predator_plr_cloak_on" );
self playsound( "scn_predator_npc_cloak_on" );
}
thread predatorplayunloakvfx();
self setviewmodel( "viewhands_mp_predator_proto_cloaked" );
self setmodel( "fullbody_mp_predator_a_cloaked" );
maps\mp\_utility::giveperk( "specialty_blindeye", 0 );
maps\mp\_utility::giveperk( "specialty_noscopeoutline", 0 );
thread predatoreyeflashupdate();
}
}
predatorunsetcloaked( var_0, var_1 )
{
if ( self.iscloaked )
{
self.iscloaked = 0;
self.cloaktimestamp = gettime() + 1000;
if ( var_0 )
{
self playlocalsound( "scn_predator_plr_cloak_off" );
self playsound( "scn_predator_npc_cloak_off" );
}
else if ( isdefined( self.inwater ) && self.inwater )
{
self playlocalsound( "scn_predator_plr_cloak_off_waterfall" );
self playsound( "scn_predator_npc_cloak_off_waterfall" );
}
thread predatorplayunloakvfx();
self setviewmodel( "viewhands_mp_predator_proto" );
if ( isalive( self ) && !isdefined( var_1 ) )
wait 0.25;
self setmodel( "fullbody_mp_predator_a" );
maps\mp\_utility::_unsetperk( "specialty_blindeye" );
maps\mp\_utility::_unsetperk( "specialty_noscopeoutline" );
}
}
predatorplayunloakvfx()
{
self endon( "death" );
playfxontag( common_scripts\utility::getfx( "predator_uncloak_chest" ), self, "j_spineupper" );
playfxontag( common_scripts\utility::getfx( "predator_uncloak_chest" ), self, "j_spinelower" );
wait 0.05;
playfxontag( common_scripts\utility::getfx( "predator_uncloak_sparks" ), self, "j_head" );
playfxontag( common_scripts\utility::getfx( "predator_uncloak_limbs" ), self, "j_knee_ri" );
playfxontag( common_scripts\utility::getfx( "predator_uncloak_limbs" ), self, "j_knee_le" );
wait 0.05;
playfxontag( common_scripts\utility::getfx( "predator_uncloak_limbs" ), self, "j_elbow_ri" );
playfxontag( common_scripts\utility::getfx( "predator_uncloak_limbs" ), self, "j_elbow_le" );
wait 0.05;
playfxontag( common_scripts\utility::getfx( "predator_uncloak_sparks" ), self, "j_wrist_le" );
playfxontag( common_scripts\utility::getfx( "predator_uncloak_sparks" ), self, "j_wrist_ri" );
wait 0.05;
playfxontag( common_scripts\utility::getfx( "predator_uncloak_limbs" ), self, "j_ankle_le" );
playfxontag( common_scripts\utility::getfx( "predator_uncloak_limbs" ), self, "j_ankle_ri" );
}
predatorusewristcomputer()
{
maps\mp\_utility::_giveweapon( "iw6_predatorwristcpu_mp" );
self switchtoweapon( "iw6_predatorwristcpu_mp" );
wait 1;
self switchtoweapon( "iw6_predatorcannon_mp" );
self takeweapon( "iw6_predatorwristcpu_mp" );
}
predatorcloakmovementmonitor()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "predator_lastStand" );
level endon( "game_ended" );
self.predmovefasttimestamp = 0;
self.predmoveslowtimestamp = 0;
self.predcloakdenieduntiltime = 0;
childthread predatorcloakwaitforforceend();
for (;;)
{
if ( self.iscloaked )
{
var_0 = common_scripts\utility::waittill_any_return( "sprint_begin", "predator_force_uncloak" );
if ( var_0 == "sprint_begin" )
thread predatorunsetcloaked( 1 );
}
else if ( isdefined( self.inwater ) && self.inwater || maps\mp\_utility::isemped() )
self.predcloakdenieduntiltime = gettime() + 1000;
else if ( self isonground() && !self ismantling() )
{
var_1 = lengthsquared( self getvelocity() );
var_2 = gettime();
if ( var_1 < 18225 && !self issprinting() )
{
if ( var_2 >= self.predcloakdenieduntiltime )
{
predatorsetcloaked( 1 );
continue;
}
}
else
self.predcloakdenieduntiltime = var_2 + 1250;
}
wait 0.1;
}
}
predatorcloakwaitforinput()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "predator_lastStand" );
level endon( "game_ended" );
childthread predatorcloakwaitforforceend();
for (;;)
{
self waittill( "predator_cloak_toggle" );
if ( gettime() < self.cloaktimestamp )
continue;
if ( self ismantling() || self ismeleeing() || maps\mp\_utility::isemped() )
{
wait 0.05;
continue;
}
if ( self.iscloaked )
{
thread predatorunsetcloaked( 1 );
continue;
}
if ( isdefined( self.inwater ) && self.inwater )
{
thread predatorplayunloakvfx();
wait 0.05;
continue;
}
else
predatorsetcloaked( 1 );
}
}
predatorcloakwaitforforceend()
{
for (;;)
{
self waittill( "predator_force_uncloak" );
while ( self ismantling() )
wait 0.05;
if ( self.iscloaked )
predatorunsetcloaked( 0 );
}
}
predatorcloakforceend( var_0 )
{
self.predcloakdenieduntiltime = gettime() + var_0;
self notify( "predator_force_uncloak" );
}
predatorcannonupdate()
{
self endon( "death" );
self endon( "disconnect" );
level endon( "game_ended" );
self endon( "predator_lastStand" );
self.cannonstate = 0;
for (;;)
{
if ( self.cannonstate == 0 )
{
var_0 = findtargetinreticle( 65, 80 );
if ( isdefined( var_0 ) )
startcannonlock( var_0 );
else
wait 0.5;
continue;
}
if ( self.cannonstate == 1 )
{
var_1 = self.cannontarget;
if ( isdefined( var_1 ) && maps\mp\_utility::isreallyalive( var_1 ) && self worldpointinreticle_circle( var_1 geteye(), 65, 150 ) && !maps\mp\_utility::isemped() )
{
if ( gettime() >= self.cannonlockreadytime )
{
finalizecannonlock( self.cannontarget );
childthread waittillcannonfire( self.cannontarget );
}
}
else
resetcannonlock( 1 );
wait 0.05;
continue;
}
if ( self.cannonstate == 2 )
{
if ( !isdefined( self.cannontarget ) || !maps\mp\_utility::isreallyalive( self.cannontarget ) || distance2dsquared( self.origin, self.cannontarget.origin ) > 518400 || maps\mp\_utility::isemped() )
resetcannonlock( 1 );
wait 0.05;
continue;
}
if ( self.cannonstate == -1 )
reloadcannon();
}
}
findtargetinreticle( var_0, var_1 )
{
var_2 = findalltargetsinreticle( var_0, var_1 );
return var_2[0];
}
findalltargetsinreticle( var_0, var_1 )
{
var_2 = [];
if ( !maps\mp\_utility::isemped() )
{
foreach ( var_4 in level.characters )
{
if ( isdefined( var_4 ) && maps\mp\_utility::isreallyalive( var_4 ) && maps\mp\_utility::isenemy( var_4 ) && !var_4 maps\mp\_utility::_hasperk( "specialty_blindeye" ) && distance2dsquared( self.origin, var_4.origin ) <= 518400 )
{
var_5 = var_4 geteye();
if ( self worldpointinreticle_circle( var_5, var_0, var_1 ) && sighttracepassed( self geteye(), var_5, 0, undefined, undefined ) )
var_2[var_2.size] = var_4;
}
}
if ( var_2.size > 1 )
return sortbydistance( var_2, self.origin );
}
return var_2;
}
startcannonlock( var_0 )
{
self playlocalsound( "scn_predator_weap_plr_lock_01" );
self.cannontarget = var_0;
self.cannonlockreadytime = gettime() + 375.0;
self.cannonstate = 1;
self weaponlockstart( var_0 );
self setclientomnvar( "ui_predator_target_ent", var_0 getentitynumber() );
self setclientomnvar( "ui_predator_hud_reticle", 1 );
self laseron();
thread playcannonlocksound();
}
playcannonlocksound()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "predatorLockEnded" );
wait 0.1875;
}
finalizecannonlock( var_0 )
{
self.cannonstate = 2;
var_1 = ( 0, 0, 0 );
self weaponlockfinalize( var_0, var_1, 0 );
self stoplocalsound( "scn_predator_weap_plr_lock_01" );
self playlocalsound( "scn_predator_weap_plr_lock_03" );
self setclientomnvar( "ui_predator_hud_reticle", 2 );
}
detachreticlevfxfromtarget( var_0, var_1 )
{
self setclientomnvar( "ui_predator_hud_reticle", 0 );
self stoplocalsound( "scn_predator_weap_plr_lock_03" );
if ( isdefined( var_1 ) && var_1 )
{
self stoplocalsound( "scn_predator_weap_plr_lock_01" );
self playlocalsound( "scn_predator_weap_plr_lose_lock" );
}
}
waittillcannonfire( var_0 )
{
self endon( "predatorLockEnded" );
self waittill( "missile_fire", var_1, var_2 );
predatorcloakforceend( 3000 );
childthread clearlockonprojectileimpact( var_1 );
self setclientomnvar( "ui_predator_hud_reticle", 0 );
self.cannonstate = -1;
}
reloadcannon()
{
wait 7.15;
self playlocalsound( "scn_predator_weap_plr_reload_done" );
wait 0.85;
self setweaponammoclip( "iw6_predatorcannon_mp", 1 );
resetcannonlock();
}
resetcannonlock( var_0 )
{
detachreticlevfxfromtarget( self.cannontarget, var_0 );
self.cannontarget = undefined;
self.cannonlockreadytime = undefined;
self.cannonstate = 0;
self weaponlockfree();
self weaponlocktargettooclose( 0 );
self weaponlocknoclearance( 0 );
self laseroff();
self notify( "predatorLockEnded" );
self setclientomnvar( "ui_predator_target_ent", -1 );
}
islocking()
{
return self playerads() > 0.95;
}
clearlockonprojectileimpact( var_0 )
{
self endon( "predatorLockEnded" );
var_0 waittill( "death" );
detachreticlevfxfromtarget( self.cannontarget );
self notify( "predatorLockEnded" );
}
predatorvisiontoggle()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "predator_lastStand" );
level endon( "game_ended" );
if ( !isai( self ) )
{
self notifyonplayercommand( "predator_vision", "+speed_throw" );
if ( !level.console )
self notifyonplayercommand( "predator_vision", "+toggleads_throw" );
}
if ( !maps\mp\_utility::isemped() )
predatorvisionenable();
for (;;)
{
self waittill( "predator_vision" );
if ( !self isthrowinggrenade() && !maps\mp\_utility::isemped() )
{
if ( self.predatorvisionenabled )
predatorvisiondisable();
else
predatorvisionenable();
wait 0.5;
}
}
}
predatorvisionenable()
{
if ( !self.predatorvisionenabled )
{
self.predatorvisionenabled = 1;
self playlocalsound( "scn_predator_plr_switch_vision_to_predator" );
self setclientomnvar( "ui_predator_hud_scanline", 1 );
predatoroutlineson();
}
}
predatorvisiondisable()
{
if ( self.predatorvisionenabled )
{
self.predatorvisionenabled = 0;
self playlocalsound( "scn_predator_plr_switch_vision_to_normal" );
self visionsetnakedforplayer( "", 0.1 );
self setclientomnvar( "ui_predator_vision", 0 );
predatoroutlinesoff();
self setclientomnvar( "ui_predator_hud_scanline", 1 );
}
}
predatoroutlineson()
{
self setclientomnvar( "ui_predator_vision", 1 );
foreach ( var_1 in level.characters )
{
if ( maps\mp\_utility::isreallyalive( var_1 ) && var_1 != self && ( isagent( var_1 ) || var_1.sessionstate == "playing" ) )
{
var_2 = "cyan";
if ( maps\mp\_utility::isenemy( var_1 ) )
var_2 = "red";
if ( !var_1 maps\mp\_utility::_hasperk( "specialty_incog" ) )
thread outlinepredatortarget( var_1, var_2 );
}
}
thread watchplayersspawning();
thread watchagentsspawning();
thread watchownerdisconnect();
}
watchforperkremoval( var_0 )
{
self endon( "death" );
self endon( "disconnect" );
self endon( "endPredatorVision" );
level endon( "game_ended" );
var_0 endon( "death" );
var_0 waittill( "starting_perks_unset" );
if ( maps\mp\_utility::isenemy( var_0 ) )
thread outlinepredatortarget( var_0, "red" );
else
thread outlinepredatortarget( var_0, "cyan" );
}
outlinepredatortarget( var_0, var_1 )
{
self endon( "death" );
self endon( "disconnect" );
self endon( "endPredatorVision" );
level endon( "game_ended" );
var_2 = maps\mp\_utility::outlineenableforplayer( var_0, var_1, self, 1, "killstreak_personal" );
var_3 = var_0 getentitynumber();
level.predatortargetsents[var_3] = var_0;
level.predatortargetsoutlines[var_3] = var_2;
var_0 common_scripts\utility::waittill_any( "death", "disconnect" );
if ( isdefined( var_0 ) )
maps\mp\_utility::outlinedisable( level.predatortargetsoutlines[var_3], var_0 );
level.predatortargetsents[var_3] = undefined;
level.predatortargetsoutlines[var_3] = undefined;
}
watchplayersspawning()
{
self endon( "death" );
self endon( "disconnect" );
level endon( "game_ended" );
self endon( "endPredatorVision" );
for (;;)
{
level waittill( "player_spawned", var_0 );
if ( var_0.sessionstate == "playing" && !var_0 maps\mp\_utility::_hasperk( "specialty_incog" ) )
thread watchforperkremoval( var_0 );
}
}
watchagentsspawning()
{
self endon( "death" );
self endon( "disconnect" );
level endon( "game_ended" );
self endon( "endPredatorVision" );
for (;;)
{
level waittill( "spawned_agent", var_0 );
if ( maps\mp\_utility::isenemy( var_0 ) )
{
thread outlinepredatortarget( var_0, "red" );
continue;
}
thread outlinepredatortarget( var_0, "cyan" );
}
}
watchownerdisconnect()
{
self endon( "death" );
level endon( "game_ended" );
self waittill( "disconnect" );
predatoroutlinesoff();
}
predatoroutlinesoff()
{
self notify( "endPredatorVision" );
if ( isdefined( level.predatortargetsents ) )
{
foreach ( var_2, var_1 in level.predatortargetsents )
{
if ( isalive( var_1 ) )
maps\mp\_utility::outlinedisable( level.predatortargetsoutlines[var_2], var_1 );
}
level.predatortargetsents = undefined;
level.predatortargetsoutlines = undefined;
}
if ( isdefined( self ) )
self setclientomnvar( "ui_predator_vision", 0 );
}
callback_playerlaststandpredator( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
if ( isdefined( self.isjuggernautlevelcustom ) && self.isjuggernautlevelcustom )
{
resetcannonlock();
predatorunsetcloaked( 0 );
predatorvisiondisable();
var_9 = spawnstruct();
var_9.einflictor = var_0;
var_9.attacker = var_1;
var_9.idamage = var_2;
var_9.attackerposition = var_1.origin;
if ( var_1 == self )
var_9.smeansofdeath = "MOD_SUICIDE";
else
var_9.smeansofdeath = var_3;
var_9.sweapon = var_4;
if ( isdefined( var_1 ) && isplayer( var_1 ) && var_1 getcurrentprimaryweapon() != "none" )
var_9.sprimaryweapon = var_1 getcurrentprimaryweapon();
else
var_9.sprimaryweapon = undefined;
var_9.vdir = var_5;
var_9.shitloc = var_6;
var_9.laststandstarttime = gettime() + 8000;
var_10 = maydolaststand( var_4, var_9.smeansofdeath, var_6 );
if ( isdefined( self.endgame ) )
var_10 = 0;
if ( !var_10 )
{
var_9.laststandstarttime = gettime();
self.laststandparams = var_9;
self.uselaststandparams = 1;
maps\mp\_utility::_suicide();
return;
}
self.inlaststand = 1;
self.health = 9999;
foreach ( var_12 in level.players )
{
if ( isdefined( var_12 ) && !isai( var_12 ) )
var_12 playlocalsound( "scn_predator_plr_vocal_laugh" );
}
if ( isdefined( level.ac130player ) && isdefined( var_1 ) && level.ac130player == var_1 )
level notify( "ai_crawling", self );
self.previousprimary = self.lastdroppableweapon;
self.laststandparams = var_9;
self takeallweapons();
self giveweapon( "iw6_predatorsuicide_mp", 0, 0 );
self switchtoweapon( "iw6_predatorsuicide_mp" );
common_scripts\utility::_disableusability();
self.inc4death = 1;
thread activatepredatorcountdown();
thread clearpredatorbombtimer();
thread laststandtimer( 8 );
self notify( "predator_lastStand" );
}
else if ( isdefined( level.previouslaststandcallback ) )
[[ level.previouslaststandcallback ]]( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 );
}
maydolaststand( var_0, var_1, var_2 )
{
if ( var_1 == "MOD_TRIGGER_HURT" )
return 0;
if ( var_1 == "MOD_SUICIDE" )
return 0;
return 1;
}
activatepredatorcountdown()
{
self endon( "disconnect" );
self endon( "joined_team" );
self endon( "predator_detonate" );
level endon( "game_ended" );
var_0 = 3;
var_1 = 8 - var_0;
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( var_0 );
setomnvar( "ui_bomb_timer", 4 );
childthread update_pred_ui_timer( var_1 );
}
update_pred_ui_timer( var_0 )
{
var_1 = var_0 * 1000 + gettime();
setomnvar( "ui_nuke_end_milliseconds", var_1 );
level waittill( "host_migration_begin" );
var_2 = maps\mp\gametypes\_hostmigration::waittillhostmigrationdone();
if ( var_2 > 0 )
setomnvar( "ui_nuke_end_milliseconds", var_1 + var_2 );
}
clearpredatorbombtimer()
{
level endon( "game_ended" );
common_scripts\utility::waittill_any( "predator_detonate", "joined_team", "disconnect" );
setomnvar( "ui_bomb_timer", 0 );
}
laststandtimer( var_0 )
{
self endon( "disconnect" );
self endon( "joined_team" );
level endon( "game_ended" );
common_scripts\utility::waittill_any_timeout( var_0, "death", "detonate" );
predatorsuicidenuke();
}
detonateonuse()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "joined_team" );
level endon( "game_ended" );
self waittill( "detonate" );
predatorsuicidenuke();
}
detonateondeath()
{
self endon( "detonate" );
self endon( "disconnect" );
self endon( "joined_team" );
level endon( "game_ended" );
self waittill( "death" );
predatorsuicidenuke();
}
predatorsuicidenuke()
{
self.uselaststandparams = 1;
self playsound( "predator_explosion" );
foreach ( var_1 in level.players )
{
if ( isdefined( var_1 ) && !isai( var_1 ) )
var_1 playlocalsound( "predator_explosion_boom_local" );
}
self visionsetnakedforplayer( "coup_sunblind", 0.1 );
wait 0.2;
playfx( common_scripts\utility::getfx( "predator_self_destruct" ), self.origin, anglestoup( self.angles ), anglestoforward( self.angles ) );
radiusdamage( self.origin, 800, 100, 100, self );
earthquake( 0.1, 3.0, self.origin, 800 );
playpredatorexpvisionsequence();
level notify( "jugg_predator_killed", self );
self notify( "predator_detonate" );
if ( isalive( self ) )
maps\mp\_utility::_suicide();
}
predatoreyeflashupdate()
{
self endon( "death" );
self endon( "disconnect" );
level endon( "game_ended" );
for (;;)
{
self waittill( "player_melee" );
if ( self.iscloaked )
{
predatorcloakforceend( 1000 );
continue;
}
break;
}
}
predatoronenemykilled()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "predator_lastStand" );
level endon( "game_ended" );
for (;;)
{
self waittill( "killed_enemy", var_0, var_1, var_2 );
if ( var_1 == "iw6_predatorcannon_mp" )
{
if ( isdefined( var_2 ) && var_2 == "MOD_MELEE" )
predatormeleekilleffect( var_0 );
}
}
}
predatormeleekilleffect( var_0 )
{
var_1 = var_0.origin + ( 0, 0, 50 );
self playlocalsound( "scn_predator_melee_swing_plr" );
var_2 = self.origin - var_0.origin;
var_3 = var_0 gettagorigin( "j_neck" );
playfx( level._effect["predator_kill"], var_3, vectornormalize( var_2 ), anglestoup( var_0 gettagangles( "j_neck" ) ) );
if ( checktimestamp( "victoryCry" ) && checktimestamp( "painCry" ) )
{
settimestamp( "victoryCry", 10000 );
predatorplayvo( "scn_predator_plr_vocal_victory_cry", "scn_predator_npc_vocal_victory_cry" );
}
}
watchempdamage()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "predator_lastStand" );
level endon( "game_ended" );
for (;;)
{
self waittill( "emp_damage", var_0, var_1 );
common_scripts\utility::waitframe();
if ( maps\mp\_utility::isemped() )
{
predatorvisiondisable();
predatorcloakforceend( 1000 );
}
}
}
watchempevent()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "predator_lastStand" );
level endon( "game_ended" );
for (;;)
{
level waittill( "emp_update" );
if ( maps\mp\_utility::isemped() )
{
predatorvisiondisable();
predatorcloakforceend( 1000 );
}
}
}
predatorvocalclicks()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "predator_lastStand" );
level endon( "game_ended" );
for (;;)
{
var_0 = randomfloatrange( 10, 15 );
wait( var_0 );
if ( checktimestamp( "victoryCry" ) && checktimestamp( "painCry" ) )
predatorplayvo( "scn_predator_plr_vocal_clicks", "scn_predator_npc_vocal_clicks" );
}
}
predatorpaincry()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "predator_lastStand" );
level endon( "game_ended" );
for (;;)
{
self waittill( "damage", var_0, var_1, var_2, var_3, var_4 );
if ( isdefined( var_1 ) && var_1 != self && var_0 > 10 && checktimestamp( "painCry", 1000 ) )
predatorplayvo( "scn_predator_plr_vocal_pain", "scn_predator_npc_vocal_pain" );
}
}
predatorplayvo( var_0, var_1 )
{
self playlocalsound( var_0 );
self playsoundonmovingent( var_1 );
}
predatorbeginmusic()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "predator_lastStand" );
level endon( "game_ended" );
maps\mp\gametypes\_music_and_dialog::disablemusic();
level.predatormusicent = spawn( "script_origin", ( 0, 0, 0 ) );
level.predatormusicent playsound( "mus_predator_music_spawn" );
childthread predatortensionmusic();
}
predatortensionmusic()
{
var_0 = [ "mus_predator_music_tension_01", "mus_predator_music_tension_02" ];
var_1 = randomint( var_0.size );
for (;;)
{
wait 50;
level.predatormusicent playsound( var_0[var_1] );
var_1++;
if ( var_1 >= var_0.size )
var_1 = 0;
}
}
predatorendmusic()
{
level.predatormusicent stopsounds();
thread maps\mp\gametypes\_music_and_dialog::enablemusic();
common_scripts\utility::waitframe();
level.predatormusicent delete();
level.predatormusicent = undefined;
}
playpredatorexpvisionsequence()
{
level.predatorexptimer = 0;
level thread delaythread_predatorexp( level.predatorexptimer, ::predatorexpslowmo );
level thread delaythread_predatorexp( level.predatorexptimer, ::predatorexpvision );
level thread delaythread_predatorexp( level.predatorexptimer + 0.5, ::predatorexpdeath );
}
delaythread_predatorexp( var_0, var_1 )
{
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( var_0 );
thread [[ var_1 ]]();
}
predatorexpvision()
{
if ( maps\mp\_utility::is_gen4() )
{
visionsetpostapply( "mpnuke", 0.2 );
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( 0.2 );
visionsetpostapply( "nuke_global_flash", 0.5 );
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( 0.3 );
visionsetpostapply( "", 1 );
}
else
{
visionsetpostapply( "mpnuke", 0.7 );
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( 0.5 );
visionsetpostapply( "nuke_global_flash", 0.5 );
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( 0.5 );
visionsetpostapply( "", 0.5 );
}
}
predatorexpslowmo()
{
setslowmotion( 1.0, 0.25, 0.5 );
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( 1 );
setslowmotion( 0.25, 1, 2.0 );
}
predatorexpdeath()
{
maps\mp\gametypes\_hostmigration::waittillhostmigrationdone();
if ( isdefined( level.predatoruser ) )
{
foreach ( var_1 in level.characters )
{
if ( predatorexpcankill( var_1 ) )
{
if ( isplayer( var_1 ) )
{
if ( maps\mp\_utility::isreallyalive( var_1 ) )
var_1 thread maps\mp\gametypes\_damage::finishplayerdamagewrapper( level.predatoruser, level.predatoruser, 999999, 0, "MOD_EXPLOSIVE", "iw6_predatorsuicide_mp", var_1.origin, ( 0, 0, 1 ), "none", 0, 0 );
continue;
}
var_1 maps\mp\agents\_agents::agent_damage_finished( level.predatoruser, level.predatoruser, 999999, 0, "MOD_EXPLOSIVE", "iw6_predatorsuicide_mp", var_1.origin, ( 0, 0, 1 ), "none", 0 );
}
}
}
var_3 = maps\mp\_utility::getotherteam( level.predatoruser.team );
level maps\mp\killstreaks\_jammer::destroygroundobjects( level.predatoruser, var_3 );
level maps\mp\killstreaks\_air_superiority::destroyactivevehicles( level.predatoruser, var_3 );
}
predatorexpcankill( var_0 )
{
if ( level.teambased )
{
if ( var_0.team == level.predatoruser.team )
return 0;
}
else
{
var_1 = var_0 == level.predatoruser;
var_2 = isdefined( var_0.owner ) && var_0.owner == level.predatoruser;
if ( var_1 || var_2 )
return 0;
}
return 1;
}
inittimestamp( var_0 )
{
self._eventtimestamps[var_0] = 0;
}
checktimestamp( var_0, var_1 )
{
return gettime() >= self._eventtimestamps[var_0];
}
settimestamp( var_0, var_1 )
{
self._eventtimestamps[var_0] = gettime() + var_1;
}
resettimestamps()
{
self._eventtimestamps = undefined;
}