void CGameContext::ConShuffleTeams(IConsole::IResult *pResult, void *pUserData) { CGameContext *pSelf = (CGameContext *)pUserData; if(!pSelf->m_pController->IsTeamplay()) return; int rnd = 0; int PlayerTeam = 0; int aPlayer[MAX_CLIENTS]; for(int i = 0; i < MAX_CLIENTS; i++) if(pSelf->m_apPlayers[i] && pSelf->m_apPlayers[i]->GetTeam() != TEAM_SPECTATORS) aPlayer[PlayerTeam++]=i; pSelf->SendGameMsg(GAMEMSG_TEAM_SHUFFLE, -1); //creating random permutation for(int i = PlayerTeam; i > 1; i--) { rnd = rand() % i; int tmp = aPlayer[rnd]; aPlayer[rnd] = aPlayer[i-1]; aPlayer[i-1] = tmp; } //uneven Number of Players? rnd = PlayerTeam % 2 ? rand() % 2 : 0; for(int i = 0; i < PlayerTeam; i++) pSelf->m_pController->DoTeamChange(pSelf->m_apPlayers[aPlayer[i]], i < (PlayerTeam+rnd)/2 ? TEAM_RED : TEAM_BLUE, false); }
void CGameContext::ConSetTeamAll(IConsole::IResult *pResult, void *pUserData) { CGameContext *pSelf = (CGameContext *)pUserData; int Team = clamp(pResult->GetInteger(0), -1, 1); pSelf->SendGameMsg(GAMEMSG_TEAM_ALL, Team, -1); for(int i = 0; i < MAX_CLIENTS; ++i) if(pSelf->m_apPlayers[i]) pSelf->m_pController->DoTeamChange(pSelf->m_apPlayers[i], Team, false); }