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

📄 chat.cpp

📁 完整龙族的无错反外挂登陆器,b编译后直接直接就可以放在客户端下运行
💻 CPP
📖 第 1 页 / 共 4 页
字号:
// Chat.cpp: implementation of the CChat class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Chat.h"
#include "Hangul.h"
#include "menu.h"
#include "dragon.h"
#include "Hong_Sub.h"
#include "Map.h"
#include "CharDataTable.h"
#include "TeamBattle.h"
#include "GameProc.h"
#include "LineCommand.h"
#include "Tool.h"
#include "Hong_Sprite.h"
#include "directsound.h"
#include "SmallMenu.h"
#include "TextOutMgr.h"
#include "CurrentMsgMgr.h"
#include "QuestFunction.h" // 021128 kyo
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
extern int g_LocalWarBegin;
extern int GetNationIndex(int Nation);
CChatMgr ChatMgr;
void CChatMgr::AddString(const char* szName, const char* szChatData, const int iChatType)//盲泼 单捞鸥 眠啊
{
	CChatData *InputData = new CChatData;
	InputData->SetName(FONT_COLOR_NAME,szName);//捞抚悸泼
	switch( iChatType )
	{
	case CHATTYPE_MERCHANT_BBS:
	case CHATTYPE_NORMAL:	
		{//捞抚 悸泼篮 傍烹捞扼辑 困俊辑 等促
			InputData->SetChatType(iChatType,++m_iTotalCounter,++m_iNormalCounter);
			InputData->SetData(FONT_COLOR_WHITE,szChatData);	
			InputData->SetHeader(FONT_COLOR_WHITE,lan->OutputMessage(0,600));
		}break;
	case CHATTYPE_GUILD:	
		{
			InputData->SetChatType(iChatType,++m_iTotalCounter,++m_iGuildCounter);
			InputData->SetData(FONT_COLOR_RARE_MAIN,szChatData);	
			InputData->SetHeader(FONT_COLOR_RARE_MAIN,lan->OutputMessage(0,601));// "辨靛");
		}break;//庇富篮 捞力何磐苛祸
	case CHATTYPE_COLOSSUS_GLOBAL: 
		{
			InputData->SetChatType(iChatType,++m_iTotalCounter,++m_iColosussCounter);
			InputData->SetData(FONT_COLOR_BLIGHT_VIOLET,szChatData);	
			InputData->SetHeader(FONT_COLOR_BLIGHT_VIOLET,lan->OutputMessage(0,602));//"酒饭唱1"
		}break;
	case CHATTYPE_COLOSSUS	: 
		{
			InputData->SetChatType(iChatType,++m_iTotalCounter,++m_iColosussCounter);
			InputData->SetData(FONT_COLOR_BLIGHT_VIOLET,szChatData);	
			InputData->SetHeader(FONT_COLOR_BLIGHT_VIOLET,lan->OutputMessage(0,603));//"酒饭唱2"
		}break;
	case CHATTYPE_WHISPER:	
		{
			InputData->SetChatType(iChatType,++m_iTotalCounter,++m_iWhisperCounter);
			InputData->SetData(FONT_COLOR_GREEN,szChatData);	
			InputData->SetHeader(FONT_COLOR_GREEN,lan->OutputMessage(0,604));//"庇富"
		}break;//庇富篮 捞力何磐苛祸
	case CHATTYPE_LOCAL_WAR :
		{
			InputData->SetChatType(iChatType,++m_iTotalCounter,++m_iLocalWarCounter);
			InputData->SetData(FONT_COLOR_BLIGHT_ORANGE,szChatData);	
			InputData->SetHeader(FONT_COLOR_BLIGHT_ORANGE,lan->OutputMessage(0,605));//"惫瘤傈"
		}break;
	case CHATTYPE_NATION_WAR :
		{
			InputData->SetChatType(iChatType,++m_iTotalCounter,++m_iNationWarCounter);
			InputData->SetData(FONT_COLOR_BLIGHT_ORANGE,szChatData);	
			InputData->SetHeader(FONT_COLOR_BLIGHT_ORANGE,lan->OutputMessage(0,606));//"惫啊傈"
		}break;
	case CHATTYPE_PARTY:
		{
			InputData->SetChatType(iChatType,++m_iTotalCounter,++m_iPartyCounter);
			InputData->SetData(FONT_COLOR_BORA,szChatData);	
			InputData->SetHeader(FONT_COLOR_BORA,lan->OutputMessage(0,607));//"颇萍"
		}break;

	case CHATTYPE_GUILD_BBS:
		{
			InputData->SetChatType(iChatType,++m_iTotalCounter,++m_iGuildBBSCounter);
			InputData->SetData(FONT_COLOR_RARE_MAIN,szChatData);	
			InputData->SetHeader(FONT_COLOR_RARE_MAIN,lan->OutputMessage(0,608));//"辨靛傍瘤"
		}break;
	case CHATTYPE_YES_OR_NO:
		{
			InputData->SetChatType(iChatType,++m_iTotalCounter,++m_iYesNoCounter);
			InputData->SetData(FONT_COLOR_BLIGHT_BLUE,szChatData);	
			InputData->SetHeader(FONT_COLOR_RED,lan->OutputMessage(0,611));//"匙/酒聪坷"
		}break;
	case CHATTYPE_NOTICE:
		{
		//	::AddCurrentStatusMessage( 200,200,0,lan->OutputMessage(3,131) );//010215 lsw
		//	::AddCurrentStatusMessage( 255,255,0, szChatData );
			InputData->SetChatType(iChatType,++m_iTotalCounter,++m_iYesNoCounter);
			InputData->SetData(FONT_COLOR_SOLID_YELLOW,szChatData);	
			InputData->SetHeader(FONT_COLOR_SOLID_YELLOW,lan->OutputMessage(0,612));//"傍瘤荤亲"
		}break;
	
	default:
		{
			InputData->SetChatType(iChatType,++m_iTotalCounter,m_iTotalCounter);
			InputData->SetData(FONT_COLOR_WHITE,szChatData);	
			InputData->SetHeader(FONT_COLOR_WHITE,"");
		}break;
	}
	InputData->MakeTotalData();
	ChatList.push_back(InputData);//
	int iCount =0;
	for( chatitor itor = ChatList.end() ; itor != ChatList.begin();)
	{
		itor--;
		if( !(*itor)->IsDisplayAble() ){continue;}
		const int iResult = GetRectTextLine((*itor)->GetTotalData(),m_iWidth);//窜鉴洒 扼牢荐 技绰 何盒
		iCount += iResult;//捞 临阑 框流捞瘤 付技夸 亲惑 弥 窍窜
		if(iCount > MAX_CHAT_COUNT )
		{
			(*itor)->SetDisplayAble(false);
		}
	}
}

void CChatMgr::DisplayPastData(const int iType)
{
	for( chatitor itor = ChatList.begin() ; itor != ChatList.end();itor++)
	{	//历厘 登绢 乐绊 泅犁 拳搁俊 救唱坷绰巴
		if( iType == (*itor)->GetChatType() && !(*itor)->IsDisplayAble() )
		{
			((*itor)->IsHaveHeader())?
			AddCurrentStatusMessage((*itor)->GetHeaderColor(),"[%s] %s: %s",(*itor)->GetHeader(),(*itor)->GetName(),(*itor)->GetData())
			:AddCurrentStatusMessage((*itor)->GetHeaderColor(),"%s: %s",(*itor)->GetName(),(*itor)->GetData());
		}
	}
}

void CChatMgr::DeleteCheck()//iIndex2俊 蝶扼 阿阿狼 历厘 肮荐啊 逞栏搁
{
	for( chatitor itor = ChatList.begin() ; itor != ChatList.end();)
	{
		int iCompareCount = 0;//扁废 巢败具 且 矫累痢
		switch((*itor)->GetChatType())
		{
		case CHATTYPE_NORMAL:			{iCompareCount = m_iNormalCounter	- MAX_NORMAL_COUNT;		}break;
		case CHATTYPE_GUILD:			{iCompareCount = m_iGuildCounter	- MAX_GUILD_COUNT;		}break;
		case CHATTYPE_COLOSSUS_GLOBAL: 
		case CHATTYPE_COLOSSUS	:		{iCompareCount = m_iColosussCounter	- MAX_COLOSUSS_COUNT;	}break;
		case CHATTYPE_WHISPER:			{iCompareCount = m_iWhisperCounter	- MAX_WHISPER_COUNT;	}break;
		case CHATTYPE_LOCAL_WAR:		{iCompareCount = m_iLocalWarCounter	- MAX_LOCALWAR_COUNT;	}break;
		case CHATTYPE_NATION_WAR:		{iCompareCount = m_iNationWarCounter- MAX_NATIONWAR_COUNT;	}break;
		case CHATTYPE_PARTY:			{iCompareCount = m_iPartyCounter	- MAX_PARTY_COUNT;		}break;
		case CHATTYPE_GUILD_BBS:		{iCompareCount = m_iGuildBBSCounter	- MAX_GUILDBBS_COUNT;	}break;
		case CHATTYPE_YES_OR_NO:		{iCompareCount = m_iYesNoCounter	- MAX_YES_NO_COUNT;		}break;
		case CHATTYPE_NOTICE:			{iCompareCount = m_iNoticeCounter	- MAX_NOTICE_COUNT;		}break;
		default:{iCompareCount= 0;}break;//公炼扒 瘤况 廉扼
		}
		const int iMyCount = (*itor)->GetIndex2();
		if( iMyCount < iCompareCount)//历厘瞪 Max肮荐甫 逞绢艾栏搁 瘤款促
		{
			SAFE_DELETE((*itor));
			itor = ChatList.erase(itor);
		}
		else
		{
			itor++;
		}
	}
}

void CChatMgr::DisplayCheck()//傈眉 牢郸胶甫 眉农秦辑 9临 逞阑芭 鞍栏搁 DisplayAble阑 false肺 秦 霖促
{//DeleteCheck() 咯扁辑 磊悼栏肺 瘤快扁甫 茄促,
	const DWORD dwNowTime = ::timeGetTime();
	
	int iCount = 0;
	for( chatitor itor = ChatList.begin() ; itor != ChatList.end();itor++)
	{
		if( !(*itor)->IsDisplayAble() ){continue;}
		const DWORD dwMaxDisplayTime =	(*itor)->GetMaxDisplayTime();
		const int iDisplayAbleCounter =   GetDisplayAbleCounter();
		if	( (dwNowTime > dwMaxDisplayTime) //叼胶敲饭捞 矫埃 坷滚捞芭唱
//		||	( (*itor)->GetIndex() <= iDisplayAbleCounter)		//拳搁 免仿 秦具 窍绰单 墨款磐啊 葛磊扼搁
			)
		{
			(*itor)->SetDisplayAble(false);
		}
	}

	if( m_dwSelectWaitTime && dwNowTime > m_dwSelectWaitTime)
	{//矫埃 檬苞 
		ClearYesNo();//努府绢~
	}
}

int CChatMgr::DrawChatData(CChatData* pData,const int iLineCount,const int iX, const int iY)//臂磊 嘛绰 何盒阑 毒巴涝聪促.//嘛篮 临 荐甫 府畔钦聪促.
{//鉴荐 免仿 窃荐.
	const int iTextX = iX+2;
	const int iTextY = iY+2;

	const int iResult =  GetRectTextLine(pData->GetTotalData(),m_iWidth);//窜鉴洒 扼牢荐 技绰 何盒
	for(int iCt = 0 ; iCt < iResult;iCt++)
	{
		FieldTypeNomalPutFx3( iX, iY+(iLineCount+iCt)*m_iLineGab, 0,0, 11, NEW_CHAT_BACK_IMG, m_iAlpha, m_iBlendType );//捞芭 绢痘霸 嘛衬 ぱぱ;
	}
	Hcolor(pData->GetDataColor());//021030 lsw
	TxtOut.RcTXTOutBNoBG(iTextX, iTextY+iLineCount*m_iLineGab, m_iWidth, 0,"%s",pData->GetTotalData());//祸彬喊肺 嘛绰 何盒 傈眉

	if(pData->IsHaveHeader())
	{
		Hcolor(pData->GetNameColor());
		TxtOut.RcTXTOutBNoBG(iTextX, iTextY+iLineCount*m_iLineGab, m_iWidth, 0,"%s %s",pData->GetHeader(),pData->GetName());//祸彬喊肺 嘛绰 何盒 傈眉
		
		Hcolor(pData->GetHeaderColor());
		TxtOut.RcTXTOutBNoBG(iTextX, iTextY+iLineCount*m_iLineGab, m_iWidth, 0,"%s",pData->GetHeader());//祸彬喊肺 嘛绰 何盒 傈眉
	}
	else
	{
		Hcolor(pData->GetNameColor());
		TxtOut.RcTXTOutBNoBG(iTextX, iTextY+iLineCount*m_iLineGab, m_iWidth, 0,"%s",pData->GetName());//祸彬喊肺 嘛绰 何盒 傈眉
	}
	return iResult;
}

void CChatMgr::DisplayData( const int iX, const int iY ,const int iOption)
{
	DisplayCheck();//瘤陛 免仿 瞪 荐乐绰 局甸 眉农//矫埃捞唱 扼牢 箭磊甫 技绢 杭荐 乐绊 绝澜阑 搬沥.
	DeleteCheck();//瘤况廉具且 局甸 眉农
	int iNormalGroupCount = 0;
	int iGuildGroupCount = 0;
	int iWhisperGroupCount = 0;
	
	int iNoticeGroupCount = 0;

	//畴富, 辨靛, 庇富 3俺促 ON 捞搁 4 4 2 厚啦
	//畴富, 辨靛 --> 5 5 厚啦
	//畴富, 庇富 --> 7,3 厚啦
	//辨靛, 庇富 --> 7,3 厚啦
	{//扼牢荐 惶扁 //免仿 傈囚 绝澜
		int iLineCount = MAX_CHAT_COUNT;
		// 1. 畴富弊缝, 辨靛弊缝, 庇富弊缝 泅犁 嘛鳃荐乐绰 单捞鸥狼 扼牢荐甫 惶绰促.
		// 2. 庇富弊缝, 辨靛弊缝, 畴富弊缝 鉴栏肺 酒贰俊辑 何磐 嘛绰促.
		// 3. 庇富 嘛阑锭 困俊 辨靛尔 畴富 墨款飘 歹窍扁 秦焊绊 嘛档废 茄促.
		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		:
				{
					iNormalGroupCount += iResult;
				}break;
			case CHATTYPE_WHISPER			:
			case CHATTYPE_PARTY				:
				{
					iWhisperGroupCount += iResult;
				}break;
			case CHATTYPE_GUILD				:
			case CHATTYPE_GUILD_BBS			://辨靛 傍瘤绰 公炼扒 甸绢柯促
				{
					iGuildGroupCount += iResult;
				}break;
			case CHATTYPE_YES_OR_NO			:
			case CHATTYPE_NOTICE			:
				{
					iNoticeGroupCount += iResult;
				}break;
			default:{}break;
			}
		}
	}
	
	int iLineCount = MAX_CHAT_COUNT;//酒贰俊辑 何磐 嘛扁 锭巩俊
{
	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_YES_OR_NO:
			{
				if(!IsCheckYesNoAble())//瘤陛 YesNo 酒囱 惑怕搁 免仿摹 臼澜
				{
					continue;
				}
			}
		case CHATTYPE_NOTICE:
			{
				const int iCutLineCount = 5;//5临 促 嘛绰 荐啊 乐促
				const int iOtherLineCount = MAX_CHAT_COUNT-iCutLineCount;
				if( iCutLineCount < MAX_CHAT_COUNT - iLineCount )//目飘扼牢 鳖瘤 嘛绊
				{
					if(iOtherLineCount <= iNormalGroupCount+iGuildGroupCount)
					{//巢篮 弊副 荐 乐绰 沫阑 逞绢急促搁
						continue;
					}
					else
					{
						break;//沫阑 逞绢辑瘤父 臼栏搁 弊成 歹 弊赴促.
					}
				}
			}break;
		default:{continue;}break;
		}
		iLineCount -= iResult;
		DrawChatData((*itor),iLineCount,iX,iY);//捞 临阑 框流捞瘤 付技夸 亲惑 弥窍窜 官肺困
		if( 0 > iLineCount ){break;}//扼牢 场唱搁 胶砰.//弥窍窜
	}
}
{
	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_WHISPER			:
		case CHATTYPE_PARTY				:
			{
				const int iCutLineCount = (m_iNormalChatView&&m_iGuildChatView)?2:3;//辨靛 畴富 笛促 难廉 乐栏搁 2临, 酒聪搁 3临
				const int iOtherLineCount = MAX_CHAT_COUNT-iCutLineCount;
				if( iCutLineCount < MAX_CHAT_COUNT - iLineCount )//目飘扼牢 鳖瘤 嘛绊
				{
					if(iOtherLineCount <= iNormalGroupCount+iGuildGroupCount)
					{//巢篮 弊副 荐 乐绰 沫阑 逞绢急促搁
						continue;
					}
					else
					{
						break;//沫阑 逞绢辑瘤父 臼栏搁 弊成 歹 弊赴促.
					}
				}
			}break;
		default:{continue;}break;
		}
		iLineCount -= iResult;
		DrawChatData((*itor),iLineCount,iX,iY);//捞 临阑 框流捞瘤 付技夸 亲惑 弥窍窜 官肺困
		if( 0 > iLineCount ){break;}//扼牢 场唱搁 胶砰.//弥窍窜
	}
}
{
	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_GUILD:
		case CHATTYPE_GUILD_BBS:
			{//畴富 父 波瘤搁 7临, 庇富父 波瘤搁 5临.
				int iCutLineCount =0;
				if(m_iNormalChatView && !m_iWhisperChatView)
				{//畴富苞 辨靛啊 难廉乐促.
					iCutLineCount = 5;
				}
				if(!m_iNormalChatView && m_iWhisperChatView)
				{//辨靛客 庇富捞 难廉乐促.
					iCutLineCount = 7;
				}
				if(m_iNormalChatView && m_iWhisperChatView)
				{//傈何促 难廉乐促.
					iCutLineCount = 4;
				}//畴富苞 辨靛 波柳扒 惑包 富磊 continue啊 乐栏聪鳖.

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

⌨️ 快捷键说明

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