void G_Gametype_GENERIC_SetUpWarmup( void ) { level.gametype.readyAnnouncementEnabled = true; level.gametype.scoreAnnouncementEnabled = false; level.gametype.countdownEnabled = false; level.gametype.pickableItemsMask = ( level.gametype.spawnableItemsMask|level.gametype.dropableItemsMask ); if( GS_Instagib() ) level.gametype.pickableItemsMask &= ~G_INSTAGIB_NEGATE_ITEMMASK; if( GS_TeamBasedGametype() ) { bool any = false; int team; for( team = TEAM_ALPHA; team < GS_MAX_TEAMS; team++ ) { if( G_Teams_TeamIsLocked( team ) ) { G_Teams_UnLockTeam( team ); any = true; } } if( any ) G_PrintMsg( NULL, "Teams unlocked.\n" ); } else { if( G_Teams_TeamIsLocked( TEAM_PLAYERS ) ) { G_Teams_UnLockTeam( TEAM_PLAYERS ); G_PrintMsg( NULL, "Teams unlocked.\n" ); } } G_Teams_RemoveInvites(); }
/* * G_Teams_Invite_f */ void G_Teams_Invite_f( edict_t *ent ) { char *text; edict_t *toinvite; int team; if( ( !ent->r.inuse || !ent->r.client ) ) return; text = trap_Cmd_Argv( 1 ); if( !text || !strlen( text ) ) { int i; edict_t *e; char msg[1024]; msg[0] = 0; Q_strncatz( msg, "Usage: invite <player>\n", sizeof( msg ) ); Q_strncatz( msg, "- List of current players:\n", sizeof( msg ) ); for( i = 0, e = game.edicts+1; i < gs.maxclients; i++, e++ ) { if( !e->r.inuse ) continue; Q_strncatz( msg, va( "%3i: %s\n", PLAYERNUM( e ), e->r.client->netname ), sizeof( msg ) ); } G_PrintMsg( ent, "%s", msg ); return; } team = ent->s.team; if( !G_Teams_TeamIsLocked( team ) ) { G_PrintMsg( ent, "Your team is not locked.\n" ); return; } toinvite = G_PlayerForText( text ); if( !toinvite ) { G_PrintMsg( ent, "No such player.\n" ); return; } if( G_Teams_PlayerIsInvited( team, toinvite ) ) { G_PrintMsg( ent, "%s%s is already invited to your team.\n", toinvite->r.client->netname, S_COLOR_WHITE ); return; } G_Teams_InvitePlayer( team, toinvite ); G_PrintMsg( NULL, "%s%s invited %s%s to team %s%s.\n", ent->r.client->netname, S_COLOR_WHITE, toinvite->r.client->netname, S_COLOR_WHITE, GS_TeamName( team ), S_COLOR_WHITE ); }
/* * G_GameTypes_DenyJoinTeam */ static int G_GameTypes_DenyJoinTeam( edict_t *ent, int team ) { if( team < 0 || team >= GS_MAX_TEAMS ) { G_Printf( "WARNING: 'G_GameTypes_CanJoinTeam' parsing a unrecognized team value\n" ); return ER_TEAM_INVALID; } if( team == TEAM_SPECTATOR ) return ER_TEAM_OK; if( GS_MatchState() > MATCH_STATE_PLAYTIME ) return ER_TEAM_MATCHSTATE; // waiting for chanllengers queue to be executed if( GS_HasChallengers() && game.realtime < level.spawnedTimeStamp + (unsigned)( G_CHALLENGERS_MIN_JOINTEAM_MAPTIME + game.snapFrameTime ) ) return ER_TEAM_CHALLENGERS; // force eveyone to go through queue so things work on map change if( GS_HasChallengers() && !ent->r.client->queueTimeStamp ) return ER_TEAM_CHALLENGERS; //see if team is locked if( G_Teams_TeamIsLocked( team ) && !G_Teams_PlayerIsInvited( team, ent ) ) return ER_TEAM_LOCKED; if( GS_TeamBasedGametype() ) { if( team >= TEAM_ALPHA && team < GS_MAX_TEAMS ) { // see if team is full int count = teamlist[team].numplayers; if( ( count + 1 > level.gametype.maxPlayersPerTeam && level.gametype.maxPlayersPerTeam > 0 ) || ( count + 1 > g_teams_maxplayers->integer && g_teams_maxplayers->integer > 0 ) ) return ER_TEAM_FULL; if( !g_teams_allow_uneven->integer && !G_Teams_CanKeepEvenTeam( ent->s.team, team ) ) return ER_TEAM_UNEVEN; return ER_TEAM_OK; } else { return ER_TEAM_INVALID; } } else if( team == TEAM_PLAYERS ) { return ER_TEAM_OK; } return ER_TEAM_INVALID; }
void G_Teams_CoachUnLockTeam( edict_t *ent ) { if( ent->r.client->teamstate.is_coach ) { if( G_Teams_TeamIsLocked( ent->s.team ) ) { G_Teams_UnLockTeam( ent->s.team ); G_PrintMsg( NULL, "%s%s unlocked the %s team.\n", ent->r.client->netname, S_COLOR_WHITE, GS_TeamName( ent->s.team ) ); } } }