📄 chat.cpp
字号:
const int iSize = strlen( msg );
if(0 > iSize ){ return true;}
else if( 0 == iSize )
{
SetChatTarget(CHAT_TARGET_GUILD);
return false;
}
if( IsLineCommand( msg, iSize) )
{
EWndMgr.ClearTxt(HWND_CHAT_INPUT);//021001 lsw
return false; // 疙飞绢扼搁 贸府饶 府畔
}
ConvString( msg );// 垮汲 鞘磐 //020725 lsw
g_Menu_Variable.m_bGuildChatOn = true;
t_packet packet;
packet.h.header.type = CMD_GUILD_CHAT;
packet.h.header.size = iSize;
strcpy( (char *)packet.u.data, msg );
QueuePacket( &packet, 1 );
return true;
}
bool SendChatWisper(const char *name, char *msg)
{
const int iSize = strlen( msg );
if(0 >= iSize ){return true;}
EatRearWhiteChar( msg );//020725 lsw
if( IsLineCommand( msg, iSize) )
{
EWndMgr.ClearTxt(HWND_CHAT_INPUT);//021001 lsw
return false; // 疙飞绢扼搁 贸府饶 府畔
}
ConvString( msg );// 垮汲 鞘磐//020725 lsw
const int iNameLen = strlen(name);
const int iMsgLen = strlen(msg);
if( (20 < iNameLen ) || !iNameLen || (200 <= iMsgLen) )
{
AddCurrentStatusMessage( FONT_COLOR_YELLOW,lan->OutputMessage(0,501));//"措惑狼 捞抚捞 肋给 登菌芭唱, 庇加富捞 呈公 遍聪促."
return false;//皋技瘤 焊郴瘤 臼澜
}
InsertWisperList(name);
t_packet p;
p.h.header.type = CMD_SEND_EAR_MESSAGE;
p.h.header.size = sizeof( k_send_ear_message )-200+iMsgLen;
strcpy( p.u.kein.send_ear_message.name, name);
strcpy( p.u.kein.send_ear_message.message, msg);
QueuePacket( &p, 1 );
return true;
}
void SendWisperByLineCommand( char *str_buf )//SendEarMessageByLineCommand捞芭甫 函屈 秦辑 泅犁 盲泼芒俊辑 皋技瘤 啊档废
{
char name[21]="";
char msg[255]="";
str_buf = EatFrontWhiteChar(str_buf);
sscanf( str_buf, "%20s %s", name, msg );
if(msg[0])//捞抚 涝仿 登菌绊 皋技瘤 霉 何盒捞 乐促搁
{
char *pdest = strstr( str_buf, msg );
// const int result = pdest - string + 1;
if( NULL != pdest )
{
SendChatWisper(name,pdest);
}
}
else
{
SetChatMode(CM_MESSAGE);//盲泼 涝仿 措扁 惑怕
SetChatTarget(SELECT_WISPER_MODE);//庇加富 惑措 涝仿 葛靛
EWndMgr.SetTxt(HWND_CHAT_TARGET_INPUT,name);//021001 lsw//涝仿芒篮 努府绢//捞抚 涝仿 秦 林绊
EWndMgr.ClearTxt(HWND_CHAT_INPUT);//021001 lsw//涝仿芒篮 努府绢
if(name[0])//捞抚 涝仿捞 乐促搁
{
SetFocus2(HWND_CHAT_INPUT);//021001 lsw
}
else//捞抚涝仿档 绝唱..
{ //器目胶甫 捞抚 涝仿栏肺 霖促
SetFocus2(HWND_CHAT_TARGET_INPUT);//021001 lsw
}
}
}
void SendPartyChatByLineCommand( char *str_buf )//SendEarMessageByLineCommand捞芭甫 函屈 秦辑 泅犁 盲泼芒俊辑 皋技瘤 啊档废
{
if(str_buf[0])//捞抚 涝仿 登菌绊 皋技瘤 霉 何盒捞 乐促搁
{
SendChatData( str_buf, CHATTYPE_PARTY);
}
}
void SendLocalWarChat(char* Arg) // LTS NEW LOCALWAR
{
if (g_LocalWarBegin)
{
if (Hero->JoinLocalWar)
{
t_packet packet;
packet.h.header.type=CMD_LOCALWAR_CHAT;
packet.u.LocalWar.LocalWarChat.NationIndex=GetNationIndex(Hero->name_status.nation); // Broad Cast Use
sprintf(packet.u.LocalWar.LocalWarChat.Message,"%s : %s",Hero->name,Arg);
ConvString( packet.u.LocalWar.LocalWarChat.Message );// 垮汲 鞘磐
EatRearWhiteChar( packet.u.LocalWar.LocalWarChat.Message );
packet.h.header.size=strlen(packet.u.LocalWar.LocalWarChat.Message)+1;
QueuePacket(&packet,1);
}
else
{
AddCurrentStatusMessage( 255,255,0,lan->OutputMessage(0,370));//"惫瘤傈俊 曼咯窍寂具父 荤侩且荐 乐嚼聪促.");
}
}
else AddCurrentStatusMessage( 255,255,0,lan->OutputMessage(0,371));//"惫瘤傈 惑炔俊辑父 荤侩且荐 乐嚼聪促.");
}
/////////////////////////////////////////////////////////////////////////////////////////////
//Yes or No 矫胶袍
// yes no system ----------------------------------------------------------
//-------------------------------------------------------------------------
int CChatMgr::RecvNeedYesNoMsg( const int iType, const int iDemanderCn, const char *szMsg, ... )
{
if(IsCheckYesNoAble())
{
#ifdef _DEBUG
::AddCurrentStatusMessage( FONT_COLOR_BLIGHT_BLUE, "recv Type = %d", iType );
#endif
::AddCurrentStatusMessage( FONT_COLOR_BLIGHT_BLUE, lan->OutputMessage(2,760));
return 0;
}
char szTemp[512] = {0,};
va_list arg;
va_start( arg, szMsg );
vsprintf( szTemp, szMsg, arg );
va_end( arg );
m_iYesOrNoType = iType;
m_iYesOrNoDemanderCn = iDemanderCn;
m_dwSelectWaitTime = ::timeGetTime()+MAX_CHAT_DISPLAY_TIME;
AddString(NULL,szTemp,CHATTYPE_YES_OR_NO);//皋技瘤 负篮吧 笼绢 持绢扼
return 1;
}
////////////////////////////////////////////////////////////////////////// yex_no system
void CChatMgr::CheckYesNo( const int iIsYes )
{
if(!ChatMgr.IsCheckYesNoAble()){return;}//矫埃 檬苞
switch( m_iYesOrNoType )
{
case YN_GUILD_JOIN_OK :
{
(iIsYes)?
SendGuildJoinConfirmOk( m_iYesOrNoDemanderCn ):
SendGuildJoinConfirmNot( m_iYesOrNoDemanderCn );
}break;
default:
{//咯扁 坷搁 俊矾牢单..
}break;
}
ClearYesNo();//努府绢甫 矫难霖促
}
int CheckLanguageForMenu( LPSTR lpStr ) // 皋春俊辑 荤侩且 攫绢 矫胶袍
{
if( ChatMgr.IsCheckYesNoAble() ) // yes, no甫 急琶秦具 且锭
{
if( stricmp(lpStr,lan->OutputMessage(7,96))==0
|| stricmp(lpStr,lan->OutputMessage(7,97))==0
|| stricmp(lpStr,lan->OutputMessage(7,98))==0
|| stricmp(lpStr,"YES")==0 )
{
ChatMgr.CheckYesNo( 1 );
return 0;
}
if( stricmp(lpStr,lan->OutputMessage(7,99))==0
|| stricmp(lpStr,"NO")==0
|| stricmp(lpStr,lan->OutputMessage(7,100))==0 )//010215 lsw
{
ChatMgr.CheckYesNo( 0 );
return 0;
}
}
if( SCharacterData.believe_god )//&& SCharacterData.faith > 50 )
{
switch( SCharacterData.believe_god )
{
case EDELBLHOY : if( !stricmp( lpStr, lan->OutputMessage(7,93) )) CallServer( CMD_DIVINE_UP ); break;//010215 lsw
case TEFFERY : if( !stricmp( lpStr, lan->OutputMessage(7,94))) CallServer(CMD_DIVINE_UP ); break;//010215 lsw
case LETTY : if( !stricmp( lpStr, lan->OutputMessage(7,95))) CallServer( CMD_DIVINE_UP ); break;//010215 lsw
// case OREM : if( !stricmp( lpStr, lan->OutputMessage(7,95))) CallServer( CMD_DIVINE_UP ); break;//010215 lsw
default : break;
}
}
const int Len = strlen( lpStr );
if( g_FightMapStart )
{
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 = CHATTYPE_COLOSSUS; // 傈眉俊霸 焊辰促.
packet.u.client_chat_data.length = Len;
memcpy( packet.u.client_chat_data.text, lpStr, Len );
QueuePacket( &packet, 1 );
return 0;
}
languageSystem( lpStr ); // 0605 Woo
return 1;
}
void RecvWhisperReply( const int type, const char *szName ) // 庇加富.. // 鞍篮 辑滚俊 乐阑 版快 搬苞
{
switch( type )
{
case CMD_SEND_EAR_MESSAGE_OK : ::AddCurrentStatusMessage( 255, 0, 255, lan->OutputMessage(5,41), szName); break;//010215 lsw
case CMD_SEND_EAR_MESSAGE_NOT : ::AddCurrentStatusMessage( 255, 0, 0, lan->OutputMessage(5,42), szName); break;//010215 lsw
}
}
void RecvWhisperReply2( const int ret )
{
switch( ret )
{
case 1: ::AddCurrentStatusMessage( 255, 0, 255, lan->OutputMessage(5,43)); break;//010215 lsw
case 2: ::AddCurrentStatusMessage( 255, 0, 0, lan->OutputMessage(5,44)); break;//磷篮
case 3: ::AddCurrentStatusMessage( 255, 0, 0, lan->OutputMessage(5,45)); break;//芭例
case 4: ::AddCurrentStatusMessage( 255, 0, 0, lan->OutputMessage(5,46)); break;//促弗惫啊
default : ::AddCurrentStatusMessage( 255, 0, 0, lan->OutputMessage(5,47)); break;//傈崔角菩
}
}
void RecvWhisperReplyEtc( t_packet *p )
{
const int ret = p->u.kein.default_char;
switch( ret )
{
case -1 : ::AddCurrentStatusMessage( 255, 10, 20, lan->OutputMessage(3,51)); break;//010215 lsw
default : break;
}
}
void CChatMgr::DisplayRefuseList()//庇富 芭何 府胶飘 免仿
{
if( ChatMgr.IsRefuseAllWhisper() )
{
::AddCurrentStatusMessage( 200, 255 , 200 , lan->OutputMessage(7,120) );//010215 lsw
return;
}
else
{
::AddCurrentStatusMessage( 255, 200 , 255 , lan->OutputMessage(7,121) );//010215 lsw
}
for(vpcitor itor = vRefuseList.begin();vRefuseList.end() != itor;itor++)
{
::AddCurrentStatusMessage( 100, 200 , 100 , lan->OutputMessage(7,122), (*itor) );//010215 lsw
}
}
void SetChatTarget(const int iType)
{
const int iNow = GetChatTarget();
if(IsAbleChatTargetName(iType) )
{
SMenu[MN_WISPER_LIST].work = iType;
if(SELECT_WISPER_MODE==iType)
{
EWndMgr.ClearTxt(HWND_CHAT_TARGET_INPUT);//021001 lsw
SetFocus2(HWND_CHAT_TARGET_INPUT);//021001 lsw
}
}
else
{
SMenu[MN_WISPER_LIST].work = CHAT_TARGET_NORMAL;
}
}
int InsertWisperList(const char* name)//捞抚 历厘饶 历厘等 磊府甫 府畔
{
int i = CHAT_TARGET_WISPER_START;
for(;i<CHAT_TARGET_WISPER_END;i++)
{
if(!stricmp(SMenu[MN_WISPER_LIST].nField[i].temp,name))//厚背搬苞 捞抚捞 促福促搁
{ //捞固 弊 捞抚篮 历厘 窍绊乐绢
return i;//包抵
}
if(!SMenu[MN_WISPER_LIST].nField[i].temp[0])//酒抗 捞抚捞 绝促搁
{
strcpy(SMenu[MN_WISPER_LIST].nField[i].temp,name);//绝绰磊府俊 持绊
return i;// 持绊 包抵扼
}
}
if(i==CHAT_TARGET_WISPER_END)//持阑 磊府啊 华华 窍搁
{
// strcpy(SMenu[MN_WISPER_LIST].nField[CHAT_TARGET_WISPER9].temp,SMenu[MN_WISPER_LIST].nField[CHAT_TARGET_WISPER8].temp);
// strcpy(SMenu[MN_WISPER_LIST].nField[CHAT_TARGET_WISPER8].temp,SMenu[MN_WISPER_LIST].nField[CHAT_TARGET_WISPER7].temp);
// strcpy(SMenu[MN_WISPER_LIST].nField[CHAT_TARGET_WISPER7].temp,SMenu[MN_WISPER_LIST].nField[CHAT_TARGET_WISPER6].temp);
// strcpy(SMenu[MN_WISPER_LIST].nField[CHAT_TARGET_WISPER6].temp,SMenu[MN_WISPER_LIST].nField[CHAT_TARGET_WISPER5].temp);
strcpy(SMenu[MN_WISPER_LIST].nField[CHAT_TARGET_WISPER5].temp,SMenu[MN_WISPER_LIST].nField[CHAT_TARGET_WISPER4].temp);
strcpy(SMenu[MN_WISPER_LIST].nField[CHAT_TARGET_WISPER4].temp,SMenu[MN_WISPER_LIST].nField[CHAT_TARGET_WISPER3].temp);
strcpy(SMenu[MN_WISPER_LIST].nField[CHAT_TARGET_WISPER3].temp,SMenu[MN_WISPER_LIST].nField[CHAT_TARGET_WISPER2].temp);
strcpy(SMenu[MN_WISPER_LIST].nField[CHAT_TARGET_WISPER2].temp,SMenu[MN_WISPER_LIST].nField[CHAT_TARGET_WISPER1].temp);
strcpy(SMenu[MN_WISPER_LIST].nField[CHAT_TARGET_WISPER1].temp,name);
i = CHAT_TARGET_WISPER1;
}
return i;
}
//////////////////////////////////////////////////////////////////////
//1.3 傍瘤 力茄
/*
int CChatMgr::CompareString(string szLef, string szRig)//kyo 唱吝俊 checkLimitedBBSName绊磨锭 昏力茄促.
{
return szLef.compare( szRig);
}
int CompareString(string szLef, string szRig)//kyo 唱吝俊 checkLimitedBBSName绊磨锭 昏力茄促.
{
return szLef.compare( szRig);
}
*/
void CChatMgr::ClearLimiteBBS()
{
m_bIsActiveBBS = true;
m_szLimiteName.clear();
}
bool CChatMgr::AddLimintedBBSName(char* szLimitList)
{
if( NULL == szLimitList|| strlen(szLimitList) <= 0)
{
m_szLimiteName.clear();
::AddCurrentStatusMessage( FONT_COLOR_SOLID_YELLOW, lan->OutputMessage(0,511) );
return true;
}
int nSize = m_szLimiteName.size();
char *szName;
szName = strtok( szLimitList, " " );
while( szName!= NULL )
{
if( MAX_LIMIT_USER < nSize)
{//力茄牢盔俊 吧赴促.
return false;
}
if( AddLimintedBBSNameOne( szName ) )
{
nSize++;
}
szName = strtok( NULL, " " );
}
return true;
}
bool CChatMgr::AddLimintedBBSNameOne( const string szName)
{
if( !IsLimitedBBSName( szName ) )
{
m_szLimiteName.push_back(szName);
sort(m_szLimiteName.begin(), m_szLimiteName.end());
return true;
}
return false;
}
bool CChatMgr::IsLimitedBBSName( const string szName )
{
if( binary_search(m_szLimiteName.begin(), m_szLimiteName.end(), szName))//, ::CompareString) ) //kyo 唱吝俊 Cmp甫 促甫 窃
{
return true;
}
return false;
}
void CChatMgr::ShowLimitedList()
{// not use now.. 031021
string szNameList;
for( vector<string>::iterator it = m_szLimiteName.begin(); it != m_szLimiteName.end(); it++)
{
szNameList += (*it);
szNameList +=" ";
}
::AddCurrentStatusMessage(0,174,239, "Limited User is %s", szNameList.c_str() );
}
//
//////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -