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

📄 chatmanager.cpp

📁 墨香最新私服
💻 CPP
📖 第 1 页 / 共 2 页
字号:

	BYTE nProtocol = m_pChatDialog->GetCurSheetNum();
	char nToken = *str;

	switch( nToken )
	{
	case '/':
		{
			++str;
			if(*str == 0)
				return;

			if( FriendFunc( str ) )	return;
#ifdef _CHEATENABLE_	//KES CHEAT!!!
			if( CheatFunc( str ) )	return;
#endif	//KES CHEAT!!!
			static char Name[128];
			sscanf( str, "%s", Name );
			int nIdLen = strlen( Name );

			if( nIdLen <= 0 || nIdLen > MAX_NAME_LENGTH || (int)strlen( str ) < nIdLen + 1 )	//1: ' '
			{
				//"庇富篮 /ID 郴侩 涝聪促. 促矫 犬牢秦 林技夸"
				return;
			}
#ifndef _CHEATENABLE_
			if( strcmp( Name, HERO->GetObjectName() ) == 0 ) //磊扁磊脚俊罢 焊尘 鞘夸啊 绝嚼聪促.
				return;
#endif //_CHEATENABLE_

		//---庇富 焊郴扁
			wsprintf( m_strLastName, "%s", Name );

			// 酒捞叼犬牢 - RaMa 04.10.20
			if( (FILTERTABLE->IsInvalidCharInclude((unsigned char*)m_strLastName)) == TRUE )
			{
				AddMsg(CTC_SYSMSG, GetChatMsg(679));
				return;
			}

			str += nIdLen + 1;
			if( *str )
			{
				MSG_CHAT data;
				data.Category	= MP_CHAT;
				data.Protocol	= MP_CHAT_WHISPER_SYN;
				data.dwObjectID	= HEROID;
				strcpy( data.Name, Name );
				strcpy( data.Msg, str );
		//		NETWORK->Send(&data,sizeof(data));
				NETWORK->Send(&data,data.GetMsgLength());	//CHATMSG 040324
			}			
		}
		return;
	case '@':
		{
			++str;
			if(*str == 0)
				return;
			nProtocol = MP_CHAT_PARTY;
		}
		break;
	case '#':
		{
			++str;
			if(*str == 0)
				return;
			nProtocol = MP_CHAT_GUILD;
		}
		break;
	}

	if (nProtocol == MP_CHAT_GUILD)
	{	
		if( !HERO->GetGuildIdx() )
		{
			CHATMGR->AddMsg( CTC_SYSMSG, GetChatMsg(35) );
			return;
		}
		TESTMSGID GuildMsg;
		GuildMsg.Category = MP_CHAT;
		GuildMsg.Protocol = nProtocol;
		GuildMsg.dwObjectID = HERO->GetGuildIdx();
		GuildMsg.dwSenderID = HEROID;
		strcpy(GuildMsg.Msg, str );
		NETWORK->Send(&GuildMsg,GuildMsg.GetMsgLength());
		return;
	}
	if( nProtocol == MP_CHAT_PARTY )
	{
#ifdef _TESTCLIENT_
		AddMsg( CTC_SYSMSG, GetChatMsg(112) );
#else
		if( !PARTYMGR->PartyChat( str, HERO->GetObjectName() ) )
		{
			AddMsg( CTC_SYSMSG, GetChatMsg(112) );
		}
#endif
	}
	
	else
	{
		TESTMSG data;
		data.Category	= MP_CHAT;
		data.Protocol	= nProtocol;
		data.dwObjectID	= HEROID;
		strcpy(data.Msg, str );
#ifdef _TESTCLIENT_
		AddMsg( CTC_GENERALCHAT, "[%s]: %s", HERO->GetObjectName(), str );
#else
//		NETWORK->Send(&data,sizeof(data));
		NETWORK->Send(&data,data.GetMsgLength());	//CHATMSG 040324
#endif
	}
}

void CChatManager::SetAutoWhisper()
{
	if( !m_pChatDialog ) return;
	cEditBox* pEdit = m_pChatDialog->GetChatEditBox();
	if( !pEdit ) return;

	char str[MAX_NAME_LENGTH + 3 ];
	wsprintf( str, "/%s", m_strLastName );
	pEdit->SetEditText( str );
}

/*
void CChatManager::ChatMsgParse( char* str )
{
	++str;

	if( FriendFunc( str ) )	return;

#ifdef _CHEATENABLE_
	if( CheatFunc( str ) )	return;
#endif //_CHEATENABLE_

	char Name[128];
	sscanf( str, "%s", Name );
	int nIdLen = strlen( Name );

	if( nIdLen <= 0 || nIdLen > MAX_NAME_LENGTH || (int)strlen( str ) < nIdLen + 1 )	//1: ' '
	{
		//"庇富篮 /ID 郴侩 涝聪促. 促矫 犬牢秦 林技夸"
		return;
	}

#ifndef _CHEATENABLE_
	if( strcmp( Name, HERO->GetObjectName() ) == 0 )
	{
		//磊扁磊脚俊罢 焊尘 鞘夸啊 绝嚼聪促.
		return;
	}
#endif //_CHEATENABLE_

	wsprintf( m_strLastName, "%s", Name );

	str += nIdLen + 1;
	
	if( *str )
	{
		MSG_CHAT data;
		data.Category	= MP_CHAT;
		data.Protocol	= MP_CHAT_WHISPER_SYN;
		data.dwObjectID	= HEROID;
		strcpy( data.Name, Name );
		strcpy( data.Msg, str );
//		NETWORK->Send(&data,sizeof(data));
		NETWORK->Send(&data,data.GetMsgLength());	//CHATMSG 040324
	}
}
*/

void CChatManager::NetworkMsgParse( BYTE Protocol, void* pMsg )
{
	switch(Protocol)
	{
	case MP_CHAT_ALL:
		{
			TESTMSG* data = (TESTMSG*)pMsg;

			CPlayer* pPlayer = (CPlayer*)OBJECTMGR->GetObject( data->dwObjectID );
			if( !pPlayer ) return;
			
//			ASSERT(pPlayer->GetObjectKind() == eObjectKind_Player);
			
			AddMsg( CTC_GENERALCHAT, "[%s]: %s", pPlayer->GetObjectName(), data->Msg );

			OBJECTMGR->ShowChatBalloon( pPlayer, data->Msg );
		}
		break;

	case MP_CHAT_PARTY:
		{
			MSG_CHAT_WITH_SENDERID* data = (MSG_CHAT_WITH_SENDERID*)pMsg;

			AddMsg( CTC_PARTYCHAT, "[%s]: %s", data->Name, data->Msg );
			CPlayer* pPlayer = (CPlayer*)OBJECTMGR->GetObject( data->dwSenderID );
			if( pPlayer )
				OBJECTMGR->ShowChatBalloon( pPlayer, data->Msg, RGB_HALF( 115, 150, 42 ) );
		}
		break;

	case MP_CHAT_GUILD:
		{
			TESTMSGID* pData = (TESTMSGID*)pMsg;
			char Sendername[MAX_NAME_LENGTH+1];
			SafeStrCpy(Sendername, GUILDMGR->GetMemberName(pData->dwSenderID), MAX_NAME_LENGTH+1);
			if(strcmp(Sendername, "")== 0)
				return;
			AddMsg( CTC_GUILDCHAT, "[%s]: %s", Sendername, pData->Msg );
//			CPlayer* pPlayer = (CPlayer*)OBJECTMGR->GetObject( data->dwObjectID );
//			OBJECTMGR->ShowChatBalloon( pPlayer, data->Msg );
		}
		break;
		
	case MP_CHAT_WHISPER:
		{
			MSG_CHAT* data = (MSG_CHAT*)pMsg;

			AddMsg( CTC_WHISPER, "From %s: %s", data->Name, data->Msg );
			//CPlayer* pPlayer = (CPlayer*)OBJECTMGR->GetObject( data->dwObjectID );
			//OBJECTMGR->ShowChatBalloon( pPlayer, data->Msg );
#ifdef _GMTOOL_
			GMTOOLMGR->AddChatMsg( data->Name, data->Msg, 2 );	//2:罐疽促.
#endif
		}
		break;

	case MP_CHAT_WHISPER_GM:	//傍瘤肺贸烦 拳搁俊 焊捞档废 且鳖? 1牢傍瘤扁瓷..
		{
			MSG_CHAT* data = (MSG_CHAT*)pMsg;

			AddMsg( CTC_GMCHAT, "From %s: %s", data->Name, data->Msg );
			//CPlayer* pPlayer = (CPlayer*)OBJECTMGR->GetObject( data->dwObjectID );
			//OBJECTMGR->ShowChatBalloon( pPlayer, data->Msg );
#ifdef _GMTOOL_
			GMTOOLMGR->AddChatMsg( data->Name, data->Msg, 2 );	//2:罐疽促.
#endif
		}
		break;
		
	case MP_CHAT_WHISPER_ACK:
		{
			MSG_CHAT* data = (MSG_CHAT*)pMsg;

#ifdef _GMTOOL_
			if( MAINGAME->GetUserLevel() == eUSERLEVEL_GM )
				AddMsg( CTC_GMCHAT, "To %s: %s", data->Name, data->Msg );
			else
				AddMsg( CTC_WHISPER, "To %s: %s", data->Name, data->Msg );
#else
			AddMsg( CTC_WHISPER, "To %s: %s", data->Name, data->Msg );
#endif
			char strWhisper[MAX_NAME_LENGTH + 3];
			wsprintf( strWhisper, "/%s ", data->Name );
			m_pChatDialog->GetChatEditBox()->SetEditText( strWhisper );

			//CPlayer* pPlayer = (CPlayer*)OBJECTMGR->GetObject( data->dwObjectID );
			//OBJECTMGR->ShowChatBalloon( pPlayer, data->Msg );

#ifdef _GMTOOL_
			GMTOOLMGR->AddChatMsg( data->Name, data->Msg, 1 );	//1:沁促.
#endif
		}
		break;

	case MP_CHAT_WHISPER_NACK:
		{
			MSG_BYTE* data = (MSG_BYTE*)pMsg;
			if( data->bData == CHATERR_NO_NAME )
				AddMsg( CTC_WHISPER, GetChatMsg(125) );
			else if( data->bData == CHATERR_NOT_CONNECTED )
				AddMsg( CTC_WHISPER, GetChatMsg(126) );//confirm
			else if( data->bData == CHATERR_OPTION_NOWHISPER )
				AddMsg( CTC_WHISPER, GetChatMsg(127) );//confirm
			else
				AddMsg( CTC_WHISPER, GetChatMsg(128) );//confirm

#ifdef _GMTOOL_
			if( data->bData == CHATERR_NO_NAME )
				GMTOOLMGR->AddChatMsg( "", GetChatMsg(125), 3 );	//3:俊矾
			else if( data->bData == CHATERR_NOT_CONNECTED )
				GMTOOLMGR->AddChatMsg( "", GetChatMsg(126), 3 );	//3:俊矾
			else if( data->bData == CHATERR_OPTION_NOWHISPER )
				GMTOOLMGR->AddChatMsg( "", GetChatMsg(127), 3 );	//3:俊矾
			else
				GMTOOLMGR->AddChatMsg( "", GetChatMsg(128), 3 );	//3:俊矾

#endif
		}
		break;

	case MP_CHAT_FROMMONSTER_ALL:
		{
			TESTMSG* data = (TESTMSG*)pMsg;
//			char chat[128];
			// 阁胶磐狼 措拳
			CMonster* pMonster = (CMonster*)OBJECTMGR->GetObject(data->dwObjectID);
			if( !pMonster ) return;

			OBJECTMGR->ShowChatBalloon( pMonster, data->Msg );

//			sprintf(chat, "[%s] %s", pMonster->GetObjectName(), data->Msg);

		}
		break;
	
	case MP_CHAT_FASTCHAT:
		{
			CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(697) );
		}
		break;

	case MP_CHAT_GM:
		{
			TESTMSG* data = (TESTMSG*)pMsg;

			CPlayer* pPlayer = (CPlayer*)OBJECTMGR->GetObject( data->dwObjectID );
			if( !pPlayer ) return;
		
			AddMsg( CTC_GMCHAT, "[%s]: %s", pPlayer->GetObjectName(), data->Msg );
			OBJECTMGR->ShowChatBalloon( pPlayer, data->Msg );			
		}
		break;
	}
}



void CChatManager::SaveChatList()
{
	for( int i = 0 ; i < MAX_CHAT_COUNT ; ++i )
	{
		cPtrList* pPtr = m_pChatDialog->GetSheet(i)->GetListItem();
		PTRLISTPOS pos = pPtr->GetHeadPosition();

		while( pos )
		{
			ITEM* pItem = new ITEM;
			*pItem = *(ITEM*)pPtr->GetNext( pos );
			m_ListChat[i].AddTail( pItem );
		}
	}
}

void CChatManager::RestoreChatList()
{
	for( int i = 0 ; i < MAX_CHAT_COUNT ; ++i )
	{
		PTRLISTPOS pos = m_ListChat[i].GetHeadPosition();

		while( pos )
		{
			ITEM* pItem = (ITEM*)m_ListChat[i].GetNext( pos );
			if( pItem )
				m_pChatDialog->GetSheet(i)->AddItem( pItem->string, pItem->rgb, pItem->line );
		}
	}

	ReleaseChatList();
}

void CChatManager::AddMsgToList( BYTE ChatLimit, DWORD MsgColor, char* str )
{
	int nLen = strlen( str );

	char buf[128];
	int nCpyNum = 0;

	while( nLen > CHATLIST_TEXTLEN )
	{
		if( ( str + CHATLIST_TEXTLEN ) != CharNext( CharPrev( str, str + CHATLIST_TEXTLEN ) ) )
			nCpyNum = CHATLIST_TEXTLEN - 1;
		else
			nCpyNum = CHATLIST_TEXTLEN;

		strncpy( buf, str, nCpyNum );
		buf[nCpyNum] = 0;

		ITEM* pItem = new ITEM;
		strcpy( pItem->string, buf );
		pItem->rgb = MsgColor;		
		m_ListChat[ChatLimit].AddTail( pItem );

		nLen -= nCpyNum;
		str += nCpyNum;
		if( *str == ' ' ) ++str;	//扼牢 霉臂磊啊 胶其捞胶啊 酒聪档废...
	}

	if( nLen > 0 )
	{
		ITEM* pItem = new ITEM;
		strcpy( pItem->string, str );
		pItem->rgb = MsgColor;		
		m_ListChat[ChatLimit].AddTail( pItem );
	}
}

void CChatManager::AddMsgAllToList( DWORD MsgColor, char* str )
{
	int nLen = strlen( str );

	char buf[128];
	int nCpyNum = 0;

	while( nLen > CHATLIST_TEXTLEN )
	{
		if( ( str + CHATLIST_TEXTLEN ) != CharNext( CharPrev( str, str + CHATLIST_TEXTLEN ) ) )
			nCpyNum = CHATLIST_TEXTLEN - 1;
		else
			nCpyNum = CHATLIST_TEXTLEN;

		strncpy( buf, str, nCpyNum );
		buf[nCpyNum] = 0;

		for( int i = 0 ; i < MAX_CHAT_COUNT ; ++i )
		{
			ITEM* pItem = new ITEM;
			strcpy( pItem->string, buf );
			pItem->rgb = MsgColor;		
			m_ListChat[i].AddTail( pItem );
		}

		nLen -= nCpyNum;
		str += nCpyNum;
		if( *str == ' ' ) ++str;	//扼牢 霉臂磊啊 胶其捞胶啊 酒聪档废...
	}

	if( nLen > 0 )
	{
		for( int i = 0 ; i < MAX_CHAT_COUNT ; ++i )
		{
			ITEM* pItem = new ITEM;
			strcpy( pItem->string, str );
			pItem->rgb = MsgColor;		
			m_ListChat[i].AddTail( pItem );
		}
	}
}

void CChatManager::ReleaseChatList()
{
	for( int i = 0 ; i < MAX_CHAT_COUNT ; ++i )
	{
		PTRLISTPOS pos = m_ListChat[i].GetHeadPosition();

		while( pos )
		{
			ITEM* pItem = (ITEM*)m_ListChat[i].GetNext( pos );
			if( pItem )
				delete pItem;				
		}

		m_ListChat[i].RemoveAll();
	}
	
}

void CChatManager::AddChatMsg( BYTE ChatLimit, DWORD MsgColor, char* str )
{
	if( m_pChatDialog )
		m_pChatDialog->AddMsg( ChatLimit, MsgColor, str );
	else
		AddMsgToList( ChatLimit, MsgColor, str );
}

void CChatManager::AddChatMsgAll( DWORD MsgColor, char* str )
{
	if( m_pChatDialog )
		m_pChatDialog->AddMsgAll( MsgColor, str );
	else
		AddMsgAllToList( MsgColor, str );
}

⌨️ 快捷键说明

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