‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
replay_gun.gsc
Go to the documentation of this file.
1 #using scripts\codescripts\struct;
2 #using scripts\shared\array_shared;
3 #using scripts\shared\callbacks_shared;
4 #using scripts\shared\clientfield_shared;
5 #using scripts\shared\flagsys_shared;
6 #using scripts\shared\hud_util_shared;
7 #using scripts\shared\system_shared;
8 #using scripts\shared\util_shared;
9 #using scripts\shared\abilities\_ability_util;
10 
11 #insert scripts\shared\weapons\replay_gun.gsh;
12 #insert scripts\shared\shared.gsh;
13 #insert scripts\shared\version.gsh;
14 
15 #namespace replay_gun;
16 
17 ‪REGISTER_SYSTEM( "replay_gun", &‪__init__, undefined )
18 
19 function ‪__init__()
20 {
22 }
23 
25 {
26  self endon( "disconnect" );
27  self endon( "death" );
28  self endon( "spawned_player" );
29  self endon("killReplayGunMonitor");
30 
31  while( 1 )
32  {
33  self waittill( "weapon_change_complete", weapon );
34 
35  self WeaponLockFree();
36  if ( ‪IS_TRUE(weapon.usesPivotTargeting) )
37  {
38  self thread ‪watch_lockon(weapon);
39  }
40  }
41 }
42 
43 function ‪watch_lockon(weapon)
44 {
45  self endon( "disconnect" );
46  self endon( "death" );
47  self endon( "spawned_player" );
48  self endon( "weapon_change_complete" );
49  while(1)
50  {
52  if ( !IsDefined(self.lockonentity) )
53  {
54  ads = ( self PlayerAds() == 1.0 );
55  if ( ads )
56  {
57  target = self ‪get_a_target(weapon);
58 
59  // start to lock on
60  if ( ‪is_valid_target( target ) )
61  {
62  self WeaponLockFree();
63  self.lockonentity = target;
64  //self WeaponLockStart( target );
65  }
66  }
67  }
68  }
69 
70 }
71 
72 function ‪get_a_target(weapon)
73 {
74  origin = self GetWeaponMuzzlePoint();
75  forward = self GetWeaponForwardDir();
76 
77  targets = self ‪get_potential_targets();
78 
79  if ( !IsDefined( targets ) )
80  return undefined;
81 
82  if ( !IsDefined(weapon.lockOnScreenRadius) || weapon.lockOnScreenRadius< 1 )
83  return undefined;
84 
85  validTargets = [];
86  should_wait = false;
87 
88  for ( i = 0; i < targets.size; i++ )
89  {
90  if ( should_wait )
91  {
93  origin = self GetWeaponMuzzlePoint();
94  forward = self GetWeaponForwardDir();
95  should_wait = false;
96  }
97 
98  testTarget = targets[i];
99 
100  if ( !‪is_valid_target( testTarget ) )
101  {
102  continue;
103  }
104 
105  testOrigin = ‪get_target_lock_on_origin( testTarget );
106  //test_range_squared = DistanceSquared( origin, testOrigin );
107  test_range = Distance( origin, testOrigin );
108  //gun_range = self get_replay_range(weapon);
109 
110  if ( test_range > weapon.lockOnMaxRange ||
111  test_range < weapon.lockOnMinRange )
112  {
113  continue;
114  }
115 
116  normal = VectorNormalize( testOrigin - origin );
117  dot = VectorDot( forward, normal );
118 
119  if ( 0 > dot )
120  {
121  // guy's behind us
122  continue;
123  }
124 
125  if ( !self ‪inside_screen_crosshair_radius( testOrigin, weapon ) )
126  {
127  continue;
128  }
129 
130  canSee = self ‪can_see_projected_crosshair( testTarget, testOrigin, origin, forward, test_range );
131  should_wait = true; // ^^ that's expensive
132 
133  if ( canSee )
134  {
135  validTargets[ validTargets.size ] = testTarget;
136  }
137  }
138 
139  return ‪pick_a_target_from( validTargets );
140 }
141 
143 {
144  str_opposite_team = "axis";
145  if ( self.team == "axis" )
146  {
147  str_opposite_team = "allies";
148  }
149 
150  potentialTargets = [];
151  aiTargets = GetAITeamArray( str_opposite_team );
152 
153  if ( aiTargets.size > 0 )
154  potentialTargets = ArrayCombine( potentialTargets, aiTargets, true, false );
155 
156  playerTargets = self GetEnemies();
157 
158  if ( playerTargets.size > 0 )
159  potentialTargets = ArrayCombine( potentialTargets, playerTargets, true, false );
160 
161  if ( potentialTargets.size == 0 )
162  return undefined;
163 
164  return potentialTargets;
165 }
166 
167 function ‪pick_a_target_from( targets )
168 {
169  if ( !IsDefined( targets ) )
170  return undefined;
171 
172  bestTarget = undefined;
173  bestTargetDistanceSquared = undefined;
174 
175  for ( i = 0; i < targets.size; i++ )
176  {
177  target = targets[i];
178 
179  if ( ‪is_valid_target( target ) )
180  {
181  targetDistanceSquared = DistanceSquared( self.origin, target.origin );
182 
183  if ( !IsDefined( bestTarget ) || !IsDefined( bestTargetDistanceSquared ) )
184  {
185  bestTarget = target;
186  bestTargetDistanceSquared = targetDistanceSquared;
187  }
188  else
189  {
190  if ( targetDistanceSquared < bestTargetDistanceSquared )
191  {
192  bestTarget = target;
193  bestTargetDistanceSquared = targetDistanceSquared;
194  }
195  }
196  }
197  }
198 
199  return bestTarget;
200 }
201 
202 function ‪trace( from, to )
203 {
204  return bullettrace(from,to, 0, self )[ "position" ];
205 }
206 
207 
208 
209 function ‪can_see_projected_crosshair( target, target_origin, player_origin, player_forward, distance )
210 {
211  crosshair = player_origin + player_forward * distance;
212 
213  collided = target ‪trace( target_origin, crosshair );
214 
215  if ( Distance2DSquared(crosshair,collided) > 3 * 3 )
216  {
217  return false;
218  }
219 
220  collided = self ‪trace( player_origin, crosshair );
221 
222  if ( Distance2DSquared(crosshair,collided) > 3 * 3 )
223  {
224  return false;
225  }
226  return true;
227 }
228 
229 function ‪is_valid_target( ent )
230 {
231  return IsDefined( ent ) && IsAlive( ent );
232 }
233 
234 function ‪inside_screen_crosshair_radius( testOrigin, weapon )
235 {
236  radius = weapon.lockOnScreenRadius;
237 
238  return self ‪inside_screen_radius( testOrigin, radius );
239 }
240 
241 function ‪inside_screen_lockon_radius( targetOrigin )
242 {
243  radius = self getLockOnRadius();
244 
245  return self ‪inside_screen_radius( targetOrigin, radius );
246 }
247 
248 function ‪inside_screen_radius( targetOrigin, radius )
249 {
250  const useFov = 65;
251 
252  return Target_OriginIsInCircle( targetOrigin, self, useFov, radius );
253 }
254 
255 /*
256 function get_pivot_tether_distance()
257 {
258  distance = SETTING_LOCKING_TETHER_DISTANCE;
259  return distance;
260 }
261 
262 function get_replay_range(weapon)
263 {
264  range = weapon.lockOnMaxRange;
265  return range;
266 }
267 
268 function get_crosshair_radius(weapon)
269 {
270  crosshairRadius = weapon.lockOnScreenRadius; //25
271 
272  return crosshairRadius;
273 }
274 */
275 
277 {
278  return self GetReplayGunLockOnOrigin( target );
279 }
280 
281 /*
282 function get_Lock_on_time()
283 {
284  lockOnTime = self getlockOnSpeed();
285 
286  return lockOnTime;
287 }
288 
289 function replay_sticky_aim()
290 {
291  self notify ("replay_sticky_aim_thread");
292  self endon ("replay_sticky_aim_thread");
293  replay_sticky_aim_think();
294  SetDvar("aim_slowdown_pitch_scale_ads", "0.5");
295  SetDvar("aim_slowdown_yaw_scale_ads", "0.5");
296 }
297 
298 function replay_sticky_aim_think()
299 {
300  self endon ("death");
301  self endon ("disconnect");
302  self endon ("replay_sticky_aim_thread");
303 
304  SetDvar("aim_slowdown_pitch_scale_ads", "0.25");
305  SetDvar("aim_slowdown_yaw_scale_ads", "0.25");
306 
307  self waittill ("replay_target_lost");
308 }
309 
310 */
311 
312 
313 
314 
315 
‪inside_screen_crosshair_radius
‪function inside_screen_crosshair_radius(testOrigin, weapon)
Definition: replay_gun.gsc:234
‪inside_screen_radius
‪function inside_screen_radius(targetOrigin, radius)
Definition: replay_gun.gsc:248
‪get_a_target
‪function get_a_target(weapon)
Definition: replay_gun.gsc:72
‪can_see_projected_crosshair
‪function can_see_projected_crosshair(target, target_origin, player_origin, player_forward, distance)
Definition: replay_gun.gsc:209
‪IS_TRUE
‪#define IS_TRUE(__a)
Definition: shared.gsh:251
‪on_spawned
‪function on_spawned(func, obj)
Definition: callbacks_shared.csc:245
‪pick_a_target_from
‪function pick_a_target_from(targets)
Definition: replay_gun.gsc:167
‪REGISTER_SYSTEM
‪#define REGISTER_SYSTEM(__sys, __func_init_preload, __reqs)
Definition: shared.gsh:204
‪watch_lockon
‪function watch_lockon(weapon)
Definition: replay_gun.gsc:43
‪watch_for_replay_gun
‪function watch_for_replay_gun()
Definition: replay_gun.gsc:24
‪is_valid_target
‪function is_valid_target(ent)
Definition: replay_gun.gsc:229
‪inside_screen_lockon_radius
‪function inside_screen_lockon_radius(targetOrigin)
Definition: replay_gun.gsc:241
‪get_target_lock_on_origin
‪function get_target_lock_on_origin(target)
Definition: replay_gun.gsc:276
‪trace
‪function trace(from, to)
Definition: replay_gun.gsc:202
‪get_potential_targets
‪function get_potential_targets()
Definition: replay_gun.gsc:142
‪WAIT_SERVER_FRAME
‪#define WAIT_SERVER_FRAME
Definition: shared.gsh:265
‪__init__
‪function __init__()
Definition: replay_gun.gsc:19