📄 teammgr.cpp
字号:
// Get the team...
CTeam* pTeam = GetTeam(sTeamName);
if (!pTeam) return(NULL);
// Add the player to the team...
return(AddPlayer(pTeam, dwPlayerID, dwFlags));
}
CTeamPlayer* CTeamMgr::AddPlayer(CTeam* pTeam, DDWORD dwPlayerID, DDWORD dwFlags)
{
// Sanity checks...
if (!pTeam) return(NULL);
// Add the player to the team...
return(pTeam->AddPlayer(dwPlayerID, dwFlags));
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CTeamMgr::SetTeamScore
//
// PURPOSE: Sets the given score value for the specified team
//
// ----------------------------------------------------------------------- //
DBOOL CTeamMgr::SetTeamScore(DDWORD dwTeamID, int nScore)
{
// Get the team...
CTeam* pTeam = GetTeam(dwTeamID);
if (!pTeam) return(NULL);
// Set the score...
return(SetTeamScore(pTeam, nScore));
}
DBOOL CTeamMgr::SetTeamScore(char* sTeamName, int nScore)
{
// Get the team...
CTeam* pTeam = GetTeam(sTeamName);
if (!pTeam) return(NULL);
// Set the score...
return(SetTeamScore(pTeam, nScore));
}
DBOOL CTeamMgr::SetTeamScore(CTeam* pTeam, int nScore)
{
// Sanity checks...
if (!pTeam) return(DFALSE);
// Set the score...
pTeam->SetScore(nScore);
// All done...
return(DTRUE);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CTeamMgr::AddTeamScore
//
// PURPOSE: Adds the given score value to the specified team
//
// ----------------------------------------------------------------------- //
DBOOL CTeamMgr::AddTeamScore(DDWORD dwTeamID, int nScore)
{
// Get the team...
CTeam* pTeam = GetTeam(dwTeamID);
if (!pTeam) return(NULL);
// Add the score...
return(AddTeamScore(pTeam, nScore));
}
DBOOL CTeamMgr::AddTeamScore(char* sTeamName, int nScore)
{
// Get the team...
CTeam* pTeam = GetTeam(sTeamName);
if (!pTeam) return(NULL);
// Add the score...
return(AddTeamScore(pTeam, nScore));
}
DBOOL CTeamMgr::AddTeamScore(CTeam* pTeam, int nScore)
{
// Sanity checks...
if (!pTeam) return(DFALSE);
// Add the score...
pTeam->AddScore(nScore);
// All done...
return(DTRUE);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CTeamMgr::AddPlayerFrags
//
// PURPOSE: Adds the given frags to the given team and player
//
// ----------------------------------------------------------------------- //
DBOOL CTeamMgr::AddPlayerFrags(DDWORD dwPlayerID, int nFrags)
{
// Get the team...
CTeam* pTeam = GetTeamFromPlayerID(dwPlayerID);
if (!pTeam) return(DFALSE);
// Add the player frags...
return(AddPlayerFrags(pTeam, dwPlayerID, nFrags));
}
DBOOL CTeamMgr::AddPlayerFrags(DDWORD dwTeamID, DDWORD dwPlayerID, int nFrags)
{
// Get the team...
CTeam* pTeam = GetTeam(dwTeamID);
if (!pTeam) return(NULL);
// Add the player frags...
return(AddPlayerFrags(pTeam, dwPlayerID, nFrags));
}
DBOOL CTeamMgr::AddPlayerFrags(char* sTeamName, DDWORD dwPlayerID, int nFrags)
{
// Get the team...
CTeam* pTeam = GetTeam(sTeamName);
if (!pTeam) return(NULL);
// Add the player frags...
return(AddPlayerFrags(pTeam, dwPlayerID, nFrags));
}
DBOOL CTeamMgr::AddPlayerFrags(CTeam* pTeam, DDWORD dwPlayerID, int nFrags)
{
// Sanity checks...
if (!pTeam) return(DFALSE);
// Add the player frags...
pTeam->AddFrags(dwPlayerID, nFrags);
// All done...
return(DTRUE);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CTeamMgr::AddPlayerDeaths
//
// PURPOSE: Adds the given deaths to the given team and player
//
// ----------------------------------------------------------------------- //
DBOOL CTeamMgr::AddPlayerDeaths(DDWORD dwPlayerID, int nDeaths)
{
// Get the team...
CTeam* pTeam = GetTeam(dwPlayerID);
if (!pTeam) return(DFALSE);
// Add the player deaths...
return(AddPlayerDeaths(pTeam, dwPlayerID, nDeaths));
}
DBOOL CTeamMgr::AddPlayerDeaths(DDWORD dwTeamID, DDWORD dwPlayerID, int nDeaths)
{
// Get the team...
CTeam* pTeam = GetTeam(dwTeamID);
if (!pTeam) return(NULL);
// Add the player deaths...
return(AddPlayerDeaths(pTeam, dwPlayerID, nDeaths));
}
DBOOL CTeamMgr::AddPlayerDeaths(char* sTeamName, DDWORD dwPlayerID, int nDeaths)
{
// Get the team...
CTeam* pTeam = GetTeam(sTeamName);
if (!pTeam) return(NULL);
// Add the player deaths...
return(AddPlayerDeaths(pTeam, dwPlayerID, nDeaths));
}
DBOOL CTeamMgr::AddPlayerDeaths(CTeam* pTeam, DDWORD dwPlayerID, int nDeaths)
{
// Sanity checks...
if (!pTeam) return(DFALSE);
// Add the player deaths...
pTeam->AddDeaths(dwPlayerID, nDeaths);
// All done...
return(DTRUE);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CTeamMgr::RemoveTeam
//
// PURPOSE: Removes the given team
//
// ----------------------------------------------------------------------- //
DBOOL CTeamMgr::RemoveTeam(DDWORD dwTeamID)
{
// Get the team...
CTeam* pTeam = GetTeam(dwTeamID);
if (!pTeam) return(DFALSE);
// Remove the team...
return(RemoveTeam(pTeam));
}
DBOOL CTeamMgr::RemoveTeam(char* sTeamName)
{
// Get the team...
CTeam* pTeam = GetTeam(sTeamName);
if (!pTeam) return(DFALSE);
// Remove the team...
return(RemoveTeam(pTeam));
}
DBOOL CTeamMgr::RemoveTeam(CTeam* pTeam)
{
// Sanity checks...
if (!pTeam) return(DFALSE);
// Delete the team from the list...
m_lsTeams.Delete(pTeam);
delete pTeam;
// All done...
return(DTRUE);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CTeamMgr::RemovePlayer
//
// PURPOSE: Removes the given player from the team it's on
//
// ----------------------------------------------------------------------- //
DBOOL CTeamMgr::RemovePlayer(DDWORD dwPlayerID)
{
// Find the team this player is on...
CTeam* pTeam = GetTeamFromPlayerID(dwPlayerID);
if (!pTeam) return(DFALSE);
// Remove the player from our team-trans list...
RemoveTeamTransID(dwPlayerID);
// Remove the player from this team...
return(pTeam->RemovePlayer(dwPlayerID));
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CTeamMgr::ResetAllTeams
//
// PURPOSE: Resets all of the team in the list
//
// ----------------------------------------------------------------------- //
void CTeamMgr::ResetAllTeams()
{
CTeam* pTeam = m_lsTeams.GetFirst();
while (pTeam)
{
pTeam->Reset();
pTeam = pTeam->GetNext();
}
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CTeamMgr::SortTeams
//
// PURPOSE: Sorts the teams using the given sort key
//
// ----------------------------------------------------------------------- //
void CTeamMgr::SortTeams(int nSortKey, int nDir)
{
// Sanity check...
if (GetNumTeams() <= 1) return;
// Remove each team from our list, and insert it, sorted, into a temp list...
CTeamList lsTemp;
CTeam* pCurTeam = GetFirstTeam();
while (pCurTeam)
{
CTeam* pNextTeam = GetNextTeam(pCurTeam);
m_lsTeams.Delete(pCurTeam);
// Insert the team from our main list, sorted, into our temp list...
CTeam* pTmpTeam = lsTemp.GetFirst();
if (!pTmpTeam)
{
lsTemp.Insert(pCurTeam);
}
else
{
while (pTmpTeam)
{
if (nDir == TM_SORT_DESCENDING && IsGreater(pCurTeam, pTmpTeam, nSortKey))
{
lsTemp.InsertBefore(pTmpTeam, pCurTeam);
pTmpTeam = NULL;
}
else if (nDir == TM_SORT_ASCENDING && IsLess(pCurTeam, pTmpTeam, nSortKey))
{
lsTemp.InsertBefore(pTmpTeam, pCurTeam);
pTmpTeam = NULL;
}
else
{
pTmpTeam = pTmpTeam->GetNext();
if (!pTmpTeam)
{
lsTemp.InsertLast(pCurTeam);
}
}
}
}
pCurTeam = pNextTeam;
}
// Re-insert all items into our main list...
CTeam* pTeam = lsTemp.GetFirst();
while (pTeam)
{
CTeam* pNextTeam = pTeam->GetNext();
m_lsTeams.InsertLast(pTeam);
pTeam = pNextTeam;
}
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CTeamMgr::SortPlayers
//
// PURPOSE: Sorts the players on each team using the given sort key
//
// ----------------------------------------------------------------------- //
void CTeamMgr::SortPlayers(int nSortKey, int nDir)
{
// Sort the players on each team...
CTeam* pTeam = GetFirstTeam();
while (pTeam)
{
pTeam->SortPlayers(nSortKey, nDir);
pTeam = GetNextTeam(pTeam);
}
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CTeamMgr::ChangePlayerTeam
//
// PURPOSE: Removes the player from its current team and adds it
// to the specified team.
//
// ----------------------------------------------------------------------- //
DBOOL CTeamMgr::ChangePlayerTeam(DDWORD dwPlayerID, DDWORD dwNewTeamID, DBOOL bReset)
{
// Get the new team...
CTeam* pNewTeam = GetTeam(dwNewTeamID);
if (!pNewTeam) return(DFALSE);
// Change the player's team...
return(ChangePlayerTeam(dwPlayerID, pNewTeam, bReset));
}
DBOOL CTeamMgr::ChangePlayerTeam(DDWORD dwPlayerID, char* sNewTeamName, DBOOL bReset)
{
// Get the new team...
CTeam* pNewTeam = GetTeam(sNewTeamName);
if (!pNewTeam) return(DFALSE);
// Change the player's team...
return(ChangePlayerTeam(dwPlayerID, pNewTeam, bReset));
}
DBOOL CTeamMgr::ChangePlayerTeam(DDWORD dwPlayerID, CTeam* pNewTeam, DBOOL bReset)
{
// Sanity checks...
if (!pNewTeam) return(DFALSE);
// Get the current team for the player...
CTeam* pCurTeam = GetTeamFromPlayerID(dwPlayerID);
if (!pCurTeam) return(DFALSE);
// Change the player's team to the new one...
if (pCurTeam->ChangePlayerTeam(dwPlayerID, pNewTeam, bReset))
{
return(DFALSE);
}
// All done...
return(DTRUE);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CTeamMgr::GetTeamWithMostPlayers
//
// PURPOSE: Gets the team that has the most players
//
// ----------------------------------------------------------------------- //
CTeam* CTeamMgr::GetTeamWithMostPlayers(DBOOL bRandomizeTies)
{
// Look for the team with the most players...
int cPlayers = -1;
CTeam* pMostTeam = NULL;
CTeam* pTeam = GetFirstTeam();
while (pTeam)
{
if (pTeam->GetNumPlayers() > cPlayers)
{
pMostTeam = pTeam;
cPlayers = pTeam->GetNumPlayers();
}
else if (pTeam->GetNumPlayers() == cPlayers)
{
if (bRandomizeTies)
{
if ((rand() % 100) > 50)
{
pMostTeam = pTeam;
cPlayers = pTeam->GetNumPlayers();
}
}
}
pTeam = GetNextTeam(pTeam);
}
// All done...
return(pMostTeam);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CTeamMgr::GetTeamWithLeastPlayers
//
// PURPOSE: Gets the team that has the least players
//
// ----------------------------------------------------------------------- //
CTeam* CTeamMgr::GetTeamWithLeastPlayers(DBOOL bRandomizeTies)
{
// Look for the team with the most players...
int cPlayers = 9999999;
CTeam* pLeastTeam = NULL;
CTeam* pTeam = GetFirstTeam();
while (pTeam)
{
if (pTeam->GetNumPlayers() < cPlayers)
{
pLeastTeam = pTeam;
cPlayers = pTeam->GetNumPlayers();
}
else if (pTeam->GetNumPlayers() == cPlayers)
{
if (bRandomizeTies)
{
if ((rand() % 100) > 50)
{
pLeastTeam = pTeam;
cPlayers = pTeam->GetNumPlayers();
}
}
}
pTeam = GetNextTeam(pTeam);
}
// All done...
return(pLeastTeam);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CTeamMgr::CreateTeamTransIDs
//
// PURPOSE: Creates a list of player team IDs
//
// ----------------------------------------------------------------------- //
DBOOL CTeamMgr::CreateTeamTransIDs()
{
// Reset the list...
ClearTeamTransIDs();
// Write out each player ID on each team...
CTeam* pTeam = GetFirstTeam();
while (pTeam)
{
DDWORD dwTeamID = pTeam->GetID();
CTeamPlayer* pPlayer = pTeam->GetFirstPlayer();
while (pPlayer)
{
DDWORD dwPlayerID = pPlayer->GetID();
if (dwPlayerID < TM_MAX_PLAYERS)
{
m_aTeamTransIDs[dwPlayerID] = dwTeamID;
}
pPlayer = pTeam->GetNextPlayer(pPlayer);
}
pTeam = GetNextTeam(pTeam);
}
// All done...
return(DTRUE);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CTeamMgr::GetTeamTransID
//
// PURPOSE: Gets a level transition team ID from the given player ID
//
// ----------------------------------------------------------------------- //
DDWORD CTeamMgr::GetTeamTransID(DDWORD dwPlayerID)
{
// Look for this player's previous team ID in our arrary...
if (dwPlayerID < TM_MAX_PLAYERS)
{
return(m_aTeamTransIDs[dwPlayerID]);
}
else
{
return(0);
}
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: CTeamMgr::RemoveTeamTransID
//
// PURPOSE: Removes the given player ID from the team transition info
//
// ----------------------------------------------------------------------- //
void CTeamMgr::RemoveTeamTransID(DDWORD dwPlayerID)
{
// Remove this player ID entry in our array...
if (dwPlayerID < TM_MAX_PLAYERS)
{
m_aTeamTransIDs[dwPlayerID] = TM_ID_NULL;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -