Advertisement
Guest User

Untitled

a guest
Sep 29th, 2010
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.05 KB | None | 0 0
  1. InitStingerUsage()
  2. {
  3. self.stingerStage = undefined;
  4. self.stingerTarget = undefined;
  5. self.stingerLockStartTime = undefined;
  6. self.stingerLostSightlineTime = undefined;
  7.  
  8. self thread ResetStingerLockingOnDeath();
  9. level.stingerTargets = [];
  10. }
  11.  
  12.  
  13. ResetStingerLocking()
  14. {
  15. if ( !IsDefined( self.stingerUseEntered ) )
  16. return;
  17. self.stingerUseEntered = undefined;
  18.  
  19. self notify( "stop_javelin_locking_feedback" );
  20. self notify( "stop_javelin_locked_feedback" );
  21.  
  22. self WeaponLockFree();
  23. InitStingerUsage();
  24. }
  25.  
  26.  
  27. ResetStingerLockingOnDeath()
  28. {
  29. self endon( "disconnect" );
  30.  
  31. self notify ( "ResetStingerLockingOnDeath" );
  32. self endon ( "ResetStingerLockingOnDeath" );
  33.  
  34. for ( ;; )
  35. {
  36. self waittill( "death" );
  37. self ResetStingerLocking();
  38. }
  39. }
  40.  
  41.  
  42. StillValidStingerLock( ent )
  43. {
  44. assert( IsDefined( self ) );
  45.  
  46. if ( !IsDefined( ent ) )
  47. return false;
  48. if ( !(self WorldPointInReticle_Circle( ent.origin, 65, 85 )) )
  49. return false;
  50.  
  51. if ( self.stingerTarget == level.ac130.planeModel && !isDefined( level.ac130player ) )
  52. return false;
  53.  
  54. return true;
  55. }
  56.  
  57.  
  58. LoopStingerLockingFeedback()
  59. {
  60. self endon( "stop_javelin_locking_feedback" );
  61.  
  62. for ( ;; )
  63. {
  64. if ( isDefined( level.chopper ) && isDefined( level.chopper.gunner ) && isDefined( self.stingerTarget ) && self.stingerTarget == level.chopper.gunner )
  65. level.chopper.gunner playLocalSound( "missile_locking" );
  66.  
  67. if ( isDefined( level.ac130player ) && isDefined( self.stingerTarget ) && self.stingerTarget == level.ac130.planeModel )
  68. level.ac130player playLocalSound( "missile_locking" );
  69.  
  70. self playLocalSound( "stinger_locking" );
  71. self PlayRumbleOnEntity( "ac130_25mm_fire" );
  72.  
  73. wait 0.6;
  74. }
  75. }
  76.  
  77.  
  78. LoopStingerLockedFeedback()
  79. {
  80. self endon( "stop_javelin_locked_feedback" );
  81.  
  82. for ( ;; )
  83. {
  84. if ( isDefined( level.chopper ) && isDefined( level.chopper.gunner ) && isDefined( self.stingerTarget ) && self.stingerTarget == level.chopper.gunner )
  85. level.chopper.gunner playLocalSound( "missile_locking" );
  86.  
  87. if ( isDefined( level.ac130player ) && isDefined( self.stingerTarget ) && self.stingerTarget == level.ac130.planeModel )
  88. level.ac130player playLocalSound( "missile_locking" );
  89.  
  90. self playLocalSound( "stinger_locked" );
  91. self PlayRumbleOnEntity( "ac130_25mm_fire" );
  92.  
  93. wait 0.25;
  94. }
  95. }
  96.  
  97.  
  98. /#
  99. DrawStar( point )
  100. {
  101. Line( point + (10,0,0), point - (10,0,0) );
  102. Line( point + (0,10,0), point - (0,10,0) );
  103. Line( point + (0,0,10), point - (0,0,10) );
  104. }
  105. #/
  106.  
  107.  
  108. LockSightTest( target )
  109. {
  110. eyePos = self GetEye();
  111.  
  112. if ( !isDefined( target ) ) //targets can disapear during targeting.
  113. return false;
  114.  
  115. passed = BulletTracePassed( eyePos, target.origin, false, target );
  116. if ( passed )
  117. return true;
  118.  
  119. front = target GetPointInBounds( 1, 0, 0 );
  120. passed = BulletTracePassed( eyePos, front, false, target );
  121. if ( passed )
  122. return true;
  123.  
  124. back = target GetPointInBounds( -1, 0, 0 );
  125. passed = BulletTracePassed( eyePos, back, false, target );
  126. if ( passed )
  127. return true;
  128.  
  129. return false;
  130. }
  131.  
  132.  
  133. StingerDebugDraw( target )
  134. {
  135. /#
  136. if ( GetDVar( "missileDebugDraw" ) != "1" )
  137. return;
  138. if ( !IsDefined( target ) )
  139. return;
  140.  
  141. org = target.origin;
  142. DrawStar( org );
  143. org = target GetPointInBounds( 1, 0, 0 );
  144. DrawStar( org );
  145. org = target GetPointInBounds( -1, 0, 0 );
  146. DrawStar( org );
  147. #/
  148. }
  149.  
  150.  
  151. SoftSightTest()
  152. {
  153. LOST_SIGHT_LIMIT = 500;
  154.  
  155. if ( self LockSightTest( self.stingerTarget ) )
  156. {
  157. self.stingerLostSightlineTime = 0;
  158. return true;
  159. }
  160.  
  161. if ( self.stingerLostSightlineTime == 0 )
  162. self.stingerLostSightlineTime = getTime();
  163.  
  164. timePassed = GetTime() - self.stingerLostSightlineTime;
  165. //PrintLn( "Losing sight of target [", timePassed, "]..." );
  166.  
  167. if ( timePassed >= LOST_SIGHT_LIMIT )
  168. {
  169. //PrintLn( "Lost sight of target." );
  170. ResetStingerLocking();
  171. return false;
  172. }
  173.  
  174. return true;
  175. }
  176.  
  177. GetTargetList()
  178. {
  179. targets = [];
  180.  
  181. if ( level.teamBased )
  182. {
  183. if ( IsDefined( level.chopper ) && ( level.chopper.team != self.team || level.chopper.owner == self ) )
  184. targets[targets.size] = level.chopper;
  185.  
  186. if ( isDefined( level.ac130player ) && level.ac130player.team != self.team )
  187. targets[targets.size] = level.ac130.planemodel;
  188.  
  189. if ( isDefined( level.harriers) )
  190. {
  191. foreach( harrier in level.harriers )
  192. {
  193. if ( isDefined( harrier ) && ( harrier.team != self.team || ( isDefined( harrier.owner ) && harrier.owner == self ) ) )
  194. targets[targets.size] = harrier;
  195. }
  196. }
  197.  
  198. if ( level.UAVModels[level.otherTeam[self.team]].size )
  199. {
  200. foreach ( UAV in level.UAVModels[level.otherTeam[self.team]] )
  201. targets[targets.size] = UAV;
  202. }
  203.  
  204. if ( isDefined( level.littleBird ) )
  205. {
  206. foreach ( bird in level.littleBird )
  207. {
  208. if ( !isDefined( bird ) )
  209. continue;
  210.  
  211. if ( self.team != bird.owner.team || self == bird.owner )
  212. targets[targets.size] = bird;
  213. }
  214. }
  215.  
  216. }
  217. else
  218. {
  219. if ( IsDefined( level.chopper ) && ( level.chopper.owner != self ) ) ///check for teams
  220. targets[targets.size] = level.chopper;
  221.  
  222. if ( isDefined( level.ac130player ) )
  223. targets[targets.size] = level.ac130.planemodel;
  224.  
  225. if ( isDefined( level.harriers) )
  226. {
  227. foreach( harrier in level.harriers )
  228. {
  229. if ( isDefined( harrier ) )
  230. targets[targets.size] = harrier;
  231. }
  232. }
  233.  
  234. if ( level.UAVModels.size )
  235. {
  236. foreach ( ownerGuid, UAV in level.UAVModels )
  237. {
  238. if ( isDefined( UAV.owner ) && UAV.owner == self )
  239. continue;
  240.  
  241. targets[targets.size] = UAV;
  242. }
  243. }
  244. }
  245.  
  246. return targets;
  247. }
  248.  
  249.  
  250. StingerUsageLoop()
  251. {
  252. self endon("death");
  253. self endon("disconnect");
  254.  
  255. LOCK_LENGTH = 1000;
  256.  
  257. InitStingerUsage();
  258.  
  259. for( ;; )
  260. {
  261. wait 0.05;
  262.  
  263. weapon = self getCurrentWeapon();
  264.  
  265. if ( weapon != "stinger_mp" && weapon != "at4_mp" )
  266. {
  267. ResetStingerLocking();
  268. continue;
  269. }
  270.  
  271. if ( self PlayerADS() < 0.95 )
  272. {
  273. ResetStingerLocking();
  274. continue;
  275. }
  276.  
  277. self.stingerUseEntered = true;
  278.  
  279. if ( !IsDefined( self.stingerStage ) )
  280. self.stingerStage = 0;
  281.  
  282. StingerDebugDraw( self.stingerTarget );
  283.  
  284. if ( self.stingerStage == 0 ) // searching for target
  285. {
  286. targets = GetTargetList();
  287. if ( targets.size == 0 )
  288. continue;
  289.  
  290. targetsInReticle = [];
  291. foreach ( target in targets )
  292. {
  293. if ( !isDefined( target ) )
  294. continue;
  295.  
  296. insideReticle = self WorldPointInReticle_Circle( target.origin, 65, 75 );
  297.  
  298. if ( insideReticle )
  299. targetsInReticle[targetsInReticle.size] = target;
  300. }
  301. if ( targetsInReticle.size == 0 )
  302. continue;
  303.  
  304. sortedTargets = SortByDistance( targetsInReticle, self.origin );
  305. if ( !( self LockSightTest( sortedTargets[0] ) ) )
  306. continue;
  307.  
  308. //PrintLn( "Found a target to lock to..." );
  309. thread LoopStingerLockingFeedback();
  310. self.stingerTarget = sortedTargets[0];
  311. self.stingerLockStartTime = GetTime();
  312. self.stingerStage = 1;
  313. self.stingerLostSightlineTime = 0;
  314. }
  315.  
  316. if ( self.stingerStage == 1 ) // locking on to a target
  317. {
  318. if ( !(self StillValidStingerLock( self.stingerTarget )) )
  319. {
  320. //PrintLn( "Failed to get lock." );
  321. ResetStingerLocking();
  322. continue;
  323. }
  324.  
  325. passed = SoftSightTest();
  326. if ( !passed )
  327. continue;
  328.  
  329. timePassed = getTime() - self.stingerLockStartTime;
  330. //PrintLn( "Locking [", timePassed, "]..." );
  331. if ( timePassed < LOCK_LENGTH )
  332. continue;
  333.  
  334. self notify( "stop_javelin_locking_feedback" );
  335. thread LoopStingerLockedFeedback();
  336.  
  337. //PrintLn( "Locked!");
  338. if ( self.stingerTarget.model == "vehicle_av8b_harrier_jet_mp" || self.stingerTarget.model == "vehicle_little_bird_armed" )
  339. self WeaponLockFinalize( self.stingerTarget );
  340. else
  341. self WeaponLockFinalize( self.stingerTarget, (100,0,-32) );
  342.  
  343. self.stingerStage = 2;
  344. }
  345.  
  346. if ( self.stingerStage == 2 ) // target locked
  347. {
  348. passed = SoftSightTest();
  349. if ( !passed )
  350. continue;
  351.  
  352. if ( !(self StillValidStingerLock( self.stingerTarget )) )
  353. {
  354. //PrintLn( "Gave up lock." );
  355. ResetStingerLocking();
  356. continue;
  357. }
  358. }
  359. }
  360. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement