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

📄 msgtalk.cpp

📁 魔域源代码需要的可以学习一下真么这么麻烦啊
💻 CPP
字号:
// MsgTalk.cpp: implementation of the CMsgTalk class.
//
//////////////////////////////////////////////////////////////////////

#define _WINSOCKAPI_
#include "AllMsg.h"
#ifdef	WORLD_KERNEL
#include "WorldKernel.h"
using namespace world_kernel;
#include "userlist.h"
#include "MessageBoard.h"
#else
#pragma warning(disable:4786)
#include "usermanager.h"
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMsgTalk::CMsgTalk()
{
	Init();
	m_pInfo	=(MSG_Info* )m_bufMsg;

	m_StrPacker.SetBuf(m_pInfo->szBuf, _MAX_MSGSIZE-sizeof(MSG_Info)+1);
}

CMsgTalk::~CMsgTalk()
{

}

//////////////////////////////////////////////////////////////////////
BOOL CMsgTalk::Create(char* pszSpeaker, char* pszHearer, char* pszWords, 
					  char* pszEmotion, DWORD dwColor, unsigned short unAttribute, 
					  unsigned short unStyle)
{
	if(!pszSpeaker || strlen(pszSpeaker) >= _MAX_NAMESIZE)
		return false;

	if(!pszHearer || strlen(pszHearer) >= _MAX_NAMESIZE)
		return false;

	if(!pszWords || strlen(pszWords) >= _MAX_WORDSSIZE)
		return false;

	// can be null
	if(pszEmotion && strlen(pszEmotion) >= _MAX_NAMESIZE)	
		return false;

	// fill
	this->Init();

	// fill structure
	m_pInfo->dwWordsColor	=dwColor;
	m_pInfo->unTxtAttribute	=unAttribute;
	m_pInfo->unTxtStyle		=unStyle;
	m_pInfo->dwTime			=::SysTimeGet();


	BOOL bSucMake	=true;
	bSucMake	&=m_StrPacker.AddString(pszSpeaker);
	bSucMake	&=m_StrPacker.AddString(pszHearer);
	bSucMake	&=m_StrPacker.AddString(pszEmotion);
	bSucMake	&=m_StrPacker.AddString(pszWords);

	m_unMsgType	=_MSG_TALK;
	m_unMsgSize	=sizeof(MSG_Info)-1+m_StrPacker.GetSize();

	return bSucMake;
}

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

	memcpy(this->m_bufMsg, pbufMsg, dwMsgSize);
	return true;
}

//////////////////////////////////////////////////////////////////////
void CMsgTalk::Process(void *pInfo)
{

#ifdef _MSGDEBUG
	::LogMsg("Process MsgTalk, Sender:%s, Receiver:%s, Words:%s", 
						szSender, 
						szReceiver, 
						szWords);
#endif

	char szSender[_MAX_NAMESIZE];
	char szReceiver[_MAX_NAMESIZE];
	char szEmotion[_MAX_NAMESIZE];
	char szWords[_MAX_WORDSSIZE];

	m_StrPacker.GetString(0, szSender, sizeof(szSender));
	m_StrPacker.GetString(1, szReceiver, sizeof(szReceiver));
	m_StrPacker.GetString(2, szEmotion, sizeof(szEmotion));
	m_StrPacker.GetString(3, szWords, sizeof(szWords));

	CPlayer* pUser = UserList()->GetPlayerBySocket(GetSocketID());
	CHECK(pUser || m_pInfo->unTxtAttribute==_TXTATR_MSG_SYSTEM);

	switch(m_pInfo->unTxtAttribute)
	{
	case _TXTATR_WEBPAGE:
		break;

	case _TXTATR_PRIVATE:
		{
			/*/ 转发耳语消息
			CPlayer* pPlayer = g_UserList.GetPlayer(szReceiver);
			if(pPlayer)
			{
				pPlayer->SendMsg(this);
			}
			else
			{
				CPlayer* pSender = g_UserList.GetPlayerBySocket(GetSocketID());
				if(pSender)
				{
					if(this->Create(SYSTEM_NAME, pSender->szName, "对方不在线。"))
						pSender->SendMsg(this);
				}
			}//*/
		}
		break;
	case _TXTATR_MSG_TRADE:
		{
			GameWorld()->QueryTradeMsgBd()->AddMsg(pUser->GetID(), szSender, szWords);
		}
		break;
	case _TXTATR_MSG_FRIEND:
		{
			GameWorld()->QueryFriendMsgBd()->AddMsg(pUser->GetID(), szSender, szWords);
		}
		break;
	case _TXTATR_MSG_TEAM:
		{
			GameWorld()->QueryTeamMsgBd()->AddMsg(pUser->GetID(), szSender, szWords);
		}
		break;
	case _TXTATR_MSG_SYN:
		{
			OBJID idSyn = GetTransData();
			CSyndicateWorld* pSyn = SynWorldManager()->QuerySyndicate(idSyn);
			IF_OK(pSyn)
				pSyn->QueryMessageBoard()->AddMsg(pUser->GetID(), szSender, szWords);
		}
		break;
	case _TXTATR_MSG_OTHER:
		{
			GameWorld()->QueryOtherMsgBd()->AddMsg(pUser->GetID(), szSender, szWords);
		}
		break;
	case _TXTATR_MSG_SYSTEM:
		{
			OBJID idUser = GetTransData();
			GameWorld()->QuerySystemMsgBd()->AddMsg(idUser, szSender, szWords);
		}
		break;
	case _TXTATR_SERVE:
		{
			CPlayer* pPlayer = UserList()->GetGM();
			if (pPlayer)
			{
				pPlayer->SendMsg(this);
			}
			else
			{
				CPlayer* pSpeaker = UserList()->GetPlayerBySocket(GetSocketID());
				if (pSpeaker)
				{
					CMsgTalk	msg;
					if (msg.Create(SYSTEM_NAME, pSpeaker->szName, STR_TARGET_OFFLINE))
						pSpeaker->SendMsg(&msg);
				}
			}
		}
		break;

	default:
		break;
	}
}

⌨️ 快捷键说明

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