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

1010 lines
28 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
last_turret_init()
{
precacheitem( "killstreak_remote_turret_remote_mp" );
precachestring( &"ALIEN_COLLECTIBLES_USE_TURRET" );
precacheturret( "turret_dlc4_alien_shock" );
precacheshader( "reticle_flechette" );
last_turret_fx_init();
common_scripts\utility::flag_init( "boss_turrets_on" );
}
last_turret_fx_init()
{
level._effect["beacon_turret_hit_fx"] = loadfx( "vfx/gameplay/alien/vfx_alien_beac_turret_hit_fx" );
level._effect["beacon_turret_kraken_hit_fx"] = loadfx( "vfx/gameplay/alien/vfx_alien_arm_gun_li_cloud" );
}
set_up_remote_turrets()
{
level.kraken_turrets = [];
wait 1.0;
var_0 = getentarray( "turret_use_trigger", "targetname" );
foreach ( var_2 in var_0 )
var_2 thread remote_turret_monitoruse();
level thread listen_for_kraken_emp();
}
remote_turret_monitoruse()
{
level endon( "game_ended" );
self endon( "turret_is_broken" );
wait 0.05;
var_0 = build_turret_func();
var_0.in_use = 0;
var_0.overloaded = 0;
var_0.reloading = 0;
var_0.off = 0;
var_1 = var_0.turret_ammo;
var_0.use_trigger = self;
var_0 makeunusable();
if ( isdefined( level.shock_turret_ammo_override ) )
{
var_1 = level.shock_turret_ammo_override;
var_0.turret_ammo = level.shock_turret_ammo_override;
}
self makeusable();
self sethintstring( &"ALIEN_COLLECTIBLES_ACTIVATE_TURRET" );
self setmodel( "tag_origin" );
if ( maps\mp\alien\_utility::alien_mode_has( "outline" ) )
{
self.outline_model = getent( self.script_noteworthy, "targetname" );
maps\mp\alien\_outline_proto::add_to_outline_watch_list( self.outline_model, 750 );
}
var_0 thread watch_for_turret_reloading();
var_0 thread watch_for_turret_overloading();
level.kraken_turrets[level.kraken_turrets.size] = var_0;
if ( !var_0.off )
var_0 maps\mp\_utility::delaythread( 2, ::play_turret_fx, 0 );
else
{
var_0 maps\mp\_utility::delaythread( 2, ::play_turret_fx, 1 );
self sethintstring( "" );
}
for (;;)
{
self waittill( "trigger", var_2 );
if ( !isplayer( var_2 ) )
continue;
if ( var_2 maps\mp\alien\_utility::is_holding_deployable() )
{
var_2 maps\mp\_utility::setlowermessage( "cant_buy", &"ALIEN_COLLECTIBLES_PLAYER_HOLDING", 3 );
continue;
}
if ( var_0.in_use )
continue;
if ( var_0.off )
continue;
if ( maps\mp\alien\_utility::is_true( var_2.iscarrying ) )
continue;
if ( isdefined( level.drill_carrier ) && level.drill_carrier == var_2 )
continue;
if ( var_0.overloaded )
{
var_2 maps\mp\_utility::setlowermessage( "cant_buy", &"MP_ALIEN_LAST_TURRET_OFFLINE", 3 );
continue;
}
if ( var_0.reloading )
{
var_2 maps\mp\_utility::setlowermessage( "cant_buy", &"MP_ALIEN_LAST_TURRET_RELOADING", 3 );
continue;
}
while ( !var_2 isonground() )
wait 0.1;
var_3 = int( 750 * var_2 maps\mp\alien\_perk_utility::perk_gettrapcostscalar() );
if ( !var_0 is_turret_enabled() )
{
if ( var_2 can_activate_turret( var_3 ) )
{
var_2 maps\mp\alien\_persistence::take_player_currency( var_3, 1, "trap" );
self sethintstring( "" );
var_0.enabled = 1;
self.outline_model.enabled = 1;
var_0.turret_ammo = int( var_1 * var_2 maps\mp\alien\_perk_utility::perk_gettrapdurationscalar() );
var_2 maps\mp\alien\_utility::set_turret_ammocount( var_0.turret_ammo );
var_0.in_use = 1;
var_0 enable_turret_use();
var_0 thread turret_monitoruse( var_2 );
var_0.owner = var_2;
maps\mp\alien\_outline_proto::remove_from_outline_watch_list( self.outline_model );
}
else
var_2 maps\mp\_utility::setlowermessage( "no_money", &"ALIEN_COLLECTIBLES_NO_MONEY", 3 );
continue;
}
var_0.in_use = 1;
var_2 maps\mp\alien\_utility::set_turret_ammocount( var_0.turret_ammo );
var_0 enable_turret_use();
var_0 thread turret_monitoruse( var_2 );
var_0.owner = var_2;
maps\mp\alien\_outline_proto::remove_from_outline_watch_list( self.outline_model );
}
}
build_turret_func()
{
var_0 = getent( self.target, "targetname" );
var_1 = "mg_turret";
var_2 = "turret_dlc4_alien_shock";
var_3 = "killstreak_remote_turret_remote_mp";
var_4 = "weapon_standing_turret_chaingun";
var_5 = "used_minigun_turret";
var_6 = spawnturret( "misc_turret", var_0.origin, var_2 );
var_6.angles = var_0.angles;
var_6 setmodel( var_4 );
var_6.weaponinfo = var_2;
var_0 delete();
var_6.health = 100;
var_6.turrettype = var_1;
var_6.turret_ammo = 300;
var_6 setturretmodechangewait( 1 );
var_6 setdefaultdroppitch( 0.0 );
var_6 maketurretsolid();
var_6.enabled = 0;
var_7 = getentarray( "turret_trigger_use_touch", "targetname" );
if ( var_7.size > 0 )
{
if ( var_7.size > 1 )
var_7 = common_scripts\utility::get_array_of_closest( self.origin, var_7 );
var_6.actual_use_trigger = var_7[0];
}
return var_6;
}
turret_monitoruse( var_0 )
{
level endon( "game_ended" );
level notify( "beacon_turret_used" );
while ( !isdefined( self.turret_ammo ) )
wait 0.05;
self.use_trigger hide();
self.owner = var_0;
var_0.iscarrying = 1;
self.overheated = 0;
var_0.pressed_use = 0;
var_0.is_using_remote_turret = 1;
thread send_notify_on_player_disconnect( var_0 );
move_player_camera_to_turret( var_0 );
play_turret_fx( 0 );
thread monitor_player_exit( var_0 );
thread watch_bullet_fired( var_0 );
thread wait_for_turret_to_spin_up();
thread check_player_state_and_stop_using_turret( var_0 );
wait_for_disable_turret();
disable_turret();
}
send_notify_on_player_disconnect( var_0 )
{
self endon( "stop_watching" );
var_0 waittill( "disconnect" );
self notify( "user_disconnected" );
self.owner = undefined;
self.in_use = 0;
self notify( "exit" );
self notify( "player_exit" );
self.use_trigger show();
self.use_trigger sethintstring( &"ALIEN_COLLECTIBLES_USE_TURRET" );
maps\mp\alien\_outline_proto::add_to_outline_watch_list( self.use_trigger.outline_model, 750 );
self notify( "stop_watching" );
}
move_player_camera_to_turret( var_0 )
{
var_0 maps\mp\_utility::_giveweapon( "killstreak_remote_turret_remote_mp" );
var_0 switchtoweapon( "killstreak_remote_turret_remote_mp" );
if ( getdvarint( "camera_thirdPerson" ) )
var_0 maps\mp\_utility::setthirdpersondof( 0 );
var_0 maps\mp\_utility::setusingremote( self.turrettype );
var_0 playerlinkweaponviewtodelta( self, "tag_player", 1, 80, 80, 25, 25, 0 );
var_0 playerlinkedsetviewznear( 0 );
var_0 playerlinkedsetusebaseangleforviewclamp( 1 );
var_0 remotecontrolturret( self );
var_0 maps\mp\_utility::clearlowermessage( "enter_remote_turret" );
var_0 maps\mp\alien\_utility::disable_special_ammo();
var_0 maps\mp\alien\_utility::show_turret_icon( 2 );
var_0 maps\mp\alien\_utility::set_turret_ammocount( self.turret_ammo );
var_0 setclientomnvar( "ui_alien_turret_overheat", 0 );
thread turret_overheat_monitor( var_0 );
thread turret_cooldown_monitor();
var_0 maps\mp\_utility::setlowermessage( "disengage_turret", &"ALIEN_COLLECTIBLES_DISENGAGE_TURRET", 4 );
var_0 add_reticle_to_player_view();
}
wait_for_disable_turret()
{
self waittill( "disable_turret" );
}
listen_for_player_use_button()
{
self endon( "stop_watching" );
self.owner endon( "disconnect" );
while ( self.owner usebuttonpressed() )
wait 0.05;
for (;;)
{
var_0 = 0;
while ( self.owner usebuttonpressed() )
{
var_0 = var_0 + 0.05;
wait 0.05;
if ( var_0 > 0.5 )
{
self.owner notify( "player_pressed_use" );
wait 2.0;
}
}
wait 0.05;
}
}
watch_bullet_fired( var_0 )
{
self endon( "disable_turret" );
self endon( "player_exit" );
self.owner endon( "disconnect" );
thread zap_periodically_when_firing( var_0 );
var_1 = 0;
var_2 = self.turret_ammo;
var_3 = weaponfiretime( self.weaponinfo );
for (;;)
{
self waittill( "turret_fire" );
self getturretowner() notify( "turret_fire" );
self.heatlevel = self.heatlevel + var_3;
var_1++;
self.cooldownwaittime = var_3;
self.turret_ammo = var_2 - var_1;
if ( var_1 >= var_2 )
{
self.turret_ammo = 0;
self.owner maps\mp\alien\_utility::set_turret_ammocount( self.turret_ammo );
break;
}
self.owner maps\mp\alien\_utility::set_turret_ammocount( self.turret_ammo );
}
if ( isdefined( self.owner ) && isalive( self.owner ) )
self.owner thread maps\mp\alien\_utility::wait_for_player_to_dismount_turret();
self.reloading = 1;
self.owner setclientomnvar( "ui_alien_turret_overheat", -1 );
self notify( "disable_turret" );
}
wait_for_turret_to_spin_up()
{
self endon( "disable_turret" );
self endon( "player_exit" );
for (;;)
{
if ( !self.overheated )
self turretfireenable();
else
self turretfiredisable();
wait 0.1;
}
}
wait_for_player_to_dismount_remote_turret()
{
self endon( "death" );
self endon( "disconnect" );
maps\mp\_utility::setlowermessage( "disengage_turret", &"ALIEN_COLLECTIBLES_DISENGAGE_TURRET", 0 );
while ( maps\mp\_utility::isusingremote() )
wait 0.5;
maps\mp\_utility::clearlowermessage( "disengage_turret" );
}
watch_for_turret_reloading()
{
if ( isdefined( level.shock_turret_reload_time_override ) )
var_0 = level.shock_turret_reload_time_override;
else
var_0 = 25;
while ( !isdefined( self.broken ) )
{
if ( self.reloading && !self.overloaded )
{
thread play_turret_fx( 1 );
self.use_trigger sethintstring( "" );
maps\mp\alien\_outline_proto::remove_from_outline_watch_list( self.use_trigger.outline_model );
wait( var_0 - 5 );
if ( self.overloaded )
{
self.reloading = 0;
break;
}
thread play_turret_fx( 0 );
wait 5;
if ( self.overloaded )
{
self.reloading = 0;
break;
}
maps\mp\alien\_outline_proto::add_to_outline_watch_list( self.use_trigger.outline_model, 750 );
self.reloading = 0;
self.use_trigger sethintstring( &"ALIEN_COLLECTIBLES_ACTIVATE_TURRET" );
}
wait 0.1;
}
self.reloading_func_done = 1;
}
watch_for_turret_overloading()
{
level waittill( "traps_disabled" );
self.overloaded = 1;
level thread maps\mp\mp_alien_last_traps::play_disabled_fx( self.use_trigger.outline_model );
self.use_trigger sethintstring( &"MP_ALIEN_LAST_TURRET_OFFLINE" );
maps\mp\alien\_outline_proto::remove_from_outline_watch_list( self.use_trigger.outline_model );
maps\mp\alien\_outline_proto::enable_outline( self.use_trigger.outline_model, 4, 1 );
level waittill( "traps_reenabled" );
self.overloaded = 0;
self.reloading = 0;
self.use_trigger sethintstring( &"ALIEN_COLLECTIBLES_ACTIVATE_TURRET" );
self.overloading_func_done = 1;
maps\mp\alien\_outline_proto::add_to_outline_watch_list( self.use_trigger.outline_model, 750 );
}
listen_for_kraken_emp()
{
common_scripts\utility::flag_wait( "boss_turrets_on" );
while ( !isdefined( level.kraken ) )
wait 0.1;
var_0 = undefined;
for (;;)
{
var_1 = level.kraken common_scripts\utility::waittill_any_return_no_endon_death( "kraken_emp", "kraken_emp_stage_2", "kraken_emp_stage_3" );
foreach ( var_3 in level.kraken_turrets )
{
var_3.overloaded = 1;
if ( var_1 == "kraken_emp_stage_2" )
{
if ( isdefined( var_3.use_trigger.script_noteworthy ) && var_3.use_trigger.script_noteworthy == "turret_console_lower_right" )
var_0 = var_3;
}
if ( var_1 == "kraken_emp_stage_3" )
{
if ( isdefined( var_3.use_trigger.script_noteworthy ) && var_3.use_trigger.script_noteworthy == "turret_console_lower_left" )
var_0 = var_3;
}
}
if ( isdefined( var_0 ) )
{
var_0 notify( "disable_turret" );
var_0.use_trigger notify( "turret_is_broken" );
var_0.use_trigger turret_is_broken( var_0 );
}
}
}
is_turret_enabled()
{
return self.enabled;
}
is_remote_enabled()
{
return self.enabled;
}
disable_turret()
{
self.enabled = 0;
self.use_trigger sethintstring( &"ALIEN_COLLECTIBLES_ACTIVATE_TURRET" );
self turretfiredisable();
self maketurretinoperable();
if ( isdefined( self.outline_model ) )
self.outline_model.enabled = 0;
}
play_turret_fx( var_0 )
{
return;
}
play_broken_fx()
{
return;
}
enable_turret_use()
{
self sethintstring( "" );
self turretfireenable();
self maketurretoperable();
}
can_activate_turret( var_0 )
{
return maps\mp\alien\_persistence::player_has_enough_currency( var_0 );
}
monitor_player_exit( var_0 )
{
self endon( "turret_disabled" );
thread listen_for_player_use_button();
for (;;)
{
var_0 waittill( "player_pressed_use" );
self.use_trigger sethintstring( &"ALIEN_COLLECTIBLES_USE_TURRET" );
maps\mp\alien\_outline_proto::add_to_outline_watch_list( self.use_trigger.outline_model, 750 );
var_0.pressed_use = 1;
}
}
turret_cooldown_monitor()
{
self endon( "death" );
self notify( "stop_cooldown_monitor" );
self endon( "stop_cooldown_monitor" );
self endon( "turret_disabled" );
self endon( "disable_turret" );
self endon( "exit" );
for (;;)
{
if ( self.heatlevel > 0 )
{
if ( self.cooldownwaittime <= 0 )
self.heatlevel = max( 0, self.heatlevel - 0.05 );
else
self.cooldownwaittime = max( 0, self.cooldownwaittime - 0.05 );
}
wait 0.05;
}
}
turret_overheat_monitor( var_0 )
{
self notify( "overheat_monitor" );
self endon( "overheat_monitor" );
self endon( "turret_disabled" );
self endon( "disable_turret" );
self endon( "exit" );
var_0 endon( "disconnect" );
self.heatlevel = 0;
if ( isdefined( level.shock_turret_heat_override ) )
var_1 = level.shock_turret_heat_override;
else
var_1 = 2.5;
self.cooldownwaittime = 1;
var_2 = 0;
for (;;)
{
if ( !maps\mp\_utility::isreallyalive( var_0 ) )
{
self.inuseby = undefined;
var_0 setclientomnvar( "ui_alien_turret_overheat", -1 );
break;
}
if ( self.heatlevel >= var_1 )
{
var_3 = 1;
thread turret_overheat_disable();
}
else
var_3 = self.heatlevel / var_1;
var_4 = 5;
var_5 = int( var_3 * 100 );
if ( var_2 != var_5 )
{
if ( var_5 <= var_4 || abs( abs( var_2 ) - abs( var_5 ) ) > var_4 )
{
var_0 setclientomnvar( "ui_alien_turret_overheat", var_5 );
var_2 = var_5;
}
}
wait 0.05;
}
var_0 setclientomnvar( "ui_alien_turret_overheat", -1 );
}
turret_overheat_disable()
{
self endon( "turret_disabled" );
self endon( "disable_turret" );
self endon( "exit" );
self.overheated = 1;
while ( self.heatlevel > 0 )
wait 0.1;
self.overheated = 0;
}
clear_turret_ammo_counter_on_death( var_0 )
{
self notify( "clearammocounterondeath" );
self endon( "clearammocounterondeath" );
var_0 endon( "disconnect" );
self waittill( "turret_disabled" );
var_0 maps\mp\alien\_utility::hide_turret_icon();
var_0 maps\mp\_utility::clearlowermessage( "disengage_turret" );
}
clear_turret_ammo_counter_on_dismount( var_0 )
{
self notify( "dimountammocounter" );
self endon( "dismountammocounter" );
var_0 endon( "disconnect" );
var_0 maps\mp\alien\_utility::hide_turret_icon();
var_0 maps\mp\_utility::clearlowermessage( "disengage_turret" );
if ( var_0 getcurrentweapon() == "none" )
var_0 thread restore_last_valid_weapon();
}
restore_last_valid_weapon()
{
var_0 = self getweaponslistprimaries();
foreach ( var_2 in var_0 )
{
if ( isdefined( var_2 ) && var_2 != "none" )
{
self switchtoweapon( var_2 );
break;
}
}
}
zap_periodically_when_firing( var_0 )
{
self endon( "player_exit" );
while ( self.turret_ammo > 0 )
{
self waittill( "turret_fire" );
if ( self.heatlevel > 0.1 )
{
var_1 = self gettagorigin( "tag_player" );
var_2 = vectornormalize( anglestoforward( self gettagangles( "tag_player" ) ) );
var_3 = var_1 + var_2 * 10000;
var_4 = bullettrace( var_1, var_3, 1, undefined, 1, 1 );
if ( isdefined( var_4["position"] ) )
{
var_5 = var_4["position"];
if ( isdefined( var_4["entity"] ) && isdefined( var_4["entity"].agent_type ) && ( var_4["entity"].agent_type == "kraken_tentacle" || var_4["entity"].agent_type == "kraken" ) )
zap_aliens( var_5, var_4["entity"].agent_type );
else
zap_aliens( var_5 );
}
wait 0.5;
}
wait 0.1;
}
}
zap_aliens( var_0, var_1 )
{
var_2 = 62500;
if ( self.heatlevel > 0.5 )
var_2 = 122500;
if ( self.heatlevel > 0.75 )
var_2 = 250000;
var_3 = maps\mp\alien\_spawnlogic::get_alive_agents();
if ( isdefined( level.seeder_active_turrets ) )
var_3 = common_scripts\utility::array_combine( var_3, level.seeder_active_turrets );
var_4 = [];
foreach ( var_6 in var_3 )
{
if ( distancesquared( var_0, var_6.origin ) < var_2 )
var_4[var_4.size] = var_6;
}
var_8 = 0;
var_9 = 4;
if ( !isdefined( self.death_struct ) )
{
self.death_struct = spawnstruct();
self.death_struct.attack_bolt = spawn( "script_model", var_0 );
self.death_struct.attack_bolt setmodel( "tag_origin" );
if ( isdefined( level.shock_turret_arc_damage_override ) )
self.death_struct.damage_amount = level.shock_turret_arc_damage_override;
else
self.death_struct.damage_amount = 200;
common_scripts\utility::waitframe();
self.death_struct.attack_bolt.origin = var_0;
}
self.death_struct.attack_bolt.origin = var_0;
if ( var_4.size < 1 )
{
for ( var_8 = 0; var_8 < var_9; var_8++ )
{
if ( isdefined( var_1 ) )
{
level.zap_the_kraken_time = 2;
turret_tesla_bolt_no_target( var_0, var_1 );
}
else
turret_tesla_bolt_no_target( var_0 );
if ( randomint( 2 ) == 0 )
break;
wait 0.1;
}
}
else
{
foreach ( var_6 in var_4 )
{
if ( isdefined( var_6 ) )
{
var_6 turret_tesla_bolt_death( self );
var_8++;
if ( var_8 >= var_9 )
break;
wait 0.1;
}
}
}
wait 0.05;
killfxontag( level._effect["tesla_attack"], self.death_struct.attack_bolt, "TAG_ORIGIN" );
killfxontag( level._effect["tesla_shock"], self.death_struct.attack_bolt, "TAG_ORIGIN" );
killfxontag( level._effect["beacon_turret_kraken_hit_fx"], self.death_struct.attack_bolt, "TAG_ORIGIN" );
}
turret_tesla_bolt_death( var_0 )
{
common_scripts\utility::waitframe();
playfxontag( level._effect["tesla_attack"], var_0.death_struct.attack_bolt, "TAG_ORIGIN" );
playfxontag( level._effect["beacon_turret_hit_fx"], var_0.death_struct.attack_bolt, "tag_origin" );
var_1 = undefined;
if ( isdefined( self.alien_type ) && self.alien_type == "seeder_spore" )
var_1 = self gettagorigin( "J_Spore_46" );
else if ( isdefined( self ) && isalive( self ) && maps\mp\alien\_utility::has_tag( self.model, "J_SpineUpper" ) )
var_1 = self gettagorigin( "J_SpineUpper" );
if ( isdefined( var_1 ) )
{
var_0.death_struct.attack_bolt moveto( var_1, 0.05 );
wait 0.05;
if ( isdefined( self ) && distancesquared( self.origin, var_0.death_struct.attack_bolt.origin ) > 40000 )
playfxontag( level._effect["beacon_turret_hit_fx"], var_0.death_struct.attack_bolt, "tag_origin" );
if ( isdefined( self ) )
self playsound( "turret_shock" );
wait 0.05;
if ( isdefined( self ) )
{
var_2 = self;
if ( isdefined( self.alien_type ) && self.alien_type == "ancestor" && self.shield_state == 1 )
var_2 = undefined;
else if ( isdefined( self.alien_type ) && self.alien_type == "seeder_spore" )
var_2 = self.coll_model;
if ( isdefined( var_2 ) )
var_2 dodamage( var_0.death_struct.damage_amount, self.origin, var_0.owner, var_0 );
}
}
stopfxontag( level._effect["tesla_attack"], var_0.death_struct.attack_bolt, "TAG_ORIGIN" );
}
turret_tesla_bolt_no_target( var_0, var_1 )
{
var_2 = self;
common_scripts\utility::waitframe();
playfxontag( level._effect["tesla_attack"], var_2.death_struct.attack_bolt, "TAG_ORIGIN" );
if ( isdefined( var_1 ) && var_1 == "kraken" )
playfxontag( level._effect["beacon_turret_kraken_hit_fx"], var_2.death_struct.attack_bolt, "tag_origin" );
else
playfxontag( level._effect["tesla_shock"], var_2.death_struct.attack_bolt, "tag_origin" );
var_3 = 4;
var_4 = self gettagorigin( "tag_player" );
for ( var_5 = 0; var_5 < var_3; var_5++ )
{
if ( isdefined( var_1 ) )
var_6 = var_0 + ( randomintrange( -300, 300 ), randomintrange( -300, 300 ), randomintrange( -300, 300 ) );
else
var_6 = var_0 + ( randomintrange( -150, 150 ), randomintrange( -150, 150 ), 0 );
if ( isdefined( var_1 ) )
{
var_4 = self gettagorigin( "tag_player" );
var_7 = bullettrace( var_4, var_6, 1, undefined, 1, 1 );
if ( !isdefined( var_7["entity"] ) || !isdefined( var_7["entity"].agent_type ) )
continue;
}
else
var_7 = bullettrace( var_4, var_6, 1 );
if ( isdefined( var_7["position"] ) )
{
if ( distancesquared( var_7["position"], var_2.death_struct.attack_bolt.origin ) < 10000 )
continue;
if ( !isdefined( var_1 ) && var_7["position"][2] > var_0[2] + 20 )
continue;
var_0 = var_7["position"];
break;
}
}
var_8 = var_0 + ( 0, 0, 5 );
var_2.death_struct.attack_bolt moveto( var_8, 0.05 );
wait 0.05;
if ( isdefined( self ) && distancesquared( self.origin, var_2.death_struct.attack_bolt.origin ) > 40000 )
{
if ( isdefined( var_1 ) && var_1 == "kraken" )
{
playfxontag( level._effect["beacon_turret_kraken_hit_fx"], var_2.death_struct.attack_bolt, "tag_origin" );
thread sfx_kraken_shock( var_8 );
}
else
playfxontag( level._effect["tesla_shock"], var_2.death_struct.attack_bolt, "tag_origin" );
}
wait 0.2;
stopfxontag( level._effect["tesla_shock"], var_2.death_struct.attack_bolt, "TAG_ORIGIN" );
stopfxontag( level._effect["beacon_turret_kraken_hit_fx"], var_2.death_struct.attack_bolt, "TAG_ORIGIN" );
stopfxontag( level._effect["tesla_attack"], var_2.death_struct.attack_bolt, "TAG_ORIGIN" );
}
stop_using_turret( var_0, var_1 )
{
self endon( "death" );
self endon( "disconnect" );
if ( maps\mp\_utility::isusingremote() )
{
self remotecontrolturretoff( var_0 );
self unlink();
self switchtoweapon( common_scripts\utility::getlastweapon() );
maps\mp\_utility::clearusingremote();
self notify( "exit_turret" );
var_0 notify( "stop_watching" );
if ( getdvarint( "camera_thirdPerson" ) )
maps\mp\_utility::setthirdpersondof( 1 );
var_2 = self getweaponslistexclusives();
foreach ( var_4 in var_2 )
self takeweapon( var_4 );
maps\mp\alien\_utility::hide_turret_icon();
maps\mp\alien\_utility::enable_special_ammo();
var_0.owner = undefined;
self setclientomnvar( "ui_alien_turret_overheat", -1 );
maps\mp\_utility::clearlowermessage( "disengage_turret" );
self.is_using_remote_turret = 0;
var_0.in_use = 0;
self.iscarrying = 0;
}
maps\mp\_utility::clearlowermessage( "disengage_turret" );
maps\mp\_utility::clearlowermessage( "early_exit" );
var_0 notify( "exit" );
var_0 notify( "player_exit" );
clear_turret_reticle();
var_0.use_trigger show();
}
check_player_state_and_stop_using_turret( var_0 )
{
var_0 endon( "disconnect" );
for (;;)
{
if ( !isdefined( self.owner ) || self.owner != var_0 )
break;
if ( var_0 maps\mp\alien\_utility::is_in_laststand() )
break;
if ( var_0.health <= 1 )
break;
if ( maps\mp\alien\_utility::is_true( var_0.pressed_use ) )
break;
if ( maps\mp\alien\_utility::is_true( self.broken ) )
break;
if ( self.overloaded )
break;
if ( self.reloading )
{
wait 0.5;
break;
}
wait 0.1;
}
if ( isdefined( var_0 ) )
var_0 stop_using_turret( self, self.turrettype );
}
add_reticle_to_player_view()
{
self.beacon_turret_icon = [];
var_0 = "reticle_flechette";
self.beacon_turret_icon["hud_center"] = maps\mp\gametypes\_hud_util::createicon( var_0, 32, 32 );
self.beacon_turret_icon["hud_center"] set_default_hud_parameters();
self.beacon_turret_icon["hud_center"].alignx = "center";
self.beacon_turret_icon["hud_center"].aligny = "middle";
self.beacon_turret_icon["hud_center"].alpha = 1.0;
}
set_default_hud_parameters()
{
self.alignx = "left";
self.aligny = "top";
self.horzalign = "center";
self.vertalign = "middle";
self.hidewhendead = 0;
self.hidewheninmenu = 0;
self.sort = 205;
self.foreground = 1;
self.alpha = 0.65;
}
clear_turret_reticle()
{
if ( isdefined( self.beacon_turret_icon["hud_center"] ) )
{
self.beacon_turret_icon["hud_center"] destroy();
self.beacon_turret_icon["hud_center"] = undefined;
}
}
turret_is_broken( var_0 )
{
var_0.broken = 1;
while ( !( isdefined( var_0.reloading_func_done ) && isdefined( var_0.overloading_func_done ) ) )
wait 0.1;
var_0 disable_turret();
self makeunusable();
self sethintstring( "" );
maps\mp\alien\_outline_proto::remove_from_outline_watch_list( self.outline_model );
var_0 thread play_broken_fx();
playfx( level._effect["electrical_sparks_20_funner"], self.origin );
}
test_hud_on_player()
{
wait 10;
foreach ( var_1 in level.players )
var_1 add_reticle_to_player_view();
}
debug_print_posrot( var_0 )
{
if ( maps\mp\alien\_utility::has_tag( self.model, var_0 ) )
{
var_1 = self gettagorigin( var_0 );
var_2 = self gettagangles( var_0 );
}
else
{
var_1 = self gettagorigin( "tag_origin" );
var_2 = self gettagangles( "tag_origin" );
}
iprintln( "origin: " + var_1[0] + ", " + var_1[1] + ", " + var_1[2] );
iprintln( "angles: " + var_2[0] + ", " + var_2[1] + ", " + var_2[2] );
}
sfx_kraken_shock( var_0 )
{
if ( !isdefined( level.kraken_shock_sfx ) )
level.kraken_shock_sfx = 0;
if ( level.kraken_shock_sfx == 0 )
{
level.kraken_shock_sfx = 1;
playsoundatpos( var_0, "kraken_big_shock" );
wait 1.8;
level.kraken_shock_sfx = 0;
}
else
playsoundatpos( var_0, "kraken_small_shock" );
}