925 lines
24 KiB
Plaintext
925 lines
24 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
drone_spawn()
|
|
{
|
|
var_0 = drones_request( 1 );
|
|
|
|
if ( var_0 )
|
|
{
|
|
var_1 = maps\_utility::spawn_ai();
|
|
var_1 thread drones_death_watcher();
|
|
return var_1;
|
|
}
|
|
|
|
return undefined;
|
|
}
|
|
|
|
drones_request( var_0 )
|
|
{
|
|
var_1 = spawnstruct();
|
|
var_1.requestamount = var_0;
|
|
level.dronequeue[level.dronequeue.size] = var_1;
|
|
var_1 waittill( "drones_granted", var_2 );
|
|
|
|
if ( getdvarint( "daniel" ) )
|
|
iprintln( "drones granted : " + var_2 );
|
|
|
|
return var_2;
|
|
}
|
|
|
|
drones_request_queue()
|
|
{
|
|
for (;;)
|
|
{
|
|
while ( level.dronequeue.size == 0 )
|
|
wait 0.05;
|
|
|
|
var_0 = level.dronequeue[0];
|
|
drones_request_think( var_0 );
|
|
level.dronequeue = common_scripts\utility::array_remove( level.dronequeue, var_0 );
|
|
}
|
|
}
|
|
|
|
drones_request_think( var_0 )
|
|
{
|
|
var_1 = var_0.requestamount;
|
|
|
|
if ( getdvarint( "daniel" ) )
|
|
iprintln( "drones requested : " + var_1 );
|
|
|
|
var_2 = level.availabledrones - var_1;
|
|
|
|
if ( var_2 < 0 )
|
|
{
|
|
var_3 = level.availabledrones;
|
|
level.availabledrones = 0;
|
|
}
|
|
else
|
|
{
|
|
level.availabledrones = level.availabledrones - var_1;
|
|
var_3 = var_1;
|
|
}
|
|
|
|
var_0 notify( "drones_granted", var_3 );
|
|
}
|
|
|
|
drones_death_watcher()
|
|
{
|
|
common_scripts\utility::waittill_any( "death", "deleted" );
|
|
level.availabledrones++;
|
|
}
|
|
|
|
drones_request_init()
|
|
{
|
|
level.dronequeue = [];
|
|
level.availabledrones = 35;
|
|
thread drones_request_queue();
|
|
}
|
|
|
|
drone_move_custom( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "drone_stop" );
|
|
wait 0.05;
|
|
var_1 = maps\_drone::getpatharray( var_0, self.origin );
|
|
var_2 = level.drone_anims[self.team]["stand"]["run"];
|
|
|
|
if ( isdefined( self.runanim ) )
|
|
var_2 = self.runanim;
|
|
|
|
var_3 = maps\_drone::get_anim_data( var_2 );
|
|
var_4 = var_3.run_speed;
|
|
var_5 = var_3.anim_relative;
|
|
|
|
if ( isdefined( self.drone_move_callback ) )
|
|
{
|
|
var_3 = [[ self.drone_move_callback ]]();
|
|
|
|
if ( isdefined( var_3 ) )
|
|
{
|
|
var_2 = var_3.runanim;
|
|
var_4 = var_3.run_speed;
|
|
var_5 = var_3.anim_relative;
|
|
}
|
|
|
|
var_3 = undefined;
|
|
}
|
|
|
|
if ( !var_5 )
|
|
thread maps\_drone::drone_move_z( var_4 );
|
|
|
|
maps\_drone::drone_play_looping_anim( var_2, self.moveplaybackrate );
|
|
var_6 = 0.5;
|
|
var_7 = 0;
|
|
self.started_moving = 1;
|
|
self.cur_node = var_1[var_7];
|
|
var_8 = 0;
|
|
var_9 = undefined;
|
|
|
|
for (;;)
|
|
{
|
|
if ( !isdefined( var_1[var_7] ) )
|
|
break;
|
|
|
|
var_10 = var_1[var_7]["vec"];
|
|
var_11 = self.origin - var_1[var_7]["origin"];
|
|
var_12 = vectordot( vectornormalize( var_10 ), var_11 );
|
|
|
|
if ( !isdefined( var_1[var_7]["dist"] ) )
|
|
break;
|
|
|
|
var_13 = level.drone_lookahead_value;
|
|
|
|
if ( isdefined( self.drone_lookahead_value ) )
|
|
var_13 = self.drone_lookahead_value;
|
|
|
|
var_14 = var_12 + var_13;
|
|
|
|
while ( var_14 > var_1[var_7]["dist"] )
|
|
{
|
|
var_14 = var_14 - var_1[var_7]["dist"];
|
|
var_7++;
|
|
self.cur_node = var_1[var_7];
|
|
|
|
if ( !isdefined( var_1[var_7]["dist"] ) )
|
|
{
|
|
self rotateto( vectortoangles( var_1[var_1.size - 1]["vec"] ), var_6 );
|
|
var_15 = distance( self.origin, var_1[var_1.size - 1]["origin"] );
|
|
var_16 = var_15 / ( var_4 * self.moveplaybackrate );
|
|
var_17 = var_1[var_1.size - 1]["origin"] + ( 0, 0, 100 );
|
|
var_18 = var_1[var_1.size - 1]["origin"] - ( 0, 0, 100 );
|
|
var_19 = physicstrace( var_17, var_18 );
|
|
|
|
if ( getdvar( "debug_drones" ) == "1" )
|
|
{
|
|
thread common_scripts\utility::draw_line_for_time( var_17, var_18, 1, 1, 1, var_6 );
|
|
thread common_scripts\utility::draw_line_for_time( self.origin, var_19, 0, 0, 1, var_6 );
|
|
}
|
|
|
|
self moveto( var_19, var_16 );
|
|
wait( var_16 );
|
|
self notify( "goal" );
|
|
|
|
if ( isdefined( self.cur_node["script_noteworthy"] ) )
|
|
drone_traverse_check();
|
|
|
|
if ( !isdefined( self.skipdelete ) )
|
|
{
|
|
cur_node_check_delete();
|
|
thread maps\_drone::check_delete();
|
|
}
|
|
|
|
thread maps\_drone::drone_idle( var_1[var_1.size - 1], var_19 );
|
|
return;
|
|
}
|
|
|
|
if ( !isdefined( var_1[var_7] ) )
|
|
{
|
|
self notify( "goal" );
|
|
|
|
if ( isdefined( self.cur_node["script_noteworthy"] ) )
|
|
drone_traverse_check();
|
|
|
|
thread maps\_drone::drone_idle();
|
|
return;
|
|
}
|
|
}
|
|
|
|
if ( isdefined( self.drone_move_callback ) )
|
|
{
|
|
var_3 = [[ self.drone_move_callback ]]();
|
|
|
|
if ( isdefined( var_3 ) )
|
|
{
|
|
var_2 = var_3.runanim;
|
|
|
|
if ( var_3.runanim != var_2 )
|
|
{
|
|
var_4 = var_3.run_speed;
|
|
var_5 = var_3.anim_relative;
|
|
|
|
if ( !var_5 )
|
|
thread maps\_drone::drone_move_z( var_4 );
|
|
else
|
|
self notify( "drone_move_z" );
|
|
|
|
maps\_drone::drone_play_looping_anim( var_2, self.moveplaybackrate );
|
|
}
|
|
}
|
|
}
|
|
|
|
self.cur_node = var_1[var_7];
|
|
var_20 = var_1[var_7]["vec"] * var_14;
|
|
var_20 = var_20 + var_1[var_7]["origin"];
|
|
var_21 = var_20;
|
|
var_17 = var_21 + ( 0, 0, 100 );
|
|
var_18 = var_21 - ( 0, 0, 100 );
|
|
var_21 = physicstrace( var_17, var_18 );
|
|
|
|
if ( !var_5 )
|
|
self.drone_look_ahead_point = var_21;
|
|
|
|
if ( getdvar( "debug_drones" ) == "1" )
|
|
{
|
|
thread common_scripts\utility::draw_line_for_time( var_17, var_18, 1, 1, 1, var_6 );
|
|
thread maps\_drone::draw_point( var_21, 1, 0, 0, 16, var_6 );
|
|
}
|
|
|
|
var_22 = vectortoangles( var_21 - self.origin );
|
|
self rotateto( ( 0, var_22[1], 0 ), var_6 );
|
|
var_23 = var_4 * var_6 * self.moveplaybackrate;
|
|
var_24 = vectornormalize( var_21 - self.origin );
|
|
var_20 = var_24 * var_23;
|
|
var_20 = var_20 + self.origin;
|
|
|
|
if ( getdvar( "debug_drones" ) == "1" )
|
|
thread common_scripts\utility::draw_line_for_time( self.origin, var_20, 0, 0, 1, var_6 );
|
|
|
|
self moveto( var_20, var_6 );
|
|
wait( var_6 );
|
|
}
|
|
|
|
if ( isdefined( self.cur_node["script_noteworthy"] ) )
|
|
drone_traverse_check();
|
|
|
|
thread maps\_drone::drone_idle();
|
|
}
|
|
|
|
drone_traverse_check()
|
|
{
|
|
var_0 = self.cur_node["script_noteworthy"];
|
|
var_1 = strtok( var_0, "_" );
|
|
|
|
if ( var_1[0] != "traverse" )
|
|
return;
|
|
|
|
var_2 = [];
|
|
var_2["origin"] = self.cur_node["origin"];
|
|
var_2["angles"] = ( 0, 180, 0 );
|
|
var_3 = level.drone_anims[self.team]["traverse"][var_0];
|
|
drone_play_anim( var_3, var_2 );
|
|
}
|
|
|
|
cur_node_check_delete()
|
|
{
|
|
if ( !isdefined( self.cur_node["script_noteworthy"] ) )
|
|
return;
|
|
|
|
var_0 = self.cur_node["script_noteworthy"];
|
|
|
|
if ( var_0 == "die" )
|
|
self kill();
|
|
else if ( var_0 == "delete" )
|
|
self delete();
|
|
}
|
|
|
|
drone_set_runanim()
|
|
{
|
|
if ( !isdefined( self.drone_runanim ) )
|
|
return;
|
|
|
|
var_0 = spawnstruct();
|
|
var_0 = maps\_drone::get_anim_data( self.drone_runanim );
|
|
var_0.runanim = self.drone_runanim;
|
|
return var_0;
|
|
}
|
|
|
|
drone_animate_on_path( var_0 )
|
|
{
|
|
var_1 = self;
|
|
var_1 endon( "death" );
|
|
var_1 endon( "drone_stop" );
|
|
var_1.dontdonotetracks = 1;
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
{
|
|
var_2 = var_1 maps\_utility::get_linked_structs();
|
|
var_0 = common_scripts\utility::random( var_2 );
|
|
}
|
|
|
|
var_3 = undefined;
|
|
var_4 = var_0;
|
|
|
|
while ( isdefined( var_4 ) )
|
|
{
|
|
var_3 = var_4;
|
|
var_5 = undefined;
|
|
|
|
if ( var_4 maps\homecoming_util::parameters_check( "fight" ) )
|
|
{
|
|
var_6 = [];
|
|
var_6["script_noteworthy"] = var_4.script_noteworthy;
|
|
var_6["origin"] = var_4.origin;
|
|
var_6["angles"] = var_4.angles;
|
|
var_1.cur_node = var_6;
|
|
var_1 thread drone_fight_smart();
|
|
break;
|
|
}
|
|
else if ( !var_4 maps\homecoming_util::parameters_check( "nomove" ) )
|
|
{
|
|
var_1 drone_move_custom( var_4.targetname );
|
|
var_7 = var_1.cur_node["script_linkname"];
|
|
|
|
if ( !isdefined( var_7 ) )
|
|
return;
|
|
|
|
var_5 = common_scripts\utility::getstruct( var_7, "script_linkname" );
|
|
}
|
|
else
|
|
var_5 = var_4;
|
|
|
|
var_3 = var_5;
|
|
var_4 = undefined;
|
|
var_8 = undefined;
|
|
|
|
if ( isdefined( var_5.script_animation ) )
|
|
{
|
|
var_8 = var_5.script_animation;
|
|
|
|
if ( isdefined( var_5.script_linkto ) )
|
|
var_4 = common_scripts\utility::getstruct( var_5.script_linkto, "script_linkname" );
|
|
}
|
|
else
|
|
{
|
|
var_9 = var_5 maps\_utility::get_linked_structs();
|
|
|
|
foreach ( var_11 in var_9 )
|
|
{
|
|
if ( var_11 maps\homecoming_util::parameters_check( "animate" ) )
|
|
{
|
|
var_8 = var_11.script_animation;
|
|
var_5 = var_11;
|
|
|
|
if ( isdefined( var_11.target ) )
|
|
var_4 = common_scripts\utility::getstruct( var_11.target, "targetname" );
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( !isdefined( var_8 ) )
|
|
continue;
|
|
|
|
common_scripts\utility::waitframe();
|
|
var_13 = getanimlength( maps\_utility::getanim_generic( var_8 ) );
|
|
var_5 thread maps\_anim::anim_generic( var_1, var_8 );
|
|
|
|
if ( isdefined( var_5.script_timeout ) )
|
|
{
|
|
wait( var_5.script_timeout );
|
|
var_1 stopanimscripted();
|
|
continue;
|
|
}
|
|
|
|
wait( var_13 );
|
|
}
|
|
|
|
var_1.dontdonotetracks = undefined;
|
|
var_1 struct_check_delete( var_3 );
|
|
}
|
|
|
|
hovercraft_drone_fightspots()
|
|
{
|
|
var_0 = squared( 128 );
|
|
|
|
for (;;)
|
|
{
|
|
wait 0.1;
|
|
|
|
if ( !isdefined( level.hovercraftdrones ) )
|
|
continue;
|
|
|
|
var_1 = maps\_utility::array_removedead( level.hovercraftdrones );
|
|
|
|
if ( var_1.size == 0 )
|
|
{
|
|
wait 0.1;
|
|
continue;
|
|
}
|
|
|
|
var_2 = sortbydistance( var_1, self.origin );
|
|
|
|
foreach ( var_4 in var_2 )
|
|
{
|
|
if ( isdefined( var_4.hasspot ) )
|
|
var_2 = common_scripts\utility::array_remove( var_2, var_4 );
|
|
}
|
|
|
|
if ( var_2.size == 0 )
|
|
break;
|
|
|
|
var_4 = var_2[0];
|
|
|
|
if ( distance2dsquared( var_4.origin, self.origin ) <= var_0 )
|
|
{
|
|
var_4.hasspot = 1;
|
|
var_4.skipdelete = 1;
|
|
var_4 notify( "drone_stop" );
|
|
var_4 notify( "drone_random_death" );
|
|
var_4.drone_lookahead_value = 50;
|
|
var_4 thread drone_move_custom( self.targetname );
|
|
var_4.drone_idle_custom = 1;
|
|
var_4.drone_idle_override = ::drone_fight_smart;
|
|
var_4 waittill( "death" );
|
|
}
|
|
}
|
|
}
|
|
|
|
drone_fight_smart( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "stop_drone_fighting" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
self waittill( "goal" );
|
|
|
|
var_1 = [];
|
|
|
|
if ( self.team == "axis" )
|
|
var_1 = [ "ak12", "cz805", "cbjms" ];
|
|
else
|
|
var_1 = [ "r5rgp", "fad", "m27" ];
|
|
|
|
self.weaponsound = "drone_" + var_1[randomint( var_1.size )] + "_fire_npc";
|
|
var_2 = self.cur_node;
|
|
var_3 = var_2["script_noteworthy"];
|
|
self.animset = var_3;
|
|
var_4 = self.team;
|
|
var_5 = randomint( 2 );
|
|
|
|
for (;;)
|
|
{
|
|
if ( common_scripts\utility::cointoss() )
|
|
{
|
|
var_6 = randomint( level.drone_anims[var_4][var_3]["idle"].size );
|
|
drone_play_anim( level.drone_anims[var_4][var_3]["idle"][var_6], var_2 );
|
|
}
|
|
|
|
drone_play_anim( level.drone_anims[var_4][var_3]["hide_2_aim"], var_2 );
|
|
|
|
if ( var_3 == "coverprone" )
|
|
drone_play_anim( level.drone_anims[var_4][var_3]["fire_exposed"] );
|
|
else
|
|
drone_play_anim( level.drone_anims[var_4][var_3]["fire"] );
|
|
|
|
maps\_drone::drone_fire_randomly();
|
|
drone_play_anim( level.drone_anims[var_4][var_3]["aim_2_hide"] );
|
|
}
|
|
}
|
|
|
|
#using_animtree("generic_human");
|
|
|
|
drone_play_anim( var_0, var_1, var_2 )
|
|
{
|
|
self clearanim( %body, 0.2 );
|
|
self stopanimscripted();
|
|
var_3 = "normal";
|
|
|
|
if ( isdefined( var_2 ) )
|
|
var_3 = "deathplant";
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
var_4 = var_1["origin"];
|
|
var_5 = var_1["angles"];
|
|
var_1 = spawnstruct();
|
|
var_1.origin = var_4;
|
|
var_1.angles = var_5;
|
|
}
|
|
else
|
|
var_1 = self;
|
|
|
|
var_6 = "drone_anim";
|
|
self animscripted( var_6, var_1.origin, var_1.angles, var_0, var_3 );
|
|
self waittillmatch( "drone_anim", "end" );
|
|
}
|
|
|
|
drone_infinite_runners( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
var_6 = undefined;
|
|
|
|
if ( !isarray( self ) )
|
|
var_6 = maps\_utility::make_array( self );
|
|
else
|
|
var_6 = self;
|
|
|
|
var_7 = [];
|
|
|
|
foreach ( var_9 in var_6 )
|
|
{
|
|
var_10 = var_9 common_scripts\utility::get_linked_ents();
|
|
|
|
foreach ( var_12 in var_10 )
|
|
{
|
|
if ( var_12 maps\homecoming_util::parameters_check( "starter" ) )
|
|
var_7 = common_scripts\utility::array_add( var_7, var_12 );
|
|
}
|
|
}
|
|
|
|
maps\_utility::array_spawn( var_7 );
|
|
var_15 = [];
|
|
|
|
while ( !common_scripts\utility::flag( var_0 ) )
|
|
{
|
|
var_16 = undefined;
|
|
|
|
if ( isdefined( var_5 ) )
|
|
{
|
|
var_15 = common_scripts\utility::array_removeundefined( var_15 );
|
|
|
|
if ( var_15.size >= var_5 )
|
|
{
|
|
wait( randomfloatrange( var_1[0], var_1[1] ) );
|
|
var_16 = 1;
|
|
}
|
|
}
|
|
|
|
if ( isdefined( var_16 ) )
|
|
continue;
|
|
|
|
var_17 = drones_request( 1 );
|
|
|
|
if ( var_17 == 0 )
|
|
{
|
|
wait 0.1;
|
|
continue;
|
|
}
|
|
|
|
var_9 = var_6[randomint( var_6.size )];
|
|
var_18 = var_9 maps\_utility::spawn_ai();
|
|
var_15 = common_scripts\utility::array_removeundefined( var_15 );
|
|
var_15 = common_scripts\utility::array_add( var_15, var_18 );
|
|
var_18 thread drone_animate_on_path();
|
|
var_18 thread drones_death_watcher();
|
|
var_19 = var_2[randomint( var_2.size )];
|
|
var_18.runanim = level.drone_anims["allies"]["stand"][var_19];
|
|
|
|
if ( isdefined( var_3 ) )
|
|
var_18.weaponsound = var_3[randomint( var_3.size )];
|
|
else
|
|
var_18.nodroneweaponsound = 1;
|
|
|
|
if ( var_19 == "run_n_gun" )
|
|
var_18 thread drone_fire_randomly_loop();
|
|
else if ( var_19 == "sprint" )
|
|
var_18 maps\_utility::set_moveplaybackrate( 1.4 );
|
|
|
|
if ( isdefined( var_4 ) )
|
|
var_18 maps\_utility::delaythread( randomfloatrange( var_4[0], var_4[1] ), maps\_utility::die );
|
|
|
|
var_18 notify( "move" );
|
|
|
|
if ( common_scripts\utility::flag( var_0 ) )
|
|
break;
|
|
|
|
wait( randomfloatrange( var_1[0], var_1[1] ) );
|
|
}
|
|
}
|
|
|
|
beach_path_drones( var_0 )
|
|
{
|
|
self endon( "stop_drone_runners" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
level.drone_runner_group[var_0] = [];
|
|
|
|
var_1 = self;
|
|
var_2 = common_scripts\utility::getstruct( self.script_linkto, "script_linkname" );
|
|
var_3 = 2;
|
|
|
|
if ( isdefined( var_1.script_count ) )
|
|
var_3 = var_1.script_count;
|
|
|
|
if ( !isdefined( self.script_wait_min ) )
|
|
{
|
|
self.script_wait_min = 8;
|
|
self.script_wait_max = 16;
|
|
}
|
|
|
|
var_4 = 5;
|
|
var_5 = 9;
|
|
|
|
if ( isdefined( self.randomdeath ) )
|
|
{
|
|
var_4 = self.randomdeath[0];
|
|
var_5 = self.randomdeath[1];
|
|
}
|
|
|
|
for (;;)
|
|
{
|
|
var_6 = randomint( var_3 );
|
|
var_6 = var_6 + 1;
|
|
var_6 = drones_request( var_6 );
|
|
|
|
for ( var_7 = 0; var_7 < var_6; var_7++ )
|
|
{
|
|
var_8 = var_1 maps\_utility::spawn_ai();
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
level.drone_runner_group[var_0] = common_scripts\utility::array_removeundefined( level.drone_runner_group[var_0] );
|
|
level.drone_runner_group[var_0] = common_scripts\utility::array_add( level.drone_runner_group[var_0], var_8 );
|
|
}
|
|
|
|
if ( var_1 maps\homecoming_util::parameters_check( "random_death" ) )
|
|
var_8 maps\_utility::delaythread( randomfloatrange( var_4, var_5 ), ::drone_die );
|
|
|
|
var_8 thread drones_death_watcher();
|
|
|
|
if ( isdefined( var_1.drone_lookahead_value ) )
|
|
var_8.drone_lookahead_value = var_1.drone_lookahead_value;
|
|
else
|
|
var_8.drone_lookahead_value = 56;
|
|
|
|
var_9 = [ %stand_death_tumbleback, %stand_death_headshot_slowfall, %stand_death_shoulderback ];
|
|
var_8.deathanim = var_9[randomint( var_9.size )];
|
|
var_8 thread drone_animate_on_path( var_2 );
|
|
wait( randomfloatrange( 0.6, 0.9 ) );
|
|
}
|
|
|
|
var_1 maps\_utility::script_wait();
|
|
}
|
|
}
|
|
|
|
drone_fire_randomly_loop()
|
|
{
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
wait( randomfloatrange( 0.8, 1.2 ) );
|
|
thread maps\_drone::drone_fire_randomly();
|
|
}
|
|
}
|
|
|
|
drone_fire_fake_javelin_loop( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "stop_firing" );
|
|
|
|
if ( !isdefined( level.fakejavelinfireents ) )
|
|
level.fakejavelinfireents = [];
|
|
|
|
var_5 = 4;
|
|
var_6 = 9;
|
|
|
|
if ( isdefined( var_2 ) )
|
|
{
|
|
var_5 = var_2[0];
|
|
var_6 = var_2[1];
|
|
}
|
|
|
|
if ( !isdefined( self.javtargets ) )
|
|
self.javtargets = [];
|
|
|
|
if ( isdefined( var_0 ) )
|
|
self.javtargets = common_scripts\utility::array_combine( self.javtargets, var_0 );
|
|
|
|
if ( !isdefined( self.javelin_smarttargeting ) )
|
|
{
|
|
if ( isdefined( var_1 ) && var_1 == 1 )
|
|
self.javelin_smarttargeting = 1;
|
|
else
|
|
self.javelin_smarttargeting = 0;
|
|
}
|
|
|
|
if ( isalive( self ) )
|
|
{
|
|
var_7 = spawn( "script_model", self.origin );
|
|
var_7 setmodel( "weapon_javelin" );
|
|
var_7 linkto( self, "tag_inhand", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
self.javelin = var_7;
|
|
}
|
|
|
|
for (;;)
|
|
{
|
|
if ( isalive( self ) )
|
|
{
|
|
drone_play_anim( maps\_utility::getgenericanim( "javelin_idle" ) );
|
|
thread drone_play_anim( maps\_utility::getgenericanim( "javelin_fire" ) );
|
|
}
|
|
else
|
|
wait( randomfloatrange( var_5, var_6 ) );
|
|
|
|
if ( self.javelin_smarttargeting == 1 )
|
|
{
|
|
level.javelintargets = maps\_utility::array_removedead( level.javelintargets );
|
|
level.javelintargets = common_scripts\utility::array_removeundefined( level.javelintargets );
|
|
var_0 = common_scripts\utility::array_combine( self.javtargets, level.javelintargets );
|
|
}
|
|
|
|
if ( level.javelintargets.size > 0 )
|
|
var_8 = level.javelintargets[randomint( level.javelintargets.size )];
|
|
else
|
|
{
|
|
if ( self.javtargets.size == 0 )
|
|
return;
|
|
|
|
self.javtargets = common_scripts\utility::array_removeundefined( self.javtargets );
|
|
var_8 = self.javtargets[randomint( self.javtargets.size )];
|
|
}
|
|
|
|
maps\homecoming_util::fire_fake_javelin( var_8, var_3, var_4 );
|
|
}
|
|
}
|
|
|
|
drone_javelin_smart_targeting()
|
|
{
|
|
|
|
}
|
|
|
|
drone_respawner( var_0, var_1 )
|
|
{
|
|
var_2 = self;
|
|
var_2.dontdonotetracks = 1;
|
|
|
|
for (;;)
|
|
{
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
var_3 = randomfloatrange( 5, 10 );
|
|
var_2 maps\_utility::delaythread( var_3, ::drone_death_custom );
|
|
}
|
|
|
|
var_2 waittill( "death" );
|
|
var_2 = var_0 drone_spawn();
|
|
var_2 drone_animate_on_path();
|
|
}
|
|
}
|
|
|
|
drone_death_custom()
|
|
{
|
|
self notify( "stop_drone_fighting" );
|
|
|
|
if ( isdefined( self.magic_bullet_shield ) && self.magic_bullet_shield == 1 )
|
|
maps\_utility::stop_magic_bullet_shield();
|
|
|
|
var_0 = [ "drone_death_slowfall", "drone_death_shoulderback" ];
|
|
var_1 = common_scripts\utility::random( var_0 );
|
|
drone_gun_remove();
|
|
self clearanim( %body, 0.2 );
|
|
maps\_utility::anim_stopanimscripted();
|
|
maps\_anim::anim_generic( self, var_1 );
|
|
wait 0.5;
|
|
|
|
if ( isdefined( self ) )
|
|
self delete();
|
|
}
|
|
|
|
default_mg_drone()
|
|
{
|
|
thread maps\_utility::magic_bullet_shield();
|
|
maps\_utility::gun_remove();
|
|
var_0 = getent( self.script_linkto, "script_linkname" );
|
|
self.mg = var_0;
|
|
var_0.owner = self;
|
|
var_0 thread maps\_anim::anim_generic_first_frame( self, "stand_gunner_idle", "tag_butt" );
|
|
self linkto( var_0, "tag_butt", ( 0, 5, -45 ), ( 0, 0, 0 ) );
|
|
}
|
|
|
|
struct_check_delete( var_0 )
|
|
{
|
|
if ( var_0 maps\homecoming_util::parameters_check( "delete" ) )
|
|
maps\homecoming_util::delete_safe();
|
|
else if ( var_0 maps\homecoming_util::parameters_check( "die" ) )
|
|
maps\homecoming_util::kill_safe();
|
|
}
|
|
|
|
drone_death_handler( var_0 )
|
|
{
|
|
if ( isdefined( self.customdeathanim ) )
|
|
return;
|
|
|
|
if ( isdefined( self.deathanim ) )
|
|
var_0 = self.deathanim;
|
|
|
|
maps\_drone::drone_play_scripted_anim( var_0, "deathplant" );
|
|
|
|
if ( !isdefined( self.noragdoll ) )
|
|
self startragdoll();
|
|
|
|
self notsolid();
|
|
thread maps\_drone::drone_thermal_draw_disable( 2 );
|
|
|
|
if ( isdefined( self ) && isdefined( self.nocorpsedelete ) )
|
|
return;
|
|
|
|
if ( !isdefined( level.drone_bodies ) )
|
|
level.drone_bodies = 0;
|
|
|
|
level.drone_bodies++;
|
|
|
|
while ( isdefined( self ) )
|
|
{
|
|
wait 2;
|
|
|
|
if ( !isdefined( self ) )
|
|
break;
|
|
|
|
if ( drone_should_delete() )
|
|
self delete();
|
|
}
|
|
|
|
level.drone_bodies--;
|
|
}
|
|
|
|
drone_should_delete()
|
|
{
|
|
if ( distancesquared( level.player.origin, self.origin ) > 1000000 )
|
|
return 1;
|
|
|
|
if ( !common_scripts\utility::within_fov( level.player.origin, level.player.angles, self.origin, 0.5 ) )
|
|
return 1;
|
|
|
|
if ( level.drone_bodies > 5 )
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
drone_gun_remove()
|
|
{
|
|
var_0 = getweaponmodel( self.weapon );
|
|
self detach( var_0, "tag_weapon_right" );
|
|
self.weapon = "none";
|
|
}
|
|
|
|
drone_die( var_0 )
|
|
{
|
|
if ( isdefined( self.magic_bullet_shield ) && self.magic_bullet_shield == 1 )
|
|
maps\_utility::stop_magic_bullet_shield();
|
|
|
|
if ( !isdefined( self.dronebloodfx ) )
|
|
{
|
|
maps\_utility::die();
|
|
return;
|
|
}
|
|
|
|
var_1 = [ "j_shoulder_ri", "j_shoulder_le", "j_head" ];
|
|
var_2 = var_1[randomint( var_1.size )];
|
|
playfx( common_scripts\utility::getfx( "body_impact1" ), self gettagorigin( var_2 ) );
|
|
maps\_utility::die();
|
|
}
|
|
|
|
drone_bloodfx( var_0 )
|
|
{
|
|
self.dronebloodfx = 1;
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = 0;
|
|
|
|
var_1 = [ "body_impact1", "body_impact2" ];
|
|
|
|
while ( isdefined( self ) && isalive( self ) )
|
|
{
|
|
self waittill( "damage", var_2, var_3, var_4, var_5, var_6 );
|
|
|
|
if ( var_0 )
|
|
{
|
|
if ( var_3 != level.player )
|
|
continue;
|
|
}
|
|
|
|
var_7 = var_1[randomint( var_1.size )];
|
|
playfx( common_scripts\utility::getfx( var_7 ), var_5 );
|
|
}
|
|
}
|
|
|
|
drone_removename()
|
|
{
|
|
self.name = "";
|
|
self setlookattext( "", &"" );
|
|
}
|
|
|
|
isdrone()
|
|
{
|
|
if ( isdefined( self.script_drone ) && self.script_drone == 1 )
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
set_noragdoll()
|
|
{
|
|
self.noragdoll = 1;
|
|
}
|
|
|
|
drone_enableaimassist()
|
|
{
|
|
self enableaimassist();
|
|
}
|
|
|
|
give_drone_deathanim()
|
|
{
|
|
var_0 = [ %stand_death_tumbleback, %stand_death_headshot_slowfall, %stand_death_shoulderback ];
|
|
self.deathanim = var_0[randomint( var_0.size )];
|
|
}
|
|
|
|
drone_setname( var_0 )
|
|
{
|
|
self.name = var_0;
|
|
self setlookattext( var_0, &"" );
|
|
}
|