Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- manageSpectate( whyHere, a1, a2, a3, a4, a5, a6, a7, a8, a9,
- b0, b1, b2, b3, b4, b5, b6, b7, b8, b9 )
- {
- codam\utils::debug( 98, "manageSpectate:: |", whyHere, "|" );
- level endon( "intermission" );
- self notify( "end_spectate" );
- self endon( "end_spectate" );
- self endon( "spawned" );
- if ( !isPlayer( self ) )
- return;
- if ( !isdefined( whyHere ) )
- whyHere = "";
- if ( whyHere == "spec" )
- {
- // Player is spectator, does server restrict free view
- if ( level.restrictspec )
- self thread _specToBlack( whyHere );
- return;
- }
- if ( ( level.specmode == "stay" ) &&
- ( whyHere != "kick" ) )
- {
- // Specmode: stay in place; simply float around dead body
- return;
- }
- // If killcam is active, wait for it to complete ...
- while ( isdefined( self.killcam ) ||
- self.archivetime )
- wait( 0.05 );
- if ( ( level.specmode == "black" ) ||
- ( whyHere == "kick" ) )
- {
- // Specmode: spectate to black screen
- self thread _specToBlack( whyHere );
- return;
- }
- if ( level.specmode == "score" )
- {
- // Specmode: Watch scoreboard mode
- [[ level.gtd_call ]]( "gt_spawnIntermission" );
- return;
- }
- team = self.sessionteam;
- if ( !isdefined( team ) || ( team == "none" ) )
- team = self.pers[ "team" ];
- if ( ( level.specmode == "free" ) ||
- ( isdefined( team ) && ( team == "spectator" ) ) )
- {
- // Specmode 3: free spectate starting from above dead body
- self.spectatorclient = -1;
- self.sessionstate = "spectator";
- self spawn( self.origin + ( 0, 0, 10 ), self.angles );
- return;
- }
- // Specmode: team lock
- if ( !isdefined( team ) ||
- ( level.specmode != "team" ) )
- return;
- _emptyTeamList = [];
- for ( i = 0; i < level.ham_sv_maxclients; i++ )
- _emptyTeamList[ i ] = false;
- _myEnt = self getEntityNumber();
- cur = self.spectatorclient;
- if ( ( cur < 0 ) || ( cur >= level.ham_sv_maxclients ) )
- cur = _myEnt; // Start with me
- _doNext = true; // First time through ... find next live teammate
- _doPrev = false;
- for (;;)
- {
- // Identify this team's current players
- _team = _emptyTeamList;
- players = getentarray( "player", "classname" );
- for ( i = 0; i < players.size; i++ )
- {
- player = players[ i ];
- // Is player alive?
- if ( player.sessionstate != "playing" )
- continue;
- // Get player's proper team
- pteam = player.sessionteam;
- if ( !isdefined( pteam ) || ( pteam == "none" ) )
- pteam = player.pers[ "team" ];
- // Mark all players in my team
- if ( isdefined( pteam ) && ( pteam == team ) )
- _team[ player getEntityNumber() ] = true;
- }
- if ( _doPrev )
- {
- // Find previous team member to spectate on ...
- for ( i = 0; i < _team.size; i++ )
- {
- cur--;
- if ( cur < 0 )
- cur = level.ham_sv_maxclients - 1;
- if ( _team[ cur ] )
- break; // Found previous teammate
- }
- }
- else
- {
- // Find next team member to spectate on ...
- for ( i = 0; i < _team.size; i++ )
- {
- cur++;
- if ( cur >= level.ham_sv_maxclients )
- cur = 0;
- if ( _team[ cur ] )
- break; // Found next teammate
- }
- }
- if ( i >= _team.size )
- {
- // All team members are dead ...
- if ( isdefined( level.roundbased ) &&
- level.roundbased &&
- !level.allowrespawn )
- {
- // Allow free spectate in round-based GTs
- // ... round should be ending.
- self.spectatorclient = -1;
- self.sessionstate = "spectator";
- return;
- }
- // No team members to lock onto ... play dead Fido!
- self.sessionstate = "dead";
- _doNext = true;
- wait( 0.05 );
- continue;
- }
- _doNext = false;
- _doPrev = false;
- _inUse = true;
- // Wait for button press ...
- while ( !( _doNext || _doPrev ) )
- {
- if ( self.sessionstate == "playing" )
- return; // hmm, endon's didn't work??!!
- nteam = self.sessionteam;
- if ( !isdefined( nteam ) || ( nteam == "none" ) )
- nteam = self.pers[ "team" ];
- if ( !isdefined( nteam ) || ( nteam == "spectator" ) )
- {
- // Cannot determine player's team???
- // Must do something, simply mark as dead
- // to force dropping to ground.
- self.sessionstate = "dead";
- return; // Can't determine player's team?????
- }
- else
- if ( nteam != team )
- {
- // Switched teams while spectating???
- team = nteam;
- _doNext = true;
- wait( 0.05 );
- continue;
- }
- player = getEntByNum( cur );
- if ( isdefined( player ) &&
- ( player.sessionstate != "playing" ) )
- {
- // Current team player went away or died
- _doNext = true;
- }
- else
- {
- self.sessionstate = "spectator";
- self.spectatorclient = cur;
- _doNext = self attackButtonPressed();
- _doPrev = self meleeButtonPressed();
- if ( _inUse )
- {
- _inUse = ( _doNext || _doPrev );
- _doNext = false;
- _doPrev = false;
- }
- }
- wait( 0.05 );
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement