Advertisement
Guest User

Untitled

a guest
Sep 18th, 2014
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.85 KB | None | 0 0
  1. manageSpectate( whyHere, a1, a2, a3, a4, a5, a6, a7, a8, a9,
  2. b0, b1, b2, b3, b4, b5, b6, b7, b8, b9 )
  3. {
  4. codam\utils::debug( 98, "manageSpectate:: |", whyHere, "|" );
  5.  
  6. level endon( "intermission" );
  7.  
  8. self notify( "end_spectate" );
  9. self endon( "end_spectate" );
  10. self endon( "spawned" );
  11.  
  12. if ( !isPlayer( self ) )
  13. return;
  14.  
  15. if ( !isdefined( whyHere ) )
  16. whyHere = "";
  17.  
  18. if ( whyHere == "spec" )
  19. {
  20. // Player is spectator, does server restrict free view
  21. if ( level.restrictspec )
  22. self thread _specToBlack( whyHere );
  23.  
  24. return;
  25. }
  26.  
  27. if ( ( level.specmode == "stay" ) &&
  28. ( whyHere != "kick" ) )
  29. {
  30. // Specmode: stay in place; simply float around dead body
  31. return;
  32. }
  33.  
  34. // If killcam is active, wait for it to complete ...
  35. while ( isdefined( self.killcam ) ||
  36. self.archivetime )
  37. wait( 0.05 );
  38.  
  39. if ( ( level.specmode == "black" ) ||
  40. ( whyHere == "kick" ) )
  41. {
  42. // Specmode: spectate to black screen
  43. self thread _specToBlack( whyHere );
  44. return;
  45. }
  46.  
  47. if ( level.specmode == "score" )
  48. {
  49. // Specmode: Watch scoreboard mode
  50. [[ level.gtd_call ]]( "gt_spawnIntermission" );
  51. return;
  52. }
  53.  
  54. team = self.sessionteam;
  55. if ( !isdefined( team ) || ( team == "none" ) )
  56. team = self.pers[ "team" ];
  57.  
  58. if ( ( level.specmode == "free" ) ||
  59. ( isdefined( team ) && ( team == "spectator" ) ) )
  60. {
  61. // Specmode 3: free spectate starting from above dead body
  62. self.spectatorclient = -1;
  63. self.sessionstate = "spectator";
  64. self spawn( self.origin + ( 0, 0, 10 ), self.angles );
  65. return;
  66. }
  67.  
  68. // Specmode: team lock
  69. if ( !isdefined( team ) ||
  70. ( level.specmode != "team" ) )
  71. return;
  72.  
  73. _emptyTeamList = [];
  74. for ( i = 0; i < level.ham_sv_maxclients; i++ )
  75. _emptyTeamList[ i ] = false;
  76.  
  77. _myEnt = self getEntityNumber();
  78.  
  79. cur = self.spectatorclient;
  80. if ( ( cur < 0 ) || ( cur >= level.ham_sv_maxclients ) )
  81. cur = _myEnt; // Start with me
  82.  
  83. _doNext = true; // First time through ... find next live teammate
  84. _doPrev = false;
  85. for (;;)
  86. {
  87. // Identify this team's current players
  88. _team = _emptyTeamList;
  89. players = getentarray( "player", "classname" );
  90. for ( i = 0; i < players.size; i++ )
  91. {
  92. player = players[ i ];
  93.  
  94. // Is player alive?
  95. if ( player.sessionstate != "playing" )
  96. continue;
  97.  
  98. // Get player's proper team
  99. pteam = player.sessionteam;
  100. if ( !isdefined( pteam ) || ( pteam == "none" ) )
  101. pteam = player.pers[ "team" ];
  102.  
  103. // Mark all players in my team
  104. if ( isdefined( pteam ) && ( pteam == team ) )
  105. _team[ player getEntityNumber() ] = true;
  106. }
  107.  
  108. if ( _doPrev )
  109. {
  110. // Find previous team member to spectate on ...
  111. for ( i = 0; i < _team.size; i++ )
  112. {
  113. cur--;
  114. if ( cur < 0 )
  115. cur = level.ham_sv_maxclients - 1;
  116. if ( _team[ cur ] )
  117. break; // Found previous teammate
  118. }
  119. }
  120. else
  121. {
  122. // Find next team member to spectate on ...
  123. for ( i = 0; i < _team.size; i++ )
  124. {
  125. cur++;
  126. if ( cur >= level.ham_sv_maxclients )
  127. cur = 0;
  128. if ( _team[ cur ] )
  129. break; // Found next teammate
  130. }
  131. }
  132.  
  133. if ( i >= _team.size )
  134. {
  135. // All team members are dead ...
  136.  
  137. if ( isdefined( level.roundbased ) &&
  138. level.roundbased &&
  139. !level.allowrespawn )
  140. {
  141. // Allow free spectate in round-based GTs
  142. // ... round should be ending.
  143. self.spectatorclient = -1;
  144. self.sessionstate = "spectator";
  145. return;
  146. }
  147.  
  148. // No team members to lock onto ... play dead Fido!
  149. self.sessionstate = "dead";
  150. _doNext = true;
  151. wait( 0.05 );
  152. continue;
  153. }
  154.  
  155. _doNext = false;
  156. _doPrev = false;
  157. _inUse = true;
  158.  
  159. // Wait for button press ...
  160. while ( !( _doNext || _doPrev ) )
  161. {
  162. if ( self.sessionstate == "playing" )
  163. return; // hmm, endon's didn't work??!!
  164.  
  165. nteam = self.sessionteam;
  166. if ( !isdefined( nteam ) || ( nteam == "none" ) )
  167. nteam = self.pers[ "team" ];
  168. if ( !isdefined( nteam ) || ( nteam == "spectator" ) )
  169. {
  170. // Cannot determine player's team???
  171. // Must do something, simply mark as dead
  172. // to force dropping to ground.
  173. self.sessionstate = "dead";
  174. return; // Can't determine player's team?????
  175. }
  176. else
  177. if ( nteam != team )
  178. {
  179. // Switched teams while spectating???
  180. team = nteam;
  181. _doNext = true;
  182. wait( 0.05 );
  183. continue;
  184. }
  185.  
  186. player = getEntByNum( cur );
  187. if ( isdefined( player ) &&
  188. ( player.sessionstate != "playing" ) )
  189. {
  190. // Current team player went away or died
  191. _doNext = true;
  192. }
  193. else
  194. {
  195. self.sessionstate = "spectator";
  196. self.spectatorclient = cur;
  197.  
  198. _doNext = self attackButtonPressed();
  199. _doPrev = self meleeButtonPressed();
  200. if ( _inUse )
  201. {
  202. _inUse = ( _doNext || _doPrev );
  203. _doNext = false;
  204. _doPrev = false;
  205. }
  206. }
  207.  
  208. wait( 0.05 );
  209. }
  210. }
  211. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement