?? chat.cpp
字號(hào):
// 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++)
{ //歷厘 登絹 樂(lè)絆 泅犁 拳擱俊 救唱坷綽巴
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()//傈眉 牢鄲膠甫 眉農(nóng)秦輯 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();//瘤陛 免仿 瞪 薦樂(lè)綽 局甸 眉農(nóng)//矯埃撈唱 扼牢 箭磊甫 技絹 杭薦 樂(lè)絆 絕瀾闌 搬瀝.
DeleteCheck();//瘤況廉具且 局甸 眉農(nóng)
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. 疇富弊縫, 辨靛弊縫, 庇富弊縫 泅犁 嘛鰓薦樂(lè)綽 單撈鷗狼 扼牢薦甫 惶綽促.
// 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臨 促 嘛綽 薦啊 樂(lè)促
const int iOtherLineCount = MAX_CHAT_COUNT-iCutLineCount;
if( iCutLineCount < MAX_CHAT_COUNT - iLineCount )//目飄扼牢 鱉瘤 嘛絆
{
if(iOtherLineCount <= iNormalGroupCount+iGuildGroupCount)
{//巢籃 弊副 薦 樂(lè)綽 沫闌 逞絹急促擱
continue;
}
else
{
break;//沫闌 逞絹輯瘤父 臼欄擱 弊成 歹 弊赴促.
}
}
}break;
default:{continue;}break;
}
iLineCount -= iResult;
DrawChatData((*itor),iLineCount,iX,iY);//撈 臨闌 框流撈瘤 付技夸 親惑 彌竅竄 官肺困
if( 0 > iLineCount ){break;}//扼牢 場(chǎng)唱擱 膠砰.//彌竅竄
}
}
{
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;//辨靛 疇富 笛促 難廉 樂(lè)欄擱 2臨, 酒聰擱 3臨
const int iOtherLineCount = MAX_CHAT_COUNT-iCutLineCount;
if( iCutLineCount < MAX_CHAT_COUNT - iLineCount )//目飄扼牢 鱉瘤 嘛絆
{
if(iOtherLineCount <= iNormalGroupCount+iGuildGroupCount)
{//巢籃 弊副 薦 樂(lè)綽 沫闌 逞絹急促擱
continue;
}
else
{
break;//沫闌 逞絹輯瘤父 臼欄擱 弊成 歹 弊赴促.
}
}
}break;
default:{continue;}break;
}
iLineCount -= iResult;
DrawChatData((*itor),iLineCount,iX,iY);//撈 臨闌 框流撈瘤 付技夸 親惑 彌竅竄 官肺困
if( 0 > iLineCount ){break;}//扼牢 場(chǎng)唱擱 膠砰.//彌竅竄
}
}
{
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)
{//疇富苞 辨靛啊 難廉樂(lè)促.
iCutLineCount = 5;
}
if(!m_iNormalChatView && m_iWhisperChatView)
{//辨靛客 庇富撈 難廉樂(lè)促.
iCutLineCount = 7;
}
if(m_iNormalChatView && m_iWhisperChatView)
{//傈何促 難廉樂(lè)促.
iCutLineCount = 4;
}//疇富苞 辨靛 波柳扒 惑包 富磊 continue啊 樂(lè)欄聰鱉.
const int iOtherLineCount = MAX_CHAT_COUNT-iCutLineCount;
if( iCutLineCount < MAX_CHAT_COUNT - iLineCount )//目飄扼牢 鱉瘤 嘛絆
{
if(iOtherLineCount <= iNormalGroupCount+iWhisperGroupCount)
{//巢籃 弊副 薦 樂(lè)綽 沫闌 逞絹急促擱
continue;
}
else
{
break;//沫闌 逞絹輯瘤父 臼欄擱 弊成 歹 弊赴促.
}
}
}break;
default:{continue;}break;
}
iLineCount -=iResult;
DrawChatData((*itor),iLineCount,iX,iY);//撈 臨闌 框流撈瘤 付技夸 親惑 彌竅竄 官肺困
if(0 > iLineCount ){break;}//扼牢 場(chǎng)唱擱 膠砰.//彌竅竄
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -