📄 chat.cpp
字号:
{
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 + -