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

📄 synworldshell.cpp

📁 魔域的服务端源代码。Visual C++编译的版本
💻 CPP
📖 第 1 页 / 共 2 页
字号:
}

//////////////////////////////////////////////////////////////////////
bool CSyndicateWorld::DelMember(LPCTSTR szName)
{
	CHECKF(szName);

	for(int i = m_setMember.size()-1; i >= 0; i--)		// delete, reverse traverse
	{
		if(strcmp(m_setMember[i].szName.c_str(), szName) == 0)
		{
			m_setMember.erase(m_setMember.begin() + i);
			return true;
		}
	}

	return false;
}

//////////////////////////////////////////////////////////////////////
enum {
	RANK_LEADER			= 100,			//军团团长		
	RANK_SUBLEADER		= 80,			//分团长
	RANK_TEAMLEADER		= 60,			//队长
	RANK_NEWBIE			= 20,			//普通团员
	RANK_RESERVED		= 10,			//预备团员		
	RANK_NONE			= 0,
	
	RANK_SUB		= RANK_LEADER - RANK_SUBLEADER,
};

int CSyndicateWorld::GetSynRankShow(int nRank)
{
	int nRankShow = nRank;
	if (nRankShow > RANK_NEWBIE)
	{
		OBJID idFealty	= GetInt(SYNDATA_FEALTY);
		while (idFealty != ID_NONE)
		{
			CSyndicateWorld* pSyn = GameWorld()->QuerySynManager()->QuerySyndicate(idFealty);
			if (!pSyn)
				break;
			nRankShow -= RANK_SUB;
			idFealty = pSyn->GetInt(SYNDATA_FEALTY);
		}
	}
	return nRankShow;
}

//////////////////////////////////////////////////////////////////////
/*
int CSyndicateWorld::AppendOnlineMember(class CMsgName& msg, int idx)
{
	int	nAmount = m_setMember.size();
	int nCount	= 0;
	for(int i = idx; i < nAmount && nCount < MEMBERLIST_SIZE; i++)
	{
		bool	bOnline = (UserList()->GetPlayer(m_setMember[i].szName.c_str()) != NULL);
		if(bOnline)
		{
			char	szMsg[256];
			sprintf(szMsg, "%s %d %d", m_setMember[i].szName.c_str(), GetSynRankShow(m_setMember[i].nRank), bOnline);

			// msg append
			CHECKF(msg.AppendString(szMsg, i));
			nCount++;
		}
	}
	if (nCount < MEMBERLIST_SIZE)
	{
	}

	return nCount;
}
//////////////////////////////////////////////////////////////////////
int CSyndicateWorld::AppendOnlineMemberForAllMember(class CMsgName& msg, int idx)
{
	int	nAmount = m_setMemberTmp.size();
	int nCount	= 0;
	for(int i = idx; i < nAmount && nCount < MEMBERLIST_SIZE; i++)
	{
		bool	bOnline = (UserList()->GetPlayer(m_setMember[i].szName.c_str()) != NULL);
		if(bOnline)
		{
			char	szMsg[256];
			sprintf(szMsg, "%s %d %d", m_setMemberTmp[i].szName.c_str(), GetSynRankShow(m_setMemberTmp[i].nRank), bOnline);

			// msg append
			CHECKF(msg.AppendString(szMsg, i));
			nCount++;
		}
	}

	return nCount;
}
//////////////////////////////////////////////////////////////////////
int CSyndicateWorld::AppendOfflineMember(class CMsgName& msg, int idx, int nCount)
{
	int	nAmount = m_setMember.size();
	for(int i = idx; i < nAmount && nCount < MEMBERLIST_SIZE; i++)
	{
		bool	bOnline = (UserList()->GetPlayer(m_setMember[i].szName.c_str()) != NULL);
		if(!bOnline)
		{
			char	szMsg[256];
			sprintf(szMsg, "%s %d %d", m_setMember[i].szName.c_str(), GetSynRankShow(m_setMember[i].nRank), bOnline);
			// msg append
			CHECKF(msg.AppendString(szMsg, i));
			nCount++;
		}
	}
	return nCount;
}
//////////////////////////////////////////////////////////////////////
int CSyndicateWorld::AppendOfflineMemberForAllMember(class CMsgName& msg, int idx, int nCount)
{
	int	nAmount = m_setMemberTmp.size();
	for(int i = idx; i < nAmount && nCount < MEMBERLIST_SIZE; i++)
	{
		bool	bOnline = (UserList()->GetPlayer(m_setMember[i].szName.c_str()) != NULL);
		if(!bOnline)
		{
			char	szMsg[256];
			sprintf(szMsg, "%s %d %d", m_setMemberTmp[i].szName.c_str(), GetSynRankShow(m_setMemberTmp[i].nRank), bOnline);
			// msg append
			CHECKF(msg.AppendString(szMsg, i));
			nCount++;
		}
	}
	return nCount;
}
*/

//////////////////////////////////////////////////////////////////////
void CSyndicateWorld::SendMemberList(CPlayer* pUser, int idxLast)		// idxLast is last member or -1 for first time query
{
	if(idxLast < 0 )		
		return ;

	CMsgName	msg;
	CHECK(msg.CreateHead(NAMEACT_MEMBERLIST, idxLast));
	
	int nCount = 0;
	AppendMember(msg, 0, idxLast, nCount);	// 先从本帮派中添加

	// 如果不够一页则从子帮派中添加
	if (nCount < MEMBERLIST_SIZE)
	{
		int idx  = GetMemberAmount();
		idxLast -= GetMemberAmount();
		// 分团
		for(int i = 0; i < GameWorld()->QuerySynManager()->GetSynAmount(); i++) 
		{
			CSyndicateWorld* pSyn = GameWorld()->QuerySynManager()->GetSynByIndex(i);	
			if(pSyn && pSyn->GetInt(SYNDATA_FEALTY) == this->GetID())
			{
				pSyn->AppendMember(msg, idx, idxLast, nCount);
				if (nCount >= MEMBERLIST_SIZE)
					break;
				idx		+= pSyn->GetMemberAmount();
				idxLast -= pSyn->GetMemberAmount();

				// 分队
				for(int i = 0; i < GameWorld()->QuerySynManager()->GetSynAmount(); i++) 
				{
					CSyndicateWorld* pSynTeam = GameWorld()->QuerySynManager()->GetSynByIndex(i);	
					if(pSynTeam && pSynTeam->GetInt(SYNDATA_FEALTY) == pSyn->GetID())
					{
						pSynTeam->AppendMember(msg, idx, idxLast, nCount);
						if (nCount >= MEMBERLIST_SIZE)
							break;
						idx		+= pSynTeam->GetMemberAmount();
						idxLast	-= pSynTeam->GetMemberAmount();
					}
				}

				if (nCount >= MEMBERLIST_SIZE)
					break;
			}
		}
	}

	pUser->SendMsg(&msg);


/*
	m_setMemberTmp.clear();
	m_setMemberTmp = m_setMember;
	MEMBER_SET setMember;
	
	// 分团---begin
	for(int i = 0; i < GameWorld()->QuerySynManager()->GetSynAmount(); i++)  
	{
		CSyndicateWorld* pSyn = GameWorld()->QuerySynManager()->GetSynByIndex(i);	
		if(pSyn && pSyn->GetInt(SYNDATA_FEALTY) == this->GetID())
		{	
			setMember = pSyn->QueryMemberList();
			if(setMember.size())
				m_setMemberTmp.insert(m_setMemberTmp.end(), setMember.begin(), setMember.end());
			//分队-----begin
			for(int j= 0; j < GameWorld()->QuerySynManager()->GetSynAmount(); j++)  
			{
				CSyndicateWorld* pSynTeam =  GameWorld()->QuerySynManager()->GetSynByIndex(i);
				if(pSynTeam && pSynTeam->GetInt(SYNDATA_FEALTY) == pSyn->GetID())
				{
					setMember = pSynTeam->QueryMemberList();
					if(setMember.size())
						m_setMemberTmp.insert(m_setMemberTmp.end(), setMember.begin(), setMember.end());					
				}						
			}
			//分队-----end	
		}
	}
	// 分团---end
	// msg head
	CMsgName	msg;
	CHECK(msg.CreateHead(NAMEACT_MEMBERLIST, idxLast));

	bool	bOnline = true;		//? -1 for first query
	int nCount = 0;

	if(idxLast != -1)
		bOnline = (UserList()->GetPlayer(m_setMember[idxLast].szName.c_str()) != NULL);

	int idx	= idxLast + 1;
	if(bOnline)
	{
		nCount	= AppendOnlineMemberForAllMember(msg, idx);
		if(nCount < MEMBERLIST_SIZE)
			nCount = AppendOfflineMemberForAllMember(msg, 0, nCount);
	}
	else
	{
		nCount = AppendOfflineMemberForAllMember(msg, idx);
	}

	pUser->SendMsg(&msg);
*/
}


//////////////////////////////////////////////////////////////////////
void CSyndicateWorld::CombineMemberList(const MEMBER_SET& setMember)
{
	if(setMember.size())
		m_setMember.insert(m_setMember.end(), setMember.begin(), setMember.end());
}

//////////////////////////////////////////////////////////////////////
CSyndicateWorld* CSyndicateWorld::GetMasterSyn()
{
	if (GetInt(SYNDATA_FEALTY) == ID_NONE)
		return this;

	CSyndicateWorld* pSyn= GameWorld()->QuerySynManager()->QuerySyndicate(GetInt(SYNDATA_FEALTY));

	IF_NOT (pSyn)
		return this;

	return pSyn->GetMasterSyn();
}

//////////////////////////////////////////////////////////////////////
/*
void CSyndicateWorld::SendMemberListSpecifySyn(CPlayer *pUser, int idxLast)
{
	if(idxLast < -1 || idxLast >= static_cast<int>(m_setMember.size()))
		return ;

	// msg head
	CMsgName	msg;
	CHECK(msg.CreateHead(NAMEACT_MEMBERLIST, idxLast));

	bool	bOnline = true;		//? -1 for first query
	int nCount = 0;

	if(idxLast != -1)
		bOnline = (UserList()->GetPlayer(m_setMember[idxLast].szName.c_str()) != NULL);

	int idx	= idxLast + 1;
	if(bOnline)
	{
		nCount	= AppendOnlineMember(msg, idx);
		if(nCount < MEMBERLIST_SIZE)
			nCount = AppendOfflineMember(msg, 0, nCount);
	}
	else
	{
		nCount = AppendOfflineMember(msg, idx);
	}

	pUser->SendMsg(&msg);
}
*/

int CSyndicateWorld::AppendMember(class CMsgName& msg, int idx, int idxFirst, int& nCount)
{
	int nAmount = GetMemberAmount();
	for (int i=idxFirst; i<nAmount && nCount < MEMBERLIST_SIZE; i++)
	{
		bool	bOnline = (UserList()->GetPlayer(m_setMember[i].szName.c_str()) != NULL);

		char	szMsg[256];
		sprintf(szMsg, "%s %d %d", m_setMember[i].szName.c_str(), GetSynRankShow(m_setMember[i].nRank), bOnline);
		
		CHECKF(msg.AppendString(szMsg, idx + i));
		nCount++;
	}
	return nCount;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -