JoBoz

Untitled

Apr 30th, 2011
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.64 KB | None | 0 0
  1. make an GSC file named ; _healthoverlay.gsc
  2.  
  3.  
  4. #include maps\mp\_utility;
  5.  
  6. init()
  7. {
  8. level.healthOverlayCutoff = 0.55;
  9.  
  10. regenTime = 5;
  11. regenTime = maps\mp\gametypes\_tweakables::getTweakableValue( "player", "healthregentime" );
  12.  
  13. level.playerHealth_RegularRegenDelay = regenTime * 1000;
  14.  
  15. level.healthRegenDisabled = (level.playerHealth_RegularRegenDelay <= 0);
  16.  
  17. level thread onPlayerConnect();
  18. }
  19.  
  20. onPlayerConnect()
  21. {
  22. for(;;)
  23. {
  24. level waittill("connected", player);
  25.  
  26. player thread onPlayerSpawned();
  27. }
  28. }
  29.  
  30.  
  31. onPlayerSpawned()
  32. {
  33. self endon("disconnect");
  34.  
  35. for(;;)
  36. {
  37. self waittill("spawned_player");
  38. //self thread playerHealthRegen();
  39.  
  40. self thread showTempDamage();
  41. }
  42. }
  43.  
  44.  
  45. showTempDamage()
  46. {
  47. self endon ( "death" );
  48. self endon ( "disconnect" );
  49. /#
  50. setDevDvar( "scr_damage_wait", 0 );
  51. setDevDvar( "scr_damage_fadein", 0.25 );
  52. setDevDvar( "scr_damage_fadeout", 0.5 );
  53. setDevDvar( "scr_damage_holdtime", 0.5 );
  54. setDevDvar( "scr_damage_numfades", 5 );
  55.  
  56. for ( ;; )
  57. {
  58. while ( getDvarFloat( "scr_damage_wait" ) <= 0 )
  59. wait ( 1.0 );
  60.  
  61. wait ( getDvarFloat( "scr_damage_wait" ) );
  62.  
  63. for ( i = 0; i < getDvarInt( "scr_damage_numfades" ); i++ )
  64. {
  65. self VisionSetNakedForPlayer( "mp_crash_damage", getDvarFloat( "scr_damage_fadein" ) * (getDvarInt( "scr_damage_numfades" ) - i) );
  66. wait ( getDvarFloat( "scr_damage_fadein" ) + getDvarFloat( "scr_damage_holdtime" ) );
  67. self VisionSetNakedForPlayer( "mp_crash", getDvarFloat( "scr_damage_fadeout" ) * getDvarInt( "scr_damage_numfades" ) );
  68. wait ( getDvarFloat( "scr_damage_fadeout" ) );
  69. }
  70.  
  71. }
  72. #/
  73. }
  74.  
  75. playerHealthRegen()
  76. {
  77. self endon ( "death" );
  78. self endon ( "disconnect" );
  79. self endon ( "joined_team" );
  80. self endon ( "joined_spectators" );
  81.  
  82. if ( self.health <= 0 )
  83. {
  84. assert( !isalive( self ) );
  85. return;
  86. }
  87.  
  88. oldhealth = self.maxhealth;
  89.  
  90. regenRate = 0.1;
  91. veryHurt = false;
  92.  
  93. self.breathingStopTime = -10000;
  94.  
  95. thread playerBreathingSound( self.maxhealth * 0.35 );
  96.  
  97. lastSoundTime_Recover = 0;
  98. hurtTime = 0;
  99. newHealth = 0;
  100.  
  101. for (;;)
  102. {
  103. wait ( 0.05 );
  104. if ( isDefined( level.hostMigrationTimer ) )
  105. {
  106. timePassed = maps\mp\gametypes\_hostmigration::waitTillHostMigrationDone();
  107.  
  108. hurtTime += timePassed;
  109. lastSoundTime_Recover += timePassed;
  110. }
  111.  
  112. if ( self.health == self.maxhealth || ( level.dieHardMode && isDefined( self.healthClamped ) && self.health >= self.healthClamped ) ) // runs every frame
  113. {
  114. oldHealth = self.maxhealth;
  115. veryHurt = false;
  116. self.atBrinkOfDeath = false;
  117. continue;
  118. }
  119.  
  120. if ( self.health <= 0 ) // player dead
  121. return;
  122.  
  123. curTime = getTime();
  124.  
  125. ratio = self.health / self.maxHealth;
  126.  
  127. if ( ratio <= level.healthOverlayCutoff )
  128. {
  129. if ( !veryHurt )
  130. hurtTime = curTime;
  131.  
  132. veryHurt = true;
  133. self.atBrinkOfDeath = true;
  134. }
  135.  
  136. if ( self.health >= oldhealth )
  137. {
  138. if ( curTime - hurtTime < level.playerHealth_RegularRegenDelay )
  139. continue;
  140.  
  141. if ( level.healthRegenDisabled )
  142. {
  143. wait ( 3.0 );
  144. self.maxHealth = int( max( self.health, 2 ) );
  145. self.health = self.maxHealth;
  146.  
  147. continue;
  148. }
  149.  
  150. if ( curTime - lastSoundTime_Recover > level.playerHealth_RegularRegenDelay )
  151. {
  152. lastSoundTime_Recover = curTime;
  153. if ( !level.gameEnded )
  154. self playLocalSound("breathing_better");
  155. }
  156.  
  157. if ( veryHurt )
  158. {
  159. newHealth = ratio;
  160. if ( curTime > hurtTime + 3000 )
  161. newHealth += regenRate;
  162. }
  163. else
  164. {
  165. newHealth = 1;
  166. }
  167.  
  168. if ( newHealth >= 1.0 )
  169. {
  170. if ( veryHurt )
  171. self maps\mp\gametypes\_missions::healthRegenerated();
  172.  
  173. self maps\mp\gametypes\_damage::resetAttackerList();
  174. newHealth = 1.0;
  175. }
  176.  
  177. if (newHealth <= 0)
  178. {
  179. // Player is dead
  180. return;
  181. }
  182.  
  183. self setNormalHealth (newHealth);
  184. oldHealth = self.health;
  185. continue;
  186. }
  187.  
  188. // first time damaged
  189. oldHealth = self.health;
  190. hurtTime = curTime;
  191. self.breathingStopTime = hurtTime + 6000;
  192. }
  193. }
  194.  
  195. playerBreathingSound( healthcap )
  196. {
  197. level endon ( "game_ended" );
  198. self endon ( "death" );
  199. self endon ( "disconnect" );
  200. self endon ( "joined_team" );
  201. self endon ( "joined_spectators" );
  202.  
  203. wait ( 2 );
  204.  
  205. for (;;)
  206. {
  207. wait ( 0.2 );
  208.  
  209. if ( self.health <= 0 )
  210. return;
  211.  
  212. // Player still has a lot of health so no breathing sound
  213. if ( self.health >= healthcap )
  214. continue;
  215.  
  216. if ( level.healthRegenDisabled && gettime() > self.breathingStopTime )
  217. continue;
  218.  
  219. self playLocalSound( "breathing_hurt" );
  220.  
  221. wait ( .784 );
  222. wait ( 0.1 + randomfloat (0.8) );
  223. }
  224. }
Advertisement
Add Comment
Please, Sign In to add comment