Advertisement
Guest User

Untitled

a guest
Sep 29th, 2010
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.55 KB | None | 0 0
  1. #include common_scripts\utility;
  2. #include maps\mp\_utility;
  3. #include maps\mp\gametypes\_hud_util;
  4.  
  5. init()
  6. {
  7. level.isTeamSpeaking["allies"] = false;
  8. level.isTeamSpeaking["axis"] = false;
  9.  
  10. level.speakers["allies"] = [];
  11. level.speakers["axis"] = [];
  12.  
  13. level.bcSounds = [];
  14. level.bcSounds["reload"] = "inform_reloading_generic";
  15. level.bcSounds["frag_out"] = "inform_attack_grenade";
  16. level.bcSounds["flash_out"] = "inform_attack_flashbang";
  17. level.bcSounds["smoke_out"] = "inform_attack_smoke";
  18. level.bcSounds["conc_out"] = "inform_attack_stun";
  19. level.bcSounds["c4_plant"] = "inform_attack_thwc4";
  20. level.bcSounds["claymore_plant"] = "inform_plant_claymore";
  21. level.bcSounds["kill"] = "inform_killfirm_infantry";
  22. level.bcSounds["casualty"] = "inform_casualty_generic";
  23.  
  24. level thread onPlayerConnect();
  25. }
  26.  
  27.  
  28. onPlayerConnect()
  29. {
  30. for(;;)
  31. {
  32. level waittill ( "connected", player );
  33.  
  34. player thread onPlayerSpawned();
  35. }
  36. }
  37.  
  38.  
  39. onPlayerSpawned()
  40. {
  41. self endon( "disconnect" );
  42.  
  43. for(;;)
  44. {
  45. self waittill( "spawned_player" );
  46.  
  47. // help players be stealthy in splitscreen by not announcing their intentions
  48. if ( level.splitscreen )
  49. continue;
  50.  
  51. self thread claymoreTracking();
  52. self thread reloadTracking();
  53. self thread grenadeTracking();
  54. }
  55. }
  56.  
  57.  
  58. claymoreTracking()
  59. {
  60. self endon ( "death" );
  61. self endon ( "disconnect" );
  62.  
  63. while(1)
  64. {
  65. self waittill( "begin_firing" );
  66. weaponName = self getCurrentWeapon();
  67. if ( weaponName == "claymore_mp" )
  68. level thread sayLocalSound( self, "claymore_plant" );
  69. }
  70. }
  71.  
  72.  
  73. reloadTracking()
  74. {
  75. self endon ( "death" );
  76. self endon ( "disconnect" );
  77.  
  78. for( ;; )
  79. {
  80. self waittill ( "reload_start" );
  81. level thread sayLocalSound( self, "reload" );
  82. }
  83. }
  84.  
  85.  
  86. grenadeTracking()
  87. {
  88. self endon ( "death" );
  89. self endon ( "disconnect" );
  90.  
  91. for( ;; )
  92. {
  93. self waittill ( "grenade_fire", grenade, weaponName );
  94.  
  95. if ( weaponName == "frag_grenade_mp" )
  96. level thread sayLocalSound( self, "frag_out" );
  97. else if ( weaponName == "flash_grenade_mp" )
  98. level thread sayLocalSound( self, "flash_out" );
  99. else if ( weaponName == "concussion_grenade_mp" )
  100. level thread sayLocalSound( self, "conc_out" );
  101. else if ( weaponName == "smoke_grenade_mp" )
  102. level thread sayLocalSound( self, "smoke_out" );
  103. else if ( weaponName == "c4_mp" )
  104. level thread sayLocalSound( self, "c4_plant" );
  105. }
  106. }
  107.  
  108.  
  109. sayLocalSoundDelayed( player, soundType, delay )
  110. {
  111. player endon ( "death" );
  112. player endon ( "disconnect" );
  113.  
  114. wait ( delay );
  115.  
  116. sayLocalSound( player, soundType );
  117. }
  118.  
  119.  
  120. sayLocalSound( player, soundType )
  121. {
  122. player endon ( "death" );
  123. player endon ( "disconnect" );
  124.  
  125. if ( isSpeakerInRange( player ) )
  126. return;
  127.  
  128. if( player.team != "spectator" )
  129. {
  130. prefix = maps\mp\gametypes\_teams::getTeamVoicePrefix( player.team ) + "1_";
  131. soundAlias = prefix + level.bcSounds[soundType];
  132. player thread doSound( soundAlias );
  133. }
  134. }
  135.  
  136.  
  137. doSound( soundAlias )
  138. {
  139. team = self.pers["team"];
  140. level addSpeaker( self, team );
  141. self playSoundToTeam( soundAlias, team, self );
  142. self thread timeHack( soundAlias ); // workaround because soundalias notify isn't happening
  143. self waittill_any( soundAlias, "death", "disconnect" );
  144. level removeSpeaker( self, team );
  145. }
  146.  
  147.  
  148. timeHack( soundAlias )
  149. {
  150. self endon ( "death" );
  151. self endon ( "disconnect" );
  152.  
  153. wait ( 2.0 );
  154. self notify ( soundAlias );
  155. }
  156.  
  157.  
  158. isSpeakerInRange( player )
  159. {
  160. player endon ( "death" );
  161. player endon ( "disconnect" );
  162.  
  163. distSq = 1000 * 1000;
  164.  
  165. // to prevent player switch to spectator after throwing a granade causing damage to someone and result in attacker.pers["team"] = "spectator"
  166. if( isdefined( player ) && isdefined( player.pers["team"] ) && player.pers["team"] != "spectator" )
  167. {
  168. for ( index = 0; index < level.speakers[player.pers["team"]].size; index++ )
  169. {
  170. teammate = level.speakers[player.pers["team"]][index];
  171. if ( teammate == player )
  172. return true;
  173.  
  174. if ( distancesquared( teammate.origin, player.origin ) < distSq )
  175. return true;
  176. }
  177. }
  178.  
  179. return false;
  180. }
  181.  
  182.  
  183. addSpeaker( player, team )
  184. {
  185. level.speakers[team][level.speakers[team].size] = player;
  186. }
  187.  
  188.  
  189. // this is lazy... fix up later by tracking ID's and doing array slot swapping
  190. removeSpeaker( player, team )
  191. {
  192. newSpeakers = [];
  193. for ( index = 0; index < level.speakers[team].size; index++ )
  194. {
  195. if ( level.speakers[team][index] == player )
  196. continue;
  197.  
  198. newSpeakers[newSpeakers.size] = level.speakers[team][index];
  199. }
  200.  
  201. level.speakers[team] = newSpeakers;
  202. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement