‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
_perks.gsc
Go to the documentation of this file.
1 #using scripts\shared\callbacks_shared;
2 #using scripts\shared\clientfield_shared;
3 #using scripts\shared\flag_shared;
4 #using scripts\shared\system_shared;
5 #using scripts\shared\util_shared;
6 #using scripts\shared\weapons\_tacticalinsertion;
7 
8 #insert scripts\shared\clientfields.gsh;
9 #insert scripts\shared\shared.gsh;
10 #insert scripts\shared\version.gsh;
11 
12 #using scripts\mp\gametypes\_spawnlogic;
13 
14 
15 #using scripts\mp\_util;
16 #using scripts\mp\killstreaks\_airsupport;
17 
18 #namespace spawning;
19 
20 ‪REGISTER_SYSTEM( "perks", &‪__init__, undefined )
21 
22 function ‪__init__()
23 {
24  ‪clientfield::register( "allplayers", "flying", ‪VERSION_SHIP, 1, "int" );
25 
28 }
29 
30 function ‪on_player_connect( local_client_num )
31 {
32 }
33 
34 function ‪on_player_spawned( local_client_num )
35 {
36  self thread ‪monitorGPSJammer();
37  self thread ‪monitorSenGrenJammer();
38  self thread ‪monitorFlight();
39 }
40 
41 function ‪monitorFlight()
42 {
43  self endon( "death" );
44  self endon( "disconnect" );
45 
46  self.flying = false;
47  while( IsDefined(self) )
48  {
49  flying = !( self isOnGround() );
50  if ( self.flying != flying )
51  {
52  self ‪clientfield::set("flying",flying);
53  self.flying = flying;
54  }
55 
57  }
58 }
59 
61 {
62  self endon( "death" );
63  self endon( "disconnect" );
64 
65 
66  require_perk = true;
67 
68  if ( require_perk && self HasPerk( "specialty_gpsjammer" ) == false )
69  return;
70 
71  self ‪clientfield::set( ‪CLIENT_FIELD_FLAG_GPS_JAMMER_ACTIVE, ( self HasPerk( "specialty_gpsjammer" ) ? 1 : 0 ) );
72  gracePeriods = GetDvarInt( "perk_gpsjammer_graceperiods", 4 );
73  minspeed = GetDvarInt( "perk_gpsjammer_min_speed", 100 );
74  mindistance = GetDvarInt( "perk_gpsjammer_min_distance", 10 );
75  timePeriod = GetDvarInt( "perk_gpsjammer_time_period", 200 );
76  timePeriodSec = timePeriod/1000;
77  minspeedSq = minspeed * minspeed;
78  mindistanceSq = mindistance * mindistance;
79 
80  if ( minspeedSq == 0 ) // will never fail min speed check below so early out.
81  return;
82 
83  assert ( timePeriodSec >= 0.05 );
84  if ( timePeriodSec < 0.05 )
85  return;
86 
87  hasPerk = true;
88  ‪stateChange = false;
89  failedDistanceCheck = false;
90  currentFailCount = 0;
91  timePassed = 0;
92  timeSinceDistanceCheck = 0;
93  previousOrigin = self.origin;
94  GPSJammerProtection = false;
95 
96  while(1)
97  {
98  GPSJammerProtection = false;
99  if ( ‪util::isUsingRemote() || ‪IS_TRUE( self.isPlanting ) || ‪IS_TRUE( self.isDefusing ) )
100  {
101  GPSJammerProtection = true;
102  }
103  else
104  {
105  if ( timeSinceDistanceCheck > 1 )
106  {
107  timeSinceDistanceCheck = 0;
108  if ( DistanceSquared( previousOrigin, self.origin ) < mindistanceSq )
109  {
110  failedDistanceCheck = true;
111  }
112  else
113  {
114  failedDistanceCheck = false;
115  }
116  previousOrigin = self.origin;
117  }
118  velocity = self GetVelocity();
119 
120  speedsq = lengthsquared( velocity );
121 
122  if ( speedSq > minspeedSq && failedDistanceCheck == false )
123  {
124  GPSJammerProtection = true;
125  }
126  }
127 
128  if ( GPSJammerProtection == true && self HasPerk( "specialty_gpsjammer" ) )
129  {
130  currentFailCount = 0;
131  if ( hasPerk == false )
132  {
133  ‪stateChange = false;
134  hasPerk = true;
136  }
137  }
138  else
139  {
140  currentFailCount++;
141 
142  if ( hasPerk == true && currentFailCount >= gracePeriods )
143  {
144  ‪stateChange = true;
145  hasPerk = false;
147  }
148  }
149  if ( ‪stateChange == true )
150  {
151  level notify("radar_status_change");
152  }
153  timeSinceDistanceCheck += timePeriodSec;
154  wait( timePeriodSec );
155  }
156 }
157 
159 {
160  self endon( "death" );
161  self endon( "disconnect" );
162 
163  require_perk = true;
164 
165  if ( require_perk && self HasPerk( "specialty_sengrenjammer" ) == false )
166  return;
167 
168  self ‪clientfield::set( ‪CLIENT_FIELD_FLAG_SG_JAMMER_ACTIVE, ( self HasPerk( "specialty_sengrenjammer" ) ? 1 : 0 ) );
169  gracePeriods = GetDvarInt( "perk_sgjammer_graceperiods", 4 );
170  minspeed = GetDvarInt( "perk_sgjammer_min_speed", 100 );
171  mindistance = GetDvarInt( "perk_sgjammer_min_distance", 10 );
172  timePeriod = GetDvarInt( "perk_sgjammer_time_period", 200 );
173  timePeriodSec = timePeriod/1000;
174  minspeedSq = minspeed * minspeed;
175  mindistanceSq = mindistance * mindistance;
176 
177  if ( minspeedSq == 0 ) // will never fail min speed check below so early out.
178  return;
179 
180  assert ( timePeriodSec >= 0.05 );
181  if ( timePeriodSec < 0.05 )
182  return;
183 
184  hasPerk = true;
185  ‪stateChange = false;
186  failedDistanceCheck = false;
187  currentFailCount = 0;
188  timePassed = 0;
189  timeSinceDistanceCheck = 0;
190  previousOrigin = self.origin;
191  SGJammerProtection = false;
192 
193  while(1)
194  {
195  SGJammerProtection = false;
196  if ( ‪util::isUsingRemote() || ‪IS_TRUE( self.isPlanting ) || ‪IS_TRUE( self.isDefusing ) )
197  {
198  SGJammerProtection = true;
199  }
200  else
201  {
202  if ( timeSinceDistanceCheck > 1 )
203  {
204  timeSinceDistanceCheck = 0;
205  if ( DistanceSquared( previousOrigin, self.origin ) < mindistanceSq )
206  {
207  failedDistanceCheck = true;
208  }
209  else
210  {
211  failedDistanceCheck = false;
212  }
213  previousOrigin = self.origin;
214  }
215  velocity = self GetVelocity();
216 
217  speedsq = lengthsquared( velocity );
218 
219  if ( speedSq > minspeedSq && failedDistanceCheck == false )
220  {
221  SGJammerProtection = true;
222  }
223  }
224 
225  if ( SGJammerProtection == true && self HasPerk( "specialty_sengrenjammer" ) )
226  {
227  currentFailCount = 0;
228  if ( hasPerk == false )
229  {
230  ‪stateChange = false;
231  hasPerk = true;
233  }
234  }
235  else
236  {
237  currentFailCount++;
238 
239  if ( hasPerk == true && currentFailCount >= gracePeriods )
240  {
241  ‪stateChange = true;
242  hasPerk = false;
244  }
245  }
246  if ( ‪stateChange == true )
247  {
248  level notify("radar_status_change");
249  }
250  timeSinceDistanceCheck += timePeriodSec;
251  wait( timePeriodSec );
252  }
253 }
254 
‪on_player_spawned
‪function on_player_spawned(local_client_num)
Definition: _perks.gsc:34
‪on_player_connect
‪function on_player_connect(local_client_num)
Definition: _perks.gsc:30
‪VERSION_SHIP
‪#define VERSION_SHIP
Definition: version.gsh:36
‪monitorSenGrenJammer
‪function monitorSenGrenJammer()
Definition: _perks.gsc:158
‪CLIENT_FIELD_FLAG_GPS_JAMMER_ACTIVE
‪#define CLIENT_FIELD_FLAG_GPS_JAMMER_ACTIVE
Definition: clientfields.gsh:11
‪IS_TRUE
‪#define IS_TRUE(__a)
Definition: shared.gsh:251
‪__init__
‪function __init__()
Definition: _perks.gsc:22
‪monitorFlight
‪function monitorFlight()
Definition: _perks.gsc:41
‪isUsingRemote
‪function isUsingRemote()
Definition: util_shared.gsc:2705
‪stateChange
‪function stateChange(localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump)
Definition: _qrdrone.csc:68
‪on_spawned
‪function on_spawned(func, obj)
Definition: callbacks_shared.csc:245
‪monitorGPSJammer
‪function monitorGPSJammer()
Definition: _perks.gsc:60
‪REGISTER_SYSTEM
‪#define REGISTER_SYSTEM(__sys, __func_init_preload, __reqs)
Definition: shared.gsh:204
‪set
‪function set(str_field_name, n_value)
Definition: clientfield_shared.gsc:34
‪register
‪function register()
Definition: _ai_tank.gsc:126
‪on_connect
‪function on_connect()
Definition: _arena.gsc:20
‪CLIENT_FIELD_FLAG_SG_JAMMER_ACTIVE
‪#define CLIENT_FIELD_FLAG_SG_JAMMER_ACTIVE
Definition: clientfields.gsh:12
‪WAIT_SERVER_FRAME
‪#define WAIT_SERVER_FRAME
Definition: shared.gsh:265