Advertisement
Guest User

_healthoverlay.gsc

a guest
Nov 22nd, 2013
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.14 KB | None | 0 0
  1. #include maps\mp\_utility;
  2.  
  3. init()
  4. {
  5. level.healthOverlayCutoff = 0.55;
  6.  
  7. regenTime = 5;
  8. regenTime = maps\mp\gametypes\_tweakables::getTweakableValue( "player", "healthregentime" );
  9.  
  10. level.playerHealth_RegularRegenDelay = regenTime * 1000;
  11.  
  12. level.healthRegenDisabled = (level.playerHealth_RegularRegenDelay <= 0);
  13.  
  14. level thread onPlayerConnect();
  15. }
  16.  
  17. onPlayerConnect()
  18. {
  19. for(;;)
  20. {
  21. level waittill("connected", player);
  22.  
  23. player thread onPlayerSpawned();
  24. }
  25. }
  26.  
  27.  
  28. onPlayerSpawned()
  29. {
  30. self endon("disconnect");
  31.  
  32. for(;;)
  33. {
  34. self waittill("spawned_player");
  35. self thread playerHealthRegen();
  36.  
  37. /#
  38. //self thread showTempDamage();
  39. #/
  40. }
  41. }
  42.  
  43.  
  44. /#
  45. //showTempDamage()
  46. //{
  47. // self endon ( "death" );
  48. // self endon ( "disconnect" );
  49. // setDevDvar( "scr_damage_wait", 0 );
  50. // setDevDvar( "scr_damage_fadein", 0.25 );
  51. // setDevDvar( "scr_damage_fadeout", 0.5 );
  52. // setDevDvar( "scr_damage_holdtime", 0.5 );
  53. // setDevDvar( "scr_damage_numfades", 5 );
  54. //
  55. // for ( ;; )
  56. // {
  57. // while ( getDvarFloat( "scr_damage_wait" ) <= 0 )
  58. // wait ( 1.0 );
  59. //
  60. // wait ( getDvarFloat( "scr_damage_wait" ) );
  61. //
  62. // for ( i = 0; i < getDvarInt( "scr_damage_numfades" ); i++ )
  63. // {
  64. // self VisionSetNakedForPlayer( "near_death_mp", getDvarFloat( "scr_damage_fadein" ) * (getDvarInt( "scr_damage_numfades" ) - i) );
  65. // wait ( getDvarFloat( "scr_damage_fadein" ) + getDvarFloat( "scr_damage_holdtime" ) );
  66. // self VisionSetNakedForPlayer( "near_death_mp", getDvarFloat( "scr_damage_fadeout" ) * getDvarInt( "scr_damage_numfades" ) );
  67. // wait ( getDvarFloat( "scr_damage_fadeout" ) );
  68. // }
  69. //
  70. // }
  71. //}
  72. #/
  73.  
  74. playerHealthRegen()
  75. {
  76. self endon ( "death" );
  77. self endon ( "disconnect" );
  78. self endon ( "joined_team" );
  79. self endon ( "joined_spectators" );
  80. level endon ( "game_ended" );
  81.  
  82. if ( self.health <= 0 )
  83. {
  84. assert( !isalive( self ) );
  85. return;
  86. }
  87.  
  88. veryHurt = false;
  89. hurtTime = 0;
  90.  
  91. thread playerPainBreathingSound( self.maxhealth * 0.55 );
  92.  
  93. for (;;)
  94. {
  95. self waittill( "damage" );
  96.  
  97. if ( self.health <= 0 ) // player dead
  98. return;
  99.  
  100. hurtTime = getTime();
  101. healthRatio = self.health / self.maxHealth;
  102.  
  103. if ( !isDefined(self.healthRegenLevel) )
  104. self.regenSpeed = 1;
  105. else if ( self.healthRegenLevel == .33 )
  106. self.regenSpeed = .75;
  107. else if ( self.healthRegenLevel == .66 )
  108. self.regenSpeed = .50;
  109. else if ( self.healthRegenLevel == .99 )
  110. self.regenSpeed = .30;
  111. else
  112. self.regenSpeed = 1;
  113.  
  114.  
  115. if ( healthRatio <= level.healthOverlayCutoff ) //this is used for a challenge
  116. {
  117. self.atBrinkOfDeath = true;
  118. }
  119.  
  120. self thread healthRegeneration( hurtTime, healthRatio );
  121. self thread breathingManager( hurtTime, healthRatio );
  122. }
  123.  
  124. }
  125.  
  126. breathingManager( hurtTime, healthRatio )
  127. {
  128. self notify( "breathingManager" );
  129. self endon ( "breathingManager" );
  130.  
  131. self endon ( "death" );
  132. self endon ( "disconnect" );
  133. self endon ( "joined_team" );
  134. self endon ( "joined_spectators" );
  135. level endon ( "game_ended" );
  136.  
  137. if( self isUsingRemote() )
  138. return;
  139.  
  140. self.breathingStopTime = hurtTime + ( 6000 * self.regenSpeed );
  141.  
  142. wait ( 6 * self.regenSpeed );
  143.  
  144. if ( !level.gameEnded )
  145. self playLocalSound("breathing_better");
  146.  
  147. }
  148.  
  149. healthRegeneration( hurtTime, healthRatio )
  150. {
  151. self notify( "healthRegeneration" );
  152. self endon ( "healthRegeneration" );
  153.  
  154. self endon ( "death" );
  155. self endon ( "disconnect" );
  156. self endon ( "joined_team" );
  157. self endon ( "joined_spectators" );
  158. level endon ( "game_ended" );
  159.  
  160. if ( level.healthRegenDisabled )
  161. return;
  162.  
  163. wait ( ( level.playerHealth_RegularRegenDelay/1000 ) * self.regenSpeed ); //reduce this for perk
  164.  
  165. if ( healthRatio < .55 )
  166. {
  167. wasVeryHurt = true;
  168. }
  169. else
  170. {
  171. wasVeryHurt = false;
  172. }
  173.  
  174. for ( ;; )
  175. {
  176. if ( self.regenSpeed == .75 )//3.75 seconds 25% faster
  177. {
  178. wait ( .2 );
  179. if ( self.health < self.maxHealth )
  180. {
  181. self.health += 5;
  182. }
  183. else
  184. break;
  185. }
  186. else if ( self.regenSpeed ==.50 )//2.5 seconds 50% faster
  187. {
  188. wait ( 0.05 );
  189. if ( self.health < self.maxHealth )
  190. {
  191. self.health += 2;
  192. }
  193. else
  194. break;
  195. }
  196. else if ( self.regenSpeed == .30 )//1.5 seconds 75% faster
  197. {
  198. wait ( 0.15 );
  199. if ( self.health < self.maxHealth )
  200. {
  201. self.health += 9;
  202. }
  203. else
  204. break;
  205. }
  206. else if ( !isDefined( self.regenSpeed ) || self.regenSpeed == 1 ) // standard speed 5 seconds 100 frames
  207. {
  208. wait( 0.05 );
  209.  
  210. if ( self.health < self.maxHealth )
  211. {
  212. self.health += 1;
  213. healthRatio = self.health / self.maxHealth;
  214. }
  215. else
  216. break;
  217. }
  218.  
  219. if ( self.health > self.maxHealth )
  220. self.health = self.maxHealth;
  221. }
  222.  
  223. //fully regenerated
  224. self maps\mp\gametypes\_damage::resetAttackerList();
  225.  
  226. if ( wasVeryHurt )
  227. self maps\mp\gametypes\_missions::healthRegenerated();
  228. }
  229.  
  230. wait_for_not_using_remote()
  231. {
  232. // this fixes a bug where you can be very damaged and showing the red visionset, then enter a killstreak using a remote
  233. // once you come out, the red visionset was staying on because we never told it to reset while you were in the killstreak
  234. self notify( "waiting_to_stop_remote" );
  235. self endon( "waiting_to_stop_remote" );
  236.  
  237. self endon( "death" );
  238. level endon( "game_ended" );
  239.  
  240. self waittill( "stopped_using_remote" );
  241. if( IsDefined( level.nukeDetonated ) )
  242. self VisionSetNakedForPlayer( level.nukeVisionSet, 0 );
  243. else
  244. self VisionSetNakedForPlayer( "", 0 ); // go to default visionset
  245. }
  246.  
  247. playerPainBreathingSound( healthcap )
  248. {
  249. level endon ( "game_ended" );
  250. self endon ( "death" );
  251. self endon ( "disconnect" );
  252. self endon ( "joined_team" );
  253. self endon ( "joined_spectators" );
  254.  
  255. wait ( 2 );
  256.  
  257. for (;;)
  258. {
  259. wait ( 0.2 );
  260.  
  261. if ( self.health <= 0 )
  262. return;
  263.  
  264. // Player still has a lot of health so no breathing sound
  265. if ( self.health >= healthcap )
  266. continue;
  267.  
  268. if ( level.healthRegenDisabled && gettime() > self.breathingStopTime )
  269. continue;
  270.  
  271. if( self isUsingRemote() )
  272. continue;
  273.  
  274. self playLocalSound( "breathing_hurt" );
  275.  
  276. wait ( .784 );
  277. wait ( 0.1 + randomfloat (0.8) );
  278. }
  279. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement