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

📄 chat.cpp

📁 完整龙族的无错反外挂登陆器,b编译后直接直接就可以放在客户端下运行
💻 CPP
📖 第 1 页 / 共 4 页
字号:
{
	for( rchatitor itor = ChatList.rbegin(); itor != ChatList.rend();itor++)//畴富弊缝 嘛扁
	{
		if(!(*itor)->IsDisplayAble()){continue;}//叼胶敲饭捞 啊瓷茄 局甸父 焊咯 霖促
		const int iChatType = (*itor)->GetChatType();
		if(!IsDisplayAbleType(iChatType)){continue;}
		const int iResult = GetRectTextLine((*itor)->GetTotalData(),m_iWidth);//窜鉴洒 扼牢荐 技绰 何盒
		switch(iChatType)
		{
		case CHATTYPE_NORMAL			:
		case CHATTYPE_COLOSSUS_GLOBAL	:
		case CHATTYPE_COLOSSUS			:
		case CHATTYPE_LOCAL_WAR			:
		case CHATTYPE_NATION_WAR		:
			{//畴富 父 波瘤搁 7临, 庇富父 波瘤搁 5临.
				int iCutLineCount =0;
				if(m_iGuildChatView && !m_iWhisperChatView)
				{//畴富苞 辨靛啊 难廉乐促.
					iCutLineCount = 5;
				}
				if(!m_iGuildChatView && m_iWhisperChatView)
				{//畴富苞 庇富捞 难廉乐促.
					iCutLineCount = 7;
				}
				if(m_iGuildChatView && m_iWhisperChatView)
				{//傈何促 难廉乐促.
					iCutLineCount = 4;
				}//辨靛客 庇富 波柳扒 惑包 富磊 continue啊 乐栏聪鳖.

				const int iOtherLineCount = MAX_CHAT_COUNT-iCutLineCount;
				if( iCutLineCount < MAX_CHAT_COUNT - iLineCount )//目飘扼牢 鳖瘤 嘛绊
				{
					if(iOtherLineCount <= m_iGuildChatView+iWhisperGroupCount)
					{//巢篮 弊副 荐 乐绰 沫阑 逞绢急促搁
						continue;
					}
					else
					{
						break;//沫阑 逞绢辑瘤父 臼栏搁 弊成 歹 弊赴促.
					}
				}
			}break;
		default:{continue;}break;
		}
		iLineCount -=iResult;
		DrawChatData((*itor),iLineCount,iX,iY);//捞 临阑 框流捞瘤 付技夸 亲惑 弥窍窜 官肺困
		if(0 > iLineCount  ){break;}//扼牢 场唱搁 胶砰.//弥窍窜
	}
}
}

int CChatMgr::IsDisplayAbleType(const int iChatType)
{
	switch(iChatType)
	{
	case CHATTYPE_NORMAL			:
	case CHATTYPE_COLOSSUS_GLOBAL	:
	case CHATTYPE_COLOSSUS			:
	case CHATTYPE_LOCAL_WAR			:
	case CHATTYPE_NATION_WAR		:
		{
			return (m_iNormalChatView)?1:0;
		}break;
	case CHATTYPE_WHISPER			:
	case CHATTYPE_PARTY				:
		{
			return (m_iWhisperChatView)?1:0;
		}break;
	case CHATTYPE_GUILD				:
		{
			return (m_iGuildChatView)?1:0;
		}
	case CHATTYPE_YES_OR_NO:
	case CHATTYPE_NOTICE:
	case CHATTYPE_GUILD_BBS:
		{//傍瘤绰 公炼扒 甸绢柯促
			return 1;
		}break;
	default:{}break;
	}	
	return 0;
}

void CChatMgr::Clear()
{//墨款磐档 檬扁拳 茄促
	m_iTotalCounter		= 0;
	m_iNormalCounter	= 0;
	m_iWhisperCounter	= 0;	
	m_iGuildCounter		= 0;
	m_iGuildBBSCounter	= 0;
	m_iPartyCounter		= 0;
	m_iNationWarCounter	= 0;
	m_iLocalWarCounter	= 0;
	m_iColosussCounter	= 0;
	m_iYesNoCounter		= 0;
	m_iNoticeCounter	= 0;
	
	for( chatitor itor = ChatList.begin() ; itor != ChatList.end();)
	{
		SAFE_DELETE((*itor));
		itor = ChatList.erase(itor);
	}
	ChatList.clear();

	{//庇富 包访
		m_iRefuseAllWhisper = 0;
		for(vpcitor itor = vRefuseList.begin();vRefuseList.end() != itor;itor++)
		{
			SAFE_DELETE((*itor));
			vRefuseList.erase(itor);//捞抚阑 力芭
		}
		vRefuseList.clear();
	}
	ClearYesNo();
	ClearLimiteBBS();	// 031021 kyo //kyo
}

int CChatMgr::GetViewChat(const int iChatType )
{
	switch(iChatType)
	{
	case CHATTYPE_NORMAL:
		{
			return m_iNormalChatView;
		}break;
	case CHATTYPE_WHISPER:
		{
			return !IsRefuseAllWhisper();
		}break;
	case CHATTYPE_GUILD:
		{
			return m_iGuildChatView;
		}break;
	}
	return 0;
}
void CChatMgr::SetViewChat(const int iChatType , const int iIsView)
{
	switch(iChatType)
	{
	case CHATTYPE_NORMAL:
		{
			if(iIsView)
			{
				AddCurrentStatusMessage(FONT_COLOR_GREEN,lan->OutputMessage(2,621));
			}
			else
			{
				AddCurrentStatusMessage(FONT_COLOR_RED,lan->OutputMessage(2,622));
			}
			m_iNormalChatView = iIsView;
		}break;
	case CHATTYPE_WHISPER:
		{
			(iIsView)?SetAcceptWhiper(NULL):SetRefuseWhiper(NULL);
		}break;
	case CHATTYPE_GUILD:
		{
			if(iIsView)
			{
				AddCurrentStatusMessage(FONT_COLOR_GREEN,lan->OutputMessage(2,623));
			}
			else
			{
				AddCurrentStatusMessage(FONT_COLOR_RED,lan->OutputMessage(2,624));
			}
			m_iGuildChatView = iIsView;
		}break;
	default:
		{
		}break;
	}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////

void SendChatData( LPSTR lpStr , const int iChatType)
{		
	if ( lpStr == NULL ){return;}
	
	const int iTempLen = ::strlen( lpStr );
	if ( 0				>= iTempLen 
	||	TEXT_LENGTH		<= iTempLen ){return;}
	
	const int Len = iTempLen+1;//澄 巩磊 器窃

	if( !CheckLanguageForMenu( lpStr ) ){return;}	// 辑滚肺 焊郴瘤 臼绰促.

	static DWORD time = 0;
	if( (::timeGetTime() - time) < PACKET_SEND_MINIMUM_TIME ) return;
	time = ::timeGetTime();
	
	t_packet	packet;
	packet.h.header.type = CMD_CHAT_DATA;
	packet.h.header.size = sizeof( t_client_chat_data ) - TEXT_LENGTH + Len;
	packet.u.client_chat_data.type = iChatType; // 傈眉俊霸 焊辰促. //020701 lsw
	packet.u.client_chat_data.length = Len;
	::strncpy( packet.u.client_chat_data.text, lpStr, Len );
	::QueuePacket( &packet, 1 );

	//辑滚俊辑 Data甫 罐瘤臼绊 静绰溜矫 焊咯霖促. 郴啊敬巴父.. 
	t_server_chat_data p;
	if( Hero )
	{
		p.server_id = Hero->id;
		p.type = iChatType;
		p.length = Len;
		::strcpy( p.text, lpStr );
		::RecvChatData( &p );//单捞鸥甫 罐篮巴 贸烦
	} 

	if(Hero->viewtype == VIEWTYPE_GHOST_)
	{
		if(	(!::stricmp( lpStr,lan->OutputMessage(5,53) )) 
		|| 	(!::stricmp( lpStr,"The name of Edelblhoy with cosmos and the great storm")))		// 0521 YGI//010216 lsw
		{
			char type = 1;
			::CallServer( CMD_PLEASE_GIVE_LIFE, (char *)&type, sizeof( char ) );
		}
		else if( ::stricmp( lpStr,kein_GetMenuString(32) ) == 0 )		// "河篮 厘固客 沥狼狼 坷方狼 捞抚栏肺"
		{
			char type = 2;
			::CallServer( CMD_PLEASE_GIVE_LIFE, (char *)&type, sizeof( char ) );
		}
#ifdef _DEBUG
		if(	!::stricmp( lpStr, "goodboy" ) )
		{
			packet.h.header.type = CMD_PLEASE_GIVE_LIFE1;
			packet.h.header.size = 0; 
			::QueuePacket( &packet, 1 );
		}
#endif
	}
		
	if( !::stricmp( lpStr, kein_GetMenuString( 33 )  ) )		// 付过 硅快扁
	{	
		const int mx = Hero->x / TILE_SIZE;
		const int my = Hero->y / TILE_SIZE;
		
		//&& 泅犁 困摹啊 付过荤 辨靛捞搁 
		if(	SCharacterData.nCharacterData[SPELL] == WIZARD_SPELL
			&& MapNumber == 0 && BoxAndDotCrash( 34-3,72-3, 6,6, Hero->x / TILE_SIZE, Hero->y / TILE_SIZE ) && TileMap[ Hero->x / TILE_SIZE][Hero->y / TILE_SIZE].attr_inside )
		{
			::CallSmallMenu(MN_LEARN_MAGIC_BOOK);
		}
		//&& 泅犁 困摹啊 技啊瘤 脚傈吝 窍唱捞搁
		if( SCharacterData.nCharacterData[SPELL] == PRIEST_SPELL
			&& MapNumber == 0 &&  TileMap[ mx][ my].attr_inside &&
		(  BoxAndDotCrash( 288-6, 18-6, 15,11, mx, my ) ||
		   BoxAndDotCrash( 327-6, 84-6, 15,11, mx, my ) ||
		   BoxAndDotCrash( 217-6,317-6, 15,11, mx, my ) ) ) 
		{
			CallSmallMenu(MN_LEARN_MAGIC_BOOK);
		}
	}	

	if(!stricmp( lpStr,lan->OutputMessage(5,54) ))
	{
		const int mx = Hero->x / TILE_SIZE;
		const int my = Hero->y / TILE_SIZE;
		if(BoxAndDotCrash( 256,133, 15, 11, mx, my ))
		{
			packet.h.header.type = CMD_QUEST_JOB_FINISH;
			packet.h.header.size = 0; 
			QueuePacket( &packet, 1 );
		}
	}
	// 021127 kyo 
	g_cQuest.SetSpellWord( lpStr ); //script spellmapmove俊辑 荤侩
}

void RecvChatData( t_server_chat_data *p )
{	//< CSD-030520		
	char temp[MAX_CHAT_STRING + 20];
		
	if (p->server_id == 1000)
	{
		p->server_id = (short )Hero->id;
	}
		
	LPCHARACTER	ch = ::ReturnCharacterPoint(p->server_id);

	if (ch == NULL)
	{
		return;
	}

	const int iRecvType = p->type;
	if(ch){ch->nChatType = iRecvType;}
	
	switch( iRecvType )			// 010326 YGI
	{
	case CHATTYPE_NORMAL : 	
		{
			if( ch == NULL ) { /*JustMsg( " 绢矾..." ); */ return; }
			if( Hero->viewtype != VIEWTYPE_GHOST_ )//唱绰 绊胶飘啊 酒聪绊		(抄 荤恩)
			{
				if(	ch->viewtype == VIEWTYPE_GHOST_ ) //促弗 荤恩篮 绊胶飘 捞哥	(谍荤恩篮 蜡飞)
				{
					if(!CanViewGhost(Hero)) //郴啊 绊胶福簔 杭 荐 绝阑锭				(郴啊 蜡飞阑 给 焊搁 富档 给秦)
					{
						break;
					}
				}
			}
			strcpy( ch->szChatMessage, p->text );
			*(ch->szChatMessage + p->length) = 0;

			switch(GetDisplayChatType(ch))
			{
			case CHAT_COLOR_TYPE_HIGHLEVEL	:
			case CHAT_COLOR_TYPE_NPC		:	
			case CHAT_COLOR_TYPE_GUILDMASTER:	
			case CHAT_COLOR_TYPE_DUAL_CLASS	:	
			case CHAT_COLOR_TYPE_GM			:	
			case CHAT_COLOR_TYPE_SIT_DOWN	:		//011215 lsw
			case CHAT_COLOR_TYPE_ANI2		:	
			case CHAT_COLOR_TYPE_ANI3		:	
				{
					ch->ChatDelay	= CHAT_DELAY_TYPE_LONG_PC;
				}break;
			case CHAT_COLOR_TYPE_TUTORIAL_NPC:	
				{
					ch->ChatDelay	=CHAT_DELAY_TYPE_NPC;
				}break;
			default:
				{
					ch->ChatDelay = CHAT_DELAY_TYPE_DEFAULT_PC;
				}break;
			}
			ChatMgr.AddString( ch->name, p->text, iRecvType );		// 盲泼芒栏肺
		}break;
	case CHATTYPE_MERCHANT_BBS://惑牢狼 版快.
		{
			if(	ch->viewtype == VIEWTYPE_GHOST_ ) //促弗 荤恩篮 绊胶飘 捞哥	(谍荤恩篮 蜡飞)
			{
				break;
			}
			wsprintf( temp, lan->OutputMessage(5,55), p->text );//lsw
			
			::strcpy( ch->szChatMessage, p->text );
			*(ch->szChatMessage + p->length) = 0;
			ch->ChatDelay = CHAT_DELAY_TYPE_MERCHANT_PC;
//			ChatMgr.AddString( ch->name, p->text, iRecvType );//盲泼芒俊 剁快瘤绰 臼绰促
		}break;
	case CHATTYPE_PARTY :	
		{
			::wsprintf( temp, lan->OutputMessage(5,55), p->text );//lsw
			ChatMgr.AddString( NULL, temp, iRecvType );//020612 lsw
		}break;
	case CHATTYPE_WHISPER :	
		{
			::wsprintf(temp, "%s", p->text );
			ChatMgr.AddString( NULL, temp, iRecvType );//021001 lsw
		}break;
	case CHATTYPE_COLOSSUS_GLOBAL:
	case CHATTYPE_COLOSSUS:
		{	
			char* name = ch->name;
			strcpy(ch->szChatMessage, p->text);
			*(ch->szChatMessage + p->length) = 0;
			ch->ChatDelay = 70;

			ChatMgr.AddString(name, p->text, p->type);
			break;
		}	
	}
}	//> CSD-030520	

void SendChatSet( char chattype, char *name )
{	
	t_packet p;
	char *temp;
	int len;

	switch( chattype )
	{
		case CHATTYPE_GUILD :
		{
			p.h.header.type = CMD_CHAT_SET;
			{
				p.u.chat_set.chattype = chattype;
				p.u.chat_set.chatname[0] = 0;
				len = 0;
			}
			p.h.header.size = sizeof( t_chat_set ) - 21 + len;
			QueuePacket( &p, 1 );
		break;
		}
		case CHATTYPE_PARTY :
		{
			p.h.header.type = CMD_CHAT_SET;
			{
				p.u.chat_set.chattype = chattype;
				p.u.chat_set.chatname[0] = 0;
				len = 0;
			}

⌨️ 快捷键说明

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