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

📄 msgschoolmember.cpp

📁 网络游戏魔域的服务端与客户端完整源代码 包括详细的说明文档与开发日志
💻 CPP
字号:
// MsgSchoolMember.cpp: implementation of the CMsgSchoolMember class.
//
//////////////////////////////////////////////////////////////////////

#include "AllMsg.h"
#include "MapGroup.h"
#include "UserManager.h"
//#pragma	warning(disable:4786)

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMsgSchoolMember::CMsgSchoolMember()
{
	Init();
	m_pInfo	=(MSG_Info *)m_bufMsg;

}

CMsgSchoolMember::~CMsgSchoolMember()
{

}

//////////////////////////////////////////////////////////////////////
BOOL CMsgSchoolMember::Create	(char* pbufMsg, DWORD dwMsgSize)
{
	if (!CNetMsg::Create(pbufMsg, dwMsgSize))
		return false;

	if(_MSG_SCHOOLMEMBER != this->GetType())
		return false;

	return true;
}

//////////////////////////////////////////////////////////////////////
BOOL CMsgSchoolMember::Create(UCHAR ucAction, ST_MEMBERINFO* pMember, UCHAR ucAmount)
{
	if (sizeof(MSG_Info) - sizeof(ST_MEMBERINFO) + ucAmount*sizeof(ST_MEMBERINFO) >= MAX_PACKETSIZE)
		return false;

	// init
	this->Init();

	// TODO: init data
	m_pInfo->ucAction	= ucAction;
	if (pMember)
	{
		m_pInfo->ucAmount	= ucAmount;
		memcpy(m_pInfo->setMember, pMember, sizeof(ST_MEMBERINFO)*ucAmount);
	}
	else
		m_pInfo->ucAmount	= 0;


	m_unMsgType	=_MSG_SCHOOLMEMBER;
	m_unMsgSize	=sizeof(MSG_Info) - sizeof(ST_MEMBERINFO) + m_pInfo->ucAmount*sizeof(ST_MEMBERINFO);

	return true;
}

//////////////////////////////////////////////////////////////////////
BOOL CMsgSchoolMember::Append(UCHAR ucRelation, UCHAR ucStatus, OBJID idMember, const char* pszName)
{
	if (sizeof(MSG_Info) - sizeof(ST_MEMBERINFO) + (m_pInfo->ucAmount+1)*sizeof(ST_MEMBERINFO) >= MAX_PACKETSIZE)
		return false;

	memset(&m_pInfo->setMember[m_pInfo->ucAmount], 0L, sizeof(ST_MEMBERINFO));
	m_pInfo->setMember[m_pInfo->ucAmount].ucRelation	= ucRelation;
	m_pInfo->setMember[m_pInfo->ucAmount].ucStatus		= ucStatus;
	m_pInfo->setMember[m_pInfo->ucAmount].idMember		= idMember;
	if (pszName)
		::SafeCopy(m_pInfo->setMember[m_pInfo->ucAmount].szName, pszName, _MAX_NAMESIZE);

	++m_pInfo->ucAmount;

	m_unMsgSize	=sizeof(MSG_Info) - sizeof(ST_MEMBERINFO) + m_pInfo->ucAmount*sizeof(ST_MEMBERINFO);

	return true;
}

//////////////////////////////////////////////////////////////////////
BOOL CMsgSchoolMember::Append(UCHAR ucRelation, UCHAR ucStatus, CUser* pUser)
{
	CHECKF (pUser);
	if (sizeof(MSG_Info) - sizeof(ST_MEMBERINFO) + (m_pInfo->ucAmount+1)*sizeof(ST_MEMBERINFO) >= MAX_PACKETSIZE)
		return false;

	memset(&m_pInfo->setMember[m_pInfo->ucAmount], 0L, sizeof(ST_MEMBERINFO));
	m_pInfo->setMember[m_pInfo->ucAmount].ucRelation	= ucRelation;
	m_pInfo->setMember[m_pInfo->ucAmount].ucStatus		= ucStatus;
	m_pInfo->setMember[m_pInfo->ucAmount].idMember		= pUser->GetID();
	
	::SafeCopy(m_pInfo->setMember[m_pInfo->ucAmount].szName, pUser->GetName(), _MAX_NAMESIZE);
	::SafeCopy(m_pInfo->setMember[m_pInfo->ucAmount].szMate, pUser->GetMate(), _MAX_NAMESIZE);

	m_pInfo->setMember[m_pInfo->ucAmount].ucLevel		= pUser->GetLev();
	m_pInfo->setMember[m_pInfo->ucAmount].ucProfession	= pUser->GetProfession();
	m_pInfo->setMember[m_pInfo->ucAmount].usPkValue		= pUser->GetPk();
	m_pInfo->setMember[m_pInfo->ucAmount].ucNobilityRank= pUser->GetNobilityRank();
	m_pInfo->setMember[m_pInfo->ucAmount].dwSynID_Rank	= (pUser->GetSynRankShow()<<MASK_RANK_SHIFT) | (pUser->GetSynID()&MASK_SYNID);

	++m_pInfo->ucAmount;

	m_unMsgSize	=sizeof(MSG_Info) - sizeof(ST_MEMBERINFO) + m_pInfo->ucAmount*sizeof(ST_MEMBERINFO);

	return true;
}

//////////////////////////////////////////////////////////////////////
void CMsgSchoolMember::Process(CGameSocket* pSocket)
{
#ifdef _MSGDEBUG
	::LogMsg("Process CMsgSchoolMember");
#endif

	CUserPtr pUser = UserManager()->GetUser(this);
	if (!pUser)
	{
		if(IsNpcMsg())
			return;

		// TransmitMsg
		switch(m_pInfo->ucAction)
		{
		case MESSAGEBOARD_DELMEMBER:
			{
			}
			break;
		case MESSAGEBOARD_ADDMEMBER:
			{
				CMsgSchoolMember msg;
				msg.Create(MESSAGEBOARD_ADDMEMBER, NULL, 0);
				for (int i=0; i<m_pInfo->ucAmount; i++)
				{
					CUser* pTarget = UserManager()->GetUser(m_pInfo->setMember[i].idMember);
					if (pTarget)
						msg.Append(m_pInfo->setMember[i].ucRelation, MEMBERSTATUS_ONLINE, pTarget);
				}
				SendMsg(&msg);
			}
			break;
		case MESSAGEBOARD_UPDATEMEMBER:
			{
			}
			break;
		}
	}
}

⌨️ 快捷键说明

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