Advertisement
Guest User

Untitled

a guest
Sep 29th, 2010
303
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.02 KB | None | 0 0
  1. #include maps\mp\_utility;
  2. #include common_scripts\utility;
  3.  
  4. init()
  5. {
  6. mapname = getDvar( "mapname" );
  7. if ( mapname == "mp_suburbia" )
  8. {
  9. level.missileRemoteLaunchVert = 7000;
  10. level.missileRemoteLaunchHorz = 10000;
  11. level.missileRemoteLaunchTargetDist = 2000;
  12. }
  13. else if ( mapname == "mp_mainstreet" )
  14. {
  15. level.missileRemoteLaunchVert = 7000;
  16. level.missileRemoteLaunchHorz = 10000;
  17. level.missileRemoteLaunchTargetDist = 2000;
  18. }
  19. else
  20. {
  21. level.missileRemoteLaunchVert = 14000;
  22. level.missileRemoteLaunchHorz = 7000;
  23. level.missileRemoteLaunchTargetDist = 1500;
  24.  
  25. }
  26. precacheItem( "remotemissile_projectile_mp" );
  27. precacheShader( "ac130_overlay_grain" );
  28. precacheString( &"MP_CIVILIAN_AIR_TRAFFIC" );
  29.  
  30. level.rockets = [];
  31.  
  32. level.killstreakFuncs["predator_missile"] = ::tryUsePredatorMissile;
  33.  
  34. level.missilesForSightTraces = [];
  35. }
  36.  
  37.  
  38. tryUsePredatorMissile( lifeId )
  39. {
  40. if ( isDefined( level.civilianJetFlyBy ) )
  41. {
  42. self iPrintLnBold( &"MP_CIVILIAN_AIR_TRAFFIC" );
  43. return false;
  44. }
  45.  
  46. self setUsingRemote( "remotemissile" );
  47. result = self maps\mp\killstreaks\_killstreaks::initRideKillstreak();
  48. if ( result != "success" )
  49. {
  50. if ( result != "disconnect" )
  51. self clearUsingRemote();
  52.  
  53. return false;
  54. }
  55.  
  56. level thread _fire( lifeId, self );
  57.  
  58. return true;
  59. }
  60.  
  61.  
  62. getBestSpawnPoint( remoteMissileSpawnPoints )
  63. {
  64. validEnemies = [];
  65.  
  66. foreach ( spawnPoint in remoteMissileSpawnPoints )
  67. {
  68. spawnPoint.validPlayers = [];
  69. spawnPoint.spawnScore = 0;
  70. }
  71.  
  72. foreach ( player in level.players )
  73. {
  74. if ( !isReallyAlive( player ) )
  75. continue;
  76.  
  77. if ( player.team == self.team )
  78. continue;
  79.  
  80. if ( player.team == "spectator" )
  81. continue;
  82.  
  83. bestDistance = 999999999;
  84. bestSpawnPoint = undefined;
  85.  
  86. foreach ( spawnPoint in remoteMissileSpawnPoints )
  87. {
  88. //could add a filtering component here but i dont know what it would be.
  89. spawnPoint.validPlayers[spawnPoint.validPlayers.size] = player;
  90.  
  91. potentialBestDistance = Distance2D( spawnPoint.targetent.origin, player.origin );
  92.  
  93. if ( potentialBestDistance <= bestDistance )
  94. {
  95. bestDistance = potentialBestDistance;
  96. bestSpawnpoint = spawnPoint;
  97. }
  98. }
  99.  
  100. assertEx( isDefined( bestSpawnPoint ), "Closest remote-missile spawnpoint undefined for player: " + player.name );
  101. bestSpawnPoint.spawnScore += 2;
  102. }
  103.  
  104. bestSpawn = remoteMissileSpawnPoints[0];
  105. foreach ( spawnPoint in remoteMissileSpawnPoints )
  106. {
  107. foreach ( player in spawnPoint.validPlayers )
  108. {
  109. spawnPoint.spawnScore += 1;
  110.  
  111. if ( bulletTracePassed( player.origin + (0,0,32), spawnPoint.origin, false, player ) )
  112. spawnPoint.spawnScore += 3;
  113.  
  114. if ( spawnPoint.spawnScore > bestSpawn.spawnScore )
  115. {
  116. bestSpawn = spawnPoint;
  117. }
  118. else if ( spawnPoint.spawnScore == bestSpawn.spawnScore ) // equal spawn weights so we toss a coin.
  119. {
  120. if ( coinToss() )
  121. bestSpawn = spawnPoint;
  122. }
  123. }
  124. }
  125.  
  126. return ( bestSpawn );
  127. }
  128.  
  129. drawLine( start, end, timeSlice, color )
  130. {
  131. drawTime = int(timeSlice * 20);
  132. for( time = 0; time < drawTime; time++ )
  133. {
  134. line( start, end, color,false, 1 );
  135. wait ( 0.05 );
  136. }
  137. }
  138. _fire( lifeId, player )
  139. {
  140. remoteMissileSpawnArray = getEntArray( "remoteMissileSpawn" , "targetname" );
  141. //assertEX( remoteMissileSpawnArray.size > 0 && getMapCustom( "map" ) != "", "No remote missile spawn points found. Contact friendly neighborhood designer" );
  142.  
  143. foreach ( spawn in remoteMissileSpawnArray )
  144. {
  145. if ( isDefined( spawn.target ) )
  146. spawn.targetEnt = getEnt( spawn.target, "targetname" );
  147. }
  148.  
  149. if ( remoteMissileSpawnArray.size > 0 )
  150. remoteMissileSpawn = player getBestSpawnPoint( remoteMissileSpawnArray );
  151. else
  152. remoteMissileSpawn = undefined;
  153.  
  154. if ( isDefined( remoteMissileSpawn ) )
  155. {
  156. startPos = remoteMissileSpawn.origin;
  157. targetPos = remoteMissileSpawn.targetEnt.origin;
  158.  
  159. //thread drawLine( startPos, targetPos, 30, (0,1,0) );
  160.  
  161. vector = vectorNormalize( startPos - targetPos );
  162. startPos = vector_multiply( vector, 14000 ) + targetPos;
  163.  
  164. //thread drawLine( startPos, targetPos, 15, (1,0,0) );
  165.  
  166. rocket = MagicBullet( "remotemissile_projectile_mp", startpos, targetPos, player );
  167. }
  168. else
  169. {
  170. upVector = (0, 0, level.missileRemoteLaunchVert );
  171. backDist = level.missileRemoteLaunchHorz;
  172. targetDist = level.missileRemoteLaunchTargetDist;
  173.  
  174. forward = AnglesToForward( player.angles );
  175. startpos = player.origin + upVector + forward * backDist * -1;
  176. targetPos = player.origin + forward * targetDist;
  177.  
  178. rocket = MagicBullet( "remotemissile_projectile_mp", startpos, targetPos, player );
  179. }
  180.  
  181. if ( !IsDefined( rocket ) )
  182. {
  183. player clearUsingRemote();
  184. return;
  185. }
  186.  
  187. rocket thread maps\mp\gametypes\_weapons::AddMissileToSightTraces( player.team );
  188.  
  189. rocket thread handleDamage();
  190.  
  191. rocket.lifeId = lifeId;
  192. rocket.type = "remote";
  193. MissileEyes( player, rocket );
  194. }
  195.  
  196. /#
  197. _fire_noplayer( lifeId, player )
  198. {
  199. upVector = (0, 0, level.missileRemoteLaunchVert );
  200. backDist = level.missileRemoteLaunchHorz;
  201. targetDist = level.missileRemoteLaunchTargetDist;
  202.  
  203. forward = AnglesToForward( player.angles );
  204. startpos = player.origin + upVector + forward * backDist * -1;
  205. targetPos = player.origin + forward * targetDist;
  206.  
  207. rocket = MagicBullet( "remotemissile_projectile_mp", startpos, targetPos, player );
  208.  
  209. if ( !IsDefined( rocket ) )
  210. return;
  211.  
  212. rocket thread handleDamage();
  213.  
  214. rocket.lifeId = lifeId;
  215. rocket.type = "remote";
  216.  
  217. player CameraLinkTo( rocket, "tag_origin" );
  218. player ControlsLinkTo( rocket );
  219.  
  220. rocket thread Rocket_CleanupOnDeath();
  221.  
  222. wait ( 2.0 );
  223.  
  224. player ControlsUnlink();
  225. player CameraUnlink();
  226. }
  227. #/
  228.  
  229. handleDamage()
  230. {
  231. self endon ( "death" );
  232. self endon ( "deleted" );
  233.  
  234. self setCanDamage( true );
  235.  
  236. for ( ;; )
  237. {
  238. self waittill( "damage" );
  239.  
  240. println ( "projectile damaged!" );
  241. }
  242. }
  243.  
  244.  
  245. MissileEyes( player, rocket )
  246. {
  247. //level endon ( "game_ended" );
  248. player endon ( "joined_team" );
  249. player endon ( "joined_spectators" );
  250.  
  251. rocket thread Rocket_CleanupOnDeath();
  252. player thread Player_CleanupOnGameEnded( rocket );
  253. player thread Player_CleanupOnTeamChange( rocket );
  254.  
  255. player VisionSetMissilecamForPlayer( "black_bw", 0 );
  256.  
  257. player endon ( "disconnect" );
  258.  
  259. if ( isDefined( rocket ) )
  260. {
  261. player VisionSetMissilecamForPlayer( game["thermal_vision"], 1.0 );
  262. player thread delayedFOFOverlay();
  263. player CameraLinkTo( rocket, "tag_origin" );
  264. player ControlsLinkTo( rocket );
  265.  
  266. if ( getDvarInt( "camera_thirdPerson" ) )
  267. player setThirdPersonDOF( false );
  268.  
  269. rocket waittill( "death" );
  270.  
  271. // is defined check required because remote missile doesnt handle lifetime explosion gracefully
  272. // instantly deletes its self after an explode and death notify
  273. if ( isDefined(rocket) )
  274. player maps\mp\_matchdata::logKillstreakEvent( "predator_missile", rocket.origin );
  275.  
  276. player ControlsUnlink();
  277. player freezeControlsWrapper( true );
  278.  
  279. // If a player gets the final kill with a hellfire, level.gameEnded will already be true at this point
  280. if ( !level.gameEnded || isDefined( player.finalKill ) )
  281. player thread staticEffect( 0.5 );
  282.  
  283. wait ( 0.5 );
  284.  
  285. player ThermalVisionFOFOverlayOff();
  286.  
  287. player CameraUnlink();
  288.  
  289. if ( getDvarInt( "camera_thirdPerson" ) )
  290. player setThirdPersonDOF( true );
  291.  
  292. }
  293.  
  294. player clearUsingRemote();
  295. }
  296.  
  297.  
  298. delayedFOFOverlay()
  299. {
  300. self endon ( "death" );
  301. self endon ( "disconnect" );
  302. level endon ( "game_ended" );
  303.  
  304. wait ( 0.15 );
  305.  
  306. self ThermalVisionFOFOverlayOn();
  307. }
  308.  
  309. staticEffect( duration )
  310. {
  311. self endon ( "disconnect" );
  312.  
  313. staticBG = newClientHudElem( self );
  314. staticBG.horzAlign = "fullscreen";
  315. staticBG.vertAlign = "fullscreen";
  316. staticBG setShader( "white", 640, 480 );
  317. staticBG.archive = true;
  318. staticBG.sort = 10;
  319.  
  320. static = newClientHudElem( self );
  321. static.horzAlign = "fullscreen";
  322. static.vertAlign = "fullscreen";
  323. static setShader( "ac130_overlay_grain", 640, 480 );
  324. static.archive = true;
  325. static.sort = 20;
  326.  
  327. wait ( duration );
  328.  
  329. static destroy();
  330. staticBG destroy();
  331. }
  332.  
  333.  
  334. Player_CleanupOnTeamChange( rocket )
  335. {
  336. rocket endon ( "death" );
  337. self endon ( "disconnect" );
  338.  
  339. self waittill_any( "joined_team" , "joined_spectators" );
  340.  
  341. if ( self.team != "spectator" )
  342. {
  343. self ThermalVisionFOFOverlayOff();
  344. self ControlsUnlink();
  345. self CameraUnlink();
  346.  
  347. if ( getDvarInt( "camera_thirdPerson" ) )
  348. self setThirdPersonDOF( true );
  349. }
  350. self clearUsingRemote();
  351.  
  352. level.remoteMissileInProgress = undefined;
  353. }
  354.  
  355.  
  356. Rocket_CleanupOnDeath()
  357. {
  358. entityNumber = self getEntityNumber();
  359. level.rockets[ entityNumber ] = self;
  360. self waittill( "death" );
  361.  
  362. level.rockets[ entityNumber ] = undefined;
  363. }
  364.  
  365.  
  366. Player_CleanupOnGameEnded( rocket )
  367. {
  368. rocket endon ( "death" );
  369. self endon ( "death" );
  370.  
  371. level waittill ( "game_ended" );
  372.  
  373. self ThermalVisionFOFOverlayOff();
  374. self ControlsUnlink();
  375. self CameraUnlink();
  376.  
  377. if ( getDvarInt( "camera_thirdPerson" ) )
  378. self setThirdPersonDOF( true );
  379. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement