‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
_flak_drone.gsc
Go to the documentation of this file.
1 #using scripts\codescripts\struct;
2 
3 #using scripts\shared\array_shared;
4 #using scripts\shared\callbacks_shared;
5 #using scripts\shared\clientfield_shared;
6 #using scripts\shared\killstreaks_shared;
7 #using scripts\shared\math_shared;
8 #using scripts\shared\statemachine_shared;
9 #using scripts\shared\system_shared;
10 #using scripts\shared\turret_shared;
11 #using scripts\shared\util_shared;
12 #using scripts\shared\vehicle_ai_shared;
13 #using scripts\shared\vehicle_death_shared;
14 #using scripts\shared\vehicle_shared;
15 
16 #using scripts\mp\_util;
17 #using scripts\mp\gametypes\_shellshock;
18 #using scripts\mp\killstreaks\_killstreakrules;
19 #using scripts\mp\killstreaks\_airsupport;
20 #using scripts\mp\killstreaks\_killstreaks;
21 #using scripts\mp\killstreaks\_remote_weapons;
22 #using scripts\mp\teams\_teams;
23 #using scripts\shared\weapons\_heatseekingmissile;
24 
25 #insert scripts\mp\_hacker_tool.gsh;
26 #insert scripts\mp\killstreaks\_killstreaks.gsh;
27 #insert scripts\shared\clientfields.gsh;
28 #insert scripts\shared\shared.gsh;
29 #insert scripts\shared\statemachine.gsh;
30 #insert scripts\shared\version.gsh;
31 #insert scripts\shared\archetype_shared\archetype_shared.gsh;
32 
33 #precache( "fx", "explosions/fx_vexp_wasp_gibb_death" );
34 
35 #namespace flak_drone;
36 
37 #define FLAK_DRONE_NAME "flak_drone"
38 #define FLAK_DRONE_MISSILE_TOO_CLOSE_TO_PARENT_DISTANCE 1000
39 
40 function ‪init()
41 {
42  ‪clientfield::register( "vehicle", "flak_drone_camo", ‪VERSION_SHIP, 3, "int" );
43 
44  vehicle::add_main_callback( ‪FLAK_DRONE_VEHICLE_NAME, &‪InitFlakDrone );
45 }
46 
47 function ‪InitFlakDrone()
48 {
49  self.health = self.healthdefault;
51  self EnableAimAssist();
52  self SetNearGoalNotifyDist( ‪FLAK_DRONE_NEAR_GOAL_NOTIFY_DIST );
54  self SetVehicleAvoidance( true );
55  self.fovcosine = 0; // +/-90 degrees = 180
56  self.fovcosinebusy = 0; //+/- 55 degrees = 110 fov
57  self.vehAirCraftCollisionEnabled = true;
58  self.goalRadius = 999999;
59  self.goalHeight = 999999;
60  self SetGoal( self.origin, false, self.goalRadius, self.goalHeight );
61  self thread ‪vehicle_ai::nudge_collision();
62 
63  self.overrideVehicleDamage = &‪FlakDroneDamageOverride;
64 
66  self ‪vehicle_ai::get_state_callbacks( "combat" ).enter_func = &‪state_combat_enter;
67  self ‪vehicle_ai::get_state_callbacks( "combat" ).update_func = &‪state_combat_update;
68  self ‪vehicle_ai::get_state_callbacks( "off" ).enter_func = &‪state_off_enter;
69  self ‪vehicle_ai::get_state_callbacks( "off" ).update_func = &‪state_off_update;
70  self ‪vehicle_ai::get_state_callbacks( "death" ).update_func = &‪state_death_update;
71 
73 }
74 
75 function ‪state_off_enter( params )
76 {
77 }
78 
79 function ‪state_off_update( params )
80 {
81  self endon( "change_state" );
82  self endon( "death" );
83 
84  while( !isdefined( self.parent ) )
85  {
86  wait( 0.1 ); //Wait for parent to be setup
87  }
88 
89  self.parent endon( "death" );
90 
91  while( true )
92  {
93  self SetSpeed( ‪FLAK_DRONE_MOVE_SPEED );
94 
95  if( ‪IS_TRUE( self.inpain ) )
96  {
98  }
99 
100  self ClearLookAtEnt();
101 
102  self.current_pathto_pos = undefined;
103 
104  queryOrigin = self.parent.origin + ( 0, 0, ‪FLAK_DRONE_HOVER_HEIGHT );
105  queryResult = PositionQuery_Source_Navigation( queryOrigin,
110  self );
111 
112  if( isdefined( queryResult ) )
113  {
114  PositionQuery_Filter_DistanceToGoal( queryResult, self );
116 
117  best_point = undefined;
118  best_score = -999999;
119 
120  foreach ( point in queryResult.data )
121  {
122  randomScore = randomFloatRange( 0, 100 );
123  distToOriginScore = point.distToOrigin2D * 0.2;
124 
125  point.score += randomScore + distToOriginScore;
126  ADD_POINT_SCORE( point, "distToOrigin", distToOriginScore );
127 
128  if ( point.score > best_score )
129  {
130  best_score = point.score;
131  best_point = point;
132  }
133  }
134 
135  self ‪vehicle_ai::PositionQuery_DebugScores( queryResult );
136 
137  if( isdefined( best_point ) )
138  {
139  self.current_pathto_pos = best_point.origin;
140  }
141  }
142 
143  if( IsDefined( self.current_pathto_pos ) )
144  {
146  if( self SetVehGoalPos( self.current_pathto_pos, true, false ) )
147  {
148  self playsound ("veh_wasp_vox");
149  }
150  else
151  {
152  self SetSpeed( ‪FLAK_DRONE_MOVE_SPEED * 3 );
153  self.current_pathto_pos = self GetClosestPointOnNavVolume( self.origin, 999999 );
154  self SetVehGoalPos( self.current_pathto_pos, true, false );
155  }
156  }
157  else
158  {
159  if( isDefined( self.parent.heliGoalPos ) )
160  {
161  self.current_pathto_pos = self.parent.heliGoalPos;
162  }
163  else
164  {
165  self.current_pathto_pos = queryOrigin;
166  }
168  self SetVehGoalPos( self.current_pathto_pos, true, false );
169  }
170 
172  }
173 }
174 
175 function ‪UpdateFlakDroneSpeed() // self == flak drone
176 {
177  desiredSpeed = ‪FLAK_DRONE_MOVE_SPEED;
178 
179  if ( isdefined( self.parent ) )
180  {
181  parentSpeed = self.parent GetSpeed();
182  desiredSpeed = parentSpeed * 0.9; // lag a little back
183  if ( Distance2DSquared( self.parent.origin, self.origin ) > ‪SQR( 36 ) ) // match parent speed if too far from parent
184  {
185  if ( isdefined( self.current_pathto_pos ) )
186  {
187  flakDroneDistanceToGoalSquared = Distance2DSquared( self.origin, self.current_pathto_pos );
188  parentDistanceToGoalSquared = Distance2DSquared( self.parent.origin, self.current_pathto_pos );
189  if ( flakDroneDistanceToGoalSquared > parentDistanceToGoalSquared )
190  {
191  desiredSpeed = parentSpeed * 1.3;
192  }
193  else
194  {
195  desiredSpeed = parentSpeed * 0.8;
196  }
197  }
198  }
199  }
200 
201  self SetSpeed( max( desiredSpeed, 10 ) );
202 }
203 
204 function ‪state_combat_enter( params )
205 {
206 }
207 
208 function ‪state_combat_update( params )
209 {
210  drone = self;
211  drone endon( "change_state" );
212  drone endon( "death" );
213 
214  drone thread ‪SpawnFlakRocket( drone.incoming_missile, drone.origin, drone.parent );
215  drone Ghost();
216 }
217 
218 function ‪SpawnFlakRocket( missile, spawnPos, parent )
219 {
220  drone = self;
221 
222  missile endon("death");
223  missile Missile_SetTarget( parent );
224 
225  rocket = MagicBullet( GetWeapon( "flak_drone_rocket" ), spawnPos, missile.origin, parent, missile );
226  rocket.team = parent.team;
227  rocket setTeam( parent.team );
228  rocket ‪clientfield::set( "enemyvehicle", ‪ENEMY_VEHICLE_ACTIVE );
229  rocket Missile_SetTarget( missile );
230  missile thread ‪CleanupAfterMissileDeath( rocket, drone ); // sometimes missile gets destroyed by the rocket
231 
232  curDist = Distance( missile.origin, rocket.origin ); // note: algorithm requires distance (not distance squared)
233 
234  tooCloseToPredictedParent = false;
235 
236 /#
237  debug_draw = GetDvarInt( "scr_flak_drone_debug_trails", 0 );
238  debug_duration = GetDvarInt( "scr_flak_drone_debug_trails_duration", 20 * 20 ); // duration in number of server frames
239 #/
240 
241  while( true )
242  {
244 
245  prevDist = curDist;
246 
247  if ( isdefined( rocket ) )
248  {
249  curDist = Distance( missile.origin, rocket.origin ); // can't use DistanceSquared() here
250 
251  distDelta = prevDist - curDist;
252 
253  predictedDist = curDist - distDelta;
254  }
255 
256 /#
257  if ( debug_draw && isdefined( missile ) )
258  ‪util::debug_sphere( missile.origin, 6, ( 0.9, 0, 0 ), 0.9, debug_duration ); // small red sphere for missile trail
259 
260  if ( debug_draw && isdefined( rocket ) )
261  ‪util::debug_sphere( rocket.origin, 6, ( 0, 0, 0.9 ), 0.9, debug_duration ); // small blue spheres for flak drone trail (as rocket)
262 #/
263 
264  if ( isdefined( parent ) )
265  {
266  parentVelocity = parent GetVelocity();
267  parentPredictedLocation = parent.origin + ( parentVelocity * 0.05 );
268  missileVelocity = missile GetVelocity();
269  missilePredictedLocation = missile.origin + ( missileVelocity * 0.05 );
270  if ( DistanceSquared( parentPredictedLocation, missilePredictedLocation ) < ‪SQR( ‪FLAK_DRONE_MISSILE_TOO_CLOSE_TO_PARENT_DISTANCE )
271  || DistanceSquared( parent.origin, missilePredictedLocation ) < ‪SQR( ‪FLAK_DRONE_MISSILE_TOO_CLOSE_TO_PARENT_DISTANCE ) )
272  {
273  tooCloseToPredictedParent = true;
274  }
275  }
276 
277  if( ( predictedDist < 0 ) || ( curDist > prevDist ) || tooCloseToPredictedParent || !isdefined( rocket ) )
278  {
279 /#
280  if ( debug_draw && isdefined( parent ) )
281  {
282  if ( tooCloseToPredictedParent && ! ( ( predictedDist < 0 ) || ( curDist > prevDist ) ) )
283  {
284  ‪util::debug_sphere( parent.origin, 18, ( 0.9, 0, 0.9 ), 0.9, debug_duration ); // large purple sphere means too close to parent
285  }
286  else
287  {
288  ‪util::debug_sphere( parent.origin, 18, ( 0, 0.9, 0 ), 0.9, debug_duration ); // large green sphere means intercepted
289  }
290  }
291 #/
292 
293  if ( isdefined( rocket ) )
294  {
295  rocket ‪detonate();
296  }
297  missile thread ‪heatseekingmissile::_missileDetonate( missile.target_attacker, missile.target_weapon, missile.target_weapon.explosionradius, 10, 20 );
298  return;
299  }
300  }
301 }
302 
303 function ‪CleanupAfterMissileDeath( rocket, flak_drone )
304 {
305  missile = self;
306  missile waittill( "death" );
307 
308  wait 0.5; // make sure explosions fire off before deleting
309 
310  if ( isdefined( rocket ) )
311  {
312  rocket delete();
313  }
314 
315  if ( isdefined( flak_drone ) )
316  {
317  flak_drone delete();
318  }
319 }
320 
321 function ‪state_death_update( params )
322 {
323  self endon( "death" );
324  doGibbedDeath = false;
325 
326  if( isdefined( self.death_info ) )
327  {
328  if( isdefined( self.death_info.weapon ) )
329  {
330  if( self.death_info.weapon.dogibbing || self.death_info.weapon.doannihilate )
331  {
332  doGibbedDeath = true;
333  }
334  }
335  if( isdefined( self.death_info.meansOfDeath ) )
336  {
337  meansOfDeath = self.death_info.meansOfDeath;
338  if( meansOfDeath == "MOD_EXPLOSIVE" || meansOfDeath == "MOD_GRENADE_SPLASH" || meansOfDeath == "MOD_PROJECTILE_SPLASH" || meansOfDeath == "MOD_PROJECTILE" )
339  {
340  doGibbedDeath = true;
341  }
342  }
343  }
344 
345  if( doGibbedDeath )
346  {
347  self playsound ("veh_wasp_gibbed");
348  PlayFxOnTag( "explosions/fx_vexp_wasp_gibb_death", self, "tag_origin" );
349  self Ghost();
350  self NotSolid();
351 
352  wait( 5 );
353  if( isdefined( self ) )
354  {
355  self Delete();
356  }
357  }
358  else
359  {
361  }
362 }
363 
364 function ‪drone_pain_for_time( time, stablizeParam, restoreLookPoint )
365 {
366  self endon( "death" );
367 
368  self.painStartTime = GetTime();
369 
370  if ( !‪IS_TRUE( self.inpain ) )
371  {
372  self.inpain = true;
373 
374  while ( GetTime() < self.painStartTime + time * 1000 )
375  {
376  self SetVehVelocity( self.velocity * stablizeParam );
377  self SetAngularVelocity( self GetAngularVelocity() * stablizeParam );
378  wait 0.1;
379  }
380 
381  if ( isdefined( restoreLookPoint ) )
382  {
383  restoreLookEnt = ‪Spawn( "script_model", restoreLookPoint );
384  restoreLookEnt SetModel( "tag_origin" );
385 
386  self ClearLookAtEnt();
387  self SetLookAtEnt( restoreLookEnt );
388  self setTurretTargetEnt( restoreLookEnt );
389  wait 1.5;
390 
391  self ClearLookAtEnt();
392  self ClearTurretTarget();
393  restoreLookEnt delete();
394  }
395 
396  self.inpain = false;
397  }
398 }
399 
400 function ‪drone_pain( eAttacker, damageType, hitPoint, hitDirection, hitLocationInfo, partName )
401 {
402  if ( !‪IS_TRUE( self.inpain ) )
403  {
404  yaw_vel = ‪math::randomSign() * RandomFloatRange( 280, 320 );
405 
406  ang_vel = self GetAngularVelocity();
407  ang_vel += ( RandomFloatRange( -120, -100 ), yaw_vel, RandomFloatRange( -200, 200 ) );
408  self SetAngularVelocity( ang_vel );
409 
410  self thread ‪drone_pain_for_time( 0.8, 0.7 );
411  }
412 }
413 
414 function ‪FlakDroneDamageOverride( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, weapon, vPoint, vDir, sHitLoc, vDamageOrigin, psOffsetTime, damageFromUnderneath, modelIndex, partName, vSurfaceNormal )
415 {
416  if( sMeansOfDeath == "MOD_TRIGGER_HURT" )
417  return 0;
418 
419  if( isdefined( eAttacker ) && isdefined( eAttacker.team ) && eAttacker.team != self.team )
420  {
421  ‪drone_pain( eAttacker, sMeansOfDeath, vPoint, vDir, sHitLoc, partName );
422  }
423 
424  return iDamage;
425 }
426 
427 function ‪Spawn( parent, onDeathCallback )
428 {
429  if( !IsNavVolumeLoaded() )
430  {
431  /# IPrintLnBold( "Error: NavVolume Not Loaded" ); #/
432  return undefined;
433  }
434 
435  spawnPoint = parent.origin + ‪FLAK_DRONE_SPAWN_OFFSET;
436 
437  drone = SpawnVehicle( ‪FLAK_DRONE_VEHICLE_NAME, spawnPoint, parent.angles, "dynamic_spawn_ai" );
438  drone.death_callback = onDeathCallback;
439  drone ‪configureTeam( parent, false );
440  drone thread ‪WatchGameEvents();
441  drone thread ‪WatchDeath();
442  drone thread ‪WatchParentDeath();
443  drone thread ‪WatchParentMissiles();
444  return drone;
445 }
446 
447 function ‪configureTeam( parent, ‪isHacked )
448 {
449  drone = self;
450  drone.team = parent.team;
451  drone SetTeam( parent.team );
452  if ( ‪isHacked )
453  {
454  drone ‪clientfield::set( "enemyvehicle", ENEMY_VEHICLE_HACKED );
455  }
456  else
457  {
458  drone ‪clientfield::set( "enemyvehicle", ‪ENEMY_VEHICLE_ACTIVE );
459  }
460  drone.parent = parent;
461 
462 }
463 
465 {
466  drone = self;
467  drone endon( "death" );
468 
469  drone.parent.owner ‪util::waittill_any( "game_ended", "emp_jammed", "disconnect", "joined_team" );
470  drone ‪Shutdown( true );
471 }
472 
473 function ‪WatchDeath()
474 {
475  drone = self;
476  drone.parent endon( "death" );
477 
478  drone waittill( "death" );
479  drone ‪Shutdown( true );
480 }
481 
483 {
484  drone = self;
485  drone endon( "death" );
486 
487  drone.parent waittill( "death" );
488  drone ‪Shutdown( true );
489 }
490 
492 {
493  drone = self;
494  drone endon( "death" );
495  drone.parent endon( "death" );
496 
497  drone.parent waittill( "stinger_fired_at_me", missile, weapon, attacker );
498 
499  drone.incoming_missile = missile;
500  drone.incoming_missile.target_weapon = weapon;
501  drone.incoming_missile.target_attacker = attacker;
502  drone ‪vehicle_ai::set_state( "combat" );
503 }
504 
505 function ‪SetCamoState( state )
506 {
507  self ‪clientfield::set( "flak_drone_camo", state );
508 }
509 
511 {
512  drone = self;
513 
514  if( isdefined( drone.death_callback ) )
515  {
516  drone.parent thread [[ drone.death_callback ]]();
517  }
518 
519  if( isdefined( drone ) && !isdefined( drone.parent ) )
520  {
521  drone Ghost();
522  drone NotSolid();
523  wait( 5 );
524  if( isdefined( drone ) )
525  drone Delete();
526  }
527 
528  if( isdefined( drone ) )
529  {
530  if( ‪explode )
531  {
532  drone DoDamage( drone.health + 1000, drone.origin, drone, drone, "none", "MOD_EXPLOSIVE" );
533  }
534  else
535  {
536  drone Delete();
537  }
538  }
539 }
‪InitFlakDrone
‪function InitFlakDrone()
Definition: _flak_drone.gsc:47
‪set_state
‪function set_state(name, state_params)
Definition: statemachine_shared.gsc:133
‪SpawnFlakRocket
‪function SpawnFlakRocket(missile, spawnPos, parent)
Definition: _flak_drone.gsc:218
‪randomSign
‪function randomSign()
Definition: math_shared.gsc:179
‪WatchParentMissiles
‪function WatchParentMissiles()
Definition: _flak_drone.gsc:491
‪init
‪function init()
Definition: _flak_drone.gsc:40
‪FLAK_DRONE_HOVER_ACCELERATION
‪#define FLAK_DRONE_HOVER_ACCELERATION
Definition: _killstreaks.gsh:233
‪FLAK_DRONE_HOVER_INNER_RADIUS
‪#define FLAK_DRONE_HOVER_INNER_RADIUS
Definition: _killstreaks.gsh:236
‪state_combat_enter
‪function state_combat_enter(params)
Definition: _flak_drone.gsc:204
‪state_off_enter
‪function state_off_enter(params)
Definition: _flak_drone.gsc:75
‪FLAK_DRONE_HOVER_HEIGHT_VARIANCE
‪#define FLAK_DRONE_HOVER_HEIGHT_VARIANCE
Definition: _killstreaks.gsh:238
‪FLAK_DRONE_HOVER_OUTTER_RADIUS
‪#define FLAK_DRONE_HOVER_OUTTER_RADIUS
Definition: _killstreaks.gsh:237
‪FLAK_DRONE_SPAWN_OFFSET
‪#define FLAK_DRONE_SPAWN_OFFSET
Definition: _killstreaks.gsh:228
‪nudge_collision
‪function nudge_collision()
Definition: vehicle_ai_shared.gsc:437
‪FLAK_DRONE_HOVER_POINT_SPACING
‪#define FLAK_DRONE_HOVER_POINT_SPACING
Definition: _killstreaks.gsh:239
‪debug_sphere
‪function debug_sphere(origin, radius, color, alpha, time)
Definition: _airsupport.gsc:1153
‪detonate
‪function detonate(attacker)
Definition: vehicle_ai_shared.gsc:1650
‪VERSION_SHIP
‪#define VERSION_SHIP
Definition: version.gsh:36
‪FLAK_DRONE_NEAR_GOAL_NOTIFY_DIST
‪#define FLAK_DRONE_NEAR_GOAL_NOTIFY_DIST
Definition: _killstreaks.gsh:230
‪FLAK_DRONE_HOVER_RADIUS
‪#define FLAK_DRONE_HOVER_RADIUS
Definition: _killstreaks.gsh:231
‪state_combat_update
‪function state_combat_update(params)
Definition: _flak_drone.gsc:208
‪FLAK_DRONE_MOVE_SPEED
‪#define FLAK_DRONE_MOVE_SPEED
Definition: _killstreaks.gsh:235
‪ENEMY_VEHICLE_ACTIVE
‪#define ENEMY_VEHICLE_ACTIVE
Definition: _hacker_tool.gsh:2
‪FLAK_DRONE_HOVER_SPEED
‪#define FLAK_DRONE_HOVER_SPEED
Definition: _killstreaks.gsh:232
‪IS_TRUE
‪#define IS_TRUE(__a)
Definition: shared.gsh:251
‪SQR
‪#define SQR(__var)
Definition: shared.gsh:293
‪state_death_update
‪function state_death_update(params)
Definition: _flak_drone.gsc:321
‪_missileDetonate
‪function _missileDetonate(attacker, weapon, range, minDamage, maxDamage, allowDirectDamage)
Definition: _heatseekingmissile.gsc:1090
‪configureTeam
‪function configureTeam(parent, isHacked)
Definition: _flak_drone.gsc:447
‪StartInitialState
‪function StartInitialState(defaultState="combat")
Definition: vehicle_ai_shared.gsc:866
‪state_off_update
‪function state_off_update(params)
Definition: _flak_drone.gsc:79
‪Shutdown
‪function Shutdown(explode)
Definition: _flak_drone.gsc:510
‪flipping_shooting_death
‪function flipping_shooting_death(attacker, hitDir)
Definition: vehicle_death_shared.gsc:1442
‪FLAK_DRONE_TIME_AT_SAME_POSITION_MIN
‪#define FLAK_DRONE_TIME_AT_SAME_POSITION_MIN
Definition: _killstreaks.gsh:241
‪friendly_fire_shield
‪function friendly_fire_shield()
Definition: vehicle_shared.gsc:2194
‪FLAK_DRONE_STUN_DURATION
‪#define FLAK_DRONE_STUN_DURATION
Definition: _killstreaks.gsh:234
‪explode
‪function explode()
Definition: _straferun.gsc:705
‪CleanupAfterMissileDeath
‪function CleanupAfterMissileDeath(rocket, flak_drone)
Definition: _flak_drone.gsc:303
‪WatchGameEvents
‪function WatchGameEvents()
Definition: _flak_drone.gsc:464
‪init_state_machine_for_role
‪function init_state_machine_for_role(rolename)
Definition: vehicle_ai_shared.gsc:1034
‪PositionQuery_DebugScores
‪function PositionQuery_DebugScores(queryResult)
Definition: vehicle_ai_shared.gsc:2010
‪waittill_any
‪function waittill_any(str_notify1, str_notify2, str_notify3, str_notify4, str_notify5)
Definition: util_shared.csc:375
‪WatchDeath
‪function WatchDeath()
Definition: _flak_drone.gsc:473
‪FlakDroneDamageOverride
‪function FlakDroneDamageOverride(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, weapon, vPoint, vDir, sHitLoc, vDamageOrigin, psOffsetTime, damageFromUnderneath, modelIndex, partName, vSurfaceNormal)
Definition: _flak_drone.gsc:414
‪PositionQuery_Filter_OutOfGoalAnchor
‪function PositionQuery_Filter_OutOfGoalAnchor(queryResult, tolerance=1)
Definition: vehicle_ai_shared.gsc:2104
‪FLAK_DRONE_MISSILE_TOO_CLOSE_TO_PARENT_DISTANCE
‪#define FLAK_DRONE_MISSILE_TOO_CLOSE_TO_PARENT_DISTANCE
Definition: _flak_drone.gsc:38
‪WatchParentDeath
‪function WatchParentDeath()
Definition: _flak_drone.gsc:482
‪Spawn
‪function Spawn(parent, onDeathCallback)
Definition: _flak_drone.gsc:427
‪FLAK_DRONE_TIME_AT_SAME_POSITION_MAX
‪#define FLAK_DRONE_TIME_AT_SAME_POSITION_MAX
Definition: _killstreaks.gsh:242
‪FLAK_DRONE_HOVER_HEIGHT
‪#define FLAK_DRONE_HOVER_HEIGHT
Definition: _killstreaks.gsh:240
‪set
‪function set(str_field_name, n_value)
Definition: clientfield_shared.gsc:34
‪FLAK_DRONE_VEHICLE_NAME
‪#define FLAK_DRONE_VEHICLE_NAME
Definition: _killstreaks.gsh:229
‪drone_pain_for_time
‪function drone_pain_for_time(time, stablizeParam, restoreLookPoint)
Definition: _flak_drone.gsc:364
‪register
‪function register()
Definition: _ai_tank.gsc:126
‪drone_pain
‪function drone_pain(eAttacker, damageType, hitPoint, hitDirection, hitLocationInfo, partName)
Definition: _flak_drone.gsc:400
‪isHacked
‪function isHacked()
Definition: util_shared.gsc:2493
‪SetCamoState
‪function SetCamoState(state)
Definition: _flak_drone.gsc:505
‪UpdateFlakDroneSpeed
‪function UpdateFlakDroneSpeed()
Definition: _flak_drone.gsc:175
‪get_state_callbacks
‪function get_state_callbacks(statename)
Definition: vehicle_ai_shared.gsc:927
‪WAIT_SERVER_FRAME
‪#define WAIT_SERVER_FRAME
Definition: shared.gsh:265