⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 teammgr.cpp

📁 Blood 2全套源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	// 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 + -