Advertisement
Guest User

Untitled

a guest
Sep 29th, 2010
388
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 21.25 KB | None | 0 0
  1. /*******************************************************************
  2. // _perkfunctions.gsc
  3. //
  4. // Holds all the perk set/unset and listening functions
  5. //
  6. // Jordan Hirsh Sept. 11th 2008
  7. ********************************************************************/
  8.  
  9. #include common_scripts\utility;
  10. #include maps\mp\_utility;
  11. #include maps\mp\gametypes\_hud_util;
  12. #include maps\mp\perks\_perks;
  13.  
  14.  
  15. blastshieldUseTracker( perkName, useFunc )
  16. {
  17. self endon ( "death" );
  18. self endon ( "disconnect" );
  19. self endon ( "end_perkUseTracker" );
  20. level endon ( "game_ended" );
  21.  
  22. for ( ;; )
  23. {
  24. self waittill ( "empty_offhand" );
  25.  
  26. if ( !isOffhandWeaponEnabled() )
  27. continue;
  28.  
  29. self [[useFunc]]( self _hasPerk( "_specialty_blastshield" ) );
  30. }
  31. }
  32.  
  33. perkUseDeathTracker()
  34. {
  35. self endon ( "disconnect" );
  36.  
  37. self waittill("death");
  38. self._usePerkEnabled = undefined;
  39. }
  40.  
  41. setRearView()
  42. {
  43. //self thread perkUseTracker( "specialty_rearview", ::toggleRearView );
  44. }
  45.  
  46. unsetRearView()
  47. {
  48. self notify ( "end_perkUseTracker" );
  49. }
  50.  
  51. toggleRearView( isEnabled )
  52. {
  53. if ( isEnabled )
  54. {
  55. self _setPerk( "_specialty_rearview" );
  56. self SetRearViewRenderEnabled(true);
  57. }
  58. else
  59. {
  60. self _unsetPerk( "_specialty_rearview" );
  61. self SetRearViewRenderEnabled(false);
  62. }
  63. }
  64.  
  65.  
  66. setEndGame()
  67. {
  68. if ( isdefined( self.endGame ) )
  69. return;
  70.  
  71. self.maxhealth = ( maps\mp\gametypes\_tweakables::getTweakableValue( "player", "maxhealth" ) * 4 );
  72. self.health = self.maxhealth;
  73. self.endGame = true;
  74. self.attackerTable[0] = "";
  75. self visionSetNakedForPlayer("end_game", 5 );
  76. self thread endGameDeath( 7 );
  77. self.hasDoneCombat = true;
  78. }
  79.  
  80.  
  81. unsetEndGame()
  82. {
  83. self notify( "stopEndGame" );
  84. self.endGame = undefined;
  85. revertVisionSet();
  86.  
  87. if (! isDefined( self.endGameTimer ) )
  88. return;
  89.  
  90. self.endGameTimer destroyElem();
  91. self.endGameIcon destroyElem();
  92. }
  93.  
  94.  
  95. revertVisionSet()
  96. {
  97. self VisionSetNakedForPlayer( getDvar( "mapname" ), 1 );
  98. }
  99.  
  100. endGameDeath( duration )
  101. {
  102. self endon( "death" );
  103. self endon( "disconnect" );
  104. self endon( "joined_team" );
  105. level endon( "game_ended" );
  106. self endon( "stopEndGame" );
  107.  
  108. wait( duration + 1 );
  109. //self visionSetNakedForPlayer("end_game2", 1 );
  110. //wait(1);
  111. self _suicide();
  112. }
  113.  
  114. setCombatHigh()
  115. {
  116. self endon( "death" );
  117. self endon( "disconnect" );
  118. self endon( "unset_combathigh" );
  119. level endon( "end_game" );
  120.  
  121. self.damageBlockedTotal = 0;
  122. //self visionSetNakedForPlayer( "end_game", 1 );
  123.  
  124. if ( level.splitscreen )
  125. {
  126. yOffset = 56;
  127. iconSize = 21; // 32/1.5
  128. }
  129. else
  130. {
  131. yOffset = 112;
  132. iconSize = 32;
  133. }
  134.  
  135. self.combatHighOverlay = newClientHudElem( self );
  136. self.combatHighOverlay.x = 0;
  137. self.combatHighOverlay.y = 0;
  138. self.combatHighOverlay.alignX = "left";
  139. self.combatHighOverlay.alignY = "top";
  140. self.combatHighOverlay.horzAlign = "fullscreen";
  141. self.combatHighOverlay.vertAlign = "fullscreen";
  142. self.combatHighOverlay setshader ( "combathigh_overlay", 640, 480 );
  143. self.combatHighOverlay.sort = -10;
  144. self.combatHighOverlay.archived = true;
  145.  
  146. self.combatHighTimer = createTimer( "hudsmall", 1.0 );
  147. self.combatHighTimer setPoint( "CENTER", "CENTER", 0, yOffset );
  148. self.combatHighTimer setTimer( 10.0 );
  149. self.combatHighTimer.color = (.8,.8,0);
  150. self.combatHighTimer.archived = false;
  151. self.combatHighTimer.foreground = true;
  152.  
  153. self.combatHighIcon = self createIcon( "specialty_painkiller", iconSize, iconSize );
  154. self.combatHighIcon.alpha = 0;
  155. self.combatHighIcon setParent( self.combatHighTimer );
  156. self.combatHighIcon setPoint( "BOTTOM", "TOP" );
  157. self.combatHighIcon.archived = true;
  158. self.combatHighIcon.sort = 1;
  159. self.combatHighIcon.foreground = true;
  160.  
  161. self.combatHighOverlay.alpha = 0.0;
  162. self.combatHighOverlay fadeOverTime( 1.0 );
  163. self.combatHighIcon fadeOverTime( 1.0 );
  164. self.combatHighOverlay.alpha = 1.0;
  165. self.combatHighIcon.alpha = 0.85;
  166.  
  167. self thread unsetCombatHighOnDeath();
  168.  
  169. wait( 8 );
  170.  
  171. self.combatHighIcon fadeOverTime( 2.0 );
  172. self.combatHighIcon.alpha = 0.0;
  173.  
  174. self.combatHighOverlay fadeOverTime( 2.0 );
  175. self.combatHighOverlay.alpha = 0.0;
  176.  
  177. self.combatHighTimer fadeOverTime( 2.0 );
  178. self.combatHighTimer.alpha = 0.0;
  179.  
  180. wait( 2 );
  181. self.damageBlockedTotal = undefined;
  182.  
  183. self _unsetPerk( "specialty_combathigh" );
  184. }
  185.  
  186. unsetCombatHighOnDeath()
  187. {
  188. self endon ( "disconnect" );
  189. self endon ( "unset_combathigh" );
  190.  
  191. self waittill ( "death" );
  192.  
  193. self thread _unsetPerk( "specialty_combathigh" );
  194. }
  195.  
  196. unsetCombatHigh()
  197. {
  198. self notify ( "unset_combathigh" );
  199. self.combatHighOverlay destroy();
  200. self.combatHighIcon destroy();
  201. self.combatHighTimer destroy();
  202. }
  203.  
  204. setSiege()
  205. {
  206. self thread trackSiegeEnable();
  207. self thread trackSiegeDissable();
  208. }
  209.  
  210. trackSiegeEnable()
  211. {
  212. self endon ( "death" );
  213. self endon ( "disconnect" );
  214. self endon ( "stop_trackSiege" );
  215.  
  216. for ( ;; )
  217. {
  218. self waittill ( "gambit_on" );
  219.  
  220. //self setStance( "crouch" );
  221. //self thread stanceStateListener();
  222. //self thread jumpStateListener();
  223. self.moveSpeedScaler = 0;
  224. self maps\mp\gametypes\_weapons::updateMoveSpeedScale( "primary" );
  225. class = weaponClass( self getCurrentWeapon() );
  226.  
  227. if ( class == "pistol" || class == "smg" )
  228. self setSpreadOverride( 1 );
  229. else
  230. self setSpreadOverride( 2 );
  231.  
  232. self player_recoilScaleOn( 0 );
  233. self allowJump(false);
  234. }
  235. }
  236.  
  237. trackSiegeDissable()
  238. {
  239. self endon ( "death" );
  240. self endon ( "disconnect" );
  241. self endon ( "stop_trackSiege" );
  242.  
  243. for ( ;; )
  244. {
  245. self waittill ( "gambit_off" );
  246.  
  247. unsetSiege();
  248. }
  249. }
  250.  
  251. stanceStateListener()
  252. {
  253. self endon ( "death" );
  254. self endon ( "disconnect" );
  255.  
  256. self notifyOnPlayerCommand( "adjustedStance", "+stance" );
  257.  
  258. for ( ;; )
  259. {
  260. self waittill( "adjustedStance" );
  261. if ( self.moveSPeedScaler != 0 )
  262. continue;
  263.  
  264. unsetSiege();
  265. }
  266. }
  267.  
  268. jumpStateListener()
  269. {
  270. self endon ( "death" );
  271. self endon ( "disconnect" );
  272.  
  273. self notifyOnPlayerCommand( "jumped", "+goStand" );
  274.  
  275. for ( ;; )
  276. {
  277. self waittill( "jumped" );
  278. if ( self.moveSPeedScaler != 0 )
  279. continue;
  280.  
  281. unsetSiege();
  282. }
  283. }
  284.  
  285. unsetSiege()
  286. {
  287. self.moveSpeedScaler = 1;
  288. //if siege is not cut add check to see if
  289. //using lightweight and siege for movespeed scaler
  290. self resetSpreadOverride();
  291. self maps\mp\gametypes\_weapons::updateMoveSpeedScale( "primary" );
  292. self player_recoilScaleOff();
  293. self allowJump(true);
  294. }
  295.  
  296.  
  297. setFinalStand()
  298. {
  299. self _setperk( "specialty_pistoldeath");
  300. }
  301.  
  302. unsetFinalStand()
  303. {
  304. self _unsetperk( "specialty_pistoldeath" );
  305. }
  306.  
  307.  
  308. setChallenger()
  309. {
  310. if ( !level.hardcoreMode )
  311. {
  312. self.maxhealth = maps\mp\gametypes\_tweakables::getTweakableValue( "player", "maxhealth" );
  313.  
  314. if ( isDefined( self.xpScaler ) && self.xpScaler == 1 && self.maxhealth > 30 )
  315. {
  316. self.xpScaler = 2;
  317. }
  318. }
  319. }
  320.  
  321. unsetChallenger()
  322. {
  323. self.xpScaler = 1;
  324. }
  325.  
  326.  
  327. setSaboteur()
  328. {
  329. self.objectiveScaler = 1.2;
  330. }
  331.  
  332. unsetSaboteur()
  333. {
  334. self.objectiveScaler = 1;
  335. }
  336.  
  337.  
  338. setLightWeight()
  339. {
  340. self.moveSpeedScaler = 1.10;
  341. self maps\mp\gametypes\_weapons::updateMoveSpeedScale( "primary" );
  342. }
  343.  
  344. unsetLightWeight()
  345. {
  346. self.moveSpeedScaler = 1;
  347. self maps\mp\gametypes\_weapons::updateMoveSpeedScale( "primary" );
  348. }
  349.  
  350.  
  351. setBlackBox()
  352. {
  353. self.killStreakScaler = 1.5;
  354. }
  355.  
  356. unsetBlackBox()
  357. {
  358. self.killStreakScaler = 1;
  359. }
  360.  
  361. setSteelNerves()
  362. {
  363. self _setperk( "specialty_bulletaccuracy" );
  364. self _setperk( "specialty_holdbreath" );
  365. }
  366.  
  367. unsetSteelNerves()
  368. {
  369. self _unsetperk( "specialty_bulletaccuracy" );
  370. self _unsetperk( "specialty_holdbreath" );
  371. }
  372.  
  373. setDelayMine()
  374. {
  375. }
  376.  
  377. unsetDelayMine()
  378. {
  379. }
  380.  
  381.  
  382. setBackShield()
  383. {
  384. self AttachShieldModel( "weapon_riot_shield_mp", "tag_shield_back" );
  385. }
  386.  
  387.  
  388. unsetBackShield()
  389. {
  390. self DetachShieldModel( "weapon_riot_shield_mp", "tag_shield_back" );
  391. }
  392.  
  393.  
  394. setLocalJammer()
  395. {
  396. if ( !self isEMPed() )
  397. self RadarJamOn();
  398. }
  399.  
  400.  
  401. unsetLocalJammer()
  402. {
  403. self RadarJamOff();
  404. }
  405.  
  406.  
  407. setAC130()
  408. {
  409. self thread killstreakThink( "ac130", 7, "end_ac130Think" );
  410. }
  411.  
  412. unsetAC130()
  413. {
  414. self notify ( "end_ac130Think" );
  415. }
  416.  
  417.  
  418. setSentryMinigun()
  419. {
  420. self thread killstreakThink( "airdrop_sentry_minigun", 2, "end_sentry_minigunThink" );
  421. }
  422.  
  423. unsetSentryMinigun()
  424. {
  425. self notify ( "end_sentry_minigunThink" );
  426. }
  427.  
  428. setCarePackage()
  429. {
  430. self thread killstreakThink( "airdrop", 2, "endCarePackageThink" );
  431. }
  432.  
  433. unsetCarePackage()
  434. {
  435. self notify ( "endCarePackageThink" );
  436. }
  437.  
  438. setTank()
  439. {
  440. self thread killstreakThink( "tank", 6, "end_tankThink" );
  441. }
  442.  
  443. unsetTank()
  444. {
  445. self notify ( "end_tankThink" );
  446. }
  447.  
  448. setPrecision_airstrike()
  449. {
  450. println( "!precision airstrike!" );
  451. self thread killstreakThink( "precision_airstrike", 6, "end_precision_airstrike" );
  452. }
  453.  
  454. unsetPrecision_airstrike()
  455. {
  456. self notify ( "end_precision_airstrike" );
  457. }
  458.  
  459. setPredatorMissile()
  460. {
  461. self thread killstreakThink( "predator_missile", 4, "end_predator_missileThink" );
  462. }
  463.  
  464. unsetPredatorMissile()
  465. {
  466. self notify ( "end_predator_missileThink" );
  467. }
  468.  
  469.  
  470. setHelicopterMinigun()
  471. {
  472. self thread killstreakThink( "helicopter_minigun", 5, "end_helicopter_minigunThink" );
  473. }
  474.  
  475. unsetHelicopterMinigun()
  476. {
  477. self notify ( "end_helicopter_minigunThink" );
  478. }
  479.  
  480.  
  481.  
  482. killstreakThink( streakName, streakVal, endonString )
  483. {
  484. self endon ( "death" );
  485. self endon ( "disconnect" );
  486. self endon ( endonString );
  487.  
  488. for ( ;; )
  489. {
  490. self waittill ( "killed_enemy" );
  491.  
  492. if ( self.pers["cur_kill_streak"] != streakVal )
  493. continue;
  494.  
  495. self thread maps\mp\killstreaks\_killstreaks::giveKillstreak( streakName );
  496. self thread maps\mp\gametypes\_hud_message::killstreakSplashNotify( streakName, streakVal );
  497. return;
  498. }
  499. }
  500.  
  501.  
  502. setThermal()
  503. {
  504. self ThermalVisionOn();
  505. }
  506.  
  507.  
  508. unsetThermal()
  509. {
  510. self ThermalVisionOff();
  511. }
  512.  
  513.  
  514. setOneManArmy()
  515. {
  516. self thread oneManArmyWeaponChangeTracker();
  517. }
  518.  
  519.  
  520. unsetOneManArmy()
  521. {
  522. self notify ( "stop_oneManArmyTracker" );
  523. }
  524.  
  525.  
  526. oneManArmyWeaponChangeTracker()
  527. {
  528. self endon ( "death" );
  529. self endon ( "disconnect" );
  530. level endon ( "game_ended" );
  531. self endon ( "stop_oneManArmyTracker" );
  532.  
  533. for ( ;; )
  534. {
  535. self waittill( "weapon_change", newWeapon );
  536.  
  537. if ( newWeapon != "onemanarmy_mp" )
  538. continue;
  539.  
  540. //if ( self isUsingRemote() )
  541. // continue;
  542.  
  543. self thread selectOneManArmyClass();
  544. }
  545. }
  546.  
  547.  
  548. isOneManArmyMenu( menu )
  549. {
  550. if ( menu == game["menu_onemanarmy"] )
  551. return true;
  552.  
  553. if ( isDefined( game["menu_onemanarmy_defaults_splitscreen"] ) && menu == game["menu_onemanarmy_defaults_splitscreen"] )
  554. return true;
  555.  
  556. if ( isDefined( game["menu_onemanarmy_custom_splitscreen"] ) && menu == game["menu_onemanarmy_custom_splitscreen"] )
  557. return true;
  558.  
  559. return false;
  560. }
  561.  
  562.  
  563. selectOneManArmyClass()
  564. {
  565. self endon ( "death" );
  566. self endon ( "disconnect" );
  567. level endon ( "game_ended" );
  568.  
  569. self _disableWeaponSwitch();
  570.  
  571. self openPopupMenu( game["menu_onemanarmy"] );
  572.  
  573. self thread closeOMAMenuOnDeath();
  574.  
  575. self waittill ( "menuresponse", menu, className );
  576.  
  577. self _enableWeaponSwitch();
  578.  
  579. if ( className == "back" || !isOneManArmyMenu( menu ) || self isUsingRemote() )
  580. {
  581. if ( self getCurrentWeapon() == "onemanarmy_mp" )
  582. {
  583. self _disableWeaponSwitch();
  584. self switchToWeapon( self getLastWeapon() );
  585. self waittill ( "weapon_change" );
  586. self _enableWeaponSwitch();
  587. }
  588. return;
  589. }
  590.  
  591. self thread giveOneManArmyClass( className );
  592. }
  593.  
  594. closeOMAMenuOnDeath()
  595. {
  596. self endon ( "menuresponse" );
  597. self endon ( "disconnect" );
  598. level endon ( "game_ended" );
  599.  
  600. self waittill ( "death" );
  601.  
  602. self _enableWeaponSwitch();
  603.  
  604. self closePopupMenu();
  605. }
  606.  
  607. giveOneManArmyClass( className )
  608. {
  609. self endon ( "death" );
  610. self endon ( "disconnect" );
  611. level endon ( "game_ended" );
  612.  
  613. if ( self _hasPerk( "specialty_omaquickchange" ) )
  614. {
  615. changeDuration = 3.0;
  616. self playLocalSound( "foly_onemanarmy_bag3_plr" );
  617. self playSoundToTeam( "foly_onemanarmy_bag3_npc", "allies", self );
  618. self playSoundToTeam( "foly_onemanarmy_bag3_npc", "axis", self );
  619. }
  620. else
  621. {
  622. changeDuration = 6.0;
  623. self playLocalSound( "foly_onemanarmy_bag6_plr" );
  624. self playSoundToTeam( "foly_onemanarmy_bag6_npc", "allies", self );
  625. self playSoundToTeam( "foly_onemanarmy_bag6_npc", "axis", self );
  626. }
  627.  
  628. self thread omaUseBar( changeDuration );
  629.  
  630. self _disableWeapon();
  631. self _disableOffhandWeapons();
  632.  
  633. wait ( changeDuration );
  634.  
  635. self _enableWeapon();
  636. self _enableOffhandWeapons();
  637. self.OMAClassChanged = true;
  638.  
  639. self maps\mp\gametypes\_class::giveLoadout( self.pers["team"], className, false );
  640.  
  641. // handle the fact that detachAll in giveLoadout removed the CTF flag from our back
  642. // it would probably be better to handle this in _detachAll itself, but this is a safety fix
  643. if ( isDefined( self.carryFlag ) )
  644. self attach( self.carryFlag, "J_spine4", true );
  645.  
  646. self notify ( "changed_kit" );
  647. level notify ( "changed_kit" );
  648. }
  649.  
  650.  
  651. omaUseBar( duration )
  652. {
  653. self endon( "disconnect" );
  654.  
  655. useBar = createPrimaryProgressBar( 25 );
  656. useBarText = createPrimaryProgressBarText( 25 );
  657. useBarText setText( &"MPUI_CHANGING_KIT" );
  658.  
  659. useBar updateBar( 0, 1 / duration );
  660. for ( waitedTime = 0; waitedTime < duration && isAlive( self ) && !level.gameEnded; waitedTime += 0.05 )
  661. wait ( 0.05 );
  662.  
  663. useBar destroyElem();
  664. useBarText destroyElem();
  665. }
  666.  
  667.  
  668. setBlastShield()
  669. {
  670. self thread blastshieldUseTracker( "specialty_blastshield", ::toggleBlastShield );
  671. self SetWeaponHudIconOverride( "primaryoffhand", "specialty_blastshield" );
  672. }
  673.  
  674.  
  675. unsetBlastShield()
  676. {
  677. self notify ( "end_perkUseTracker" );
  678. self SetWeaponHudIconOverride( "primaryoffhand", "none" );
  679. }
  680.  
  681. toggleBlastShield( isEnabled )
  682. {
  683. if ( !isEnabled )
  684. {
  685. self VisionSetNakedForPlayer( "black_bw", 0.15 );
  686. wait ( 0.15 );
  687. self _setPerk( "_specialty_blastshield" );
  688. self VisionSetNakedForPlayer( getDvar( "mapname" ), 0 );
  689. self playSoundToPlayer( "item_blast_shield_on", self );
  690. }
  691. else
  692. {
  693. self VisionSetNakedForPlayer( "black_bw", 0.15 );
  694. wait ( 0.15 );
  695. self _unsetPerk( "_specialty_blastshield" );
  696. self VisionSetNakedForPlayer( getDvar( "mapname" ), 0 );
  697. self playSoundToPlayer( "item_blast_shield_off", self );
  698. }
  699. }
  700.  
  701.  
  702. setFreefall()
  703. {
  704. //eventually set a listener to do a roll when falling damage is taken
  705. }
  706.  
  707. unsetFreefall()
  708. {
  709. }
  710.  
  711.  
  712. setTacticalInsertion()
  713. {
  714. self _giveWeapon( "flare_mp", 0 );
  715. self giveStartAmmo( "flare_mp" );
  716.  
  717. self thread monitorTIUse();
  718. }
  719.  
  720. unsetTacticalInsertion()
  721. {
  722. self notify( "end_monitorTIUse" );
  723. }
  724.  
  725. clearPreviousTISpawnpoint()
  726. {
  727. self waittill_any ( "disconnect", "joined_team", "joined_spectators" );
  728.  
  729. if ( isDefined ( self.setSpawnpoint ) )
  730. self deleteTI( self.setSpawnpoint );
  731. }
  732.  
  733. updateTISpawnPosition()
  734. {
  735. self endon ( "death" );
  736. self endon ( "disconnect" );
  737. level endon ( "game_ended" );
  738. self endon ( "end_monitorTIUse" );
  739.  
  740. while ( isReallyAlive( self ) )
  741. {
  742. if ( self isValidTISpawnPosition() )
  743. self.TISpawnPosition = self.origin;
  744.  
  745. wait ( 0.05 );
  746. }
  747. }
  748.  
  749. isValidTISpawnPosition()
  750. {
  751. if ( CanSpawn( self.origin ) && self IsOnGround() )
  752. return true;
  753. else
  754. return false;
  755. }
  756.  
  757. monitorTIUse()
  758. {
  759. self endon ( "death" );
  760. self endon ( "disconnect" );
  761. level endon ( "game_ended" );
  762. self endon ( "end_monitorTIUse" );
  763.  
  764. self thread updateTISpawnPosition();
  765. self thread clearPreviousTISpawnpoint();
  766.  
  767. for ( ;; )
  768. {
  769. self waittill( "grenade_fire", lightstick, weapName );
  770.  
  771. if ( weapName != "flare_mp" )
  772. continue;
  773.  
  774. //lightstick delete();
  775.  
  776. if ( isDefined( self.setSpawnPoint ) )
  777. self deleteTI( self.setSpawnPoint );
  778.  
  779. if ( !isDefined( self.TISpawnPosition ) )
  780. continue;
  781.  
  782. if ( self touchingBadTrigger() )
  783. continue;
  784.  
  785. TIGroundPosition = playerPhysicsTrace( self.TISpawnPosition + (0,0,16), self.TISpawnPosition - (0,0,2048) ) + (0,0,1);
  786.  
  787. glowStick = spawn( "script_model", TIGroundPosition );
  788. glowStick.angles = self.angles;
  789. glowStick.team = self.team;
  790. glowStick.enemyTrigger = spawn( "script_origin", TIGroundPosition );
  791. glowStick thread GlowStickSetupAndWaitForDeath( self );
  792. glowStick.playerSpawnPos = self.TISpawnPosition;
  793.  
  794. glowStick thread maps\mp\gametypes\_weapons::createBombSquadModel( "weapon_light_stick_tactical_bombsquad", "tag_fire_fx", level.otherTeam[self.team], self );
  795.  
  796. self.setSpawnPoint = glowStick;
  797. return;
  798. }
  799. }
  800.  
  801.  
  802. GlowStickSetupAndWaitForDeath( owner )
  803. {
  804. self setModel( level.spawnGlowModel["enemy"] );
  805. if ( level.teamBased )
  806. self maps\mp\_entityheadIcons::setTeamHeadIcon( self.team , (0,0,20) );
  807. else
  808. self maps\mp\_entityheadicons::setPlayerHeadIcon( owner, (0,0,20) );
  809.  
  810. self thread GlowStickDamageListener( owner );
  811. self thread GlowStickEnemyUseListener( owner );
  812. self thread GlowStickUseListener( owner );
  813. self thread GlowStickTeamUpdater( level.otherTeam[self.team], level.spawnGlow["enemy"], owner );
  814.  
  815. dummyGlowStick = spawn( "script_model", self.origin+ (0,0,0) );
  816. dummyGlowStick.angles = self.angles;
  817. dummyGlowStick setModel( level.spawnGlowModel["friendly"] );
  818. dummyGlowStick setContents( 0 );
  819. dummyGlowStick thread GlowStickTeamUpdater( self.team, level.spawnGlow["friendly"], owner );
  820.  
  821. dummyGlowStick playLoopSound( "emt_road_flare_burn" );
  822.  
  823. self waittill ( "death" );
  824.  
  825. dummyGlowStick stopLoopSound();
  826. dummyGlowStick delete();
  827. }
  828.  
  829.  
  830. GlowStickTeamUpdater( showForTeam, showEffect, owner )
  831. {
  832. self endon ( "death" );
  833.  
  834. // PlayFXOnTag fails if run on the same frame the parent entity was created
  835. wait ( 0.05 );
  836.  
  837. //PlayFXOnTag( showEffect, self, "TAG_FX" );
  838. angles = self getTagAngles( "tag_fire_fx" );
  839. fxEnt = SpawnFx( showEffect, self getTagOrigin( "tag_fire_fx" ), anglesToForward( angles ), anglesToUp( angles ) );
  840. TriggerFx( fxEnt );
  841.  
  842. self thread deleteOnDeath( fxEnt );
  843.  
  844. for ( ;; )
  845. {
  846. self hide();
  847. fxEnt hide();
  848. foreach ( player in level.players )
  849. {
  850. if ( player.team == showForTeam && level.teamBased )
  851. {
  852. self showToPlayer( player );
  853. fxEnt showToPlayer( player );
  854. }
  855. else if ( !level.teamBased && player == owner && showEffect == level.spawnGlow["friendly"] )
  856. {
  857. self showToPlayer( player );
  858. fxEnt showToPlayer( player );
  859. }
  860. else if ( !level.teamBased && player != owner && showEffect == level.spawnGlow["enemy"] )
  861. {
  862. self showToPlayer( player );
  863. fxEnt showToPlayer( player );
  864. }
  865. }
  866.  
  867. level waittill_either ( "joined_team", "player_spawned" );
  868. }
  869. }
  870.  
  871. deleteOnDeath( ent )
  872. {
  873. self waittill( "death" );
  874. if ( isdefined( ent ) )
  875. ent delete();
  876. }
  877.  
  878. GlowStickDamageListener( owner )
  879. {
  880. self endon ( "death" );
  881.  
  882. self setCanDamage( true );
  883. // use large health to work around teamkilling issue
  884. self.health = 5000;
  885.  
  886. for ( ;; )
  887. {
  888. self waittill ( "damage", amount, attacker );
  889.  
  890. if ( level.teambased && isDefined( owner ) && attacker != owner && ( isDefined( attacker.team ) && attacker.team == self.team ) )
  891. {
  892. self.health += amount;
  893. continue;
  894. }
  895.  
  896. if ( self.health < (5000-20) )
  897. {
  898. if ( isDefined( owner ) && attacker != owner )
  899. {
  900. attacker notify ( "destroyed_insertion", owner );
  901. attacker notify( "destroyed_explosive" ); // count towards SitRep Pro challenge
  902. owner thread leaderDialogOnPlayer( "ti_destroyed" );
  903. }
  904.  
  905. attacker thread deleteTI( self );
  906. }
  907. }
  908. }
  909.  
  910. GlowStickUseListener( owner )
  911. {
  912. self endon ( "death" );
  913. level endon ( "game_ended" );
  914. owner endon ( "disconnect" );
  915.  
  916. self setCursorHint( "HINT_NOICON" );
  917. self setHintString( &"MP_PICKUP_TI" );
  918.  
  919. self thread updateEnemyUse( owner );
  920.  
  921. for ( ;; )
  922. {
  923. self waittill ( "trigger", player );
  924.  
  925. player playSound( "chemlight_pu" );
  926. player thread setTacticalInsertion();
  927. player thread deleteTI( self );
  928. }
  929. }
  930.  
  931. updateEnemyUse( owner )
  932. {
  933. self endon ( "death" );
  934.  
  935. for ( ;; )
  936. {
  937. self setSelfUsable( owner );
  938. level waittill_either ( "joined_team", "player_spawned" );
  939. }
  940. }
  941.  
  942. deleteTI( TI )
  943. {
  944. if (isDefined( TI.enemyTrigger ) )
  945. TI.enemyTrigger Delete();
  946.  
  947. spot = TI.origin;
  948. spotAngles = TI.angles;
  949.  
  950. TI Delete();
  951.  
  952. dummyGlowStick = spawn( "script_model", spot );
  953. dummyGlowStick.angles = spotAngles;
  954. dummyGlowStick setModel( level.spawnGlowModel["friendly"] );
  955.  
  956. dummyGlowStick setContents( 0 );
  957. thread dummyGlowStickDelete( dummyGlowStick );
  958. }
  959.  
  960. dummyGlowStickDelete( stick )
  961. {
  962. wait(2.5);
  963. stick Delete();
  964. }
  965.  
  966. GlowStickEnemyUseListener( owner )
  967. {
  968. self endon ( "death" );
  969. level endon ( "game_ended" );
  970. owner endon ( "disconnect" );
  971.  
  972. self.enemyTrigger setCursorHint( "HINT_NOICON" );
  973. self.enemyTrigger setHintString( &"MP_DESTROY_TI" );
  974. self.enemyTrigger makeEnemyUsable( owner );
  975.  
  976. for ( ;; )
  977. {
  978. self.enemyTrigger waittill ( "trigger", player );
  979.  
  980. player notify ( "destroyed_insertion", owner );
  981. player notify( "destroyed_explosive" ); // count towards SitRep Pro challenge
  982.  
  983. //playFX( level.spawnGlowSplat, self.origin);
  984.  
  985. if ( isDefined( owner ) && player != owner )
  986. owner thread leaderDialogOnPlayer( "ti_destroyed" );
  987.  
  988. player thread deleteTI( self );
  989. }
  990. }
  991.  
  992. setLittlebirdSupport()
  993. {
  994. self thread killstreakThink( "littlebird_support", 2, "end_littlebird_support_think" );
  995. }
  996.  
  997. unsetLittlebirdSupport()
  998. {
  999. self notify ( "end_littlebird_support_think" );
  1000. }
  1001.  
  1002. setC4Death()
  1003. {
  1004. if ( ! self _hasperk( "specialty_pistoldeath" ) )
  1005. self _setperk( "specialty_pistoldeath");
  1006. }
  1007.  
  1008. unsetC4Death()
  1009. {
  1010.  
  1011. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement