iw6-scripts/vehicle_scripts/_apache_player.gsc
2024-02-13 13:20:49 +01:00

1537 lines
49 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
#using_animtree("vehicles");
main( var_0, var_1, var_2 )
{
maps\_vehicle::build_template( "apache_player", var_0, var_1, var_2 );
maps\_vehicle::build_localinit( ::init_local );
maps\_vehicle::build_team( "allies" );
maps\_vehicle::build_drive( %apache_cockpit_rotor, undefined, 0 );
maps\_vehicle::build_life( 10000, 5000, 15000 );
maps\_vehicle::build_is_helicopter();
maps\_vehicle::build_treadfx( var_2, "default", "fx/treadfx/heli_dust_default", 0 );
maps\_vehicle::build_turret( "apache_pilot_turret", "tag_barrel", "vehicle_apache_iw6_mg", undefined, "manual", undefined, 20, 0 );
_precache();
_fx();
_flags();
common_scripts\utility::create_lock( "add_apache_target_lock", 4 );
}
init_local()
{
self.originheightoffset = 162;
_init();
self dontcastshadows();
}
_precache()
{
precachedigitaldistortcodeassets();
precachemodel( "apache_cockpit_player" );
precachemodel( "apache_cockpit_player_pipe" );
precacherumble( "heavygun_fire" );
precacherumble( "damage_heavy" );
precacherumble( "damage_light" );
precacherumble( "minigun_rumble" );
vehicle_scripts\_apache_player_targeting::_precache();
vehicle_scripts\_chopper_player_missile_defense::_precache();
vehicle_scripts\_apache_player_pilot::_precache();
vehicle_scripts\_apache_player_audio::_precache();
maps\_utility::post_load_precache( vehicle_scripts\_apache_player_difficulty::difficulty );
}
_init()
{
}
_flags()
{
common_scripts\utility::flag_init( "FLAG_apache_crashing" );
}
_fx()
{
level._effect["apache_player_dlight_red_flicker"] = loadfx( "fx/_requests/apache/dlight_red_flicker" );
level._effect["apache_player_cockpit_smoke"] = loadfx( "fx/_requests/apache/cockpit_smoke" );
level._effect["apache_player_cockpit_sparks_v1"] = loadfx( "fx/_requests/apache/cockpit_sparks_v1" );
level._effect["apache_player_cockpit_sparks_v2"] = loadfx( "fx/_requests/apache/cockpit_sparks_v2" );
level._effect["apache_player_cockpit_explosion"] = loadfx( "fx/_requests/apache/cockpit_explosion" );
level._effect["apache_player_cockpit_pipe_hiss"] = loadfx( "vfx/moments/oil_rocks/heli_pipe_snap" );
}
enable_treadfx()
{
maps\_treadfx::setallvehiclefx( "player", "fx/treadfx/heli_dust_default" );
maps\_treadfx::setvehiclefx( "player", "water", "fx/treadfx/heli_water" );
maps\_treadfx::setvehiclefx( "player", "snow", "fx/treadfx/heli_snow_default" );
maps\_treadfx::setvehiclefx( "player", "slush", "fx/treadfx/heli_snow_default" );
maps\_treadfx::setvehiclefx( "player", "ice", "fx/treadfx/heli_snow_default" );
}
_globals()
{
}
_start( var_0, var_1, var_2 )
{
var_3 = spawnstruct();
self.heli = var_3;
var_0.riding_heli = self;
var_3.owner = var_0;
var_3.vehicle = self;
var_3.cover_warnings_disabled = level.cover_warnings_disabled;
var_3.treadfx_maxheight = level.treadfx_maxheight;
var_3.g_friendlynamedist = getdvarint( "g_friendlyNameDist" );
var_3.hud_showstance = getdvarint( "hud_showStance" );
var_3.compass = getdvarint( "compass" );
var_3.ammocounterhide = getdvarint( "ammoCounterHide" );
var_3.hud_fade_ammodisplay = getdvarfloat( "hud_fade_ammodisplay" );
var_3.hud_fade_stance = getdvarfloat( "hud_fade_stance" );
var_3.friendlyfire_max_participation = level.friendlyfire["max_participation"];
level.friendlyfire["max_participation"] = 1750;
var_3.targeting = vehicle_scripts\_apache_player_targeting::_init( var_0 );
var_3.pilot = vehicle_scripts\_apache_player_pilot::_init( self, var_0 );
var_3.audio = vehicle_scripts\_apache_player_audio::_init( self, var_0 );
var_3.missiledefense = vehicle_scripts\_chopper_player_missile_defense::_init( self, var_0, var_2 );
var_3.cockpit_tubes = spawn( "script_model", self.origin );
var_3.cockpit_tubes.angles = self.angles;
var_3.cockpit_tubes setmodel( "apache_cockpit_player_pipe" );
var_3.cockpit_tubes linkto( self, "tag_origin" );
level.cover_warnings_disabled = 1;
level.treadfx_maxheight = 9000;
setsaveddvar( "g_friendlyNameDist", 150000 );
setsaveddvar( "hud_showStance", 0 );
setsaveddvar( "hud_fade_ammodisplay", "0.1" );
setsaveddvar( "hud_fade_stance", "0.1" );
setsaveddvar( "ammoCounterHide", 1 );
setsaveddvar( "compass", 1 );
setsaveddvar( "sm_spotenable", 0 );
var_3 maps\_utility::ent_flag_init( "FLAG_sprinting" );
var_3 maps\_utility::ent_flag_init( "FLAG_pilot_active" );
var_3 maps\_utility::ent_flag_init( "FLAG_gunCamera_active" );
var_0 maps\_utility::ent_flag_init( "FLAG_apache_player_move_up" );
var_0 maps\_utility::ent_flag_init( "FLAG_apache_player_used_move_up" );
var_0 maps\_utility::ent_flag_init( "FLAG_apache_player_move_down" );
var_0 maps\_utility::ent_flag_init( "FLAG_apache_player_used_move_down" );
var_0 maps\_utility::ent_flag_init( "FLAG_apache_pilot_active" );
var_0 maps\_utility::ent_flag_init( "FLAG_apache_gunCamera_active" );
maps\_vehicle::aircraft_wash();
var_3 maps\_utility::ent_flag_set( "FLAG_pilot_active" );
var_3.owner maps\_utility::ent_flag_set( "FLAG_apache_pilot_active" );
thread monitormachinegun();
thread monitorhealth();
thread monitorcockpitanims();
thread monitorsprint();
var_1 = common_scripts\utility::ter_op( isdefined( var_1 ), var_1, 0 );
if ( var_1 )
{
thread monitormoveup();
thread monitormovedown();
removealtituedmesh();
}
else
thread monitoraltitude();
var_3.targeting thread vehicle_scripts\_apache_player_targeting::_start();
var_3.missiledefense thread vehicle_scripts\_chopper_player_missile_defense::_start();
var_3.pilot vehicle_scripts\_apache_player_pilot::_start( !var_1 );
var_3.audio vehicle_scripts\_apache_player_audio::_start();
var_3.fov_orig = 65;
var_0 maps\_utility::lerpfov_saved( 65, 0.1 );
var_3.pitch_offset_ground = 25.0;
var_3.pitch_offset_mid = 12.0;
var_3.pitch_offset_air = 9.0;
setsaveddvar( "vehHelicopterPitchOffset", var_3.pitch_offset_ground );
var_3.pitch_max = 10.0;
setsaveddvar( "vehHelicopterMaxPitch", var_3.pitch_max );
setsaveddvar( "vehHelicopterSoftCollisions", 1 );
setsaveddvar( "vehHelicopterControlSystem", 1 );
setsaveddvar( "vehHelicopterDecelerationFwd", 1.0 );
setsaveddvar( "vehHelicopterMaxAccel", 60 );
setsaveddvar( "vehHelicopterMaxSpeed", 120 );
setsaveddvar( "vehHelicopterMaxYawAccel", 700.0 );
setsaveddvar( "vehHelicopterMaxYawRate", 120.0 );
setsaveddvar( "vehHelicopterPitchLock", 0 );
setsaveddvar( "vehHelicopterTiltFromLook", 0.0 );
setsaveddvar( "vehHelicopterTiltFromLookRate", 0.0 );
setsaveddvar( "vehHelicopterTiltSpeed", 1.2 );
setsaveddvar( "vehHelicopterTiltFromFwdAndYaw", 50 );
setsaveddvar( "vehHelicopterTiltFromFwdAndYaw_VelAtMaxTilt", 0.8 );
if ( var_1 )
{
setsaveddvar( "vehHelicopterControlsAltitude", 3 );
setsaveddvar( "vehHelicopterLookaheadTime", 1.0 );
setsaveddvar( "vehHelicopterMaxAccelVertical", 90.0 );
setsaveddvar( "vehHelicopterMaxSpeedVertical", 65.0 );
}
else
{
setsaveddvar( "vehHelicopterControlsAltitude", 4 );
setsaveddvar( "vehHelicopterLookaheadTime", 0.4 );
setsaveddvar( "vehHelicopterMaxAccelVertical", 200.0 );
setsaveddvar( "vehHelicopterMaxSpeedVertical", 300.0 );
}
var_0 disableweaponswitch();
var_0 allowcrouch( 0 );
var_0 allowprone( 0 );
var_0 allowjump( 0 );
var_0 setplayerangles( ( 0, self.angles[1], 0 ) );
var_0 maps\_utility::player_mount_vehicle( self );
level.disablegrenadetracking = 1;
level.disablegeardrop = 1;
level.disablemonitorflash = 1;
thread _battlechatter_off();
thread setaishootoverride();
maps\_friendlyfire::apply_friendly_fire_damage_modifier( 0.1 );
}
setaishootoverride()
{
anim.shootenemywrapper_func = ::overrideaishot;
anim.shootposwrapper_func = ::shootposwrapper;
}
overrideaishot( var_0 )
{
self.a.lastshoottime = gettime();
self notify( "shooting" );
shootblankorrpg( self.enemy.origin, var_0 );
}
shootposwrapper( var_0, var_1 )
{
self.a.lastshoottime = gettime();
if ( !isdefined( var_1 ) )
var_1 = 1;
self notify( "shooting" );
shootblankorrpg( var_0, var_1 );
}
shootblankorrpg( var_0, var_1 )
{
if ( weaponclass( self.weapon ) == "rocketlauncher" )
self shoot( 1, var_0, var_1 );
else
self shootblank( 1, var_0, var_1 );
}
_battlechatter_off()
{
waittillframeend;
thread maps\_utility::battlechatter_off();
animscripts\battlechatter::disablebattlechatter();
}
_battlechatter_on()
{
thread maps\_utility::battlechatter_on();
animscripts\battlechatter::enablebattlechatter();
}
setmaxheight_overtime( var_0, var_1 )
{
if ( isdefined( var_1 ) )
{
var_1 = max( var_1, 0.05 );
var_2 = getdvarfloat( "vehHelicopterMaxAltitude" );
for ( var_3 = 0; var_3 < var_1; var_3 = var_3 + 0.05 )
{
setsaveddvar( "vehHelicopterMaxAltitude", var_2 + var_3 / var_1 * ( var_0 - var_2 ) );
wait 0.05;
}
}
else
setsaveddvar( "vehHelicopterMaxAltitude", var_0 );
}
setminheight_overtime( var_0, var_1 )
{
if ( isdefined( var_1 ) )
{
var_1 = max( var_1, 0.05 );
var_2 = getdvarfloat( "vehHelicopterMinAltitude" );
for ( var_3 = 0; var_3 < var_1; var_3 = var_3 + 0.05 )
{
setsaveddvar( "vehHelicopterMinAltitude", var_2 + var_3 / var_1 * ( var_0 - var_2 ) );
wait 0.05;
}
}
else
setsaveddvar( "vehHelicopterMinAltitude", var_0 );
}
_end()
{
if ( maps\_utility::ent_flag_exist( "ENT_FLAG_heli_destroyed" ) && maps\_utility::ent_flag( "ENT_FLAG_heli_destroyed" ) )
return;
var_0 = self.heli;
var_1 = var_0.owner;
self notify( "LISTEN_heli_end" );
var_0 notify( "LISTEN_heli_end" );
var_0.targeting vehicle_scripts\_apache_player_targeting::_end();
var_0.missiledefense vehicle_scripts\_chopper_player_missile_defense::_destroy();
var_0.pilot vehicle_scripts\_apache_player_pilot::_destroy();
var_0.audio vehicle_scripts\_apache_player_audio::_destroy();
var_0.cockpit_tubes delete();
monitorhealth_damagestates_cleanup();
level.cover_warnings_disabled = var_0.cover_warnings_disabled;
level.treadfx_maxheight = var_0.treadfx_maxheight;
if ( isdefined( var_0.g_friendlynamedist ) )
setsaveddvar( "g_friendlyNameDist", var_0.g_friendlynamedist );
if ( isdefined( var_0.hud_showstance ) )
setsaveddvar( "hud_showStance", var_0.hud_showstance );
if ( isdefined( var_0.compass ) )
setsaveddvar( "compass", var_0.compass );
if ( isdefined( var_0.ammocounterhide ) )
setsaveddvar( "ammoCounterHide", var_0.ammocounterhide );
if ( isdefined( var_0.hud_fade_ammodisplay ) )
setsaveddvar( "hud_fade_ammodisplay", var_0.hud_fade_ammodisplay );
if ( isdefined( var_0.hud_fade_stance ) )
setsaveddvar( "hud_fade_stance", var_0.hud_fade_stance );
level.friendlyfire["max_participation"] = var_0.friendlyfire_max_participation;
if ( isdefined( var_0.fov_orig ) )
{
var_1 maps\_utility::lerpfov_saved( var_0.fov_orig, 1.05 );
var_0.fov_orig = undefined;
}
var_1 enableweaponswitch();
var_1 allowcrouch( 1 );
var_1 allowprone( 1 );
var_1 allowjump( 1 );
self notify( "stop_kicking_up_dust" );
var_1 maps\_utility::ent_flag_clear( "FLAG_apache_player_move_up", 1 );
var_1 maps\_utility::ent_flag_clear( "FLAG_apache_player_used_move_up", 1 );
var_1 maps\_utility::ent_flag_clear( "FLAG_apache_player_move_down", 1 );
var_1 maps\_utility::ent_flag_clear( "FLAG_apache_player_used_move_down", 1 );
var_1 maps\_utility::ent_flag_clear( "FLAG_apache_pilot_active", 1 );
var_1 maps\_utility::ent_flag_clear( "FLAG_apache_gunCamera_active", 1 );
var_1 maps\_utility::player_dismount_vehicle();
level.autosave_check_override = undefined;
level.disablegrenadetracking = undefined;
level.disablegeardrop = undefined;
level.disablemonitorflash = undefined;
self delete();
thread _battlechatter_on();
anim.shootenemywrapper_func = animscripts\utility::shootenemywrapper_shootnotify;
anim.shootposwrapper_func = animscripts\utility::shootposwrapper;
setsaveddvar( "sm_spotenable", 1 );
maps\_friendlyfire::remove_friendly_fire_damage_modifier();
}
monitor_pilotandguncameraswitch()
{
self endon( "LISTEN_heli_end" );
var_0 = self.heli;
var_1 = var_0.pilot;
var_2 = var_0.guncamera;
var_3 = var_0.missiledefense;
var_4 = var_0.owner;
var_4 notifyonplayercommand( "LISTEN_pilotAndGunCameraSwitch", "+usereload" );
var_0 maps\_utility::ent_flag_set( "FLAG_pilot_active" );
var_4 maps\_utility::ent_flag_set( "FLAG_apache_pilot_active" );
for (;;)
{
var_4 waittill( "LISTEN_pilotAndGunCameraSwitch" );
var_4 thread maps\_utility::play_sound_on_entity( "apache_pilot_guncamera_switch" );
var_4 maps\_hud_util::fade_out();
wait 0.2;
var_1 vehicle_scripts\_apache_player_pilot::_end();
var_0 maps\_utility::ent_flag_clear( "FLAG_pilot_active" );
var_4 maps\_utility::ent_flag_clear( "FLAG_apache_pilot_active" );
var_0 maps\_utility::ent_flag_set( "FLAG_gunCamera_active" );
var_4 maps\_utility::ent_flag_set( "FLAG_apache_gunCamera_active" );
var_3 vehicle_scripts\_chopper_player_missile_defense::hud_update();
var_4 maps\_hud_util::fade_in();
var_4 waittill( "LISTEN_pilotAndGunCameraSwitch" );
var_4 thread maps\_utility::play_sound_on_entity( "apache_pilot_guncamera_switch" );
var_4 maps\_hud_util::fade_out();
wait 0.2;
var_0 maps\_utility::ent_flag_clear( "FLAG_gunCamera_active" );
var_4 maps\_utility::ent_flag_clear( "FLAG_apache_gunCamera_active" );
var_1 vehicle_scripts\_apache_player_pilot::_start();
var_0 maps\_utility::ent_flag_set( "FLAG_pilot_active" );
var_4 maps\_utility::ent_flag_set( "FLAG_apache_pilot_active" );
var_3 vehicle_scripts\_chopper_player_missile_defense::hud_update();
var_4 maps\_hud_util::fade_in();
}
}
monitorsprint()
{
var_0 = self.heli;
var_1 = var_0.owner;
self endon( "LISTEN_heli_end" );
var_1 notifyonplayercommand( "LISTEN_sprinting_start", "+sprint_zoom" );
var_1 notifyonplayercommand( "LISTEN_sprinting_stop", "-sprint_zoom" );
var_1 notifyonplayercommand( "LISTEN_sprinting_start", "+sprint" );
var_1 notifyonplayercommand( "LISTEN_sprinting_stop", "-sprint" );
var_1 notifyonplayercommand( "LISTEN_sprinting_start", "+breath_sprint" );
var_1 notifyonplayercommand( "LISTEN_sprinting_stop", "-breath_sprint" );
var_2 = gettime();
for (;;)
{
var_1 waittill( "LISTEN_sprinting_start" );
var_0 maps\_utility::ent_flag_set( "FLAG_sprinting" );
setsaveddvar( "vehHelicopterMaxSpeed", 160 );
setsaveddvar( "vehHelicopterMaxAccel", 180 );
var_1 common_scripts\utility::waittill_notify_or_timeout( "LISTEN_sprinting_stop", 4.0 );
var_0 maps\_utility::ent_flag_clear( "FLAG_sprinting" );
setsaveddvar( "vehHelicopterMaxSpeed", 120 );
setsaveddvar( "vehHelicopterMaxAccel", 60 );
wait 4.0;
}
}
monitormachinegun()
{
var_0 = self.heli.owner;
var_1 = self.mgturret[0];
var_1 hide();
self endon( "LISTEN_heli_end" );
common_scripts\utility::flag_wait( "introscreen_complete" );
thread monitormachinegun_onstop();
var_2 = 0;
for (;;)
{
wait 0.05;
var_3 = var_0 attackbuttonpressed() && !var_1.overheated;
if ( var_2 == var_3 )
continue;
var_2 = var_3;
if ( var_2 )
{
var_0 playrumblelooponentity( "minigun_rumble" );
continue;
}
var_0 stoprumble( "minigun_rumble" );
}
}
monitormachinegun_onstop()
{
var_0 = self.heli;
var_1 = var_0.owner;
self waittill( "LISTEN_heli_end" );
var_1 stoprumble( "minigun_rumble" );
}
monitormoveup()
{
var_0 = self.heli;
var_1 = var_0.owner;
self endon( "LISTEN_heli_end" );
var_1 notifyonplayercommand( "LISTEN_apache_player_start_move_up", "+smoke" );
var_1 notifyonplayercommand( "LISTEN_apache_player_stop_move_up", "-smoke" );
for (;;)
{
var_1 waittill( "LISTEN_apache_player_start_move_up" );
var_1 maps\_utility::ent_flag_set( "FLAG_apache_player_move_up" );
var_1 maps\_utility::ent_flag_set( "FLAG_apache_player_used_move_up" );
var_1 waittill( "LISTEN_apache_player_stop_move_up" );
var_1 maps\_utility::ent_flag_clear( "FLAG_apache_player_move_up" );
}
}
monitormovedown()
{
var_0 = self.heli;
var_1 = var_0.owner;
self endon( "LISTEN_heli_end" );
var_1 notifyonplayercommand( "LISTEN_apache_player_start_move_down", "+toggleads_throw" );
var_1 notifyonplayercommand( "LISTEN_apache_player_start_move_down", "+speed_throw" );
var_1 notifyonplayercommand( "LISTEN_apache_player_start_move_down", "+speed" );
var_1 notifyonplayercommand( "LISTEN_apache_player_start_move_down", "+ads_akimbo_accessible" );
var_1 notifyonplayercommand( "LISTEN_apache_player_stop_move_down", "-toggleads_throw" );
var_1 notifyonplayercommand( "LISTEN_apache_player_stop_move_down", "-speed_throw" );
var_1 notifyonplayercommand( "LISTEN_apache_player_stop_move_down", "-speed" );
var_1 notifyonplayercommand( "LISTEN_apache_player_stop_move_down", "-ads_akimbo_accessible" );
for (;;)
{
var_1 waittill( "LISTEN_apache_player_start_move_down" );
var_1 maps\_utility::ent_flag_set( "FLAG_apache_player_move_down" );
var_1 maps\_utility::ent_flag_set( "FLAG_apache_player_used_move_down" );
var_1 waittill( "LISTEN_apache_player_stop_move_down" );
var_1 maps\_utility::ent_flag_clear( "FLAG_apache_player_move_down" );
}
}
removealtituedmesh()
{
var_0 = getentarray( "apache_player_mesh", "targetname" );
common_scripts\utility::array_call( var_0, ::delete );
}
monitoraltitude()
{
disable_altitude_control();
self endon( "monitor_altitude_disable" );
self endon( "LISTEN_heli_end" );
var_0 = common_scripts\utility::getstruct( "struct_altitude_trace_start", "targetname" );
var_1 = common_scripts\utility::getstruct( "struct_altitude_offset", "targetname" );
var_2 = common_scripts\utility::getstruct( "struct_altitude_trace_end", "targetname" );
var_3 = common_scripts\utility::getstruct( "struct_altitude_default", "targetname" );
if ( !isdefined( var_3 ) || !isdefined( var_1 ) || !isdefined( var_0 ) || !isdefined( var_2 ) )
return;
var_4 = var_1.origin[2] - var_3.origin[2];
var_5 = var_1.origin[2];
var_6 = var_0.origin[2];
var_7 = var_2.origin[2];
var_8 = getentarray( "apache_player_mesh", "targetname" );
var_9 = ( 0, 0, var_4 );
foreach ( var_11 in var_8 )
{
if ( !isdefined( var_11.altitude_adjusted ) )
{
var_11.origin = var_11.origin + var_9;
var_11.altitude_adjusted = 1;
}
}
var_13 = -1;
for (;;)
{
var_14 = ( self.origin[0], self.origin[1], var_6 );
var_15 = ( self.origin[0], self.origin[1], var_7 );
var_16 = bullettrace( var_14, var_15, 0 );
var_17 = var_16["position"][2];
if ( abs( var_17 - var_15[2] ) <= 0.2 )
var_17 = var_5;
if ( var_13 != var_17 )
{
var_13 = var_17;
var_18 = var_17 - var_4;
if ( isdefined( self.alt_override ) )
var_18 = max( var_18, self.alt_override );
setsaveddvar( "vehHelicopterMinAltitude", var_18 );
setsaveddvar( "vehHelicopterMaxAltitude", var_18 );
}
wait 0.05;
}
}
get_altitude_min()
{
var_0 = common_scripts\utility::getstruct( "struct_altitude_offset", "targetname" );
var_1 = common_scripts\utility::getstruct( "struct_altitude_trace_end", "targetname" );
var_2 = common_scripts\utility::getstruct( "struct_altitude_default", "targetname" );
return var_2.origin[2] - ( var_0.origin[2] - var_1.origin[2] );
}
disable_altitude_control()
{
self notify( "monitor_altitude_disable" );
}
enable_altitude_control()
{
thread monitoraltitude();
}
altitude_override_over_time( var_0, var_1 )
{
self notify( "altitude_min_override" );
self endon( "altitude_min_override" );
self endon( "LISTEN_heli_end" );
if ( isdefined( var_1 ) && var_1 > 0 )
{
if ( !isdefined( self.alt_override ) )
self.alt_override = get_altitude_min();
var_1 = max( var_1, 0.05 );
var_2 = self.alt_override;
for ( var_3 = 0; var_3 <= var_1; var_3 = var_3 + 0.05 )
{
self.alt_override = var_2 + var_3 / var_1 * ( var_0 - var_2 );
wait 0.05;
}
}
self.alt_override = var_0;
return 1;
}
altitude_min_override( var_0, var_1 )
{
altitude_override_over_time( var_0, var_1 );
}
altitude_min_override_remove( var_0 )
{
if ( isdefined( var_0 ) && var_0 > 0 )
{
var_1 = get_altitude_min();
var_2 = altitude_override_over_time( var_1, var_0 );
if ( isdefined( var_2 ) && var_2 )
{
self.alt_override = undefined;
return;
}
}
else
self.alt_override = undefined;
}
#using_animtree("script_model");
monitorcockpitanims()
{
var_0 = self.heli;
var_1 = var_0.owner;
self endon( "LISTEN_heli_end" );
self endon( "ENT_FLAG_heli_destroyed" );
var_0.cockpit_tubes.jiggle_disabled = [];
var_0.cockpit_tubes.jiggle_disabled["ALL"] = 0;
var_0.cockpit_tubes.jiggle_disabled["RIGHT"] = 0;
var_0.cockpit_tubes.jiggle_disabled["LEFT"] = 0;
childthread monitorcockpitanims_ondamage();
var_0.cockpit_tubes.anims_curr = [];
var_0.cockpit_tubes.anims_curr["ALL"] = undefined;
var_0.cockpit_tubes.anims_curr["RIGHT"] = undefined;
var_0.cockpit_tubes.anims_curr["LEFT"] = undefined;
var_2 = 0.25 * getdvarfloat( "vehHelicopterMaxSpeed" );
var_3 = 0.5 * getdvarfloat( "vehHelicopterMaxSpeed" );
var_4 = 1.0 * getdvarfloat( "vehHelicopterMaxSpeed" );
var_5 = [ "ALL", "RIGHT", "LEFT" ];
for (;;)
{
var_6 = [];
var_7 = var_0.vehicle vehicle_getspeed();
if ( var_7 <= var_2 )
{
var_6["ALL"] = %apache_cockpit_idle_at_rest;
var_6["RIGHT"] = %apache_cockpit_tube_right_at_rest;
var_6["LEFT"] = %apache_cockpit_tube_left_at_rest;
}
else if ( var_7 <= var_3 )
{
var_6["ALL"] = %apache_cockpit_idle_moving_slow;
var_6["RIGHT"] = %apache_cockpit_tube_right_moving_slow;
var_6["LEFT"] = %apache_cockpit_tube_left_moving_slow;
}
else if ( var_7 <= var_4 )
{
var_6["ALL"] = %apache_cockpit_idle_moving_fast;
var_6["RIGHT"] = %apache_cockpit_tube_right_moving_fast;
var_6["LEFT"] = %apache_cockpit_tube_left_moving_fast;
}
else
{
var_6["ALL"] = undefined;
var_6["RIGHT"] = undefined;
var_6["LEFT"] = undefined;
}
if ( isdefined( var_6["ALL"] ) && ( !isdefined( var_0.cockpit_tubes.anims_curr["ALL"] ) || var_0.cockpit_tubes.anims_curr["ALL"] != var_6["ALL"] ) )
{
var_0.cockpit_tubes useanimtree( #animtree );
foreach ( var_9 in var_5 )
{
if ( !var_0.cockpit_tubes.jiggle_disabled[var_9] )
{
if ( isdefined( var_0.cockpit_tubes.anims_curr[var_9] ) )
var_0.cockpit_tubes clearanim( var_0.cockpit_tubes.anims_curr[var_9], 0.2 );
if ( isdefined( var_6[var_9] ) )
var_0.cockpit_tubes setanim( var_6[var_9], 1, 0.2, 1.0 );
}
}
var_0.cockpit_tubes.anims_curr["ALL"] = var_6["ALL"];
var_0.cockpit_tubes.anims_curr["RIGHT"] = var_6["RIGHT"];
var_0.cockpit_tubes.anims_curr["LEFT"] = var_6["LEFT"];
}
wait 0.25;
}
}
monitorcockpitanims_ondamage()
{
var_0 = self.heli;
var_1 = var_0.owner;
var_2 = undefined;
var_3 = undefined;
var_4 = undefined;
var_5 = undefined;
var_6 = undefined;
var_7 = [ "RIGHT", "LEFT" ];
while ( var_7.size > 0 )
{
var_8 = undefined;
for (;;)
{
self waittill( "LISTEN_apache_damage_state_enter", var_8 );
if ( var_8 == "health_none" )
break;
}
var_9 = var_7[randomint( var_7.size )];
var_7 = common_scripts\utility::array_remove( var_7, var_9 );
if ( !var_0.cockpit_tubes.jiggle_disabled[var_9] )
{
var_0.cockpit_tubes clearanim( var_0.cockpit_tubes.anims_curr[var_9], 0.5 );
var_0.cockpit_tubes.jiggle_disabled[var_9] = 1;
}
if ( var_9 == "RIGHT" )
{
var_2 = %apache_cockpit_tube_right_whip_in;
var_3 = %apache_cockpit_tube_right_whip;
var_4 = %apache_cockpit_tube_right_whip_out;
var_5 = %apache_cockpit_tube_right_idle;
var_6 = "r_innertubeend_jnt";
}
else if ( var_9 == "LEFT" )
{
var_2 = %apache_cockpit_tube_left_whip_in;
var_3 = %apache_cockpit_tube_left_whip;
var_4 = %apache_cockpit_tube_left_whip_out;
var_5 = %apache_cockpit_tube_left_idle;
var_6 = "l_innertubeend_jnt";
}
childthread monitorcockpitanims_tube_whip( var_2, var_3, var_4, var_5, var_6 );
}
}
monitorcockpitanims_tube_whip( var_0, var_1, var_2, var_3, var_4 )
{
var_5 = self.heli;
var_6 = var_5.owner;
playfxontag( common_scripts\utility::getfx( "apache_player_cockpit_pipe_hiss" ), var_5.cockpit_tubes, var_4 );
var_5.cockpit_tubes thread maps\_utility::play_loop_sound_on_tag( "apache_player_tube_hiss", var_4, 1 );
var_5.cockpit_tubes setanim( var_0, 1, 0.5, 1.0 );
var_7 = getanimlength( var_0 );
wait( var_7 - min( 0.5, var_7 * 0.1 ) );
var_5.cockpit_tubes clearanim( var_0, 0.5 );
var_5.cockpit_tubes setanim( var_1, 1, 0.5, 1.0 );
var_7 = getanimlength( var_1 );
wait 1.0;
var_5.cockpit_tubes clearanim( var_1, 0.5 );
var_5.cockpit_tubes setanim( var_2, 1, 0.5, 1.0 );
var_7 = getanimlength( var_2 );
wait( var_7 - min( 0.5, var_7 * 0.1 ) );
var_5.cockpit_tubes clearanim( var_2, 0.5 );
stopfxontag( common_scripts\utility::getfx( "apache_player_cockpit_pipe_hiss" ), var_5.cockpit_tubes, var_4 );
var_5.cockpit_tubes notify( "stop soundapache_player_tube_hiss" );
var_5.cockpit_tubes setanim( var_3, 1, 0.5, 1.0 );
}
monitorhealth()
{
var_0 = self.heli;
var_1 = var_0.owner;
self endon( "LISTEN_heli_end" );
self endon( "ENT_FLAG_heli_destroyed" );
apache_health_init( 100000 );
maps\_vehicle::godon();
maps\_utility::ent_flag_init( "ENT_FLAG_heli_damaged" );
maps\_utility::ent_flag_init( "ENT_FLAG_heli_health_state_finished" );
maps\_utility::ent_flag_init( "ENT_FLAG_heli_destroyed" );
thread monitorhealth_ondamage();
thread monitorhealth_ondeath();
thread monitorhealth_damagestates();
var_2 = 0;
var_3 = "STATE_FULL";
for (;;)
{
common_scripts\utility::waittill_any( "ENT_FLAG_heli_damaged", "ENT_FLAG_heli_health_state_finished" );
waittillframeend;
if ( maps\_utility::ent_flag( "ENT_FLAG_heli_health_state_finished" ) )
{
var_3 = apache_health_state_next( var_3 );
childthread apache_health_state_think( var_3 );
var_2 = 0;
maps\_utility::ent_flag_clear( "ENT_FLAG_heli_health_state_finished" );
}
if ( maps\_utility::ent_flag( "ENT_FLAG_heli_damaged" ) )
{
apache_health_adjust( -1 * self.apache_dmg_recent );
var_2 = var_2 + self.apache_dmg_recent;
var_4 = undefined;
switch ( var_3 )
{
case "STATE_REGEN":
case "STATE_PAIN":
case "STATE_FULL":
if ( apache_health_get() == 0 )
var_4 = "STATE_INVULN";
else
var_4 = "STATE_PAIN";
break;
case "STATE_INVULN":
break;
case "STATE_VULN":
if ( var_2 / apache_health_max_get() >= 0.15 )
{
maps\_utility::ent_flag_set( "ENT_FLAG_heli_destroyed" );
common_scripts\utility::flag_set( "FLAG_apache_crashing" );
}
break;
}
if ( isdefined( var_4 ) )
{
var_3 = var_4;
childthread apache_health_state_think( var_3 );
var_2 = 0;
}
self.apache_dmg_recent = 0;
maps\_utility::ent_flag_clear( "ENT_FLAG_heli_damaged" );
}
}
}
apache_health_state_think( var_0 )
{
self notify( "apache_health_state_think_new" );
self endon( "apache_health_state_think_new" );
self endon( "LISTEN_heli_end" );
switch ( var_0 )
{
case "STATE_FULL":
level waittill( "forever" );
break;
case "STATE_PAIN":
wait 3.0;
break;
case "STATE_INVULN":
wait 1.0;
break;
case "STATE_VULN":
wait 4.0;
break;
case "STATE_REGEN":
if ( apache_health_pct_get() < 0.4 )
apache_health_pct_set( 0.4 );
var_1 = int( max( ( apache_health_max_get() - apache_health_get() ) / 200.0, 1 ) );
while ( !apache_health_at_max() )
{
wait 0.05;
apache_health_adjust( var_1 );
}
break;
default:
break;
}
maps\_utility::ent_flag_set( "ENT_FLAG_heli_health_state_finished" );
}
apache_health_state_next( var_0 )
{
var_1 = "";
switch ( var_0 )
{
case "STATE_FULL":
break;
case "STATE_VULN":
case "STATE_PAIN":
var_1 = "STATE_REGEN";
break;
case "STATE_INVULN":
var_1 = "STATE_VULN";
break;
case "STATE_REGEN":
var_1 = "STATE_FULL";
break;
default:
break;
}
return var_1;
}
monitorhealth_ondamage()
{
self endon( "LISTEN_heli_end" );
var_0 = self.heli;
var_1 = var_0.owner;
self.apache_dmg_recent = 0;
self.apache_dmg_time = gettime();
var_2 = int( max( level.apache_player_difficulty.dmg_bullet_pct * apache_health_max_get(), 1 ) );
var_3 = int( max( level.apache_player_difficulty.dmg_projectile_pct * apache_health_max_get(), 1 ) );
for (;;)
{
self waittill( "damage", var_4, var_5, var_6, var_7, var_8, var_9, var_10, var_11, var_12, var_13 );
if ( !isdefined( var_5 ) )
continue;
if ( getteam() == var_5 getteam() )
continue;
if ( !isdefined( var_8 ) )
continue;
var_14 = gettime();
if ( var_8 == "MOD_RIFLE_BULLET" || var_8 == "MOD_PISTOL_BULLET" )
{
var_15 = common_scripts\utility::ter_op( isai( var_5 ), 15, 1 );
if ( var_14 - self.apache_dmg_time <= level.apache_player_difficulty.dmg_bullet_delay_between_msec * var_15 )
continue;
if ( apache_health_pct_get() <= level.apache_player_difficulty.dmg_player_health_adjust_chance )
{
var_16 = level.apache_player_difficulty.dmg_player_speed_evade_min_pct * getdvarfloat( "vehHelicopterMaxSpeed" );
var_17 = level.apache_player_difficulty.dmg_player_speed_evade_max_pct * getdvarfloat( "vehHelicopterMaxSpeed" );
var_18 = clamp( self vehicle_getspeed(), var_17, var_16 );
var_19 = 1 - ( var_18 - var_17 ) / ( var_16 - var_17 );
var_20 = level.apache_player_difficulty.dmg_bullet_chance_player_evade + ( level.apache_player_difficulty.dmg_bullet_chance_player_static - level.apache_player_difficulty.dmg_bullet_chance_player_static ) * var_19;
if ( randomfloat( 1.0 ) >= var_20 )
continue;
}
}
if ( common_scripts\utility::cointoss() )
self playsound( "apache_impact" );
var_21 = undefined;
switch ( var_8 )
{
case "MOD_RIFLE_BULLET":
case "MOD_PISTOL_BULLET":
case "MOD_EXPLOSIVE":
var_21 = var_2;
break;
case "MOD_PROJECTILE_SPLASH":
case "MOD_PROJECTILE":
var_21 = var_3;
level.lastplayerapachedamage = gettime();
break;
default:
var_21 = var_2;
break;
}
if ( isdefined( var_13 ) && var_13 == "hind_turret" )
var_21 = var_2;
self.apache_dmg_time = var_14;
self.apache_dmg_recent = var_21;
maps\_utility::ent_flag_set( "ENT_FLAG_heli_damaged" );
}
}
monitorhealth_ondeath_fx()
{
self endon( "LISTEN_heli_end" );
var_0 = self.heli;
var_1 = var_0.owner;
var_2 = self;
playfxontag( common_scripts\utility::getfx( "apache_player_dlight_red_flicker" ), var_2, "tag_dial3" );
var_2 hidepart( "tag_glass_damage" );
var_2 hidepart( "tag_glass_damage1" );
var_2 showpart( "tag_glass_damage2" );
var_2 thread maps\_utility::play_sound_on_tag( "apache_player_glass_crack_lrg", "tag_glass_damage1" );
var_1 digitaldistortsetparams( 0.4, 1.0 );
}
monitorhealth_ondeath()
{
self endon( "LISTEN_heli_end" );
var_0 = common_scripts\utility::waittill_any_return( "death", "ENT_FLAG_heli_destroyed" );
if ( var_0 == "ENT_FLAG_heli_destroyed" )
{
monitorhealth_damagestates_cleanup();
monitorhealth_ondeath_fx();
thread maps\_vehicle_code::death_firesound( "apache_player_dying_alarm" );
self notify( "LISTEN_pilot_death" );
wait 0.5;
var_1 = 2.0;
thread monitorhealth_ondeath_apache_crash();
thread monitorhealth_ondeath_player_feedback( var_1 );
thread maps\_vehicle_code::death_firesound( "apache_player_dying_loop" );
common_scripts\utility::waittill_any_timeout_no_endon_death( var_1, "crash_done" );
}
if ( isdefined( level.lastplayerapachedamage ) && gettime() - level.lastplayerapachedamage < 4000 )
maps\_player_death::grenade_death_hint( &"OILROCKS_KILLED_BY_MISSILE", &"OILROCKS_HINT_APACHE_FLARES" );
else
setdvar( "ui_deadquote", "" );
maps\_utility::missionfailedwrapper();
}
monitorhealth_ondeath_apache_crash()
{
var_0 = self.heli;
var_1 = var_0.owner;
self.perferred_crash_location = spawnstruct();
self.perferred_crash_location.script_parameters = "direct";
self.perferred_crash_location.radius = 60;
if ( self vehicle_getspeed() > 40 )
self vehicle_setspeedimmediate( 40 );
var_2 = 600;
var_3 = bullettrace( self.origin - 160, self.origin - ( 0, 0, var_2 ), 0, self );
if ( var_3["fraction"] > 0.98 )
self.perferred_crash_location.origin = self.origin - ( 0, 0, var_2 );
else
self.perferred_crash_location.origin = self.origin + ( 0, 0, var_2 );
maps\_vehicle_code::helicopter_crash_move();
}
monitorhealth_ondeath_player_feedback( var_0 )
{
var_1 = self.heli;
var_2 = var_1.owner;
var_2 enabledeathshield( 1 );
var_2 playrumblelooponentity( "damage_heavy" );
for (;;)
{
var_2 dodamage( 40, var_2.origin );
earthquake( 0.3, 1.0, var_2.origin, 512 );
var_3 = max( min( var_0 * 0.5, 1.0 ), 0.25 );
var_0 = var_0 - var_3;
wait( var_3 );
}
}
monitorhealth_damagestates_cleanup()
{
var_0 = self;
var_1 = self.heli;
foreach ( var_3 in var_1.damage_states )
var_3 damage_state_clear( 0 );
var_0 damage_state_tag_ent_clear_all();
}
monitorhealth_damagestates()
{
self endon( "LISTEN_heli_end" );
var_0 = self.heli;
var_1 = var_0.owner;
self hidepart( "tag_glass_damage1" );
self hidepart( "tag_glass_damage2" );
self hidepart( "tag_dial1" );
var_0.damage_states = [];
var_2 = damage_state_build( 0.01, self, 0.2, 1.0, 0.275, 1.0, 750 );
var_2 damage_state_notify_add( "health_none" );
var_2 damage_state_fx_add( "apache_player_cockpit_smoke", "tag_front", 0 );
var_2 damage_state_fx_add( "apache_player_dlight_red_flicker", "tag_dial4", 0 );
var_2 damage_state_fx_add( "apache_player_cockpit_sparks_v2", "tag_cable_up_front_left", 0 );
var_2 damage_state_fx_add( "apache_player_cockpit_sparks_v2", "tag_cable_up_right", 0 );
var_2 damage_state_prt_add( "tag_glass_damage1", 1, "tag_glass_damage", 2, "apache_player_glass_crack_sml" );
var_2 damage_state_prt_add( "tag_glass_damage2", 1, "tag_glass_damage1", 3, "apache_player_glass_crack_lrg" );
var_2 damage_state_prt_add( "tag_dial1", 0, "tag_dial_on", 1 );
var_2 damage_state_snd_add( "apache_player_damaged_alarm", "tag_player", 0, 1 );
var_0.damage_states[var_0.damage_states.size] = var_2;
var_2 = damage_state_build( 0.25, self, 0.1, 1.0, 0.2, 1.0, 1000 );
var_2 damage_state_fx_add( "apache_player_cockpit_smoke", "tag_front", 0 );
var_2 damage_state_fx_add( "apache_player_cockpit_sparks_v1", "tag_cable_up_front_left", 0 );
var_2 damage_state_fx_add( "apache_player_cockpit_sparks_v1", "tag_cable_up_right", 0 );
var_2 damage_state_prt_add( "tag_dial1", 0, "tag_dial_on", 1 );
var_2 damage_state_snd_add( "apache_player_damaged_25_percent_alarm", "tag_player", 0, 1 );
var_0.damage_states[var_0.damage_states.size] = var_2;
var_2 = damage_state_build( 0.55, self, 0.05, 1.0, 0.15, 1.0, 1300 );
var_2 damage_state_fx_add( "apache_player_cockpit_smoke", "tag_front", 0 );
var_2 damage_state_fx_add( "apache_player_cockpit_sparks_v1", "tag_cable_up_front_left", 0 );
var_2 damage_state_snd_add( "apache_player_damaged_55_percent_alarm", "tag_player", 0, 1 );
var_0.damage_states[var_0.damage_states.size] = var_2;
var_2 = damage_state_build( 0.85, self, 0.025, 1.0, 0.1, 1.0, 1500 );
var_2 damage_state_snd_add( "apache_player_damaged_85_percent_alarm", "tag_player", 0, 1 );
var_0.damage_states[var_0.damage_states.size] = var_2;
var_2 = damage_state_build( 1.0, self, 0.0, 1.0, 0.0, 0.0, 0.0 );
var_0.damage_states[var_0.damage_states.size] = var_2;
var_0.damage_states = common_scripts\utility::array_sort_by_handler( var_0.damage_states, ::damage_state_health_pct_get );
var_5 = damage_state_choose( var_0.damage_states, apache_health_pct_get() );
var_5 damage_state_apply( 0, 1 );
var_6 = apache_health_pct_get();
var_7 = gettime();
for (;;)
{
self waittill( "apache_player_health_updated" );
waittillframeend;
var_8 = apache_health_pct_get();
var_9 = damage_state_choose( var_0.damage_states, var_8 );
if ( var_8 < var_6 || var_8 <= 0 )
{
var_10 = var_9 damage_state_quake( var_7 );
if ( var_10 )
var_7 = gettime();
}
var_6 = var_8;
if ( var_9 == var_5 )
continue;
if ( var_9.health_pct < var_5.health_pct )
{
for ( var_11 = var_0.damage_states.size - 1; var_11 >= 0; var_11-- )
{
var_2 = var_0.damage_states[var_11];
if ( var_2 == var_9 )
break;
var_2 damage_state_apply( 1 );
}
}
var_5 damage_state_clear( 1 );
var_5 damage_state_notify_send_exit();
var_9 damage_state_apply( 0 );
var_9 damage_state_notify_send_enter();
var_5 = var_9;
}
}
damage_state_choose( var_0, var_1 )
{
var_2 = undefined;
foreach ( var_4 in var_0 )
{
if ( var_1 <= var_4.health_pct )
{
var_2 = var_4;
break;
}
}
return var_2;
}
damage_state_build( var_0, var_1, var_2, var_3, var_4, var_5, var_6 )
{
var_7 = spawnstruct();
var_7.health_pct = var_0;
var_7.perm_on = 0;
var_7.temp_on = 0;
var_7.distort_pct = var_2;
var_7.distort_time = var_3;
var_7.quake_scale = var_4;
var_7.quake_time = var_5;
var_7.quake_interval_msec = var_6;
var_7.vehicle = var_1;
var_7.notify_msg = undefined;
var_7.fx_array = [];
var_7.prt_array = [];
var_7.snd_array = [];
return var_7;
}
damage_state_apply( var_0, var_1 )
{
if ( !isdefined( var_1 ) )
var_1 = 0;
foreach ( var_3 in self.fx_array )
{
if ( var_3["perm"] && self.perm_on )
continue;
if ( !var_3["perm"] && ( var_0 || self.temp_on ) )
continue;
damage_state_play_fx_on_tag( var_3 );
}
foreach ( var_7, var_6 in self.prt_array )
{
if ( var_6["perm"] && var_6["activations"] <= 0 )
continue;
if ( !var_6["perm"] && ( var_0 || var_6["activations"] <= 0 ) )
continue;
self.prt_array[var_7]["activations"]--;
if ( self.prt_array[var_7]["activations"] > 0 )
continue;
if ( isdefined( var_6["tag_hide"] ) )
self.vehicle hidepart( var_6["tag_hide"] );
self.vehicle showpart( var_6["tag_show"] );
if ( isdefined( var_6["sound"] ) )
self.vehicle thread maps\_utility::play_sound_on_tag( var_6["sound"], var_6["tag_show"] );
}
foreach ( var_9 in self.snd_array )
{
if ( var_9["perm"] && self.perm_on )
continue;
if ( !var_9["perm"] && ( var_0 || self.temp_on ) )
continue;
if ( var_9["loop"] )
{
self.vehicle thread maps\_utility::play_loop_sound_on_tag( var_9["alias"], var_9["tag"], 1, 1 );
continue;
}
self.vehicle thread maps\_utility::play_sound_on_tag( var_9["alias"], var_9["tag"] );
}
if ( !var_1 && !var_0 && isdefined( self.distort_pct ) && isdefined( self.distort_time ) )
self.vehicle.heli.owner digitaldistortsetparams( self.distort_pct, self.distort_time );
if ( !self.perm_on )
self.perm_on = 1;
if ( !var_0 && !self.temp_on )
self.temp_on = 1;
}
damage_state_clear( var_0 )
{
foreach ( var_2 in self.fx_array )
{
if ( var_2["perm"] && ( var_0 || !self.perm_on ) )
continue;
if ( !var_2["perm"] && !self.temp_on )
continue;
damage_state_stop_fx_on_tag( var_2 );
}
foreach ( var_6, var_5 in self.prt_array )
{
if ( var_5["perm"] && ( var_0 || var_5["activations"] > 0 ) )
continue;
if ( !var_5["perm"] && var_5["activations"] > 0 )
continue;
self.prt_array[var_6]["activations"]++;
if ( isdefined( var_5["tag_hide"] ) )
self.vehicle showpart( var_5["tag_hide"] );
self.vehicle hidepart( var_5["tag_show"] );
}
foreach ( var_8 in self.snd_array )
{
if ( !var_8["loop"] )
continue;
if ( var_8["perm"] && ( var_0 || !self.perm_on ) )
continue;
if ( !var_8["perm"] && !self.temp_on )
continue;
self.vehicle notify( "stop sound" + var_8["alias"] );
}
if ( isdefined( self.distort_pct ) && isdefined( self.distort_time ) )
self.vehicle.heli.owner digitaldistortsetparams( 0.0, 0.0 );
if ( self.perm_on && !var_0 )
self.perm_on = 0;
if ( self.temp_on )
self.temp_on = 0;
}
damage_state_quake( var_0 )
{
var_1 = 0;
if ( self.quake_scale > 0 && gettime() - var_0 >= self.quake_interval_msec )
{
earthquake( self.quake_scale, self.quake_time, self.vehicle.heli.owner.origin, 1024 );
self.vehicle.heli.owner playrumbleonentity( "damage_light" );
var_1 = 1;
}
return var_1;
}
damage_state_health_pct_get()
{
return self.health_pct;
}
damage_state_fx_add( var_0, var_1, var_2 )
{
var_3 = [];
var_3["fx"] = var_0;
var_3["tag"] = var_1;
var_3["perm"] = var_2;
self.fx_array[self.fx_array.size] = var_3;
}
damage_state_prt_add( var_0, var_1, var_2, var_3, var_4 )
{
var_5 = [];
var_5["tag_show"] = var_0;
var_5["perm"] = var_1;
if ( isdefined( var_2 ) )
var_5["tag_hide"] = var_2;
var_5["activations"] = common_scripts\utility::ter_op( isdefined( var_3 ), int( max( var_3, 1 ) ), 1 );
if ( isdefined( var_4 ) )
var_5["sound"] = var_4;
self.prt_array[self.prt_array.size] = var_5;
}
damage_state_snd_add( var_0, var_1, var_2, var_3 )
{
var_4 = [];
var_4["alias"] = var_0;
var_4["tag"] = var_1;
var_4["perm"] = var_2;
var_4["loop"] = var_3;
self.snd_array[self.snd_array.size] = var_4;
}
damage_state_notify_add( var_0 )
{
self.notify_msg = var_0;
}
damage_state_notify_send_enter()
{
if ( isdefined( self.notify_msg ) )
self.vehicle notify( "LISTEN_apache_damage_state_enter", self.notify_msg );
}
damage_state_notify_send_exit()
{
if ( isdefined( self.notify_msg ) )
self.vehicle notify( "LISTEN_apache_damage_state_exit", self.notify_msg );
}
damage_state_tag_ent_get( var_0 )
{
if ( !isdefined( self.vehicle.damage_state_tag_ents ) )
self.vehicle.damage_state_tag_ents = [];
if ( !isdefined( self.vehicle.damage_state_tag_ents[var_0] ) )
{
var_1 = common_scripts\utility::spawn_tag_origin();
var_1.origin = self.vehicle gettagorigin( var_0 );
var_1.angles = self.vehicle gettagangles( var_0 );
var_1 linkto( self.vehicle, var_0 );
self.vehicle.damage_state_tag_ents[var_0] = var_1;
}
return self.vehicle.damage_state_tag_ents[var_0];
}
damage_state_tag_ent_clear_all()
{
if ( isdefined( self.damage_state_tag_ents ) )
{
foreach ( var_1 in self.damage_state_tag_ents )
var_1 delete();
self.damage_state_tag_ents = undefined;
}
}
damage_state_play_fx_on_tag( var_0 )
{
var_1 = damage_state_tag_ent_get( var_0["tag"] );
playfxontag( common_scripts\utility::getfx( var_0["fx"] ), var_1, "tag_origin" );
}
damage_state_stop_fx_on_tag( var_0 )
{
var_1 = damage_state_tag_ent_get( var_0["tag"] );
stopfxontag( common_scripts\utility::getfx( var_0["fx"] ), var_1, "tag_origin" );
}
apache_health_init( var_0, var_1 )
{
self.apache_health = var_0;
self.apache_health_max = common_scripts\utility::ter_op( isdefined( var_1 ), var_1, var_0 );
}
apache_health_get()
{
return self.apache_health;
}
apache_health_pct_get()
{
return apache_health_get() / apache_health_max_get();
}
apache_health_at_max()
{
return apache_health_get() >= apache_health_max_get();
}
apache_health_set( var_0 )
{
var_1 = common_scripts\utility::ter_op( isdefined( self.apache_health_min ), self.apache_health_min, 0 );
self.apache_health = int( clamp( var_0, var_1, apache_health_max_get() ) );
self notify( "apache_player_health_updated" );
}
apache_health_pct_set( var_0 )
{
apache_health_set( apache_health_max_get() * var_0 );
}
apache_health_pct_min_set( var_0 )
{
self.apache_health_min = int( apache_health_max_get() * var_0 );
}
apache_health_pct_min_clear()
{
self.apache_health_min = undefined;
}
apache_health_adjust( var_0 )
{
var_1 = apache_health_get() + var_0;
apache_health_set( var_1 );
}
apache_health_max_get()
{
return self.apache_health_max;
}
apache_health_max_set( var_0 )
{
self.apache_health_max = var_0;
}
hud_addandshowtargets( var_0, var_1 )
{
common_scripts\utility::lock( "add_apache_target_lock" );
self.heli.targeting vehicle_scripts\_apache_player_targeting::hud_addtargets( var_0, var_1 );
self.heli.targeting vehicle_scripts\_apache_player_targeting::hud_showtargets( var_0 );
common_scripts\utility::unlock( "add_apache_target_lock" );
}
hud_addtargets( var_0, var_1 )
{
self.heli.targeting vehicle_scripts\_apache_player_targeting::hud_addtargets( var_0, var_1 );
}
hud_showtargets( var_0 )
{
self.heli.targeting vehicle_scripts\_apache_player_targeting::hud_showtargets( var_0 );
}
hud_hidetargets( var_0 )
{
self.heli.targeting vehicle_scripts\_apache_player_targeting::hud_hidetargets( var_0 );
}
hud_color_ally()
{
return vehicle_scripts\_apache_player_targeting::hud_color_ally();
}
hud_set_target_locked( var_0 )
{
vehicle_scripts\_apache_player_targeting::hud_set_target_locked( var_0 );
}
hud_set_target_default( var_0 )
{
vehicle_scripts\_apache_player_targeting::hud_set_target_default( var_0 );
}
getteam()
{
if ( isturret( self ) && isdefined( self.script_team ) )
return self.script_team;
if ( maps\_vehicle::isvehicle() && isdefined( self.script_team ) )
return self.script_team;
if ( isdefined( self.team ) )
return self.team;
return "none";
}
isturret( var_0 )
{
return isdefined( var_0 ) && isdefined( var_0.classname ) && issubstr( var_0.classname, "turret" );
}