‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
_perks.csc
Go to the documentation of this file.
1 #using scripts\codescripts\struct;
2 #using scripts\shared\abilities\_ability_util;
3 #using scripts\shared\callbacks_shared;
4 #using scripts\shared\clientfield_shared;
5 #using scripts\shared\filter_shared;
6 #using scripts\shared\util_shared;
7 
8 #insert scripts\shared\abilities\_ability_util.gsh;
9 #insert scripts\shared\duplicaterender.gsh;
10 #insert scripts\shared\shared.gsh;
11 #insert scripts\shared\version.gsh;
12 
13 #using scripts\shared\system_shared;
14 
15 #namespace perks;
16 
17 ‪REGISTER_SYSTEM( "perks", &‪__init__, undefined )
18 
19 #define TRAIL_FX_FOOT_L "player/fx_plyr_footstep_tracker_l"
20 #define TRAIL_FX_FOOT_R "player/fx_plyr_footstep_tracker_r"
21 #define TRAIL_FX_FLY_L "player/fx_plyr_flying_tracker_l"
22 #define TRAIL_FX_FLY_R "player/fx_plyr_flying_tracker_r"
23 #define TRAIL_FX_FOOT_L_FAST "player/fx_plyr_footstep_tracker_lf"
24 #define TRAIL_FX_FOOT_R_FAST "player/fx_plyr_footstep_tracker_rf"
25 #define TRAIL_FX_FLY_L_FAST "player/fx_plyr_flying_tracker_lf"
26 #define TRAIL_FX_FLY_R_FAST "player/fx_plyr_flying_tracker_rf"
27 
28 #precache( "client_fx", TRAIL_FX_FOOT_L );
29 #precache( "client_fx", TRAIL_FX_FOOT_R );
30 #precache( "client_fx", TRAIL_FX_FLY_L );
31 #precache( "client_fx", TRAIL_FX_FLY_R );
32 #precache( "client_fx", TRAIL_FX_FOOT_L_FAST );
33 #precache( "client_fx", TRAIL_FX_FOOT_R_FAST );
34 #precache( "client_fx", TRAIL_FX_FLY_L_FAST );
35 #precache( "client_fx", TRAIL_FX_FLY_R_FAST );
36 
37 
38 function ‪__init__()
39 {
41 
45 
46  // kill tracker FX when tracked player dies
47  level.killTrackerFXEnable = true;
48  level._monitor_tracker = &‪monitor_tracker_perk;
49 
50  level.sitrepscan1_enable = GetDvarInt( "scr_sitrepscan1_enable", 2 );
51  level.sitrepscan1_setoutline = GetDvarInt( "scr_sitrepscan1_setoutline", 1 );
52  level.sitrepscan1_setsolid = GetDvarInt( "scr_sitrepscan1_setsolid", 1 );
53  level.sitrepscan1_setlinewidth = GetDvarInt( "scr_sitrepscan1_setlinewidth", 1 );
54  level.sitrepscan1_setradius = GetDvarInt( "scr_sitrepscan1_setradius", 50000 );
55  level.sitrepscan1_setfalloff = GetDvarFloat( "scr_sitrepscan1_setfalloff", .01 );
56  level.sitrepscan1_setdesat = GetDvarFloat( "scr_sitrepscan1_setdesat", .4 );
57 
58  level.sitrepscan2_enable = GetDvarInt( "scr_sitrepscan2_enable", 2 );
59  level.sitrepscan2_setoutline = GetDvarInt( "scr_sitrepscan2_setoutline", 10 );
60  level.sitrepscan2_setsolid = GetDvarInt( "scr_sitrepscan2_setsolid", 0 );
61  level.sitrepscan2_setlinewidth = GetDvarInt( "scr_sitrepscan2_setlinewidth", 1 );
62  level.sitrepscan2_setradius = GetDvarInt( "scr_sitrepscan2_setradius", 50000 );
63  level.sitrepscan2_setfalloff = GetDvarFloat( "scr_sitrepscan2_setfalloff", .01 );
64  level.sitrepscan2_setdesat = GetDvarFloat( "scr_sitrepscan2_setdesat", .4 );
65 
66 }
67 
69 {
70  self endon ( "entityshutdown" );
71  while(1)
72  {
73  self oed_sitrepscan_enable( level.sitrepscan1_enable );
74  self oed_sitrepscan_setoutline( level.sitrepscan1_setoutline );
75  self oed_sitrepscan_setsolid( level.sitrepscan1_setsolid );
76  self oed_sitrepscan_setlinewidth( level.sitrepscan1_setlinewidth );
77  self oed_sitrepscan_setradius( level.sitrepscan1_setradius );
78  self oed_sitrepscan_setfalloff( level.sitrepscan1_setfalloff );
79  self oed_sitrepscan_setdesat( level.sitrepscan1_setdesat );
80 
81  self oed_sitrepscan_enable( level.sitrepscan2_enable, 1 );
82  self oed_sitrepscan_setoutline( level.sitrepscan2_setoutline, 1 );
83  self oed_sitrepscan_setsolid( level.sitrepscan2_setsolid, 1 );
84  self oed_sitrepscan_setlinewidth( level.sitrepscan2_setlinewidth, 1 );
85  self oed_sitrepscan_setradius( level.sitrepscan2_setradius, 1 );
86  self oed_sitrepscan_setfalloff( level.sitrepscan2_setfalloff, 1 );
87  self oed_sitrepscan_setdesat( level.sitrepscan2_setdesat, 1 );
88  wait(1.0);
89  }
90 }
91 
92 function ‪flying_callback( local_client_num, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
93 {
94  self.flying = newVal;
95 }
96 
97 function ‪on_local_client_connect( local_client_num )
98 {
99  RegisterRewindFX( local_client_num, ‪TRAIL_FX_FOOT_L );
100  RegisterRewindFX( local_client_num, ‪TRAIL_FX_FOOT_R );
101  RegisterRewindFX( local_client_num, ‪TRAIL_FX_FLY_L );
102  RegisterRewindFX( local_client_num, ‪TRAIL_FX_FLY_R );
103  RegisterRewindFX( local_client_num, ‪TRAIL_FX_FOOT_L_FAST );
104  RegisterRewindFX( local_client_num, ‪TRAIL_FX_FOOT_R_FAST );
105  RegisterRewindFX( local_client_num, ‪TRAIL_FX_FLY_L_FAST );
106  RegisterRewindFX( local_client_num, ‪TRAIL_FX_FLY_R_FAST );
107 }
108 
109 function ‪on_localplayer_spawned( local_client_num )
110 {
111  if( self != GetLocalPlayer( local_client_num ) )
112  return;
113 
114  self thread ‪monitor_tracker_perk_killcam( local_client_num );
115  self thread ‪monitor_detectnearbyenemies( local_client_num );
116  self thread ‪monitor_tracker_existing_players( local_client_num );
117 }
118 
119 function ‪on_player_spawned( local_client_num )
120 {
121  self notify("perks_changed");
122  self thread ‪updateSitrepScan();
123  self thread ‪killTrackerFX_on_death( local_client_num );
124  self thread ‪monitor_tracker_perk( local_client_num );
125 }
126 
127 
128 #define TRACKER_FX_FLY_HEIGHT GetDvarFloat( "perk_tracker_fx_fly_height", 0 )
129 #define TRACKER_FX_FLY_DISTANCE 32
130 #define TRACKER_FX_FLY_DISTANCE_SQ ( TRACKER_FX_FLY_DISTANCE * TRACKER_FX_FLY_DISTANCE )
131 
132 #define TRACKER_FX_FOOT_HEIGHT GetDvarFloat( "perk_tracker_fx_foot_height", 0 )
133 #define TRACKER_FX_FOOT_DISTANCE 32
134 #define TRACKER_FX_FOOT_DISTANCE_SQ ( TRACKER_FX_FOOT_DISTANCE * TRACKER_FX_FOOT_DISTANCE )
135 
136 #define TRACKER_STATIONARY_VEL 1
137 #define TRACKER_STATIONARY_VEL_SQ ( TRACKER_STATIONARY_VEL * TRACKER_STATIONARY_VEL )
138 
139 #define TRACKER_KILLCAM_COUNT 20
140 #define TRACKER_KILLCAM_TIME 5000
141 
142 #define TRACKER_KILLFX_COUNT 40 // keep the handle to the last 40 tracker fx
143 #define TRACKER_KILLFX_TIME 5000 // handle fx older than this are ignored
144 
145 function ‪get_players( local_client_num )
146 {
147  players = [];
148  entities = GetEntArray( local_client_num );
149  if (IsDefined(entities))
150  {
151  foreach( ent in entities )
152  {
153  if ( ent IsPlayer() )
154  {
155  players[players.size] = ent;
156  }
157  }
158  }
159  return players;
160 }
161 
162 function ‪monitor_tracker_existing_players( local_client_num ) // self == localplayer
163 {
164  self endon( "death" );
165  self endon ( "monitor_tracker_existing_players" );
166  self notify( "monitor_tracker_existing_players" );
167  players = GetPlayers( local_client_num );
168  foreach( player in players )
169  {
170  if ( isdefined( player ) && player != self )
171  {
172  player thread ‪monitor_tracker_perk( local_client_num );
173  }
175  }
176 }
177 
178 function ‪monitor_tracker_perk_killcam( local_client_num )
179 {
180  self notify( "monitor_tracker_perk_killcam" + local_client_num );
181  self endon( "monitor_tracker_perk_killcam" + local_client_num );
182  self endon( "entityshutdown" );
183 
184  predictedLocalPlayer = getlocalplayer( local_client_num );
185  if ( !isdefined( level.trackerSpecialtySelf ) )
186  {
187  level.trackerSpecialtySelf = [];
188 
189  level.trackerSpecialtyCounter = 0;
190  }
191 
192  if ( !isdefined( level.trackerSpecialtySelf[local_client_num] ) )
193  {
194  level.trackerSpecialtySelf[local_client_num] = [];
195  }
196 
197  if ( predictedLocalPlayer GetInKillcam( local_client_num ) )
198  {
199  nonPredictedLocalPlayer = GetNonPredictedLocalPlayer( local_client_num );
200  if ( predictedLocalPlayer HasPerk( local_client_num, "specialty_tracker" ) )
201  {
202  ‪serverTime = getServerTime( local_client_num );
203  for(count = 0; count < level.trackerSpecialtySelf[local_client_num].size; count++ )
204  {
205  if ( level.trackerSpecialtySelf[local_client_num][count].time < ‪serverTime && level.trackerSpecialtySelf[local_client_num][count].time > ‪serverTime - ‪TRACKER_KILLCAM_TIME )
206  {
207  positionAndRotationStruct = level.trackerSpecialtySelf[local_client_num][count];
208  ‪tracker_playFX(local_client_num, positionAndRotationStruct);
209  }
210  }
211  }
212  }
213  else
214  {
215  for(;;)
216  {
217  wait 0.05;
218 
219  positionAndRotationStruct = self ‪getTrackerFXPosition( local_client_num );
220  if ( isdefined ( positionAndRotationStruct ) )
221  {
222  positionAndRotationStruct.time = getServerTime( local_client_num );
223 
224  level.trackerSpecialtySelf[local_client_num][level.trackerSpecialtyCounter] = positionAndRotationStruct;
225  level.trackerSpecialtyCounter++;
226  if ( level.trackerSpecialtyCounter > ‪TRACKER_KILLCAM_COUNT )
227  {
228  level.trackerSpecialtyCounter = 0;
229  }
230  }
231  }
232  }
233 }
234 
235 function ‪monitor_tracker_perk( local_client_num )
236 {
237  self notify( "monitor_tracker_perk" );
238  self endon( "monitor_tracker_perk" );
239  self endon( "death" );
240  self endon( "disconnect" );
241  self endon( "entityshutdown" );
242 
243  self.flying = false;
244  self.tracker_flying = false;
245  self.tracker_last_pos = self.origin;
246 
247  offset = ( 0,0,‪TRACKER_FX_FOOT_HEIGHT );
249 
250  while(IsDefined(self))
251  {
252  wait 0.05;
253 
254  watcher = GetLocalPlayer( local_client_num );
255 
256  if ( !isdefined( watcher ) || self == watcher )
257  return; // no need to monitor the watcher
258 
259  if ( IsDefined( watcher ) && watcher HasPerk( local_client_num, "specialty_tracker" ) )
260  {
261  friend = self isFriendly( local_client_num, true );
262 
263  camoOff = true;
264  if( !isDefined( self._isClone ) || !self._isClone )
265  {
266  camo_val = self ‪clientfield::get( "camo_shader" );
267  if( camo_val != ‪GADGET_CAMO_SHADER_OFF )
268  {
269  camoOff = false;
270  }
271  }
272 
273  if ( !friend && IsAlive(self) && camoOff )
274  {
275  positionAndRotationStruct = self ‪getTrackerFXPosition( local_client_num );
276  if ( isdefined( positionAndRotationStruct ) )
277  {
278  self ‪tracker_playFX(local_client_num, positionAndRotationStruct);
279  }
280  }
281  else
282  {
283  self.tracker_flying = false;
284  }
285  }
286  }
287 }
288 
289 function ‪tracker_playFX( local_client_num, positionAndRotationStruct )
290 {
291  handle = playFX( local_client_num, positionAndRotationStruct.fx, positionAndRotationStruct.pos, positionAndRotationStruct.fwd, positionAndRotationStruct.up );
292 
293  self ‪killTrackerFX_track( local_client_num, handle );
294 }
295 
296 function ‪killTrackerFX_track( local_client_num, handle )
297 {
298  if ( handle && isdefined( self.killTrackerFX ) )
299  {
300  ‪serverTime = getServerTime( local_client_num );
301 
302  killFXStruct = SpawnStruct();
303  killFXStruct.time = ‪serverTime;
304  killFXStruct.handle = handle;
305 
306  index = self.killTrackerFX.index;
307 
308  if ( index >= ‪TRACKER_KILLFX_COUNT )
309  {
310  index = 0;
311  }
312 
313  self.killTrackerFX.array[index] = killFXStruct;
314  self.killTrackerFX.index = index + 1;
315  }
316 }
317 
318 function ‪killTrackerFX_on_death( local_client_num )
319 {
320  self endon( "disconnect" );
321 
322  if ( !‪IS_TRUE( level.killTrackerFXEnable ) )
323  {
324  return;
325  }
326 
327  predictedLocalPlayer = getlocalplayer( local_client_num );
328 
329  if ( predictedLocalPlayer == self )
330  {
331  return;
332  }
333 
334  if ( isdefined( self.killTrackerFX ) )
335  {
336  self.killTrackerFX.array = [];
337  self.killTrackerFX.index = 0;
338  self.killTrackerFX = undefined;
339  }
340 
341  killTrackerFX = SpawnStruct();
342  killTrackerFX.array = [];
343  killTrackerFX.index = 0;
344 
345  self.killTrackerFX = killTrackerFX;
346 
347  self waittill( "entityshutdown" );
348 
349  ‪serverTime = getServerTime( local_client_num );
350 
351  foreach( killFXStruct in killTrackerFX.array )
352  {
353  if ( isdefined( killFXStruct ) && killFXStruct.time + ‪TRACKER_KILLFX_TIME > ‪serverTime )
354  {
355  KillFX( local_client_num, killFXStruct.handle );
356  }
357  }
358 
359  killTrackerFX.array = [];
360  killTrackerFX.index = 0;
361  killTrackerFX = undefined;
362 }
363 
364 function ‪getTrackerFXPosition( local_client_num )
365 {
366  positionAndRotation = undefined;
367  player = self;
368  if( ‪IS_TRUE( self._isClone ) )
369  {
370  player = self.owner;
371  }
372  playFastFX = player hasperk( local_client_num, "specialty_trackerjammer" );
373  if ( ‪IS_TRUE(self.flying) )
374  {
375  offset = ( 0,0,‪TRACKER_FX_FLY_HEIGHT );
377  if ( ‪IS_TRUE( self.trailRightFoot ) )
378  {
379  if ( playFastFX )
380  {
382  }
383  else
384  {
385  fx = ‪TRAIL_FX_FLY_R;
386  }
387  }
388  else
389  {
390  if ( playFastFX )
391  {
393  }
394  else
395  {
396  fx = ‪TRAIL_FX_FLY_L;
397  }
398  }
399  }
400  else
401  {
402  offset = ( 0,0,‪TRACKER_FX_FOOT_HEIGHT );
404  if ( ‪IS_TRUE( self.trailRightFoot ) )
405  {
406  if ( playFastFX )
407  {
409  }
410  else
411  {
412  fx = ‪TRAIL_FX_FOOT_R;
413  }
414  }
415  else
416  {
417  if ( playFastFX )
418  {
420  }
421  else
422  {
423  fx = ‪TRAIL_FX_FOOT_L;
424  }
425  }
426  }
427 
428  pos = self.origin + offset;
429  fwd = AnglesToForward( self.angles );
430  right = AnglesToRight( self.angles );
431  up = AnglesToUp( self.angles );
432 
433  vel = self getvelocity();
434  if (LengthSquared(vel) > ‪TRACKER_STATIONARY_VEL_SQ)
435  {
436  up = VectorCross(vel,right);
437  if ( LengthSquared( up ) < 0.0001 )
438  {
439  up = VectorCross(fwd, vel);
440  }
441  fwd = vel;
442  }
443 
444  if( self isplayer() && self isplayerwallrunning() )
445  {
446  if( self isplayerwallrunningright() )
447  {
448  up = VectorCross( up, fwd );
449  }
450  else
451  {
452  up = VectorCross( fwd, up );
453  }
454  }
455 
456  if ( !self.tracker_flying )
457  {
458  self.tracker_flying = true;
459  self.tracker_last_pos = self.origin;
460  }
461  else
462  {
463  if ( DistanceSquared( self.tracker_last_pos, pos ) > dist2 )
464  {
465  positionAndRotation = SpawnStruct();
466  positionAndRotation.fx = fx;
467  positionAndRotation.pos = pos;
468  positionAndRotation.fwd = fwd;
469  positionAndRotation.up = up;
470 
471  self.tracker_last_pos = self.origin;
472 
473  if ( ‪IS_TRUE( self.trailRightFoot ) )
474  {
475  self.trailRightFoot = false;
476  }
477  else
478  {
479  self.trailRightFoot = true;
480  }
481  }
482  }
483 
484  return positionAndRotation;
485 }
486 
487 
488 #define DETECT_NEARBY_ENEMIES_WAIT_TIME 0.05
489 #define DETECT_Z_THRESHOLD 50
490 #define DETECT_LOSE_Z_THRESHOLD 350
491 #define DETECT_RADIUS_NEAR 300
492 #define DETECT_LOSE_RADIUS_NEAR 350
493 #define DETECT_RADIUS 300
494 #define DETECT_LOSE_RADIUS 350
495 #define DETECT_INDICATOR_APPEAR_DELAY 0.05
496 #define DETECT_INDICATOR_LOST_DELAY 0.05
497 
498 
499 #define DETECT_FRONT_MASK ( 1 << 0 )
500 #define DETECT_BACK_MASK ( 1 << 1 )
501 #define DETECT_LEFT_MASK ( 1 << 2 )
502 #define DETECT_RIGHT_MASK ( 1 << 3 )
503 
504 
505 function ‪monitor_detectnearbyenemies( local_client_num )
506 {
507  self endon( "entityshutdown" );
508 
509  controllerModel = GetUIModelForController( local_client_num );
510  sixthsenseModel = CreateUIModel( controllerModel, "hudItems.sixthsense" );
511 
512  enemyNearbyTime = 0.0;
513  enemyLostTime = 0.0;
514  previousEnemyDetectedBitField = 0;
515 
516  SetUIModelValue( sixthsenseModel, 0 );
517 
518  while(1)
519  {
520  localPlayer = GetLocalPlayer( local_client_num );
521 
522  if ( !( localPlayer IsPlayer() ) ||
523  ( localPlayer HasPerk( local_client_num, "specialty_detectnearbyenemies" ) == false ) ||
524  ( localPlayer GetInKillcam( local_client_num ) == true || IsAlive( localPlayer ) == false ) )
525  {
526  SetUIModelValue( sixthsenseModel, 0 );
527  previousEnemyDetectedBitField = 0;
528  self ‪util::waittill_any( "death", "spawned", "perks_changed" );
529  continue;
530  }
531 
532  enemyNearbyFront = false;
533  enemyNearbyBack = false;
534  enemyNearbyLeft = false;
535  enemyNearbyRight = false;
536  enemyDetectedBitField = 0;
537 
538  team = localPlayer.team;
539  innerDetect = getdvarint( "specialty_detectnearbyenemies_inner", 1 );
540  outerDetect = getdvarint( "specialty_detectnearbyenemies_outer", 1 );
541  zDetect = getdvarint( "specialty_detectnearbyenemies_zthreshold", 1 );
542 
543  localPlayerAnglesToForward = anglesToForward( localPlayer.Angles );
544 
545  players = getplayers( local_client_num );
546  clones = getclones( local_client_num );
547  sixthSenseEnts = arraycombine( players, clones, false, false );
548  foreach( sixthSenseEnt in sixthSenseEnts )
549  {
550  if ( sixthSenseEnt isfriendly( local_client_num, true ) || sixthSenseEnt == localPlayer ) // SJC: IsEntityFriendly check returns false on yourself in FFA
551  continue;
552 
553  if( !isAlive( sixthSenseEnt ) )
554  continue;
555 
556  distanceScalarSq = 1;
557  zScalarSq = 1;
558 
559  player = sixthSenseEnt;
560  if( ‪IS_TRUE( sixthSenseEnt._isClone ) )
561  {
562  player = sixthSenseEnt.owner;
563  }
564 
565  if ( player isplayer() && player HasPerk( local_client_num, "specialty_sixthsensejammer" ) )
566  {
567  distanceScalarSq = GetDvarFloat( "specialty_sixthsensejammer_distance_scalar", 0.01 );
568  zScalarSq = GetDvarFloat( "specialty_sixthsensejammer_z_scalar", 0.01 );
569  }
570 
571  if ( previousEnemyDetectedBitField == 0 )
572  {
573  distanceSq = ‪DETECT_RADIUS * ‪DETECT_RADIUS * distanceScalarSq;
574  }
575  else
576  {
577  distanceSq = ‪DETECT_LOSE_RADIUS * ‪DETECT_LOSE_RADIUS * distanceScalarSq;
578  }
579 
580  distCurrentSq = DistanceSquared( sixthSenseEnt.origin, localPlayer.origin );
581  zdistCurrent = sixthSenseEnt.origin[2] - localPlayer.origin[2];
582  zdistCurrentSq = zdistCurrent * zdistCurrent;
583  if ( distCurrentSq < distanceSq )
584  {
585  distanceMask = 1;
586 
587  if ( previousEnemyDetectedBitField > 16 )
588  {
589  zNearbyCheck = ‪DETECT_LOSE_Z_THRESHOLD * ‪DETECT_LOSE_Z_THRESHOLD * zScalarSq;
590  }
591  else
592  {
593  zNearbyCheck = ‪DETECT_Z_THRESHOLD * ‪DETECT_Z_THRESHOLD * zScalarSq;
594  }
595 
596  if ( zdistCurrentSq < zNearbyCheck && zDetect )
597  {
598  distanceMask = 16;
599  }
600 
601  vector = sixthSenseEnt.origin - localPlayer.origin;
602  vector = ( vector[0], vector[1], 0 );
603  vectorFlat = vectorNormalize( vector );
604  cosAngle = VectorDot( vectorFlat, localPlayerAnglesToForward );
605 
606  if ( cosAngle > ‪COS_45 )
607  {
608  enemyDetectedBitField = enemyDetectedBitField | ( ‪DETECT_FRONT_MASK * distanceMask );
609 
610  }
611  else if ( cosAngle < -‪COS_45 )
612  {
613  enemyDetectedBitField = enemyDetectedBitField | ( ‪DETECT_BACK_MASK * distanceMask );
614  }
615  else
616  {
617  localPlayerAnglesToRight = anglesToRight( localPlayer.Angles );
618  cosAngle = VectorDot( vectorFlat, localPlayerAnglesToRight );
619  if ( cosAngle < 0 )
620  {
621  enemyDetectedBitField = enemyDetectedBitField | ( ‪DETECT_LEFT_MASK * distanceMask );
622  }
623  else
624  {
625  enemyDetectedBitField = enemyDetectedBitField | ( ‪DETECT_RIGHT_MASK * distanceMask );
626  }
627  }
628  }
629  }
630 
631  if ( enemyDetectedBitField )
632  {
633  enemyLostTime = 0;
634  if ( previousEnemyDetectedBitField != enemyDetectedBitField && enemyNearbyTime >= ‪DETECT_INDICATOR_APPEAR_DELAY )
635  {
636  SetUIModelValue( sixthsenseModel, enemyDetectedBitField );
637  enemyNearbyTime = 0;
638 
639  diff = enemyDetectedBitField ^ previousEnemyDetectedBitField;
640  if ( diff & enemyDetectedBitField )
641  {
642  // SOUND DEPT
643  // player has entered area
644  self playsound (0, "uin_sixth_sense_ping_on");
645  }
646  if ( diff & previousEnemyDetectedBitField )
647  {
648  // SOUND DEPT
649  // player has left area
650  //self playsound (0, "uin_sixth_sense_off");
651  }
652 
653  previousEnemyDetectedBitField = enemyDetectedBitField;
654  }
655  enemyNearbyTime += ‪DETECT_NEARBY_ENEMIES_WAIT_TIME;
656  }
657  else
658  {
659  enemyNearbyTime = 0;
660  if ( previousEnemyDetectedBitField != 0 && enemyLostTime >= ‪DETECT_INDICATOR_LOST_DELAY )
661  {
662  SetUIModelValue( sixthsenseModel, 0 );
663  previousEnemyDetectedBitField = 0;
664  }
665  enemyLostTime += ‪DETECT_NEARBY_ENEMIES_WAIT_TIME;
666  }
667 
669  }
670  SetUIModelValue( sixthsenseModel, 0 );
671 }
672 
‪DETECT_BACK_MASK
‪#define DETECT_BACK_MASK
Definition: _perks.csc:500
‪TRACKER_KILLCAM_COUNT
‪#define TRACKER_KILLCAM_COUNT
Definition: _perks.csc:139
‪TRACKER_FX_FOOT_DISTANCE_SQ
‪#define TRACKER_FX_FOOT_DISTANCE_SQ
Definition: _perks.csc:134
‪get_players
‪function get_players(local_client_num)
Definition: _perks.csc:145
‪DETECT_LEFT_MASK
‪#define DETECT_LEFT_MASK
Definition: _perks.csc:501
‪TRACKER_KILLFX_TIME
‪#define TRACKER_KILLFX_TIME
Definition: _perks.csc:143
‪TRAIL_FX_FOOT_R_FAST
‪#define TRAIL_FX_FOOT_R_FAST
Definition: _perks.csc:24
‪on_localplayer_spawned
‪function on_localplayer_spawned(local_client_num)
Definition: _perks.csc:109
‪COS_45
‪#define COS_45
Definition: shared.gsh:514
‪GADGET_CAMO_SHADER_OFF
‪#define GADGET_CAMO_SHADER_OFF
Definition: _ability_util.gsh:54
‪TRACKER_STATIONARY_VEL_SQ
‪#define TRACKER_STATIONARY_VEL_SQ
Definition: _perks.csc:137
‪TRAIL_FX_FLY_L_FAST
‪#define TRAIL_FX_FLY_L_FAST
Definition: _perks.csc:25
‪TRAIL_FX_FLY_R
‪#define TRAIL_FX_FLY_R
Definition: _perks.csc:22
‪DETECT_INDICATOR_APPEAR_DELAY
‪#define DETECT_INDICATOR_APPEAR_DELAY
Definition: _perks.csc:495
‪DETECT_Z_THRESHOLD
‪#define DETECT_Z_THRESHOLD
Definition: _perks.csc:489
‪CF_CALLBACK_ZERO_ON_NEW_ENT
‪#define CF_CALLBACK_ZERO_ON_NEW_ENT
Definition: version.gsh:103
‪VERSION_SHIP
‪#define VERSION_SHIP
Definition: version.gsh:36
‪tracker_playFX
‪function tracker_playFX(local_client_num, positionAndRotationStruct)
Definition: _perks.csc:289
‪TRAIL_FX_FOOT_L_FAST
‪#define TRAIL_FX_FOOT_L_FAST
Definition: _perks.csc:23
‪on_player_spawned
‪function on_player_spawned(local_client_num)
Definition: _perks.csc:119
‪getTrackerFXPosition
‪function getTrackerFXPosition(local_client_num)
Definition: _perks.csc:364
‪IS_TRUE
‪#define IS_TRUE(__a)
Definition: shared.gsh:251
‪DETECT_LOSE_RADIUS
‪#define DETECT_LOSE_RADIUS
Definition: _perks.csc:494
‪monitor_tracker_perk_killcam
‪function monitor_tracker_perk_killcam(local_client_num)
Definition: _perks.csc:178
‪TRAIL_FX_FOOT_L
‪#define TRAIL_FX_FOOT_L
Definition: _perks.csc:19
‪get
‪function get(kvp_value, kvp_key="targetname")
Definition: struct.csc:13
‪monitor_detectnearbyenemies
‪function monitor_detectnearbyenemies(local_client_num)
Definition: _perks.csc:505
‪TRACKER_KILLCAM_TIME
‪#define TRACKER_KILLCAM_TIME
Definition: _perks.csc:140
‪__init__
‪function __init__()
Definition: _perks.csc:38
‪on_spawned
‪function on_spawned(func, obj)
Definition: callbacks_shared.csc:245
‪on_localclient_connect
‪function on_localclient_connect(localClientNum)
Definition: ctf.csc:20
‪DETECT_INDICATOR_LOST_DELAY
‪#define DETECT_INDICATOR_LOST_DELAY
Definition: _perks.csc:496
‪updateSitrepScan
‪function updateSitrepScan()
Definition: _perks.csc:68
‪TRAIL_FX_FOOT_R
‪#define TRAIL_FX_FOOT_R
Definition: _perks.csc:20
‪DETECT_LOSE_Z_THRESHOLD
‪#define DETECT_LOSE_Z_THRESHOLD
Definition: _perks.csc:490
‪CF_HOST_ONLY
‪#define CF_HOST_ONLY
Definition: version.gsh:102
‪waittill_any
‪function waittill_any(str_notify1, str_notify2, str_notify3, str_notify4, str_notify5)
Definition: util_shared.csc:375
‪TRAIL_FX_FLY_L
‪#define TRAIL_FX_FLY_L
Definition: _perks.csc:21
‪on_local_client_connect
‪function on_local_client_connect(local_client_num)
Definition: _perks.csc:97
‪REGISTER_SYSTEM
‪#define REGISTER_SYSTEM(__sys, __func_init_preload, __reqs)
Definition: shared.gsh:204
‪monitor_tracker_perk
‪function monitor_tracker_perk(local_client_num)
Definition: _perks.csc:235
‪TRACKER_FX_FLY_HEIGHT
‪#define TRACKER_FX_FLY_HEIGHT
Definition: _perks.csc:128
‪killTrackerFX_on_death
‪function killTrackerFX_on_death(local_client_num)
Definition: _perks.csc:318
‪killTrackerFX_track
‪function killTrackerFX_track(local_client_num, handle)
Definition: _perks.csc:296
‪DETECT_RADIUS
‪#define DETECT_RADIUS
Definition: _perks.csc:493
‪register
‪function register()
Definition: _ai_tank.gsc:126
‪TRACKER_KILLFX_COUNT
‪#define TRACKER_KILLFX_COUNT
Definition: _perks.csc:142
‪flying_callback
‪function flying_callback(local_client_num, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump)
Definition: _perks.csc:92
‪TRAIL_FX_FLY_R_FAST
‪#define TRAIL_FX_FLY_R_FAST
Definition: _perks.csc:26
‪TRACKER_FX_FLY_DISTANCE_SQ
‪#define TRACKER_FX_FLY_DISTANCE_SQ
Definition: _perks.csc:130
‪DETECT_RIGHT_MASK
‪#define DETECT_RIGHT_MASK
Definition: _perks.csc:502
‪monitor_tracker_existing_players
‪function monitor_tracker_existing_players(local_client_num)
Definition: _perks.csc:162
‪WAIT_CLIENT_FRAME
‪#define WAIT_CLIENT_FRAME
Definition: shared.gsh:266
‪DETECT_FRONT_MASK
‪#define DETECT_FRONT_MASK
Definition: _perks.csc:499
‪TRACKER_FX_FOOT_HEIGHT
‪#define TRACKER_FX_FOOT_HEIGHT
Definition: _perks.csc:132
‪DETECT_NEARBY_ENEMIES_WAIT_TIME
‪#define DETECT_NEARBY_ENEMIES_WAIT_TIME
Definition: _perks.csc:488
‪serverTime
‪function serverTime()
Definition: util_shared.csc:1540