‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
_counteruav.gsc
Go to the documentation of this file.
1 #using scripts\codescripts\struct;
2 
3 #using scripts\mp\_util;
4 #using scripts\mp\gametypes\_battlechatter;
5 #using scripts\mp\gametypes\_globallogic_audio;
6 #using scripts\mp\killstreaks\_airsupport;
7 #using scripts\mp\killstreaks\_helicopter;
8 #using scripts\mp\killstreaks\_killstreak_bundles;
9 #using scripts\mp\killstreaks\_killstreak_detect;
10 #using scripts\mp\killstreaks\_killstreak_hacking;
11 #using scripts\mp\killstreaks\_killstreakrules;
12 #using scripts\mp\killstreaks\_killstreaks;
13 #using scripts\mp\killstreaks\_satellite;
14 #using scripts\mp\teams\_teams;
15 
16 #using scripts\shared\callbacks_shared;
17 #using scripts\shared\challenges_shared;
18 #using scripts\shared\clientfield_shared;
19 #using scripts\shared\damagefeedback_shared;
20 #using scripts\shared\hostmigration_shared;
21 #using scripts\shared\killstreaks_shared;
22 #using scripts\shared\math_shared;
23 #using scripts\shared\scoreevents_shared;
24 #using scripts\shared\system_shared;
25 #using scripts\shared\tweakables_shared;
26 #using scripts\shared\util_shared;
27 #using scripts\shared\weapons\_heatseekingmissile;
28 #using scripts\shared\weapons\_weaponobjects;
29 
30 #insert scripts\mp\_hacker_tool.gsh;
31 #insert scripts\mp\killstreaks\_killstreaks.gsh;
32 #insert scripts\shared\shared.gsh;
33 #insert scripts\shared\version.gsh;
34 
35 #define COUNTER_UAV_NAME "counteruav"
36 #define COUNTER_UAV_VEHICLE_NAME "veh_counteruav_mp"
37 #define COUNTER_UAV_KILLSTREAK_NAME "killstreak_counteruav"
38 
39 #namespace counteruav;
40 
41 #precache( "string", "KILLSTREAK_COUNTERUAV_INBOUND" );
42 #precache( "string", "KILLSTREAK_COUNTERUAV_NOT_AVAILABLE" );
43 #precache( "string", "KILLSTREAK_EARNED_COUNTERUAV" );
44 #precache( "string", "KILLSTREAK_DESTROYED_COUNTERUAV" );
45 #precache( "string", "KILLSTREAK_COUNTERUAV_HACKED" );
46 #precache( "string", "mpl_killstreak_radar" );
47 
48 
49 function ‪init()
50 {
51  level.activeCounterUAVs = [];
52  level.counter_uav_positions = ‪GenerateRandomPoints( ‪COUNTER_UAV_POSITION_COUNT );
53  level.counter_uav_position_index = [];
55 
56  if ( level.teamBased )
57  {
58  foreach( team in level.teams )
59  {
60  level.activeCounterUAVs[ team ] = 0;
61  level.counter_uav_position_index[ team ] = 0;
62 
63  level thread ‪MovementManagerThink( team );
64  }
65  }
66  else
67  {
68  level.activeCounterUAVs = [];
69  }
70 
71  level.activePlayerCounterUAVs = [];
72 
73  level.counter_uav_entities = [];
74 
75  if( ‪tweakables::getTweakableValue( "killstreak", "allowcounteruav" ) )
76  {
78  ‪killstreaks::register_strings( ‪COUNTER_UAV_NAME, &"KILLSTREAK_EARNED_COUNTERUAV", &"KILLSTREAK_COUNTERUAV_NOT_AVAILABLE", &"KILLSTREAK_COUNTERUAV_INBOUND", undefined, &"KILLSTREAK_COUNTERUAV_HACKED" );
79  ‪killstreaks::register_dialog( ‪COUNTER_UAV_NAME, "mpl_killstreak_radar", "counterUavDialogBundle", "counterUavPilotDialogBundle", "friendlyCounterUav", "enemyCounterUav", "enemyCounterUavMultiple", "friendlyCounterUavHacked", "enemyCounterUavHacked", "requestCounterUav", "threatCounterUav" );
80  }
81 
83  level thread ‪WatchCounterUAVs();
84 
88 
89 }
90 
92 {
93  self.entNum = self getEntityNumber();
94 
95  if( !level.teamBased )
96  {
97  level.activeCounterUAVs[ self.entNum ] = 0;
98  level.counter_uav_position_index[ self.entNum ] = 0;
99  self thread ‪MovementManagerThink( self.entnum );
100  }
101 
102  level.activePlayerCounterUAVs[ self.entNum ] = 0;
103 }
104 
106 {
107  if( self ‪EnemyCounterUAVActive() )
108  {
110  }
111  else
112  {
114  }
115 }
116 
117 function ‪GenerateRandomPoints( count )
118 {
119  points = [];
120 
121  for( i = 0; i < count; i++ )
122  {
124  ‪VAL( level.cuav_map_x_offset, 0 ),
125  ‪VAL( level.cuav_map_y_offset, 0 ),
126  ‪VAL( level.cuav_map_x_percentage, ‪COUNTER_UAV_MAP_PERCENTAGE ),
127  ‪VAL( level.cuav_map_y_percentage, ‪COUNTER_UAV_MAP_PERCENTAGE ) );
128 
129  minFlyHeight = ‪airsupport::getMinimumFlyHeight();
130  point = point + ( 0, 0, minFlyHeight + ‪VAL( level.counter_uav_position_z_offset, ‪COUNTER_UAV_POSITION_Z_OFFSET ) );
131  points[ i ] = point;
132  }
133 
134  return points;
135 }
136 
137 function ‪MovementManagerThink( teamOrEntNum )
138 {
139  while( true )
140  {
141  level waittill( "counter_uav_updated" );
142 
143  activeCount = 0;
144 
145  while( level.activeCounterUAVs[ teamOrEntNum ] > 0 )
146  {
147  if( activeCount == 0 )
148  {
149  activeCount = level.activeCounterUAVs[ teamOrEntNum ];
150  }
151 
152  currentIndex = level.counter_uav_position_index[ teamOrEntNum ];
153  newIndex = currentIndex;
154 
155  while( newIndex == currentIndex )
156  {
157  newIndex = RandomIntRange( 0, ‪COUNTER_UAV_POSITION_COUNT );
158  }
159 
160  destination = level.counter_uav_positions[ newIndex ];
161  level.counter_uav_position_index[ teamOrEntNum ] = newIndex;
162 
163  level notify( "counter_uav_move_" + teamOrEntNum );
165  }
166  }
167 }
168 
169 function ‪GetCurrentPosition( teamOrEntNum )
170 {
171  basePosition = level.counter_uav_positions[ level.counter_uav_position_index[ teamOrEntNum ] ];
172  offset = level.counter_uav_offsets[ self.cuav_offset_index ];
173 
174  return basePosition + offset;
175 }
176 
178 {
179  self.cuav_offset_index = ‪GetFirstAvailableOffsetIndex();
180 
182 }
183 
185 {
186  // init available offset array
187  available_offsets = [];
188  for( i = 0; i < level.counter_uav_offsets.size; i++ )
189  available_offsets[ i ] = true;
190 
191  // update available offsets array
192  foreach( cuav in level.counter_uav_entities )
193  {
194  if ( isdefined( cuav ) )
195  {
196  available_offsets[ cuav.cuav_offset_index ] = false;
197  }
198  }
199 
200  // return first available
201  for( i = 0; i < available_offsets.size; i++ )
202  {
203  if ( available_offsets[ i ] )
204  return i;
205  }
206 
207  /#‪util::warning("Max counter-uav available offset slots reached. Using slot 0 for now.");#/
208 
209  return 0;
210 }
211 
213 {
214  for( i = level.counter_uav_entities.size; i >= 0; i-- )
215  {
216  if ( !isdefined( level.counter_uav_entities[ i ] ) )
217  {
218  ArrayRemoveIndex( level.counter_uav_entities, i );
219  }
220  }
221 }
222 
223 
224 function ‪BuildOffsetList( startOffset, depth, offset_x, offset_y )
225 {
226  offsets = [];
227  for( col = 0; col < depth; col++ )
228  {
229  itemCount = ‪math::pow( 2, col );
230  startingIndex = ( itemCount - 1 );
231 
232  for( i = 0; i < itemCount; i++ )
233  {
234  x = offset_x * col;
235 
236  y = 0;
237  if( itemCount > 1 )
238  {
239  y = ( i * offset_y );
240  total_y = offset_y * startingIndex;
241  y -= ( total_y / 2 );
242  }
243 
244  offsets[ startingIndex + i ] = startOffset + ( x, y, 0 );
245  }
246  }
247 
248  return offsets;
249 }
250 
252 {
253  if( self ‪killstreakrules::isKillstreakAllowed( ‪COUNTER_UAV_NAME, self.team ) == false )
254  {
255  return false;
256  }
257 
258  killstreak_id = self ‪killstreakrules::killstreakStart( ‪COUNTER_UAV_NAME, self.team );
259  if( killstreak_id == -1 )
260  {
261  return false;
262  }
263 
264  counterUav = ‪SpawnCounterUAV( self, killstreak_id );
265  if( !isdefined( counterUav ) )
266  {
267  return false;
268  }
269 
270  counterUAV SetScale( ‪COUNTER_UAV_MODEL_SCALE );
271 
272  counterUav ‪clientfield::set( "enemyvehicle", ‪ENEMY_VEHICLE_ACTIVE );
273  counterUav.killstreak_id = killstreak_id;
274 
276  counterUav thread ‪killstreaks::WaitForTimeout( ‪COUNTER_UAV_NAME, ‪COUNTER_UAV_DURATION_MS, &‪OnTimeout, "delete", "death", "crashing" );
277  counterUav thread ‪killstreaks::WaitForTimecheck( ‪COUNTER_UAV_DURATION_CHECK, &‪OnTimecheck, "delete", "death", "crashing" );
278  counterUav thread ‪util::WaitTillEndOnThreaded( "death", &DestroyCounterUav, "delete", "leaving" );
279 
280  counterUav SetCanDamage( true );
282 
283  counterUav PlayLoopSound( ‪COUNTER_UAV_LOOP_SOUND, 1 );
284 
285  counterUav thread ‪ListenForMove();
286 
287  self ‪killstreaks::play_killstreak_start_dialog( ‪COUNTER_UAV_NAME, self.team, killstreak_id );
288  counterUav ‪killstreaks::play_pilot_dialog_on_owner( "arrive", ‪COUNTER_UAV_NAME, killstreak_id );
290  self AddWeaponStat( GetWeapon( ‪COUNTER_UAV_NAME ), "used", 1 );
291 
292  return true;
293 }
294 
295 function ‪HackedPreFunction( hacker )
296 {
297  cuav = self;
299 }
300 
301 function ‪SpawnCounterUAV( owner, killstreak_id )
302 {
303  minFlyHeight = ‪airsupport::getMinimumFlyHeight();
304  //cuav = spawn( "script_model", airsupport::GetMapCenter() + ( 0, 0, ( minFlyHeight + COUNTER_UAV_POSITION_Z_OFFSET ) ) );
305 
306  cuav = SpawnVehicle( ‪COUNTER_UAV_VEHICLE_NAME, ‪airsupport::GetMapCenter() + ( 0, 0, ( minFlyHeight + ‪VAL( level.counter_uav_position_z_offset, ‪COUNTER_UAV_POSITION_Z_OFFSET ) ) ), ( 0, 0, 0 ), ‪COUNTER_UAV_NAME );
308 
309  cuav ‪killstreaks::configure_team( ‪COUNTER_UAV_NAME, killstreak_id, owner, undefined, undefined, &‪ConfigureTeamPost );
311 
312  cuav.targetname = ‪COUNTER_UAV_NAME;
313 
315 
316  cuav thread ‪heatseekingmissile::MissileTarget_ProximityDetonateIncomingMissile( "crashing", undefined, true );
317 
318  cuav.maxhealth = ‪COUNTER_UAV_HEALTH;
319  cuav.health = 99999;
320  cuav.rocketDamage = ‪COUNTER_UAV_HEALTH + 1;
321 
322  cuav SetDrawInfrared( true );
323 
324  ‪ARRAY_ADD( level.counter_uav_entities, cuav );
325 
326  return cuav;
327 }
328 
329 
331 {
332  cuav = self;
333 
334  if ( ‪isHacked == false )
335  {
337  }
338  else
339  {
340  cuav SetVisibleToAll();
341  }
342  cuav thread teams::WaitUntilTeamChangeSingleton( owner, "CUAV_watch_team_change", &‪OnTeamChange, self.entNum, "death", "leaving", "crashing" );
343  cuav ‪AddActiveCounterUAV();
344 }
345 
346 
348 {
349  self endon( "death" );
350  self endon( "leaving" );
351 
352  while( true )
353  {
354  self thread ‪CounterUAVMove();
355  level ‪util::waittill_any( "counter_uav_move_" + self.team, "counter_uav_move_" + self.ownerEntNum );
356  }
357 }
358 
360 {
361  self endon( "death" );
362  self endon( "leaving" );
363  level endon( "counter_uav_move_" + self.team );
364 
365  destination = ( 0, 0, 0 );
366 
367  if( level.teamBased )
368  {
369  destination = self ‪GetCurrentPosition( self.team );
370  }
371  else
372  {
373  destination = self ‪GetCurrentPosition( self.ownerEntNum );
374  }
375 
376  lookAngles = VectorToAngles( destination - self.origin );
379 
380  // as a vehicle, we cannot use RotateTo anymore; we'll figure this out soon
381  // self RotateTo( lookAngles, COUNTER_UAV_ROTATION_DURATION, rotationAccelerationDuration, rotationDecelerationDuration );
382  // self waittill( "rotatedone" );
383 
384  travelAccelerationDuration = ‪COUNTER_UAV_SPEED * ‪COUNTER_UAV_ACCELERATION_PERCENTAGE;
385  travelDecelerationDuration = ‪COUNTER_UAV_SPEED * ‪COUNTER_UAV_DECELERATION_PERCENTAGE;
386  //self MoveTo( destination, COUNTER_UAV_SPEED, travelAccelerationDuration, travelDecelerationDuration );
387  self SetVehGoalPos( destination, true, false );
388 }
389 
390 function ‪PlayFx( ‪name )
391 {
392  self endon( "death" );
393  wait ( 0.1 );
394 
395  if ( isdefined( self ) )
396  {
397  PlayFXOnTag( ‪name, self, "tag_origin" );
398  }
399 }
400 
401 function ‪OnLowHealth( attacker, weapon )
402 {
403  self.is_damaged = true;
404  params = level.killstreakBundle[‪COUNTER_UAV_NAME];
405  if( isdefined( params.fxLowHealth ) )
406  PlayFXOnTag( params.fxLowHealth, self, "tag_origin" );
407 }
408 
409 function ‪OnTeamChange( entNum, event )
410 {
411  ‪DestroyCounterUAV( undefined, undefined );
412 }
413 
415 {
417 }
418 
419 function ‪OnTimeout()
420 {
421  self.leaving = true;
422 
424 
426  wait( ‪COUNTER_UAV_SPEED );
428  Target_Remove( self );
429  self delete();
430 }
431 
432 function ‪OnTimecheck()
433 {
434  self ‪killstreaks::play_pilot_dialog_on_owner( "timecheck", ‪COUNTER_UAV_NAME, self.killstreak_id );
435 }
436 
437 function ‪DestroyCounterUavByEMP( attacker, arg )
438 {
439  DestroyCounterUav( attacker, GetWeapon( "emp" ) );
440 }
441 
442 function ‪DestroyCounterUAV( attacker, weapon )
443 {
444  if ( self.leaving !== true )
445  {
447  }
448 
449  attacker = self [[ level.figure_out_attacker ]]( attacker );
450  if( isdefined( attacker ) && ( !isdefined( self.owner ) || self.owner ‪util::IsEnemyPlayer( attacker ) ) )
451  {
452  ‪challenges::destroyedAircraft( attacker, weapon, false );
453  ‪scoreevents::processScoreEvent( "destroyed_counter_uav", attacker, self.owner, weapon );
454  LUINotifyEvent( &"player_callout", 2, &"KILLSTREAK_DESTROYED_COUNTERUAV", attacker.entnum );
455  attacker ‪challenges::addFlySwatterStat( weapon, self );
456  }
457 
458  self PlaySound( "evt_helicopter_midair_exp" );
460 
461  if ( Target_IsTarget( self ) )
462  {
463  Target_Remove( self );
464  }
465 
466  self thread ‪DeleteCounterUAV();
467 }
468 
470 {
471  self notify( "crashing" );
472 
473  params = level.killstreakBundle[‪COUNTER_UAV_NAME];
474  if( isdefined( params.ksExplosionFX ) && isdefined( self ) )
475  self thread ‪PlayFx( params.ksExplosionFX );
476 
477  wait( 0.1 );
478 
479  if ( isdefined( self ) )
480  {
481  self setModel( "tag_origin" );
482  }
483 
484  wait( 0.2 );
485 
486  if ( isdefined( self ) )
487  {
488  self notify( "delete" );
489  self delete();
490  }
491 }
492 
494 {
495  if( level.teamBased )
496  {
497  foreach( team in level.teams )
498  {
499  if( team == self.team )
500  {
501  continue;
502  }
503 
504  if( ‪TeamHasActiveCounterUAV( team ) )
505  {
506  return true;
507  }
508  }
509  }
510  else
511  {
512  enemies = self ‪teams::GetEnemyPlayers();
513  foreach( player in enemies )
514  {
515  if( player ‪HasActiveCounterUAV() )
516  {
517  return true;
518  }
519  }
520  }
521 
522  return false;
523 }
524 
525 
527 {
528  return ( level.activeCounterUAVs[ self.entNum ] > 0 );
529 }
530 
532 {
533  return ( level.activeCounterUAVs[ team ] > 0 );
534 }
535 
536 function ‪HasIndexActiveCounterUAV( team_or_entnum )
537 {
538  return ( level.activeCounterUAVs[ team_or_entnum ] > 0 );
539 }
540 
541 
543 {
544  if ( level.teamBased )
545  {
546  level.activeCounterUAVs[ self.team ]++;
547 
548  foreach( team in level.teams )
549  {
550  if ( team == self.team )
551  {
552  continue;
553  }
554 
555  if( ‪satellite::HasSatellite( team ) )
556  {
557  self.owner ‪challenges::blockedSatellite();
558  }
559  }
560  }
561  else
562  {
563  level.activeCounterUAVs[ self.ownerEntnum ]++;
564 
565  keys = getarraykeys( level.activeCounterUAVs );
566  for ( i = 0; i < keys.size; i++ )
567  {
568  if( keys[i] == self.ownerEntNum )
569  {
570  continue;
571  }
572 
573  if( ‪satellite::HasSatellite( keys[i] ) )
574  {
575  self.owner ‪challenges::blockedSatellite();
576  break;
577  }
578  }
579  }
580 
581  level.activePlayerCounterUAVs[ self.ownerEntNum ]++;
582 
583  level notify( "counter_uav_updated" );
584 }
585 
587 {
588  cuav = self;
590  cuav ‪killstreakrules::killstreakStop( "counteruav", self.originalteam, self.killstreak_id );
591 }
592 
594 {
595  if ( level.teamBased )
596  {
597  level.activeCounterUAVs[ self.team ]--;
598  assert( level.activeCounterUAVs[ self.team ] >= 0 );
599  if ( level.activeCounterUAVs[ self.team ] < 0 )
600  {
601  level.activeCounterUAVs[ self.team ] = 0;
602  }
603  }
604  else if ( isdefined( self.owner ) )
605  {
606  assert( isdefined( self.ownerEntNum ) );
607  if ( !isdefined( self.ownerEntNum ) )
608  {
609  self.ownerEntNum = self.owner getEntityNumber();
610  }
611 
612  level.activeCounterUAVs[self.ownerEntNum ]--;
613 
614  assert( level.activeCounterUAVs[ self.ownerEntNum ] >= 0 );
615  if ( level.activeCounterUAVs[ self.ownerEntNum ] < 0 )
616  {
617  level.activeCounterUAVs[ self.ownerEntNum ] = 0;
618  }
619  }
620 
621  level.activePlayerCounterUAVs[ self.ownerEntNum ]--;
622 
623  level notify ( "counter_uav_updated" );
624 }
625 
626 
628 {
629  while( true )
630  {
631  level waittill( "counter_uav_updated" );
632 
633  foreach( player in level.players )
634  {
635  if( player ‪EnemyCounterUAVActive() )
636  {
638  }
639  else
640  {
642  }
643  }
644  }
645 }
646 
648 {
649  foreach( counteruav in level.counter_uav_entities )
650  {
651  if ( isdefined( counteruav ) )
652  {
653  counteruav ‪teams::HideToSameTeam();
654 
655  }
656  }
657 }
‪processScoreEvent
‪function processScoreEvent(event, player, victim, weapon)
Definition: scoreevents_shared.gsc:19
‪SpawnCounterUAV
‪function SpawnCounterUAV(owner, killstreak_id)
Definition: _counteruav.gsc:301
‪COUNTER_UAV_MODEL_SCALE
‪#define COUNTER_UAV_MODEL_SCALE
Definition: _killstreaks.gsh:79
‪GetCurrentPosition
‪function GetCurrentPosition(teamOrEntNum)
Definition: _counteruav.gsc:169
‪EnemyCounterUAVActive
‪function EnemyCounterUAVActive()
Definition: _counteruav.gsc:493
‪HackedPreFunction
‪function HackedPreFunction(hacker)
Definition: _counteruav.gsc:295
‪RemoveActiveCounterUAV
‪function RemoveActiveCounterUAV()
Definition: _counteruav.gsc:586
‪COUNTER_UAV_MAP_PERCENTAGE
‪#define COUNTER_UAV_MAP_PERCENTAGE
Definition: _killstreaks.gsh:81
‪OnTimeout
‪function OnTimeout()
Definition: _counteruav.gsc:419
‪COUNTER_UAV_LOW_HEALTH
‪#define COUNTER_UAV_LOW_HEALTH
Definition: _killstreaks.gsh:75
‪DestroyCounterUavByEMP
‪function DestroyCounterUavByEMP(attacker, arg)
Definition: _counteruav.gsc:437
‪WatchCounterUAVs
‪function WatchCounterUAVs()
Definition: _counteruav.gsc:627
‪OnPlayerJoinedTeam
‪function OnPlayerJoinedTeam()
Definition: _counteruav.gsc:414
‪WaitForTimeout
‪function WaitForTimeout(killstreak, duration, callback, endCondition1, endCondition2, endCondition3)
Definition: _killstreaks.gsc:2913
‪COUNTER_UAV_LOCATION_DURATION_MAX
‪#define COUNTER_UAV_LOCATION_DURATION_MAX
Definition: _killstreaks.gsh:84
‪set_to_player
‪function set_to_player(str_field_name, n_value)
Definition: clientfield_shared.gsc:58
‪COUNTER_UAV_DURATION_CHECK
‪#define COUNTER_UAV_DURATION_CHECK
Definition: _killstreaks.gsh:77
‪MissileTarget_ProximityDetonateIncomingMissile
‪function MissileTarget_ProximityDetonateIncomingMissile(endon1, endon2, allowDirectDamage)
Definition: _heatseekingmissile.gsc:1085
‪getMinimumFlyHeight
‪function getMinimumFlyHeight()
Definition: _airsupport.gsc:167
‪blockedSatellite
‪function blockedSatellite()
Definition: challenges_shared.gsc:618
‪warning
‪function warning(msg)
Definition: _util.gsc:38
‪on_joined_team
‪function on_joined_team()
Definition: _battlechatter.gsc:133
‪CounterUAVMove
‪function CounterUAVMove()
Definition: _counteruav.gsc:359
‪VERSION_SHIP
‪#define VERSION_SHIP
Definition: version.gsh:36
‪OnTeamChange
‪function OnTeamChange(entNum, event)
Definition: _counteruav.gsc:409
‪play_killstreak_start_dialog
‪function play_killstreak_start_dialog(killstreakType, team, killstreakId)
Definition: _killstreaks.gsc:1905
‪VAL
‪#define VAL(__var, __default)
Definition: shared.gsh:272
‪COUNTER_UAV_ROTATION_ACCELERATION_PERCENTAGE
‪#define COUNTER_UAV_ROTATION_ACCELERATION_PERCENTAGE
Definition: _killstreaks.gsh:89
‪play_pilot_dialog_on_owner
‪function play_pilot_dialog_on_owner(dialogKey, killstreakType, killstreakId)
Definition: _killstreaks.gsc:2010
‪getTweakableValue
‪function getTweakableValue(category, name)
Definition: _tweakables.gsc:12
‪addFlySwatterStat
‪function addFlySwatterStat(weapon, aircraft)
Definition: challenges_shared.gsc:86
‪ENEMY_VEHICLE_ACTIVE
‪#define ENEMY_VEHICLE_ACTIVE
Definition: _hacker_tool.gsh:2
‪init
‪function init()
Definition: _counteruav.gsc:49
‪HasActiveCounterUAV
‪function HasActiveCounterUAV()
Definition: _counteruav.gsc:526
‪MonitorDamage
‪function MonitorDamage(killstreak_ref, max_health, destroyed_callback, low_health, low_health_callback, emp_damage, emp_callback, allow_bullet_damage)
Definition: _killstreaks.gsc:2499
‪GetMapCenter
‪function GetMapCenter()
Definition: _airsupport.gsc:766
‪IsEnemyPlayer
‪function IsEnemyPlayer(player)
Definition: util_shared.csc:1220
‪HideToSameTeam
‪function HideToSameTeam()
Definition: _teams.gsc:485
‪pow
‪function pow(base, exp)
Definition: math_shared.gsc:544
‪COUNTER_UAV_LOCATION_DURATION_MIN
‪#define COUNTER_UAV_LOCATION_DURATION_MIN
Definition: _killstreaks.gsh:83
‪MaintainCouterUavEntities
‪function MaintainCouterUavEntities()
Definition: _counteruav.gsc:212
‪OnPlayerConnect
‪function OnPlayerConnect()
Definition: _counteruav.gsc:91
‪DeleteCounterUAV
‪function DeleteCounterUAV()
Definition: _counteruav.gsc:469
‪on_spawned
‪function on_spawned(func, obj)
Definition: callbacks_shared.csc:245
‪destroyedAircraft
‪function destroyedAircraft(attacker, weapon, playerControlled)
Definition: challenges_shared.gsc:1405
‪COUNTER_UAV_NAME
‪#define COUNTER_UAV_NAME
Definition: _counteruav.gsc:35
‪OnLowHealth
‪function OnLowHealth(attacker, weapon)
Definition: _counteruav.gsc:401
‪play_destroyed_dialog_on_owner
‪function play_destroyed_dialog_on_owner(killstreakType, killstreakId)
Definition: _killstreaks.gsc:1982
‪COUNTER_UAV_VEHICLE_NAME
‪#define COUNTER_UAV_VEHICLE_NAME
Definition: _counteruav.gsc:36
‪COUNTER_UAV_ACCELERATION_PERCENTAGE
‪#define COUNTER_UAV_ACCELERATION_PERCENTAGE
Definition: _killstreaks.gsh:86
‪isKillstreakAllowed
‪function isKillstreakAllowed(hardpointType, team)
Definition: _killstreakrules.gsc:352
‪HideAllCounterUAVsToSameTeam
‪function HideAllCounterUAVsToSameTeam()
Definition: _counteruav.gsc:647
‪HasIndexActiveCounterUAV
‪function HasIndexActiveCounterUAV(team_or_entnum)
Definition: _counteruav.gsc:536
‪HasSatellite
‪function HasSatellite(team_or_entnum)
Definition: _satellite.gsc:259
‪ResetActiveCounterUAV
‪function ResetActiveCounterUAV()
Definition: _counteruav.gsc:593
‪COUNTER_UAV_SPEED
‪#define COUNTER_UAV_SPEED
Definition: _killstreaks.gsh:85
‪waittill_any
‪function waittill_any(str_notify1, str_notify2, str_notify3, str_notify4, str_notify5)
Definition: util_shared.csc:375
‪MovementManagerThink
‪function MovementManagerThink(teamOrEntNum)
Definition: _counteruav.gsc:137
‪ARRAY_ADD
‪#define ARRAY_ADD(__array, __item)
Definition: shared.gsh:304
‪COUNTER_UAV_LOOP_SOUND
‪#define COUNTER_UAV_LOOP_SOUND
Definition: _killstreaks.gsh:82
‪killstreakTargetSet
‪function killstreakTargetSet(killstreakEntity, offset)
Definition: _killstreak_detect.gsc:29
‪COUNTER_UAV_DECELERATION_PERCENTAGE
‪#define COUNTER_UAV_DECELERATION_PERCENTAGE
Definition: _killstreaks.gsh:87
‪AssignFirstAvailableOffsetIndex
‪function AssignFirstAvailableOffsetIndex()
Definition: _counteruav.gsc:177
‪BuildOffsetList
‪function BuildOffsetList(startOffset, depth, offset_x, offset_y)
Definition: _counteruav.gsc:224
‪register_dialog
‪function register_dialog(killstreakType, informDialog, taacomDialogBundleKey, pilotDialogArrayKey, startDialogKey, enemyStartDialogKey, enemyStartMultipleDialogKey, hackedDialogKey, hackedStartDialogKey, requestDialogKey, threatDialogKey, isInventory)
Definition: _killstreaks.gsc:239
‪DestroyCounterUAV
‪function DestroyCounterUAV(attacker, weapon)
Definition: _counteruav.gsc:442
‪GetEnemyPlayers
‪function GetEnemyPlayers()
Definition: _teams.gsc:412
‪COUNTER_UAV_ROTATION_DURATION
‪#define COUNTER_UAV_ROTATION_DURATION
Definition: _killstreaks.gsh:88
‪register_strings
‪function register_strings(killstreakType, receivedText, notUsableText, inboundText, inboundNearPlayerText, hackedText, utilizesAirspace=true, isInventory=false)
Definition: _killstreaks.gsc:223
‪killstreakStop
‪function killstreakStop(hardpointType, team, id)
Definition: _killstreakrules.gsc:293
‪COUNTER_UAV_HEALTH
‪#define COUNTER_UAV_HEALTH
Definition: _killstreaks.gsh:74
‪AddActiveCounterUAV
‪function AddActiveCounterUAV()
Definition: _counteruav.gsc:542
‪COUNTER_UAV_GROUP_OFFSET
‪#define COUNTER_UAV_GROUP_OFFSET
Definition: _killstreaks.gsh:92
‪COUNTER_UAV_KILLSTREAK_NAME
‪#define COUNTER_UAV_KILLSTREAK_NAME
Definition: _counteruav.gsc:37
‪TeamHasActiveCounterUAV
‪function TeamHasActiveCounterUAV(team)
Definition: _counteruav.gsc:531
‪ConfigureTeamPost
‪function ConfigureTeamPost(owner, isHacked)
Definition: _counteruav.gsc:330
‪killstreakStart
‪function killstreakStart(hardpointType, team, hacked, displayTeamMessage)
Definition: _killstreakrules.gsc:184
‪COUNTER_UAV_POSITION_Z_OFFSET
‪#define COUNTER_UAV_POSITION_Z_OFFSET
Definition: _killstreaks.gsh:78
‪set
‪function set(str_field_name, n_value)
Definition: clientfield_shared.gsc:34
‪COUNTER_UAV_POSITION_COUNT
‪#define COUNTER_UAV_POSITION_COUNT
Definition: _killstreaks.gsh:80
‪WaitForTimecheck
‪function WaitForTimecheck(duration, callback, endCondition1, endCondition2, endCondition3)
Definition: killstreaks_shared.gsc:130
‪GenerateRandomPoints
‪function GenerateRandomPoints(count)
Definition: _counteruav.gsc:117
‪GetFirstAvailableOffsetIndex
‪function GetFirstAvailableOffsetIndex()
Definition: _counteruav.gsc:184
‪OnTimecheck
‪function OnTimecheck()
Definition: _counteruav.gsc:432
‪configure_team
‪function configure_team(killstreakType, killstreakId, owner, influencerType, configureTeamPreFunction, configureTeamPostFunction, isHacked=false)
Definition: _killstreaks.gsc:2806
‪COUNTER_UAV_GROUP_SIZE
‪#define COUNTER_UAV_GROUP_SIZE
Definition: _killstreaks.gsh:91
‪GetRandomMapPoint
‪function GetRandomMapPoint(x_offset, y_offset, map_x_percentage, map_y_percentage)
Definition: _airsupport.gsc:777
‪register
‪function register()
Definition: _ai_tank.gsc:126
‪WaitTillEndOnThreaded
‪function WaitTillEndOnThreaded(waitCondition, callback, endCondition1, endCondition2, endCondition3)
Definition: util_shared.gsc:1713
‪player_killstreak_threat_tracking
‪function player_killstreak_threat_tracking(killstreakType)
Definition: _killstreaks.gsc:2092
‪OnPlayerSpawned
‪function OnPlayerSpawned()
Definition: _counteruav.gsc:105
‪ActivateCounterUAV
‪function ActivateCounterUAV()
Definition: _counteruav.gsc:251
‪enable_hacking
‪function enable_hacking(killstreakName, preHackFunction, postHackFunction)
Definition: _killstreak_hacking.gsc:22
‪on_connect
‪function on_connect()
Definition: _arena.gsc:20
‪WaitTillEMP
‪function WaitTillEMP(onEmpdCallback, arg)
Definition: killstreaks_shared.gsc:157
‪isHacked
‪function isHacked()
Definition: util_shared.gsc:2493
‪name
‪class GroundFx name
‪Leave
‪function Leave(duration)
Definition: _airsupport.gsc:889
‪ListenForMove
‪function ListenForMove()
Definition: _counteruav.gsc:347
‪COUNTER_UAV_DURATION_MS
‪#define COUNTER_UAV_DURATION_MS
Definition: _killstreaks.gsh:76
‪PlayFx
‪function PlayFx(name)
Definition: _counteruav.gsc:390