/* ================== G_LeaveTeam ================== */ void G_LeaveTeam( gentity_t *self ) { team_t team = self->client->pers.teamSelection; gentity_t *ent; int i; if ( team == TEAM_ALIENS ) { G_RemoveFromSpawnQueue( &level.alienSpawnQueue, self->client->ps.clientNum ); } else if ( team == TEAM_HUMANS ) { G_RemoveFromSpawnQueue( &level.humanSpawnQueue, self->client->ps.clientNum ); } else { if ( self->client->sess.spectatorState == SPECTATOR_FOLLOW ) { G_StopFollowing( self ); } return; } // stop any following clients G_StopFromFollowing( self ); G_Vote( self, team, qfalse ); self->suicideTime = 0; for ( i = 0; i < level.num_entities; i++ ) { ent = &g_entities[ i ]; if ( !ent->inuse ) { continue; } if ( ent->client && ent->client->pers.connected == CON_CONNECTED ) { // cure poison if ( ent->client->ps.stats[ STAT_STATE ] & SS_POISONED && ent->client->lastPoisonClient == self ) { ent->client->ps.stats[ STAT_STATE ] &= ~SS_POISONED; } } else if ( ent->s.eType == ET_MISSILE && ent->r.ownerNum == self->s.number ) { G_FreeEntity( ent ); } } // cut all relevant zap beams G_ClearPlayerZapEffects( self ); G_namelog_update_score( self->client ); }
void G_LeaveTeam( gentity_t *self ) { team_t team = (team_t) self->client->pers.team; gentity_t *ent; int i; #ifdef UNREALARENA if ( TEAM_Q == team || TEAM_U == team ) #else if ( TEAM_ALIENS == team || TEAM_HUMANS == team ) #endif { G_RemoveFromSpawnQueue( &level.team[ team ].spawnQueue, self->client->ps.clientNum ); } else { if ( self->client->sess.spectatorState == SPECTATOR_FOLLOW ) { G_StopFollowing( self ); } return; } // stop any following clients G_StopFromFollowing( self ); G_Vote( self, team, false ); #ifndef UNREALARENA self->suicideTime = 0; #endif for ( i = 0; i < level.num_entities; i++ ) { ent = &g_entities[ i ]; if ( !ent->inuse ) { continue; } if ( ent->client && ent->client->pers.connected == CON_CONNECTED ) { #ifndef UNREALARENA // cure poison if ( ( ent->client->ps.stats[ STAT_STATE ] & SS_POISONED ) && ent->client->lastPoisonClient == self ) { ent->client->ps.stats[ STAT_STATE ] &= ~SS_POISONED; } #endif } else if ( ent->s.eType == entityType_t::ET_MISSILE && ent->r.ownerNum == self->s.number ) { G_FreeEntity( ent ); } } // cut all relevant zap beams G_ClearPlayerZapEffects( self ); Beacon::DeleteTags( self ); Beacon::RemoveOrphaned( self->s.number ); G_namelog_update_score( self->client ); }