2337 lines
59 KiB
Plaintext
2337 lines
59 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
guy_enter( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( self ) )
|
|
return;
|
|
|
|
if ( !isdefined( self.vehicletype ) )
|
|
return;
|
|
|
|
var_2 = self.classname;
|
|
var_3 = level.vehicle_aianims[var_2];
|
|
var_4 = level.vehicle_aianims[var_2].size;
|
|
self.attachedguys[self.attachedguys.size] = var_0;
|
|
var_5 = set_pos( var_0, var_4 );
|
|
|
|
if ( !isdefined( var_5 ) )
|
|
return;
|
|
|
|
if ( var_5 == 0 )
|
|
var_0.drivingvehicle = 1;
|
|
|
|
var_6 = anim_pos( self, var_5 );
|
|
self.usedpositions[var_5] = 1;
|
|
var_0.vehicle_position = var_5;
|
|
var_0.vehicle_idling = 0;
|
|
|
|
if ( isdefined( var_6.delay ) )
|
|
{
|
|
var_0.delay = var_6.delay;
|
|
|
|
if ( isdefined( var_6.delayinc ) )
|
|
self.delayer = var_0.delay;
|
|
}
|
|
|
|
if ( isdefined( var_6.delayinc ) )
|
|
{
|
|
self.delayer = self.delayer + var_6.delayinc;
|
|
var_0.delay = self.delayer;
|
|
}
|
|
|
|
var_0.ridingvehicle = self;
|
|
var_0.orghealth = var_0.health;
|
|
var_0.vehicle_idle = var_6.idle;
|
|
var_0.vehicle_standattack = var_6.standattack;
|
|
var_0.deathanim = var_6.death;
|
|
var_0.deathanimscript = var_6.deathscript;
|
|
var_0.standing = 0;
|
|
var_0.allowdeath = 0;
|
|
|
|
if ( isdefined( var_0.deathanim ) && !isdefined( var_0.magic_bullet_shield ) && vehicle_allows_rider_death() )
|
|
{
|
|
if ( var_0.vehicle_position != 0 || vehicle_allows_driver_death() )
|
|
{
|
|
var_0.allowdeath = !isdefined( var_0.script_allowdeath ) || var_0.script_allowdeath;
|
|
|
|
if ( isdefined( var_6.death_no_ragdoll ) )
|
|
var_0.noragdoll = var_6.death_no_ragdoll;
|
|
}
|
|
}
|
|
|
|
if ( var_0.classname == "script_model" )
|
|
{
|
|
if ( isdefined( var_6.death ) && var_0.allowdeath && ( !isdefined( var_0.script_allowdeath ) || var_0.script_allowdeath ) )
|
|
thread guy_death( var_0, var_6 );
|
|
}
|
|
|
|
if ( !isdefined( var_0.vehicle_idle ) )
|
|
var_0.allowdeath = 1;
|
|
|
|
self.riders[self.riders.size] = var_0;
|
|
|
|
if ( var_0.classname != "script_model" && maps\_utility::spawn_failed( var_0 ) )
|
|
return;
|
|
|
|
var_7 = self gettagorigin( var_6.sittag );
|
|
var_8 = self gettagangles( var_6.sittag );
|
|
link_to_sittag( var_0, var_6.sittag, var_6.sittag_offset, var_6.linktoblend );
|
|
|
|
if ( isai( var_0 ) )
|
|
{
|
|
var_0 teleport( var_7, var_8 );
|
|
var_0.a.disablelongdeath = 1;
|
|
|
|
if ( isdefined( var_6.bhasgunwhileriding ) && !var_6.bhasgunwhileriding )
|
|
var_0 maps\_utility::gun_remove();
|
|
|
|
if ( guy_should_man_turret( var_6 ) )
|
|
thread guy_man_turret( var_0, var_5, var_1 );
|
|
}
|
|
else
|
|
{
|
|
if ( isdefined( var_6.bhasgunwhileriding ) && !var_6.bhasgunwhileriding )
|
|
detach_models_with_substr( var_0, "weapon_" );
|
|
|
|
var_0.origin = var_7;
|
|
var_0.angles = var_8;
|
|
}
|
|
|
|
if ( var_5 == 0 && isdefined( var_3[0].death ) )
|
|
thread driverdead( var_0 );
|
|
|
|
self notify( "guy_entered", var_0, var_5 );
|
|
thread guy_handle( var_0, var_5 );
|
|
|
|
if ( isdefined( var_6.rider_func ) )
|
|
var_0 [[ var_6.rider_func ]]();
|
|
else
|
|
{
|
|
if ( isdefined( self.parachute_unload ) )
|
|
var_0.parachute_unload = 1;
|
|
|
|
if ( isdefined( var_6.getin_idle_func ) )
|
|
{
|
|
thread [[ var_6.getin_idle_func ]]( var_0, var_5 );
|
|
return;
|
|
}
|
|
|
|
thread guy_idle( var_0, var_5 );
|
|
}
|
|
}
|
|
|
|
vehicle_allows_driver_death()
|
|
{
|
|
if ( !isdefined( self.script_allow_driver_death ) )
|
|
return 0;
|
|
|
|
return self.script_allow_driver_death;
|
|
}
|
|
|
|
vehicle_allows_rider_death()
|
|
{
|
|
if ( !isdefined( self.script_allow_rider_deaths ) )
|
|
return 1;
|
|
|
|
return self.script_allow_rider_deaths;
|
|
}
|
|
|
|
guy_should_man_turret( var_0 )
|
|
{
|
|
if ( !isdefined( var_0.mgturret ) )
|
|
return 0;
|
|
|
|
if ( !isdefined( self.script_nomg ) )
|
|
return 1;
|
|
|
|
return !self.script_nomg;
|
|
}
|
|
|
|
handle_attached_guys()
|
|
{
|
|
var_0 = self.classname;
|
|
self.attachedguys = [];
|
|
|
|
if ( !( isdefined( level.vehicle_aianims ) && isdefined( level.vehicle_aianims[var_0] ) ) )
|
|
return;
|
|
|
|
var_1 = level.vehicle_aianims[var_0].size;
|
|
|
|
if ( isdefined( self.script_noteworthy ) && self.script_noteworthy == "ai_wait_go" )
|
|
thread ai_wait_go();
|
|
|
|
self.runningtovehicle = [];
|
|
self.usedpositions = [];
|
|
self.getinorgs = [];
|
|
self.delayer = 0;
|
|
var_2 = level.vehicle_aianims[var_0];
|
|
|
|
for ( var_3 = 0; var_3 < var_1; var_3++ )
|
|
{
|
|
self.usedpositions[var_3] = 0;
|
|
|
|
if ( isdefined( self.script_nomg ) && self.script_nomg && isdefined( var_2[var_3].bisgunner ) && var_2[var_3].bisgunner )
|
|
self.usedpositions[1] = 1;
|
|
}
|
|
}
|
|
|
|
load_ai_goddriver( var_0 )
|
|
{
|
|
load_ai( var_0, 1 );
|
|
}
|
|
|
|
guy_death( var_0, var_1 )
|
|
{
|
|
waittillframeend;
|
|
var_0 setcandamage( 1 );
|
|
var_0 endon( "death" );
|
|
var_0.allowdeath = 0;
|
|
var_0.health = 10150;
|
|
|
|
if ( isdefined( var_0.script_startinghealth ) )
|
|
var_0.health = var_0.health + var_0.script_startinghealth;
|
|
|
|
var_0 endon( "jumping_out" );
|
|
|
|
if ( isdefined( var_0.magic_bullet_shield ) && var_0.magic_bullet_shield )
|
|
{
|
|
while ( isdefined( var_0.magic_bullet_shield ) && var_0.magic_bullet_shield )
|
|
wait 0.05;
|
|
}
|
|
|
|
while ( var_0.health > 10000 )
|
|
var_0 waittill( "damage" );
|
|
|
|
thread guy_deathimate_me( var_0, var_1 );
|
|
}
|
|
|
|
guy_deathimate_me( var_0, var_1 )
|
|
{
|
|
var_2 = gettime() + getanimlength( var_1.death ) * 1000;
|
|
var_3 = var_0.angles;
|
|
var_4 = var_0.origin;
|
|
var_0 = convert_guy_to_drone( var_0 );
|
|
[[ level.global_kill_func ]]( "MOD_RIFLE_BULLET", "torso_upper", var_4 );
|
|
detach_models_with_substr( var_0, "weapon_" );
|
|
var_0 linkto( self );
|
|
var_0 notsolid();
|
|
var_0 setanim( var_1.death );
|
|
|
|
if ( isai( var_0 ) )
|
|
var_0 animscripts\shared::dropallaiweapons();
|
|
else
|
|
detach_models_with_substr( var_0, "weapon_" );
|
|
|
|
if ( isdefined( var_1.death_delayed_ragdoll ) )
|
|
{
|
|
var_0 unlink();
|
|
var_0 startragdoll();
|
|
wait( var_1.death_delayed_ragdoll );
|
|
var_0 delete();
|
|
return;
|
|
}
|
|
}
|
|
|
|
load_ai( var_0, var_1, var_2 )
|
|
{
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 0;
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = vehicle_get_riders();
|
|
|
|
maps\_utility::ent_flag_clear( "unloaded" );
|
|
maps\_utility::ent_flag_clear( "loaded" );
|
|
common_scripts\utility::array_levelthread( var_0, ::get_in_vehicle, var_1, var_2 );
|
|
}
|
|
|
|
is_rider( var_0 )
|
|
{
|
|
for ( var_1 = 0; var_1 < self.riders.size; var_1++ )
|
|
{
|
|
if ( self.riders[var_1] == var_0 )
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
vehicle_get_riders()
|
|
{
|
|
var_0 = [];
|
|
var_1 = getaiarray( self.script_team );
|
|
|
|
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
|
|
{
|
|
var_3 = var_1[var_2];
|
|
|
|
if ( !isdefined( var_3.script_vehicleride ) )
|
|
continue;
|
|
|
|
if ( var_3.script_vehicleride != self.script_vehicleride )
|
|
continue;
|
|
|
|
var_0[var_0.size] = var_3;
|
|
}
|
|
|
|
return var_0;
|
|
}
|
|
|
|
get_my_vehicleride()
|
|
{
|
|
var_0 = [];
|
|
var_1 = getentarray( "script_vehicle", "code_classname" );
|
|
|
|
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
|
|
{
|
|
var_3 = var_1[var_2];
|
|
|
|
if ( !isdefined( var_3.script_vehicleride ) )
|
|
continue;
|
|
|
|
if ( var_3.script_vehicleride != self.script_vehicleride )
|
|
continue;
|
|
|
|
var_0[var_0.size] = var_3;
|
|
}
|
|
|
|
return var_0[0];
|
|
}
|
|
|
|
get_in_vehicle( var_0, var_1, var_2 )
|
|
{
|
|
if ( is_rider( var_0 ) )
|
|
return;
|
|
|
|
if ( !handle_detached_guys_check() )
|
|
return;
|
|
|
|
guy_runtovehicle( var_0, self, var_1, var_2 );
|
|
}
|
|
|
|
handle_detached_guys_check()
|
|
{
|
|
if ( vehicle_hasavailablespots() )
|
|
return 1;
|
|
}
|
|
|
|
vehicle_hasavailablespots()
|
|
{
|
|
if ( level.vehicle_aianims[self.classname].size - self.runningtovehicle.size )
|
|
return 1;
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
guy_runtovehicle_loaded( var_0, var_1 )
|
|
{
|
|
var_1 endon( "death" );
|
|
var_1 endon( "stop_loading" );
|
|
var_2 = var_0 common_scripts\utility::waittill_any_return( "long_death", "death", "enteredvehicle" );
|
|
|
|
if ( var_2 != "enteredvehicle" && isdefined( var_0.forced_startingposition ) )
|
|
var_1.usedpositions[var_0.forced_startingposition] = 0;
|
|
|
|
var_1.runningtovehicle = common_scripts\utility::array_remove( var_1.runningtovehicle, var_0 );
|
|
vehicle_loaded_if_full( var_1 );
|
|
}
|
|
|
|
vehicle_loaded_if_full( var_0 )
|
|
{
|
|
if ( isdefined( var_0.vehicletype ) && isdefined( var_0.vehicle_loaded_notify_size ) )
|
|
{
|
|
if ( var_0.riders.size == var_0.vehicle_loaded_notify_size )
|
|
var_0 maps\_utility::ent_flag_set( "loaded" );
|
|
}
|
|
else if ( !var_0.runningtovehicle.size && var_0.riders.size )
|
|
{
|
|
if ( var_0.usedpositions[0] )
|
|
var_0 maps\_utility::ent_flag_set( "loaded" );
|
|
else
|
|
var_0 thread vehicle_reload();
|
|
}
|
|
}
|
|
|
|
vehicle_reload()
|
|
{
|
|
var_0 = self.riders;
|
|
maps\_vehicle::vehicle_unload();
|
|
maps\_utility::ent_flag_wait( "unloaded" );
|
|
var_0 = maps\_utility::array_removedead( var_0 );
|
|
thread maps\_vehicle::vehicle_load_ai( var_0 );
|
|
}
|
|
|
|
remove_magic_bullet_shield_from_guy_on_unload_or_death( var_0 )
|
|
{
|
|
common_scripts\utility::waittill_any( "unload", "death" );
|
|
var_0 maps\_utility::stop_magic_bullet_shield();
|
|
}
|
|
|
|
guy_runtovehicle( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_1 endon( "stop_loading" );
|
|
var_4 = 1;
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 0;
|
|
|
|
var_5 = level.vehicle_aianims[var_1.classname];
|
|
|
|
if ( isdefined( var_1.runtovehicleoverride ) )
|
|
{
|
|
var_1 thread [[ var_1.runtovehicleoverride ]]( var_0 );
|
|
return;
|
|
}
|
|
|
|
var_1 endon( "death" );
|
|
var_0 endon( "death" );
|
|
var_1.runningtovehicle[var_1.runningtovehicle.size] = var_0;
|
|
thread guy_runtovehicle_loaded( var_0, var_1 );
|
|
var_6 = [];
|
|
var_7 = undefined;
|
|
var_8 = 0;
|
|
var_9 = 0;
|
|
|
|
for ( var_10 = 0; var_10 < var_5.size; var_10++ )
|
|
{
|
|
if ( isdefined( var_5[var_10].getin ) )
|
|
var_9 = 1;
|
|
}
|
|
|
|
if ( !var_9 )
|
|
{
|
|
var_0 notify( "enteredvehicle" );
|
|
var_1 guy_enter( var_0, var_4 );
|
|
return;
|
|
}
|
|
|
|
if ( !isdefined( var_0.get_in_moving_vehicle ) )
|
|
{
|
|
while ( var_1 vehicle_getspeed() > 1 )
|
|
wait 0.05;
|
|
}
|
|
|
|
var_11 = var_1 get_availablepositions( var_3 );
|
|
|
|
if ( isdefined( var_0.script_startingposition ) )
|
|
var_7 = var_1 vehicle_getinstart( var_0.script_startingposition );
|
|
else if ( !var_1.usedpositions[0] )
|
|
{
|
|
var_7 = var_1 vehicle_getinstart( 0 );
|
|
|
|
if ( var_2 )
|
|
{
|
|
var_0 thread maps\_utility::magic_bullet_shield();
|
|
thread remove_magic_bullet_shield_from_guy_on_unload_or_death( var_0 );
|
|
}
|
|
}
|
|
else if ( var_11.availablepositions.size )
|
|
var_7 = common_scripts\utility::getclosest( var_0.origin, var_11.availablepositions );
|
|
else
|
|
var_7 = undefined;
|
|
|
|
if ( !var_11.availablepositions.size && var_11.nonanimatedpositions.size )
|
|
{
|
|
var_0 notify( "enteredvehicle" );
|
|
var_1 guy_enter( var_0, var_4 );
|
|
return;
|
|
}
|
|
else if ( !isdefined( var_7 ) )
|
|
return;
|
|
|
|
var_8 = var_7.origin;
|
|
var_12 = var_7.angles;
|
|
var_0.forced_startingposition = var_7.vehicle_position;
|
|
var_1.usedpositions[var_7.vehicle_position] = 1;
|
|
var_0.script_moveoverride = 1;
|
|
var_0 notify( "stop_going_to_node" );
|
|
var_0 maps\_utility::set_forcegoal();
|
|
var_0 maps\_utility::disable_arrivals();
|
|
var_0.goalradius = 16;
|
|
var_0 setgoalpos( var_8 );
|
|
var_0 waittill( "goal" );
|
|
var_0 maps\_utility::enable_arrivals();
|
|
var_0 maps\_utility::unset_forcegoal();
|
|
var_0 notify( "boarding_vehicle" );
|
|
var_13 = anim_pos( var_1, var_7.vehicle_position );
|
|
|
|
if ( isdefined( var_13.delay ) )
|
|
{
|
|
var_0.delay = var_13.delay;
|
|
|
|
if ( isdefined( var_13.delayinc ) )
|
|
self.delayer = var_0.delay;
|
|
}
|
|
|
|
if ( isdefined( var_13.delayinc ) )
|
|
{
|
|
self.delayer = self.delayer + var_13.delayinc;
|
|
var_0.delay = self.delayer;
|
|
}
|
|
|
|
var_1 link_to_sittag( var_0, var_13.sittag, var_13.sittag_offset, var_13.linktoblend );
|
|
var_0.allowdeath = 0;
|
|
var_13 = var_5[var_7.vehicle_position];
|
|
|
|
if ( isdefined( var_7 ) )
|
|
{
|
|
if ( isdefined( var_13.vehicle_getinanim ) )
|
|
{
|
|
if ( isdefined( var_13.vehicle_getoutanim ) )
|
|
{
|
|
var_14 = isdefined( var_0.no_vehicle_getoutanim );
|
|
|
|
if ( !var_14 )
|
|
var_1 clearanim( var_13.vehicle_getoutanim, 0 );
|
|
}
|
|
|
|
var_1 = var_1 getanimatemodel();
|
|
var_1 thread setanimrestart_once( var_13.vehicle_getinanim, var_13.vehicle_getinanim_clear );
|
|
level thread maps\_anim::start_notetrack_wait( var_1, "vehicle_anim_flag" );
|
|
}
|
|
|
|
if ( isdefined( var_13.vehicle_getinsoundtag ) )
|
|
var_8 = var_1 gettagorigin( var_13.vehicle_getinsoundtag );
|
|
else
|
|
var_8 = var_1.origin;
|
|
|
|
if ( isdefined( var_13.vehicle_getinsound ) )
|
|
thread common_scripts\utility::play_sound_in_space( var_13.vehicle_getinsound, var_8 );
|
|
|
|
var_15 = undefined;
|
|
var_16 = undefined;
|
|
|
|
if ( isdefined( var_13.getin_enteredvehicletrack ) )
|
|
{
|
|
var_15 = [];
|
|
var_15[0] = var_13.getin_enteredvehicletrack;
|
|
var_16 = [];
|
|
var_16[0] = ::entered_vehicle_notify;
|
|
var_1 link_to_sittag( var_0, var_13.sittag, var_13.sittag_offset, var_13.linktoblend );
|
|
}
|
|
|
|
var_1 animontag( var_0, var_13.sittag, var_13.getin, var_15, var_16 );
|
|
}
|
|
|
|
var_0 notify( "enteredvehicle" );
|
|
var_1 guy_enter( var_0, var_4 );
|
|
}
|
|
|
|
entered_vehicle_notify()
|
|
{
|
|
self notify( "enteredvehicle" );
|
|
}
|
|
|
|
driverdead( var_0 )
|
|
{
|
|
if ( maps\_vehicle::ishelicopter() )
|
|
return;
|
|
|
|
self.driver = var_0;
|
|
self endon( "death" );
|
|
var_0 endon( "jumping_out" );
|
|
var_0 waittill( "death" );
|
|
|
|
if ( isdefined( self.vehicle_keeps_going_after_driver_dies ) )
|
|
return;
|
|
|
|
self notify( "driver dead" );
|
|
self.deaddriver = 1;
|
|
|
|
if ( isdefined( self.hasstarted ) && self.hasstarted )
|
|
{
|
|
self setwaitspeed( 0 );
|
|
self vehicle_setspeed( 0, 10 );
|
|
self waittill( "reached_wait_speed" );
|
|
}
|
|
|
|
maps\_vehicle::vehicle_unload();
|
|
}
|
|
|
|
copy_cat()
|
|
{
|
|
var_0 = spawn( "script_model", self.origin );
|
|
var_0 setmodel( self.model );
|
|
var_1 = self getattachsize();
|
|
|
|
for ( var_2 = 0; var_2 < var_1; var_2++ )
|
|
var_0 attach( self getattachmodelname( var_2 ) );
|
|
|
|
return var_0;
|
|
}
|
|
|
|
guy_becomes_real_ai( var_0, var_1 )
|
|
{
|
|
if ( isai( var_0 ) )
|
|
return var_0;
|
|
|
|
if ( var_0.drone_delete_on_unload == 1 )
|
|
var_0 delete();
|
|
else
|
|
{
|
|
var_0 = maps\_utility::makerealai( var_0 );
|
|
var_2 = self.classname;
|
|
var_3 = level.vehicle_aianims[var_2].size;
|
|
var_4 = anim_pos( self, var_1 );
|
|
link_to_sittag( var_0, var_4.sittag, var_4.sittag_offset, var_4.linktoblend );
|
|
var_0.vehicle_idle = var_4.idle;
|
|
thread guy_idle( var_0, var_1 );
|
|
}
|
|
}
|
|
|
|
link_to_sittag( var_0, var_1, var_2, var_3 )
|
|
{
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = ( 0, 0, 0 );
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
var_3 = 0;
|
|
|
|
if ( var_3 && !isdefined( var_0.script_drone ) )
|
|
var_0 linktoblendtotag( self, var_1, 0 );
|
|
else
|
|
var_0 linkto( self, var_1, var_2, ( 0, 0, 0 ) );
|
|
}
|
|
|
|
anim_pos( var_0, var_1 )
|
|
{
|
|
return level.vehicle_aianims[var_0.classname][var_1];
|
|
}
|
|
|
|
guy_deathhandle( var_0, var_1 )
|
|
{
|
|
var_0 waittill( "death" );
|
|
|
|
if ( !isdefined( self ) )
|
|
return;
|
|
|
|
self.riders = common_scripts\utility::array_remove( self.riders, var_0 );
|
|
self.usedpositions[var_1] = 0;
|
|
}
|
|
|
|
setup_aianimthreads()
|
|
{
|
|
if ( !isdefined( level.vehicle_aianimthread ) )
|
|
level.vehicle_aianimthread = [];
|
|
|
|
if ( !isdefined( level.vehicle_aianimcheck ) )
|
|
level.vehicle_aianimcheck = [];
|
|
|
|
level.vehicle_aianimthread["idle"] = ::guy_idle;
|
|
level.vehicle_aianimthread["duck"] = ::guy_duck;
|
|
level.vehicle_aianimthread["duck_once"] = ::guy_duck_once;
|
|
level.vehicle_aianimcheck["duck_once"] = ::guy_duck_once_check;
|
|
level.vehicle_aianimthread["weave"] = ::guy_weave;
|
|
level.vehicle_aianimcheck["weave"] = ::guy_weave_check;
|
|
level.vehicle_aianimthread["turn_right"] = ::guy_turn_right;
|
|
level.vehicle_aianimcheck["turn_right"] = ::guy_turn_right_check;
|
|
level.vehicle_aianimthread["turn_left"] = ::guy_turn_left;
|
|
level.vehicle_aianimcheck["turn_left"] = ::guy_turn_right_check;
|
|
level.vehicle_aianimthread["turn_hardright"] = ::guy_turn_hardright;
|
|
level.vehicle_aianimthread["turn_hardleft"] = ::guy_turn_hardleft;
|
|
level.vehicle_aianimthread["turret_fire"] = ::guy_turret_fire;
|
|
level.vehicle_aianimthread["turret_turnleft"] = ::guy_turret_turnleft;
|
|
level.vehicle_aianimthread["turret_turnright"] = ::guy_turret_turnright;
|
|
level.vehicle_aianimthread["unload"] = ::guy_unload;
|
|
level.vehicle_aianimthread["pre_unload"] = ::guy_pre_unload;
|
|
level.vehicle_aianimcheck["pre_unload"] = ::guy_pre_unload_check;
|
|
level.vehicle_aianimthread["idle_alert"] = ::guy_idle_alert;
|
|
level.vehicle_aianimcheck["idle_alert"] = ::guy_idle_alert_check;
|
|
level.vehicle_aianimthread["idle_alert_to_casual"] = ::guy_idle_alert_to_casual;
|
|
level.vehicle_aianimcheck["idle_alert_to_casual"] = ::guy_idle_alert_to_casual_check;
|
|
level.vehicle_aianimthread["reaction"] = ::guy_turret_turnright;
|
|
}
|
|
|
|
guy_handle( var_0, var_1 )
|
|
{
|
|
var_0.vehicle_idling = 1;
|
|
thread guy_deathhandle( var_0, var_1 );
|
|
}
|
|
|
|
guy_stand_attack( var_0, var_1 )
|
|
{
|
|
var_2 = anim_pos( self, var_1 );
|
|
var_0 endon( "newanim" );
|
|
self endon( "death" );
|
|
var_0 endon( "death" );
|
|
var_0.standing = 1;
|
|
var_3 = 0;
|
|
|
|
for (;;)
|
|
{
|
|
var_4 = gettime() + 2000;
|
|
|
|
while ( gettime() < var_4 && isdefined( var_0.enemy ) )
|
|
animontag( var_0, var_2.sittag, var_0.vehicle_standattack, undefined, undefined, "firing" );
|
|
|
|
var_5 = randomint( 5 ) + 10;
|
|
|
|
for ( var_6 = 0; var_6 < var_5; var_6++ )
|
|
animontag( var_0, var_2.sittag, var_2.standidle );
|
|
}
|
|
}
|
|
|
|
guy_stand_down( var_0, var_1 )
|
|
{
|
|
var_2 = anim_pos( self, var_1 );
|
|
|
|
if ( !isdefined( var_2.standdown ) )
|
|
{
|
|
thread guy_stand_attack( var_0, var_1 );
|
|
return;
|
|
}
|
|
|
|
animontag( var_0, var_2.sittag, var_2.standdown );
|
|
var_0.standing = 0;
|
|
thread guy_idle( var_0, var_1 );
|
|
}
|
|
|
|
driver_idle_speed( var_0, var_1 )
|
|
{
|
|
var_0 endon( "newanim" );
|
|
self endon( "death" );
|
|
var_0 endon( "death" );
|
|
var_2 = anim_pos( self, var_1 );
|
|
|
|
for (;;)
|
|
{
|
|
if ( self vehicle_getspeed() == 0 )
|
|
var_0.vehicle_idle = var_2.idle_animstop;
|
|
else
|
|
var_0.vehicle_idle = var_2.idle_anim;
|
|
|
|
wait 0.25;
|
|
}
|
|
}
|
|
|
|
guy_reaction( var_0, var_1 )
|
|
{
|
|
var_2 = anim_pos( self, var_1 );
|
|
var_0 endon( "newanim" );
|
|
self endon( "death" );
|
|
var_0 endon( "death" );
|
|
|
|
if ( isdefined( var_2.reaction ) )
|
|
animontag( var_0, var_2.sittag, var_2.reaction );
|
|
|
|
thread guy_idle( var_0, var_1 );
|
|
}
|
|
|
|
guy_turret_turnleft( var_0, var_1 )
|
|
{
|
|
var_2 = anim_pos( self, var_1 );
|
|
var_0 endon( "newanim" );
|
|
self endon( "death" );
|
|
var_0 endon( "death" );
|
|
|
|
for (;;)
|
|
animontag( var_0, var_2.sittag, var_0.turret_turnleft );
|
|
}
|
|
|
|
guy_turret_turnright( var_0, var_1 )
|
|
{
|
|
var_0 endon( "newanim" );
|
|
self endon( "death" );
|
|
var_0 endon( "death" );
|
|
var_2 = anim_pos( self, var_1 );
|
|
|
|
for (;;)
|
|
animontag( var_0, var_2.sittag, var_0.turret_turnleft );
|
|
}
|
|
|
|
guy_turret_fire( var_0, var_1 )
|
|
{
|
|
var_0 endon( "newanim" );
|
|
self endon( "death" );
|
|
var_0 endon( "death" );
|
|
var_2 = anim_pos( self, var_1 );
|
|
|
|
if ( isdefined( var_2.vehicle_turret_fire ) )
|
|
maps\_vehicle_code::_get_dummy() setanimrestart( var_2.vehicle_turret_fire );
|
|
|
|
if ( isdefined( var_2.turret_fire ) )
|
|
{
|
|
if ( isdefined( var_2.turret_fire_tag ) )
|
|
animontag( var_0, var_2.turret_fire_tag, var_2.turret_fire );
|
|
else
|
|
animontag( var_0, var_2.sittag, var_2.turret_fire );
|
|
}
|
|
|
|
thread guy_idle( var_0, var_1 );
|
|
}
|
|
|
|
guy_idle( var_0, var_1, var_2 )
|
|
{
|
|
var_0 endon( "newanim" );
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
self endon( "death" );
|
|
|
|
var_0 endon( "death" );
|
|
var_0.vehicle_idling = 1;
|
|
var_0 notify( "gotime" );
|
|
|
|
if ( !isdefined( var_0.vehicle_idle ) )
|
|
return;
|
|
|
|
var_3 = anim_pos( self, var_1 );
|
|
|
|
if ( isdefined( var_3.mgturret ) )
|
|
return;
|
|
|
|
if ( isdefined( var_3.hideidle ) && var_3.hideidle )
|
|
var_0 hide();
|
|
|
|
if ( isdefined( var_3.idle_animstop ) && isdefined( var_3.idle_anim ) )
|
|
thread driver_idle_speed( var_0, var_1 );
|
|
|
|
for (;;)
|
|
{
|
|
var_0 notify( "idle" );
|
|
play_new_idle( var_0, var_3 );
|
|
}
|
|
}
|
|
|
|
play_new_idle( var_0, var_1 )
|
|
{
|
|
if ( isdefined( var_0.vehicle_idle_override ) )
|
|
{
|
|
animontag( var_0, var_1.sittag, var_0.vehicle_idle_override );
|
|
return;
|
|
}
|
|
|
|
if ( isdefined( var_1.idleoccurrence ) )
|
|
{
|
|
var_2 = randomoccurrance( var_0, var_1.idleoccurrence );
|
|
animontag( var_0, var_1.sittag, var_0.vehicle_idle[var_2] );
|
|
return;
|
|
}
|
|
|
|
if ( isdefined( var_0.playerpiggyback ) && isdefined( var_1.player_idle ) )
|
|
{
|
|
animontag( var_0, var_1.sittag, var_1.player_idle );
|
|
return;
|
|
}
|
|
|
|
if ( isdefined( var_1.vehicle_idle ) )
|
|
thread setanimrestart_once( var_1.vehicle_idle );
|
|
|
|
animontag( var_0, var_1.sittag, var_0.vehicle_idle );
|
|
}
|
|
|
|
randomoccurrance( var_0, var_1 )
|
|
{
|
|
var_2 = [];
|
|
var_3 = 0;
|
|
|
|
for ( var_4 = 0; var_4 < var_1.size; var_4++ )
|
|
{
|
|
var_3 = var_3 + var_1[var_4];
|
|
var_2[var_4] = var_3;
|
|
}
|
|
|
|
var_5 = randomint( var_3 );
|
|
|
|
for ( var_4 = 0; var_4 < var_1.size; var_4++ )
|
|
{
|
|
if ( var_5 < var_2[var_4] )
|
|
return var_4;
|
|
}
|
|
}
|
|
|
|
guy_duck_once_check( var_0, var_1 )
|
|
{
|
|
return isdefined( anim_pos( self, var_1 ).duck_once );
|
|
}
|
|
|
|
guy_duck_once( var_0, var_1 )
|
|
{
|
|
var_0 endon( "newanim" );
|
|
self endon( "death" );
|
|
var_0 endon( "death" );
|
|
var_2 = anim_pos( self, var_1 );
|
|
|
|
if ( isdefined( var_2.duck_once ) )
|
|
{
|
|
if ( isdefined( var_2.vehicle_duck_once ) )
|
|
thread setanimrestart_once( var_2.vehicle_duck_once );
|
|
|
|
animontag( var_0, var_2.sittag, var_2.duck_once );
|
|
}
|
|
|
|
thread guy_idle( var_0, var_1 );
|
|
}
|
|
|
|
guy_weave_check( var_0, var_1 )
|
|
{
|
|
return isdefined( anim_pos( self, var_1 ).weave );
|
|
}
|
|
|
|
guy_weave( var_0, var_1 )
|
|
{
|
|
var_0 endon( "newanim" );
|
|
self endon( "death" );
|
|
var_0 endon( "death" );
|
|
var_2 = anim_pos( self, var_1 );
|
|
|
|
if ( isdefined( var_2.weave ) )
|
|
{
|
|
if ( isdefined( var_2.vehicle_weave ) )
|
|
thread setanimrestart_once( var_2.vehicle_weave );
|
|
|
|
animontag( var_0, var_2.sittag, var_2.weave );
|
|
}
|
|
|
|
thread guy_idle( var_0, var_1 );
|
|
}
|
|
|
|
guy_duck( var_0, var_1 )
|
|
{
|
|
var_0 endon( "newanim" );
|
|
self endon( "death" );
|
|
var_0 endon( "death" );
|
|
var_2 = anim_pos( self, var_1 );
|
|
|
|
if ( isdefined( var_2.duckin ) )
|
|
animontag( var_0, var_2.sittag, var_2.duckin );
|
|
|
|
thread guy_duck_idle( var_0, var_1 );
|
|
}
|
|
|
|
guy_duck_idle( var_0, var_1 )
|
|
{
|
|
var_0 endon( "newanim" );
|
|
self endon( "death" );
|
|
var_0 endon( "death" );
|
|
var_2 = anim_pos( self, var_1 );
|
|
var_3 = randomoccurrance( var_0, var_2.duckidleoccurrence );
|
|
|
|
for (;;)
|
|
animontag( var_0, var_2.sittag, var_2.duckidle[var_3] );
|
|
}
|
|
|
|
guy_duck_out( var_0, var_1 )
|
|
{
|
|
var_2 = anim_pos( self, var_1 );
|
|
|
|
if ( isdefined( var_2.ducking ) && var_0.ducking )
|
|
{
|
|
animontag( var_0, var_2.sittag, var_2.duckout );
|
|
var_0.ducking = 0;
|
|
}
|
|
|
|
thread guy_idle( var_0, var_1 );
|
|
}
|
|
|
|
guy_unload_que( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
self.unloadque = common_scripts\utility::array_add( self.unloadque, var_0 );
|
|
var_0 common_scripts\utility::waittill_any( "death", "jumpedout" );
|
|
self.unloadque = common_scripts\utility::array_remove( self.unloadque, var_0 );
|
|
|
|
if ( !self.unloadque.size )
|
|
{
|
|
maps\_utility::ent_flag_set( "unloaded" );
|
|
self.unload_group = "default";
|
|
}
|
|
}
|
|
|
|
riders_unloadable( var_0 )
|
|
{
|
|
if ( !self.riders.size )
|
|
return 0;
|
|
|
|
for ( var_1 = 0; var_1 < self.riders.size; var_1++ )
|
|
{
|
|
if ( !isalive( self.riders[var_1] ) )
|
|
continue;
|
|
|
|
if ( check_unloadgroup( self.riders[var_1].vehicle_position, var_0 ) )
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
get_unload_group()
|
|
{
|
|
var_0 = [];
|
|
var_1 = [];
|
|
var_2 = "default";
|
|
|
|
if ( isdefined( self.unload_group ) )
|
|
var_2 = self.unload_group;
|
|
|
|
var_1 = level.vehicle_unloadgroups[self.classname][var_2];
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = level.vehicle_unloadgroups[self.classname]["default"];
|
|
|
|
foreach ( var_4 in var_1 )
|
|
var_0[var_4] = var_4;
|
|
|
|
return var_0;
|
|
}
|
|
|
|
check_unloadgroup( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = self.unload_group;
|
|
|
|
var_2 = self.classname;
|
|
|
|
if ( !isdefined( level.vehicle_unloadgroups[var_2] ) )
|
|
return 1;
|
|
|
|
if ( !isdefined( level.vehicle_unloadgroups[var_2][var_1] ) )
|
|
return 1;
|
|
|
|
var_3 = level.vehicle_unloadgroups[var_2][var_1];
|
|
|
|
for ( var_4 = 0; var_4 < var_3.size; var_4++ )
|
|
{
|
|
if ( var_0 == var_3[var_4] )
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
getoutrig_model_idle( var_0, var_1, var_2 )
|
|
{
|
|
self endon( "unloading" );
|
|
|
|
for (;;)
|
|
animontag( var_0, var_1, var_2 );
|
|
}
|
|
|
|
getoutrig_model( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
var_5 = self.classname;
|
|
|
|
if ( var_4 )
|
|
{
|
|
thread getoutrig_model_idle( var_1, var_2, level.vehicle_attachedmodels[var_5][var_0.fastroperig].idleanim );
|
|
self waittill( "unloading" );
|
|
}
|
|
|
|
self.unloadque = common_scripts\utility::array_add( self.unloadque, var_1 );
|
|
thread getoutrig_abort( var_1, var_2, var_3 );
|
|
|
|
if ( !isdefined( self.crashing ) )
|
|
animontag( var_1, var_2, var_3 );
|
|
|
|
var_1 unlink();
|
|
|
|
if ( !isdefined( self ) )
|
|
{
|
|
var_1 delete();
|
|
return;
|
|
}
|
|
|
|
self.unloadque = common_scripts\utility::array_remove( self.unloadque, var_1 );
|
|
|
|
if ( !self.unloadque.size )
|
|
self notify( "unloaded" );
|
|
|
|
self.fastroperig[var_0.fastroperig] = undefined;
|
|
wait 10;
|
|
var_1 delete();
|
|
}
|
|
|
|
getoutrig_disable_abort_notify_after_riders_out()
|
|
{
|
|
wait 0.05;
|
|
|
|
while ( isalive( self ) && self.unloadque.size > 2 )
|
|
wait 0.05;
|
|
|
|
if ( !isalive( self ) || isdefined( self.crashing ) && self.crashing )
|
|
return;
|
|
|
|
self notify( "getoutrig_disable_abort" );
|
|
}
|
|
|
|
getoutrig_abort_while_deploying()
|
|
{
|
|
self endon( "end_getoutrig_abort_while_deploying" );
|
|
|
|
while ( !isdefined( self.crashing ) )
|
|
wait 0.05;
|
|
|
|
var_0 = [];
|
|
|
|
foreach ( var_2 in self.riders )
|
|
{
|
|
if ( isalive( var_2 ) )
|
|
common_scripts\utility::add_to_array( var_0, var_2 );
|
|
}
|
|
|
|
common_scripts\utility::array_levelthread( var_0, maps\_utility::deleteent );
|
|
self notify( "crashed_while_deploying" );
|
|
var_0 = undefined;
|
|
}
|
|
|
|
getoutrig_abort( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = getanimlength( var_2 );
|
|
var_4 = var_3 - 1.0;
|
|
|
|
if ( self.vehicletype == "mi17" )
|
|
var_4 = var_3 - 0.5;
|
|
|
|
var_5 = 2.5;
|
|
self endon( "getoutrig_disable_abort" );
|
|
thread getoutrig_disable_abort_notify_after_riders_out();
|
|
thread getoutrig_abort_while_deploying();
|
|
common_scripts\utility::waittill_notify_or_timeout( "crashed_while_deploying", var_5 );
|
|
self notify( "end_getoutrig_abort_while_deploying" );
|
|
|
|
while ( !isdefined( self.crashing ) )
|
|
wait 0.05;
|
|
|
|
thread animontag( var_0, var_1, var_2 );
|
|
waittillframeend;
|
|
var_0 setanimtime( var_2, var_4 / var_3 );
|
|
var_6 = self;
|
|
|
|
if ( isdefined( self.achievement_attacker ) )
|
|
var_6 = self.achievement_attacker;
|
|
|
|
for ( var_7 = 0; var_7 < self.riders.size; var_7++ )
|
|
{
|
|
if ( !isdefined( self.riders[var_7] ) )
|
|
continue;
|
|
|
|
if ( !isdefined( self.riders[var_7].ragdoll_getout_death ) )
|
|
continue;
|
|
|
|
if ( self.riders[var_7].ragdoll_getout_death != 1 )
|
|
continue;
|
|
|
|
if ( !isdefined( self.riders[var_7].ridingvehicle ) )
|
|
continue;
|
|
|
|
self.riders[var_7].forcefallthroughonropes = 1;
|
|
|
|
if ( isalive( self.riders[var_7] ) )
|
|
thread animontag_ragdoll_death_fall( self.riders[var_7], self, var_6 );
|
|
}
|
|
}
|
|
|
|
setanimrestart_once( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "dont_clear_anim" );
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 1;
|
|
|
|
var_2 = getanimlength( var_0 );
|
|
var_3 = maps\_vehicle_code::_get_dummy();
|
|
var_3 endon( "death" );
|
|
var_3 setflaggedanimrestart( "vehicle_anim_flag", var_0 );
|
|
wait( var_2 );
|
|
|
|
if ( var_1 )
|
|
var_3 clearanim( var_0, 0 );
|
|
}
|
|
|
|
#using_animtree("generic_human");
|
|
|
|
getout_rigspawn( var_0, var_1, var_2 )
|
|
{
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = 1;
|
|
|
|
var_3 = self.classname;
|
|
var_4 = anim_pos( self, var_1 );
|
|
|
|
if ( isdefined( self.attach_model_override ) && isdefined( self.attach_model_override[var_4.fastroperig] ) )
|
|
var_5 = 1;
|
|
else
|
|
var_5 = 0;
|
|
|
|
if ( !isdefined( var_4.fastroperig ) || isdefined( self.fastroperig[var_4.fastroperig] ) || var_5 )
|
|
return;
|
|
|
|
var_6 = var_0 gettagorigin( level.vehicle_attachedmodels[var_3][var_4.fastroperig].tag );
|
|
var_7 = var_0 gettagangles( level.vehicle_attachedmodels[var_3][var_4.fastroperig].tag );
|
|
self.fastroperiganimating[var_4.fastroperig] = 1;
|
|
var_8 = spawn( "script_model", var_6 );
|
|
var_8.angles = var_7;
|
|
var_8.origin = var_6;
|
|
var_8 setmodel( level.vehicle_attachedmodels[var_3][var_4.fastroperig].model );
|
|
self.fastroperig[var_4.fastroperig] = var_8;
|
|
var_8 useanimtree( #animtree );
|
|
var_8 linkto( var_0, level.vehicle_attachedmodels[var_3][var_4.fastroperig].tag, ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
thread getoutrig_model( var_4, var_8, level.vehicle_attachedmodels[var_3][var_4.fastroperig].tag, level.vehicle_attachedmodels[var_3][var_4.fastroperig].dropanim, var_2 );
|
|
return var_8;
|
|
}
|
|
|
|
check_sound_tag_dupe( var_0 )
|
|
{
|
|
if ( !isdefined( self.sound_tag_dupe ) )
|
|
self.sound_tag_dupe = [];
|
|
|
|
var_1 = 0;
|
|
|
|
if ( !isdefined( self.sound_tag_dupe[var_0] ) )
|
|
self.sound_tag_dupe[var_0] = 1;
|
|
else
|
|
var_1 = 1;
|
|
|
|
thread check_sound_tag_dupe_reset( var_0 );
|
|
return var_1;
|
|
}
|
|
|
|
check_sound_tag_dupe_reset( var_0 )
|
|
{
|
|
wait 0.05;
|
|
|
|
if ( !isdefined( self ) )
|
|
return;
|
|
|
|
self.sound_tag_dupe[var_0] = 0;
|
|
var_1 = getarraykeys( self.sound_tag_dupe );
|
|
|
|
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
|
|
{
|
|
if ( self.sound_tag_dupe[var_1[var_2]] )
|
|
return;
|
|
}
|
|
|
|
self.sound_tag_dupe = undefined;
|
|
}
|
|
|
|
guy_unload( var_0, var_1 )
|
|
{
|
|
var_2 = anim_pos( self, var_1 );
|
|
var_3 = self.vehicletype;
|
|
|
|
if ( !check_unloadgroup( var_1 ) )
|
|
{
|
|
thread guy_idle( var_0, var_1 );
|
|
return;
|
|
}
|
|
|
|
if ( !isdefined( var_2.getout ) )
|
|
{
|
|
thread guy_idle( var_0, var_1 );
|
|
return;
|
|
}
|
|
|
|
if ( isdefined( var_2.hideidle ) && var_2.hideidle )
|
|
var_0 show();
|
|
|
|
thread guy_unload_que( var_0 );
|
|
self endon( "death" );
|
|
|
|
if ( isai( var_0 ) && isalive( var_0 ) )
|
|
var_0 endon( "death" );
|
|
|
|
if ( isdefined( var_0.getoffvehiclefunc ) )
|
|
var_0 [[ var_0.getoffvehiclefunc ]]();
|
|
|
|
if ( isdefined( var_0.onrotatingvehicleturret ) )
|
|
{
|
|
var_0.onrotatingvehicleturret = undefined;
|
|
|
|
if ( isdefined( var_0.getoffvehiclefunc ) )
|
|
var_0 [[ var_0.getoffvehiclefunc ]]();
|
|
}
|
|
|
|
var_4 = getanimatemodel();
|
|
|
|
if ( isdefined( var_2.vehicle_getoutanim ) )
|
|
{
|
|
var_4 thread setanimrestart_once( var_2.vehicle_getoutanim, var_2.vehicle_getoutanim_clear );
|
|
var_5 = 0;
|
|
|
|
if ( isdefined( var_2.vehicle_getoutsoundtag ) )
|
|
{
|
|
var_5 = check_sound_tag_dupe( var_2.vehicle_getoutsoundtag );
|
|
var_6 = var_4 gettagorigin( var_2.vehicle_getoutsoundtag );
|
|
}
|
|
else
|
|
var_6 = var_4.origin;
|
|
|
|
if ( isdefined( var_2.vehicle_getoutsound ) && !var_5 )
|
|
thread common_scripts\utility::play_sound_in_space( var_2.vehicle_getoutsound, var_6 );
|
|
|
|
var_5 = undefined;
|
|
}
|
|
|
|
var_7 = 0;
|
|
|
|
if ( isdefined( var_2.getout_timed_anim ) )
|
|
var_7 = var_7 + getanimlength( var_2.getout_timed_anim );
|
|
|
|
if ( isdefined( var_2.delay ) )
|
|
var_7 = var_7 + var_2.delay;
|
|
|
|
if ( isdefined( var_0.delay ) )
|
|
var_7 = var_7 + var_0.delay;
|
|
|
|
if ( var_7 > 0 )
|
|
{
|
|
thread guy_idle( var_0, var_1 );
|
|
wait( var_7 );
|
|
}
|
|
|
|
var_8 = isdefined( var_2.getout_combat );
|
|
|
|
if ( !var_8 && var_0.standing )
|
|
guy_stand_down( var_0, var_1 );
|
|
else if ( !var_8 && !var_0.vehicle_idling && isdefined( var_0.vehicle_idle ) )
|
|
var_0 waittill( "idle" );
|
|
|
|
var_0.deathanim = undefined;
|
|
var_0.deathanimscript = undefined;
|
|
var_0 notify( "newanim" );
|
|
|
|
if ( isdefined( var_2.bhasgunwhileriding ) && !var_2.bhasgunwhileriding )
|
|
{
|
|
if ( !isdefined( var_0.disable_gun_recall ) )
|
|
var_0 maps\_utility::gun_recall();
|
|
}
|
|
|
|
if ( isai( var_0 ) )
|
|
var_0 pushplayer( 1 );
|
|
|
|
var_9 = 0;
|
|
|
|
if ( isdefined( var_2.bnoanimunload ) )
|
|
var_9 = 1;
|
|
else if ( !isdefined( var_2.getout ) || !isdefined( self.script_unloadmgguy ) && ( isdefined( var_2.bisgunner ) && var_2.bisgunner ) || isdefined( self.script_keepdriver ) && var_1 == 0 )
|
|
{
|
|
thread guy_idle( var_0, var_1 );
|
|
return;
|
|
}
|
|
|
|
if ( var_0 should_give_orghealth() )
|
|
var_0.health = var_0.orghealth;
|
|
|
|
var_0.orghealth = undefined;
|
|
|
|
if ( isai( var_0 ) && isalive( var_0 ) )
|
|
var_0 endon( "death" );
|
|
|
|
var_0.allowdeath = 0;
|
|
|
|
if ( isdefined( var_2.exittag ) )
|
|
var_10 = var_2.exittag;
|
|
else
|
|
var_10 = var_2.sittag;
|
|
|
|
if ( var_8 && var_0.standing )
|
|
var_11 = var_2.getout_combat;
|
|
else if ( isdefined( var_0.get_out_override ) )
|
|
var_11 = var_0.get_out_override;
|
|
else if ( isdefined( var_0.playerpiggyback ) && isdefined( var_2.player_getout ) )
|
|
var_11 = var_2.player_getout;
|
|
else
|
|
var_11 = var_2.getout;
|
|
|
|
if ( !var_9 )
|
|
{
|
|
if ( !isdefined( var_0.parachute_unload ) )
|
|
thread guy_unlink_on_death( var_0 );
|
|
|
|
if ( isdefined( var_2.fastroperig ) )
|
|
{
|
|
if ( !isdefined( self.fastroperig[var_2.fastroperig] ) )
|
|
{
|
|
thread guy_idle( var_0, var_1 );
|
|
var_12 = getout_rigspawn( var_4, var_0.vehicle_position, 0 );
|
|
}
|
|
}
|
|
|
|
if ( isdefined( var_2.getoutsnd ) )
|
|
var_0 thread maps\_utility::play_sound_on_tag( var_2.getoutsnd, "J_Wrist_RI", 1 );
|
|
|
|
if ( isdefined( var_0.playerpiggyback ) && isdefined( var_2.player_getout_sound ) )
|
|
var_0 thread maps\_utility::play_sound_on_entity( var_2.player_getout_sound );
|
|
|
|
if ( isdefined( var_2.getoutloopsnd ) )
|
|
var_0 thread maps\_utility::play_loop_sound_on_tag( var_2.getoutloopsnd );
|
|
|
|
if ( isdefined( var_0.playerpiggyback ) && isdefined( var_2.player_getout_sound_loop ) )
|
|
level.player thread common_scripts\utility::play_loop_sound_on_entity( var_2.player_getout_sound_loop );
|
|
|
|
var_0 notify( "newanim" );
|
|
var_0 notify( "jumping_out" );
|
|
var_13 = 0;
|
|
|
|
if ( !isai( var_0 ) )
|
|
var_13 = 1;
|
|
|
|
if ( !isdefined( var_0.script_stay_drone ) )
|
|
var_0 = guy_becomes_real_ai( var_0, var_1 );
|
|
|
|
if ( !isalive( var_0 ) )
|
|
return;
|
|
|
|
var_0.ragdoll_getout_death = 1;
|
|
|
|
if ( isdefined( var_2.rappel_kill_achievement ) )
|
|
var_0 maps\_utility::enable_achievement_harder_they_fall();
|
|
|
|
if ( isdefined( var_2.ragdoll_getout_death ) )
|
|
{
|
|
var_0.ragdoll_getout_death = 1;
|
|
|
|
if ( isdefined( var_2.ragdoll_fall_anim ) )
|
|
var_0.ragdoll_fall_anim = var_2.ragdoll_fall_anim;
|
|
}
|
|
|
|
if ( var_13 )
|
|
{
|
|
self.riders = common_scripts\utility::array_add( self.riders, var_0 );
|
|
thread guy_deathhandle( var_0, var_1 );
|
|
thread guy_unload_que( var_0 );
|
|
var_0.ridingvehicle = self;
|
|
}
|
|
|
|
if ( isai( var_0 ) )
|
|
var_0 endon( "death" );
|
|
|
|
var_0 notify( "newanim" );
|
|
var_0 notify( "jumping_out" );
|
|
|
|
if ( isdefined( var_2.littlebirde_getout_unlinks ) && var_2.littlebirde_getout_unlinks )
|
|
thread stable_unlink( var_0 );
|
|
|
|
if ( isdefined( var_2.getout_secondary ) )
|
|
{
|
|
animontag( var_0, var_10, var_11 );
|
|
var_14 = var_10;
|
|
|
|
if ( isdefined( var_2.getout_secondary_tag ) )
|
|
var_14 = var_2.getout_secondary_tag;
|
|
|
|
animontag( var_0, var_14, var_2.getout_secondary );
|
|
}
|
|
else if ( isdefined( var_2.parachute_unload ) )
|
|
{
|
|
if ( !isdefined( self.angle_offset ) )
|
|
{
|
|
self.angle_offset = 0;
|
|
self.origin_offset = ( 0, 0, 0 );
|
|
self.unload_delay = 0.5;
|
|
}
|
|
else
|
|
{
|
|
self.unload_delay = self.unload_delay + randomfloatrange( 0.5, 1 );
|
|
wait( self.unload_delay );
|
|
}
|
|
|
|
if ( !isdefined( self ) )
|
|
return;
|
|
|
|
var_15 = spawn( "script_model", self gettagorigin( var_10 ) );
|
|
var_15.angles = ( 0, self.angles[1] + self.angle_offset, 0 );
|
|
self.angle_offset = self.angle_offset + 5;
|
|
var_15 setmodel( "tag_origin" );
|
|
var_16 = maps\_utility::groundpos( self.origin ) + ( 0, 0, self.unload_anim_height );
|
|
var_15.origin = var_16 + ( randomintrange( 10, 20 ), randomintrange( 10, 20 ), 0 );
|
|
var_17 = spawn( "script_model", var_15.origin );
|
|
var_17.angles = var_15.angles;
|
|
var_17 setmodel( self.unload_model );
|
|
var_17.animname = "parachute";
|
|
var_17 useanimtree( level.scr_animtree["parachute"] );
|
|
var_17 hide();
|
|
var_17 maps\_utility::ent_flag_init( "parachute_open" );
|
|
|
|
if ( isdefined( var_2.parachute_function ) )
|
|
var_15 parachute_unload( var_0, var_17, self.unload_model_unload_anim, var_11, var_2.parachute_function );
|
|
else
|
|
var_15 parachute_unload( var_0, var_17, self.unload_model_unload_anim, var_11 );
|
|
|
|
var_15 delete();
|
|
}
|
|
else
|
|
{
|
|
var_0.anim_end_early = 1;
|
|
animontag( var_0, var_10, var_11 );
|
|
}
|
|
|
|
if ( isdefined( var_0.playerpiggyback ) && isdefined( var_2.player_getout_sound_loop ) )
|
|
level.player thread common_scripts\utility::stop_loop_sound_on_entity( var_2.player_getout_sound_loop );
|
|
|
|
if ( isdefined( var_2.getoutloopsnd ) )
|
|
var_0 thread common_scripts\utility::stop_loop_sound_on_entity( var_2.getoutloopsnd );
|
|
|
|
if ( isdefined( var_0.playerpiggyback ) && isdefined( var_2.player_getout_sound_end ) )
|
|
level.player thread maps\_utility::play_sound_on_entity( var_2.player_getout_sound_end );
|
|
}
|
|
else if ( !isai( var_0 ) )
|
|
{
|
|
if ( var_0.drone_delete_on_unload == 1 )
|
|
{
|
|
var_0 delete();
|
|
return;
|
|
}
|
|
|
|
var_0 = maps\_utility::makerealai( var_0 );
|
|
}
|
|
|
|
self.riders = common_scripts\utility::array_remove( self.riders, var_0 );
|
|
self.usedpositions[var_1] = 0;
|
|
var_0.ridingvehicle = undefined;
|
|
var_0.drivingvehicle = undefined;
|
|
|
|
if ( !isalive( self ) && !isdefined( var_2.unload_ondeath ) )
|
|
{
|
|
var_0 delete();
|
|
return;
|
|
}
|
|
|
|
var_0 unlink();
|
|
|
|
if ( !isdefined( var_0.magic_bullet_shield ) )
|
|
var_0.allowdeath = 1;
|
|
|
|
if ( isalive( var_0 ) )
|
|
{
|
|
if ( isai( var_0 ) )
|
|
var_0.a.disablelongdeath = !var_0 isbadguy();
|
|
|
|
var_0.forced_startingposition = undefined;
|
|
var_0 notify( "jumpedout" );
|
|
var_0 maps\_utility::disable_achievement_harder_they_fall();
|
|
|
|
if ( isai( var_0 ) )
|
|
{
|
|
if ( isdefined( var_2.getoutstance ) )
|
|
{
|
|
var_0.desired_anim_pose = var_2.getoutstance;
|
|
var_0 allowedstances( "crouch" );
|
|
var_0 thread animscripts\utility::updateanimpose();
|
|
var_0 allowedstances( "stand", "crouch", "prone" );
|
|
}
|
|
|
|
var_0 pushplayer( 0 );
|
|
|
|
if ( guy_resets_goalpos( var_0 ) )
|
|
{
|
|
var_0.goalradius = 600;
|
|
var_0 setgoalpos( var_0.origin );
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( isdefined( var_2.getout_delete ) && var_2.getout_delete )
|
|
{
|
|
var_0 delete();
|
|
return;
|
|
}
|
|
|
|
var_0 guy_cleanup_vehiclevars();
|
|
}
|
|
|
|
parachute_unload( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
var_0 unlink();
|
|
var_5 = var_1 gettagorigin( "tag_driver" );
|
|
var_6 = var_1 gettagangles( "tag_driver" );
|
|
var_0 forceteleport( var_5, var_6 );
|
|
var_0 linkto( var_1, "tag_driver" );
|
|
var_1 animscripted( "parachute_unload", self.origin, self.angles, var_2 );
|
|
|
|
if ( isdefined( var_4 ) )
|
|
var_1 thread parachute_notetrack_logic( "parachute_unload", "show_parachute", var_4 );
|
|
else
|
|
var_1 thread parachute_notetrack_logic( "parachute_unload", "show_parachute" );
|
|
|
|
var_0 animscripted( "parachute_unload", var_0.origin, var_0.angles, var_3 );
|
|
level thread parachute_death_monitor( var_0, var_1 );
|
|
var_1 waittillmatch( "parachute_unload", "end" );
|
|
var_1 notify( "parachute_landed" );
|
|
|
|
if ( isalive( var_0 ) )
|
|
var_0 unlink();
|
|
}
|
|
|
|
parachute_movement( var_0 )
|
|
{
|
|
var_1 = anglestoforward( var_0.angles );
|
|
var_2 = vectornormalize( common_scripts\utility::flat_angle( var_1 ) );
|
|
var_3 = self.origin + var_2 * 10000;
|
|
thread maps\_utility::draw_line_from_ent_for_time( self, var_3, 1, 0, 0, 10 );
|
|
self moveto( var_3, 1 );
|
|
}
|
|
|
|
parachute_death_monitor( var_0, var_1 )
|
|
{
|
|
var_1 endon( "parachute_landed" );
|
|
|
|
if ( isdefined( var_0.magic_bullet_shield ) && var_0.magic_bullet_shield )
|
|
return;
|
|
|
|
if ( !isai( var_0 ) )
|
|
var_0 setcandamage( 1 );
|
|
|
|
var_2 = undefined;
|
|
var_3 = undefined;
|
|
|
|
for (;;)
|
|
{
|
|
var_0 waittill( "damage", var_2, var_3 );
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
continue;
|
|
|
|
if ( var_2 < 1 )
|
|
continue;
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
continue;
|
|
|
|
if ( isplayer( var_3 ) )
|
|
break;
|
|
}
|
|
|
|
if ( !var_1 maps\_utility::ent_flag( "parachute_open" ) )
|
|
{
|
|
var_1 notify( "rider_dead" );
|
|
thread animontag_ragdoll_death_fall( var_0, undefined, var_3 );
|
|
wait 2;
|
|
var_1 delete();
|
|
}
|
|
else
|
|
iprintln( "parachute death anim here!" );
|
|
}
|
|
|
|
parachute_notetrack_logic( var_0, var_1, var_2 )
|
|
{
|
|
self endon( "rider_dead" );
|
|
self waittillmatch( var_0, var_1 );
|
|
|
|
if ( isdefined( var_2 ) )
|
|
self thread [[ var_2 ]]();
|
|
|
|
maps\_utility::ent_flag_set( "parachute_open" );
|
|
}
|
|
|
|
guy_resets_goalpos( var_0 )
|
|
{
|
|
if ( isdefined( var_0.script_delayed_playerseek ) )
|
|
return 0;
|
|
|
|
if ( var_0 maps\_utility::has_color() )
|
|
return 0;
|
|
|
|
if ( isdefined( var_0.qsetgoalpos ) )
|
|
return 0;
|
|
|
|
if ( !isdefined( var_0.target ) )
|
|
return 1;
|
|
|
|
var_1 = getnodearray( var_0.target, "targetname" );
|
|
|
|
if ( var_1.size > 1 )
|
|
return 0;
|
|
|
|
var_2 = getent( var_0.target, "targetname" );
|
|
|
|
if ( isdefined( var_2 ) && var_2.classname == "info_volume" )
|
|
{
|
|
var_0 setgoalvolumeauto( var_2 );
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
animontag( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
var_0 notify( "animontag_thread" );
|
|
var_0 endon( "animontag_thread" );
|
|
|
|
if ( !isdefined( var_5 ) )
|
|
var_5 = "animontagdone";
|
|
|
|
if ( isdefined( self.modeldummy ) )
|
|
var_6 = self.modeldummy;
|
|
else
|
|
var_6 = self;
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
{
|
|
var_7 = var_0.origin;
|
|
var_8 = var_0.angles;
|
|
}
|
|
else
|
|
{
|
|
var_7 = var_6 gettagorigin( var_1 );
|
|
var_8 = var_6 gettagangles( var_1 );
|
|
}
|
|
|
|
if ( isdefined( var_0.ragdoll_getout_death ) && !isdefined( var_0.no_vehicle_ragdoll ) )
|
|
level thread animontag_ragdoll_death( var_0, self );
|
|
|
|
var_0 animscripted( var_5, var_7, var_8, var_2 );
|
|
|
|
if ( isai( var_0 ) )
|
|
thread donotetracks( var_0, var_6, var_5 );
|
|
|
|
if ( isdefined( var_0.anim_end_early ) )
|
|
{
|
|
var_0.anim_end_early = undefined;
|
|
var_9 = getanimlength( var_2 ) - 0.25;
|
|
|
|
if ( var_9 > 0 )
|
|
wait( var_9 );
|
|
|
|
var_0 stopanimscripted();
|
|
var_0.interval = 0;
|
|
var_0 thread recover_interval();
|
|
}
|
|
else
|
|
{
|
|
if ( isdefined( var_3 ) )
|
|
{
|
|
for ( var_10 = 0; var_10 < var_3.size; var_10++ )
|
|
{
|
|
var_0 waittillmatch( var_5, var_3[var_10] );
|
|
var_0 thread [[ var_4[var_10] ]]();
|
|
}
|
|
}
|
|
|
|
var_0 waittillmatch( var_5, "end" );
|
|
}
|
|
|
|
var_0 notify( "anim_on_tag_done" );
|
|
var_0.ragdoll_getout_death = undefined;
|
|
}
|
|
|
|
recover_interval()
|
|
{
|
|
self endon( "death" );
|
|
wait 2;
|
|
|
|
if ( self.interval == 0 )
|
|
self.interval = 80;
|
|
}
|
|
|
|
animontag_ragdoll_death( var_0, var_1 )
|
|
{
|
|
if ( isdefined( var_0.magic_bullet_shield ) && var_0.magic_bullet_shield )
|
|
return;
|
|
|
|
if ( !isai( var_0 ) )
|
|
var_0 setcandamage( 1 );
|
|
|
|
var_0 endon( "anim_on_tag_done" );
|
|
var_2 = undefined;
|
|
var_3 = undefined;
|
|
var_4 = var_1.health <= 0;
|
|
|
|
for (;;)
|
|
{
|
|
if ( !var_4 && !( isdefined( var_1 ) && var_1.health > 0 ) )
|
|
break;
|
|
|
|
var_0 waittill( "damage", var_2, var_3 );
|
|
|
|
if ( isdefined( var_0.forcefallthroughonropes ) )
|
|
break;
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
continue;
|
|
|
|
if ( var_2 < 1 )
|
|
continue;
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
continue;
|
|
|
|
if ( isplayer( var_3 ) )
|
|
break;
|
|
}
|
|
|
|
if ( !isalive( var_0 ) )
|
|
return;
|
|
|
|
thread animontag_ragdoll_death_fall( var_0, var_1, var_3 );
|
|
}
|
|
|
|
animontag_ragdoll_death_fall( var_0, var_1, var_2 )
|
|
{
|
|
var_0.deathanim = undefined;
|
|
var_0.deathfunction = undefined;
|
|
var_0.anim_disablepain = 1;
|
|
|
|
if ( isdefined( var_0.ragdoll_fall_anim ) )
|
|
{
|
|
var_3 = getmovedelta( var_0.ragdoll_fall_anim, 0, 1 );
|
|
var_4 = physicstrace( var_0.origin + ( 0, 0, 16 ), var_0.origin - ( 0, 0, 10000 ) );
|
|
var_5 = distance( var_0.origin + ( 0, 0, 16 ), var_4 );
|
|
|
|
if ( abs( var_3[2] + 16 ) <= abs( var_5 ) )
|
|
{
|
|
var_0 thread maps\_utility::play_sound_on_entity( "generic_death_falling" );
|
|
var_0 animscripted( "fastrope_fall", var_0.origin, var_0.angles, var_0.ragdoll_fall_anim );
|
|
var_0 waittillmatch( "fastrope_fall", "start_ragdoll" );
|
|
}
|
|
}
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
return;
|
|
|
|
var_0.deathanim = undefined;
|
|
var_0.deathfunction = undefined;
|
|
var_0.anim_disablepain = 1;
|
|
var_0 notify( "rope_death", var_2 );
|
|
maps\_spawner::death_achievements_rappel( var_2 );
|
|
var_0 kill( var_2.origin, var_2 );
|
|
|
|
if ( isdefined( var_0.script_stay_drone ) )
|
|
{
|
|
var_0 notsolid();
|
|
var_6 = getweaponmodel( var_0.weapon );
|
|
var_7 = var_0.weapon;
|
|
|
|
if ( isdefined( var_6 ) )
|
|
{
|
|
var_0 detach( var_6, "tag_weapon_right" );
|
|
var_8 = var_0 gettagorigin( "tag_weapon_right" );
|
|
var_9 = var_0 gettagangles( "tag_weapon_right" );
|
|
level.gun = spawn( "weapon_" + var_7, ( 0, 0, 0 ) );
|
|
level.gun.angles = var_9;
|
|
level.gun.origin = var_8;
|
|
}
|
|
}
|
|
else
|
|
var_0 animscripts\shared::dropallaiweapons();
|
|
|
|
var_0 startragdoll();
|
|
}
|
|
|
|
donotetracks( var_0, var_1, var_2 )
|
|
{
|
|
var_0 endon( "newanim" );
|
|
var_1 endon( "death" );
|
|
var_0 endon( "death" );
|
|
var_0 animscripts\shared::donotetracks( var_2 );
|
|
}
|
|
|
|
animatemoveintoplace( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_0 animscripted( "movetospot", var_1, var_2, var_3 );
|
|
var_0 waittillmatch( "movetospot", "end" );
|
|
}
|
|
|
|
guy_vehicle_death( var_0, var_1, var_2 )
|
|
{
|
|
if ( !isalive( var_0 ) )
|
|
return;
|
|
|
|
if ( isdefined( self.no_rider_death ) )
|
|
return;
|
|
|
|
var_3 = anim_pos( self, var_0.vehicle_position );
|
|
var_0.vehicle_attacker = var_1;
|
|
|
|
if ( isdefined( var_3.explosion_death ) )
|
|
return guy_blowup( var_0 );
|
|
|
|
if ( isdefined( level.vehicle_rider_death_func ) && isdefined( level.vehicle_rider_death_func[self.classname] ) )
|
|
{
|
|
self [[ level.vehicle_rider_death_func[self.classname] ]]();
|
|
return;
|
|
}
|
|
|
|
if ( isdefined( var_3.unload_ondeath ) && isdefined( self ) )
|
|
{
|
|
if ( isdefined( self.dontunloadondeath ) && self.dontunloadondeath )
|
|
return;
|
|
|
|
thread guy_idle( var_0, var_0.vehicle_position, 1 );
|
|
wait( var_3.unload_ondeath );
|
|
|
|
if ( isdefined( var_0 ) && isdefined( self ) )
|
|
{
|
|
self.groupedanim_pos = var_0.vehicle_position;
|
|
maps\_vehicle::vehicle_ai_event( "unload" );
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
if ( isdefined( var_0.ragdoll_getout_death ) && var_2 != "bm21_troops" )
|
|
return;
|
|
|
|
[[ level.global_kill_func ]]( "MOD_RIFLE_BULLET", "torso_upper", var_0.origin );
|
|
|
|
if ( var_2 == "bm21_troops" )
|
|
{
|
|
var_0.allowdeath = 1;
|
|
var_0 kill();
|
|
return;
|
|
}
|
|
|
|
var_0 delete();
|
|
}
|
|
}
|
|
|
|
guy_turn_right_check( var_0, var_1 )
|
|
{
|
|
return isdefined( anim_pos( self, var_1 ).turn_right );
|
|
}
|
|
|
|
guy_turn_right( var_0, var_1 )
|
|
{
|
|
var_0 endon( "newanim" );
|
|
self endon( "death" );
|
|
var_0 endon( "death" );
|
|
var_2 = anim_pos( self, var_1 );
|
|
|
|
if ( isdefined( var_2.vehicle_turn_right ) )
|
|
thread setanimrestart_once( var_2.vehicle_turn_right );
|
|
|
|
animontag( var_0, var_2.sittag, var_2.turn_right );
|
|
thread guy_idle( var_0, var_1 );
|
|
}
|
|
|
|
guy_turn_left( var_0, var_1 )
|
|
{
|
|
var_0 endon( "newanim" );
|
|
self endon( "death" );
|
|
var_0 endon( "death" );
|
|
var_2 = anim_pos( self, var_1 );
|
|
|
|
if ( isdefined( var_2.vehicle_turn_left ) )
|
|
thread setanimrestart_once( var_2.vehicle_turn_left );
|
|
|
|
animontag( var_0, var_2.sittag, var_2.turn_left );
|
|
thread guy_idle( var_0, var_1 );
|
|
}
|
|
|
|
guy_turn_left_check( var_0, var_1 )
|
|
{
|
|
return isdefined( anim_pos( self, var_1 ).turn_left );
|
|
}
|
|
|
|
guy_turn_hardright( var_0, var_1 )
|
|
{
|
|
var_2 = level.vehicle_aianims[self.classname][var_1];
|
|
|
|
if ( isdefined( var_2.idle_hardright ) )
|
|
var_0.vehicle_idle_override = var_2.idle_hardright;
|
|
}
|
|
|
|
guy_turn_hardleft( var_0, var_1 )
|
|
{
|
|
var_2 = level.vehicle_aianims[self.classname][var_1];
|
|
|
|
if ( isdefined( var_2.idle_hardleft ) )
|
|
var_0.vehicle_idle_override = var_2.idle_hardleft;
|
|
}
|
|
|
|
ai_wait_go()
|
|
{
|
|
self endon( "death" );
|
|
self waittill( "loaded" );
|
|
maps\_vehicle::gopath( self );
|
|
}
|
|
|
|
set_pos( var_0, var_1 )
|
|
{
|
|
var_2 = var_0.script_startingposition;
|
|
|
|
if ( isdefined( var_0.forced_startingposition ) )
|
|
var_2 = var_0.forced_startingposition;
|
|
|
|
if ( isdefined( var_2 ) )
|
|
return var_2;
|
|
|
|
for ( var_3 = 0; var_3 < self.usedpositions.size; var_3++ )
|
|
{
|
|
if ( self.usedpositions[var_3] )
|
|
continue;
|
|
|
|
return var_3;
|
|
}
|
|
|
|
if ( isdefined( var_0.script_vehicleride ) )
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
guy_man_turret( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = anim_pos( self, var_1 );
|
|
var_4 = self.mgturret[var_3.mgturret];
|
|
|
|
if ( !isalive( var_0 ) )
|
|
return;
|
|
|
|
var_4 endon( "death" );
|
|
var_0 endon( "death" );
|
|
|
|
if ( isdefined( var_2 ) && var_2 && isdefined( var_3.passenger_2_turret_func ) )
|
|
[[ var_3.passenger_2_turret_func ]]( self, var_0, var_1, var_4 );
|
|
|
|
maps\_vehicle_code::set_turret_team( var_4 );
|
|
var_4 setdefaultdroppitch( 0 );
|
|
wait 0.1;
|
|
var_0 endon( "guy_man_turret_stop" );
|
|
level thread maps\_mgturret::mg42_setdifficulty( var_4, maps\_utility::getdifficulty() );
|
|
var_4 setturretignoregoals( 1 );
|
|
|
|
for (;;)
|
|
{
|
|
if ( !isdefined( var_0 getturret() ) )
|
|
var_0 useturret( var_4 );
|
|
|
|
wait 1;
|
|
}
|
|
}
|
|
|
|
guy_unlink_on_death( var_0 )
|
|
{
|
|
var_0 endon( "jumpedout" );
|
|
var_0 waittill( "death" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_0 unlink();
|
|
}
|
|
|
|
guy_blowup( var_0 )
|
|
{
|
|
if ( !isdefined( var_0.vehicle_position ) )
|
|
return;
|
|
|
|
var_1 = var_0.vehicle_position;
|
|
var_2 = anim_pos( self, var_1 );
|
|
|
|
if ( !isdefined( var_2.explosion_death ) )
|
|
return;
|
|
|
|
[[ level.global_kill_func ]]( "MOD_RIFLE_BULLET", "torso_upper", var_0.origin );
|
|
var_0.deathanim = var_2.explosion_death;
|
|
var_3 = self.angles;
|
|
var_4 = var_0.origin;
|
|
|
|
if ( isdefined( var_2.explosion_death_offset ) )
|
|
{
|
|
var_4 = var_4 + anglestoforward( var_3 ) * var_2.explosion_death_offset[0];
|
|
var_4 = var_4 + anglestoright( var_3 ) * var_2.explosion_death_offset[1];
|
|
var_4 = var_4 + anglestoup( var_3 ) * var_2.explosion_death_offset[2];
|
|
}
|
|
|
|
var_0 = convert_guy_to_drone( var_0 );
|
|
detach_models_with_substr( var_0, "weapon_" );
|
|
var_0 notsolid();
|
|
var_0.origin = var_4;
|
|
var_0.angles = var_3;
|
|
var_0 animscripted( "deathanim", var_4, var_3, var_2.explosion_death );
|
|
var_5 = 0.3;
|
|
|
|
if ( isdefined( var_2.explosion_death_ragdollfraction ) )
|
|
var_5 = var_2.explosion_death_ragdollfraction;
|
|
|
|
var_6 = getanimlength( var_2.explosion_death );
|
|
var_7 = gettime() + var_6 * 1000;
|
|
wait( var_6 * var_5 );
|
|
var_8 = ( 0, 0, 1 );
|
|
var_9 = var_0.origin;
|
|
|
|
if ( getdvar( "ragdoll_enable" ) == "0" )
|
|
{
|
|
var_0 delete();
|
|
return;
|
|
}
|
|
|
|
if ( isai( var_0 ) )
|
|
var_0 animscripts\shared::dropallaiweapons();
|
|
else
|
|
detach_models_with_substr( var_0, "weapon_" );
|
|
|
|
while ( !var_0 isragdoll() && gettime() < var_7 )
|
|
{
|
|
var_9 = var_0.origin;
|
|
wait 0.05;
|
|
var_8 = var_0.origin - var_9;
|
|
var_0 startragdoll();
|
|
}
|
|
|
|
wait 0.05;
|
|
var_8 = var_8 * 20000;
|
|
|
|
for ( var_10 = 0; var_10 < 3; var_10++ )
|
|
{
|
|
if ( isdefined( var_0 ) )
|
|
var_9 = var_0.origin;
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
if ( !var_0 isragdoll() )
|
|
var_0 delete();
|
|
}
|
|
|
|
convert_guy_to_drone( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 0;
|
|
|
|
var_2 = spawn( "script_model", var_0.origin );
|
|
var_2.angles = var_0.angles;
|
|
var_2 setmodel( var_0.model );
|
|
var_3 = var_0 getattachsize();
|
|
|
|
for ( var_4 = 0; var_4 < var_3; var_4++ )
|
|
var_2 attach( var_0 getattachmodelname( var_4 ), var_0 getattachtagname( var_4 ) );
|
|
|
|
var_2 useanimtree( #animtree );
|
|
|
|
if ( isdefined( var_0.team ) )
|
|
var_2.team = var_0.team;
|
|
|
|
if ( !var_1 )
|
|
var_0 delete();
|
|
|
|
var_2 makefakeai();
|
|
return var_2;
|
|
}
|
|
|
|
vehicle_animate( var_0, var_1 )
|
|
{
|
|
self useanimtree( var_1 );
|
|
self setanim( var_0 );
|
|
}
|
|
|
|
vehicle_getinstart( var_0 )
|
|
{
|
|
var_1 = anim_pos( self, var_0 );
|
|
return vehicle_getanimstart( var_1.getin, var_1.sittag, var_0 );
|
|
}
|
|
|
|
vehicle_getanimstart( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = spawnstruct();
|
|
var_4 = undefined;
|
|
var_5 = undefined;
|
|
var_6 = self gettagorigin( var_1 );
|
|
var_7 = self gettagangles( var_1 );
|
|
var_4 = getstartorigin( var_6, var_7, var_0 );
|
|
var_5 = getstartangles( var_6, var_7, var_0 );
|
|
var_3.origin = var_4;
|
|
var_3.angles = var_5;
|
|
var_3.vehicle_position = var_2;
|
|
return var_3;
|
|
}
|
|
|
|
is_position_in_group( var_0, var_1, var_2 )
|
|
{
|
|
if ( !isdefined( var_2 ) )
|
|
return 1;
|
|
|
|
var_3 = var_0.classname;
|
|
var_4 = level.vehicle_unloadgroups[var_3][var_2];
|
|
|
|
foreach ( var_6 in var_4 )
|
|
{
|
|
if ( var_6 == var_1 )
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
get_availablepositions( var_0 )
|
|
{
|
|
var_1 = level.vehicle_aianims[self.classname];
|
|
var_2 = [];
|
|
var_3 = [];
|
|
|
|
for ( var_4 = 0; var_4 < self.usedpositions.size; var_4++ )
|
|
{
|
|
if ( self.usedpositions[var_4] )
|
|
continue;
|
|
|
|
if ( isdefined( var_1[var_4].getin ) && is_position_in_group( self, var_4, var_0 ) )
|
|
{
|
|
var_2[var_2.size] = vehicle_getinstart( var_4 );
|
|
continue;
|
|
}
|
|
|
|
var_3[var_3.size] = var_4;
|
|
}
|
|
|
|
var_5 = spawnstruct();
|
|
var_5.availablepositions = var_2;
|
|
var_5.nonanimatedpositions = var_3;
|
|
return var_5;
|
|
}
|
|
|
|
getanimatemodel()
|
|
{
|
|
if ( isdefined( self.modeldummy ) )
|
|
return self.modeldummy;
|
|
else
|
|
return self;
|
|
}
|
|
|
|
detach_models_with_substr( var_0, var_1 )
|
|
{
|
|
var_2 = var_0 getattachsize();
|
|
var_3 = [];
|
|
var_4 = [];
|
|
var_5 = 0;
|
|
|
|
for ( var_6 = 0; var_6 < var_2; var_6++ )
|
|
{
|
|
var_7 = var_0 getattachmodelname( var_6 );
|
|
var_8 = var_0 getattachtagname( var_6 );
|
|
|
|
if ( issubstr( var_7, var_1 ) )
|
|
{
|
|
var_3[var_5] = var_7;
|
|
var_4[var_5] = var_8;
|
|
}
|
|
}
|
|
|
|
for ( var_6 = 0; var_6 < var_3.size; var_6++ )
|
|
var_0 detach( var_3[var_6], var_4[var_6] );
|
|
}
|
|
|
|
should_give_orghealth()
|
|
{
|
|
if ( !isai( self ) )
|
|
return 0;
|
|
|
|
if ( !isdefined( self.orghealth ) )
|
|
return 0;
|
|
|
|
return !isdefined( self.magic_bullet_shield );
|
|
}
|
|
|
|
guy_pre_unload_check( var_0, var_1 )
|
|
{
|
|
return isdefined( anim_pos( self, var_1 ).pre_unload );
|
|
}
|
|
|
|
guy_pre_unload( var_0, var_1 )
|
|
{
|
|
var_2 = anim_pos( self, var_1 );
|
|
|
|
if ( !isdefined( var_2.pre_unload ) )
|
|
return;
|
|
|
|
var_0 endon( "newanim" );
|
|
self endon( "death" );
|
|
var_0 endon( "death" );
|
|
animontag( var_0, var_2.sittag, var_2.pre_unload );
|
|
|
|
for (;;)
|
|
animontag( var_0, var_2.sittag, var_2.pre_unload_idle );
|
|
}
|
|
|
|
guy_idle_alert( var_0, var_1 )
|
|
{
|
|
var_2 = anim_pos( self, var_1 );
|
|
|
|
if ( !isdefined( var_2.idle_alert ) )
|
|
return;
|
|
|
|
var_0 endon( "newanim" );
|
|
self endon( "death" );
|
|
var_0 endon( "death" );
|
|
|
|
for (;;)
|
|
animontag( var_0, var_2.sittag, var_2.idle_alert );
|
|
}
|
|
|
|
guy_idle_alert_check( var_0, var_1 )
|
|
{
|
|
return isdefined( anim_pos( self, var_1 ).idle_alert );
|
|
}
|
|
|
|
guy_idle_alert_to_casual( var_0, var_1 )
|
|
{
|
|
var_2 = anim_pos( self, var_1 );
|
|
|
|
if ( !isdefined( var_2.idle_alert ) )
|
|
return;
|
|
|
|
var_0 endon( "newanim" );
|
|
self endon( "death" );
|
|
var_0 endon( "death" );
|
|
animontag( var_0, var_2.sittag, var_2.idle_alert_to_casual );
|
|
thread guy_idle( var_0, var_1 );
|
|
}
|
|
|
|
guy_idle_alert_to_casual_check( var_0, var_1 )
|
|
{
|
|
return isdefined( anim_pos( self, var_1 ).idle_alert_to_casual );
|
|
}
|
|
|
|
stable_unlink( var_0 )
|
|
{
|
|
self waittill( "stable_for_unlink" );
|
|
|
|
if ( isalive( var_0 ) )
|
|
var_0 unlink();
|
|
}
|
|
|
|
track_entered_vehicle()
|
|
{
|
|
|
|
}
|
|
|
|
animate_guys( var_0 )
|
|
{
|
|
var_1 = [];
|
|
|
|
foreach ( var_3 in self.riders )
|
|
{
|
|
if ( !isalive( var_3 ) )
|
|
continue;
|
|
|
|
if ( isdefined( level.vehicle_aianimcheck[var_0] ) && ![[ level.vehicle_aianimcheck[var_0] ]]( var_3, var_3.vehicle_position ) )
|
|
continue;
|
|
|
|
if ( isdefined( level.vehicle_aianimthread[var_0] ) )
|
|
{
|
|
var_3 notify( "newanim" );
|
|
var_3.queued_anim_threads = [];
|
|
thread [[ level.vehicle_aianimthread[var_0] ]]( var_3, var_3.vehicle_position );
|
|
var_1[var_1.size] = var_3;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
guy_cleanup_vehiclevars()
|
|
{
|
|
self.vehicle_idling = undefined;
|
|
self.standing = undefined;
|
|
self.vehicle_position = undefined;
|
|
self.delay = undefined;
|
|
}
|
|
|
|
delete_corpses_around_vehicle()
|
|
{
|
|
var_0 = self getcentroid();
|
|
var_1 = self getpointinbounds( 1, 0, 0 );
|
|
var_2 = distance( var_1, var_0 );
|
|
var_3 = getcorpsearray();
|
|
|
|
foreach ( var_5 in var_3 )
|
|
{
|
|
if ( distance( var_5.origin, var_0 ) < var_2 )
|
|
var_5 delete();
|
|
}
|
|
}
|