1249 lines
35 KiB
Plaintext
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;
|
|
}
|