‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
_threat_detector.csc
Go to the documentation of this file.
1 #using scripts\codescripts\struct;
2 #using scripts\shared\callbacks_shared;
3 #using scripts\shared\clientfield_shared;
4 #using scripts\shared\system_shared;
5 #using scripts\shared\util_shared;
6 #using scripts\shared\weapons\_decoy;
7 #using scripts\shared\weapons\_weaponobjects;
8 #using scripts\shared\duplicaterender_mgr;
9 #insert scripts\shared\clientfields.gsh;
10 #insert scripts\shared\shared.gsh;
11 #insert scripts\shared\version.gsh;
12 
13 #namespace threat_detector;
14 
15 ‪REGISTER_SYSTEM( "threat_detector", &‪__init__, undefined )
16 
17 function ‪__init__()
18 {
19  level.sensorHandle = 1;
20  level.sensors = [];
21 
23 }
24 
25 function ‪spawnedThreatDetector( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump)
26 {
27  if( newVal != 1 )
28  {
29  return;
30  }
31 
32  if( GetLocalPlayer( localClientNum ) != self.owner )
33  {
34  return;
35  }
36 
37  sensorIndex = level.sensors.size;
38  level.sensorHandle++;
39 
40  level.sensors[ sensorIndex ] = spawnstruct();
41  level.sensors[ sensorIndex ].handle = level.sensorHandle;
42  level.sensors[ sensorIndex ].cent = self;
43  level.sensors[ sensorIndex ].team = self.team;
44  level.sensors[ sensorIndex ].owner = self GetOwner( localClientNum );
45 
46  level.sensors[ sensorIndex ].owner AddSensorGrenadeArea( self.origin, level.sensorHandle );
47 
48  self.owner thread ‪sensorGrenadeThink( self, level.sensorHandle, localClientNum );
49  self.owner thread ‪clearThreatDetectorOnDelete( self, level.sensorHandle, localClientNum );
50 }
51 
52 function ‪sensorGrenadeThink( sensorEnt, sensorHandle, localClientNum )
53 {
54  sensorEnt endon( "entityshutdown" );
55 
56  if( isdefined( sensorEnt.owner ) == false )
57  {
58  return;
59  }
60 
61  while( true )
62  {
63  players = GetPlayers( localClientNum );
64  foreach( player in players )
65  {
66  if( self ‪util::IsEnemyPlayer( player ) )
67  {
68  if( player hasPerk( localClientNum, "specialty_nomotionsensor" ) || player hasPerk( localClientNum, "specialty_sengrenjammer" ) )
69  {
70  player ‪duplicate_render::set_player_threat_detected( localClientNum, false );
71  continue;
72  }
73 
74  threatDetectorRadius = GetDvarFloat( "cg_threatDetectorRadius", 0 );
75  threatDetectorRadiusSqrd = threatDetectorRadius * threatDetectorRadius;
76 
77  if( DistanceSquared( player.origin, sensorEnt.origin ) < threatDetectorRadiusSqrd )
78  {
79  player ‪duplicate_render::set_player_threat_detected( localClientNum, true );
80  }
81  else
82  {
83  player ‪duplicate_render::set_player_threat_detected( localClientNum, false );
84  }
85  }
86  }
87 
88  wait( 1 );
89  }
90 }
91 
92 function ‪clearThreatDetectorOnDelete( sensorEnt, sensorHandle, localClientNum )
93 {
94  sensorEnt waittill( "entityshutdown" );
95 
96  entIndex = 0;
97  for( i = 0; i < level.sensors.size; i++ )
98  {
99  size = level.sensors.size;
100  if( sensorHandle == level.sensors[ i ].handle )
101  {
102  level.sensors[ i ].owner RemoveSensorGrenadeArea( sensorHandle );
103  entIndex = 0;
104  break;
105  }
106  }
107 
108  players = GetPlayers( localClientNum );
109  foreach( player in players )
110  {
111  if( self ‪util::IsEnemyPlayer( player ) )
112  {
113  player ‪duplicate_render::set_player_threat_detected( localClientNum, false );
114  }
115  }
116 }
‪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
‪__init__
‪function __init__()
Definition: _threat_detector.csc:17
‪IsEnemyPlayer
‪function IsEnemyPlayer(player)
Definition: util_shared.csc:1220
‪set_player_threat_detected
‪function set_player_threat_detected(localClientNum, on_off)
Definition: duplicaterender_mgr.csc:469
‪spawnedThreatDetector
‪function spawnedThreatDetector(localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump)
Definition: _threat_detector.csc:25
‪CF_HOST_ONLY
‪#define CF_HOST_ONLY
Definition: version.gsh:102
‪REGISTER_SYSTEM
‪#define REGISTER_SYSTEM(__sys, __func_init_preload, __reqs)
Definition: shared.gsh:204
‪sensorGrenadeThink
‪function sensorGrenadeThink(sensorEnt, sensorHandle, localClientNum)
Definition: _threat_detector.csc:52
‪register
‪function register()
Definition: _ai_tank.gsc:126
‪clearThreatDetectorOnDelete
‪function clearThreatDetectorOnDelete(sensorEnt, sensorHandle, localClientNum)
Definition: _threat_detector.csc:92