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;
11 #insert scripts\shared\weapons\replay_gun.gsh;
12 #insert scripts\shared\shared.gsh;
13 #insert scripts\shared\version.gsh;
15 #namespace replay_gun;
26 self endon(
"disconnect" );
27 self endon(
"death" );
28 self endon(
"spawned_player" );
29 self endon(
"killReplayGunMonitor");
33 self waittill(
"weapon_change_complete", weapon );
35 self WeaponLockFree();
36 if (
IS_TRUE(weapon.usesPivotTargeting) )
45 self endon(
"disconnect" );
46 self endon(
"death" );
47 self endon(
"spawned_player" );
48 self endon(
"weapon_change_complete" );
52 if ( !IsDefined(
self.lockonentity) )
54 ads = (
self PlayerAds() == 1.0 );
62 self WeaponLockFree();
63 self.lockonentity = target;
74 origin =
self GetWeaponMuzzlePoint();
75 forward =
self GetWeaponForwardDir();
79 if ( !IsDefined( targets ) )
82 if ( !IsDefined(weapon.lockOnScreenRadius) || weapon.lockOnScreenRadius< 1 )
88 for ( i = 0; i < targets.size; i++ )
93 origin =
self GetWeaponMuzzlePoint();
94 forward =
self GetWeaponForwardDir();
98 testTarget = targets[i];
107 test_range = Distance( origin, testOrigin );
110 if ( test_range > weapon.lockOnMaxRange ||
111 test_range < weapon.lockOnMinRange )
116 normal = VectorNormalize( testOrigin - origin );
117 dot = VectorDot( forward, normal );
135 validTargets[ validTargets.size ] = testTarget;
144 str_opposite_team =
"axis";
145 if (
self.team ==
"axis" )
147 str_opposite_team =
"allies";
150 potentialTargets = [];
151 aiTargets = GetAITeamArray( str_opposite_team );
153 if ( aiTargets.size > 0 )
154 potentialTargets = ArrayCombine( potentialTargets, aiTargets,
true,
false );
156 playerTargets =
self GetEnemies();
158 if ( playerTargets.size > 0 )
159 potentialTargets = ArrayCombine( potentialTargets, playerTargets,
true,
false );
161 if ( potentialTargets.size == 0 )
164 return potentialTargets;
169 if ( !IsDefined( targets ) )
172 bestTarget = undefined;
173 bestTargetDistanceSquared = undefined;
175 for ( i = 0; i < targets.size; i++ )
181 targetDistanceSquared = DistanceSquared(
self.origin, target.origin );
183 if ( !IsDefined( bestTarget ) || !IsDefined( bestTargetDistanceSquared ) )
186 bestTargetDistanceSquared = targetDistanceSquared;
190 if ( targetDistanceSquared < bestTargetDistanceSquared )
193 bestTargetDistanceSquared = targetDistanceSquared;
204 return bullettrace(from,to, 0,
self )[
"position" ];
211 crosshair = player_origin + player_forward * distance;
213 collided = target
trace( target_origin, crosshair );
215 if ( Distance2DSquared(crosshair,collided) > 3 * 3 )
220 collided =
self trace( player_origin, crosshair );
222 if ( Distance2DSquared(crosshair,collided) > 3 * 3 )
231 return IsDefined( ent ) && IsAlive( ent );
236 radius = weapon.lockOnScreenRadius;
243 radius =
self getLockOnRadius();
252 return Target_OriginIsInCircle( targetOrigin,
self, useFov, radius );
278 return self GetReplayGunLockOnOrigin( target );