📄 chatmanager.cpp
字号:
BYTE nProtocol = m_pChatDialog->GetCurSheetNum();
char nToken = *str;
switch( nToken )
{
case '/':
{
++str;
if(*str == 0)
return;
if( FriendFunc( str ) ) return;
#ifdef _CHEATENABLE_ //KES CHEAT!!!
if( CheatFunc( str ) ) return;
#endif //KES CHEAT!!!
static char Name[128];
sscanf( str, "%s", Name );
int nIdLen = strlen( Name );
if( nIdLen <= 0 || nIdLen > MAX_NAME_LENGTH || (int)strlen( str ) < nIdLen + 1 ) //1: ' '
{
//"庇富篮 /ID 郴侩 涝聪促. 促矫 犬牢秦 林技夸"
return;
}
#ifndef _CHEATENABLE_
if( strcmp( Name, HERO->GetObjectName() ) == 0 ) //磊扁磊脚俊罢 焊尘 鞘夸啊 绝嚼聪促.
return;
#endif //_CHEATENABLE_
//---庇富 焊郴扁
wsprintf( m_strLastName, "%s", Name );
// 酒捞叼犬牢 - RaMa 04.10.20
if( (FILTERTABLE->IsInvalidCharInclude((unsigned char*)m_strLastName)) == TRUE )
{
AddMsg(CTC_SYSMSG, GetChatMsg(679));
return;
}
str += nIdLen + 1;
if( *str )
{
MSG_CHAT data;
data.Category = MP_CHAT;
data.Protocol = MP_CHAT_WHISPER_SYN;
data.dwObjectID = HEROID;
strcpy( data.Name, Name );
strcpy( data.Msg, str );
// NETWORK->Send(&data,sizeof(data));
NETWORK->Send(&data,data.GetMsgLength()); //CHATMSG 040324
}
}
return;
case '@':
{
++str;
if(*str == 0)
return;
nProtocol = MP_CHAT_PARTY;
}
break;
case '#':
{
++str;
if(*str == 0)
return;
nProtocol = MP_CHAT_GUILD;
}
break;
}
if (nProtocol == MP_CHAT_GUILD)
{
if( !HERO->GetGuildIdx() )
{
CHATMGR->AddMsg( CTC_SYSMSG, GetChatMsg(35) );
return;
}
TESTMSGID GuildMsg;
GuildMsg.Category = MP_CHAT;
GuildMsg.Protocol = nProtocol;
GuildMsg.dwObjectID = HERO->GetGuildIdx();
GuildMsg.dwSenderID = HEROID;
strcpy(GuildMsg.Msg, str );
NETWORK->Send(&GuildMsg,GuildMsg.GetMsgLength());
return;
}
if( nProtocol == MP_CHAT_PARTY )
{
#ifdef _TESTCLIENT_
AddMsg( CTC_SYSMSG, GetChatMsg(112) );
#else
if( !PARTYMGR->PartyChat( str, HERO->GetObjectName() ) )
{
AddMsg( CTC_SYSMSG, GetChatMsg(112) );
}
#endif
}
else
{
TESTMSG data;
data.Category = MP_CHAT;
data.Protocol = nProtocol;
data.dwObjectID = HEROID;
strcpy(data.Msg, str );
#ifdef _TESTCLIENT_
AddMsg( CTC_GENERALCHAT, "[%s]: %s", HERO->GetObjectName(), str );
#else
// NETWORK->Send(&data,sizeof(data));
NETWORK->Send(&data,data.GetMsgLength()); //CHATMSG 040324
#endif
}
}
void CChatManager::SetAutoWhisper()
{
if( !m_pChatDialog ) return;
cEditBox* pEdit = m_pChatDialog->GetChatEditBox();
if( !pEdit ) return;
char str[MAX_NAME_LENGTH + 3 ];
wsprintf( str, "/%s", m_strLastName );
pEdit->SetEditText( str );
}
/*
void CChatManager::ChatMsgParse( char* str )
{
++str;
if( FriendFunc( str ) ) return;
#ifdef _CHEATENABLE_
if( CheatFunc( str ) ) return;
#endif //_CHEATENABLE_
char Name[128];
sscanf( str, "%s", Name );
int nIdLen = strlen( Name );
if( nIdLen <= 0 || nIdLen > MAX_NAME_LENGTH || (int)strlen( str ) < nIdLen + 1 ) //1: ' '
{
//"庇富篮 /ID 郴侩 涝聪促. 促矫 犬牢秦 林技夸"
return;
}
#ifndef _CHEATENABLE_
if( strcmp( Name, HERO->GetObjectName() ) == 0 )
{
//磊扁磊脚俊罢 焊尘 鞘夸啊 绝嚼聪促.
return;
}
#endif //_CHEATENABLE_
wsprintf( m_strLastName, "%s", Name );
str += nIdLen + 1;
if( *str )
{
MSG_CHAT data;
data.Category = MP_CHAT;
data.Protocol = MP_CHAT_WHISPER_SYN;
data.dwObjectID = HEROID;
strcpy( data.Name, Name );
strcpy( data.Msg, str );
// NETWORK->Send(&data,sizeof(data));
NETWORK->Send(&data,data.GetMsgLength()); //CHATMSG 040324
}
}
*/
void CChatManager::NetworkMsgParse( BYTE Protocol, void* pMsg )
{
switch(Protocol)
{
case MP_CHAT_ALL:
{
TESTMSG* data = (TESTMSG*)pMsg;
CPlayer* pPlayer = (CPlayer*)OBJECTMGR->GetObject( data->dwObjectID );
if( !pPlayer ) return;
// ASSERT(pPlayer->GetObjectKind() == eObjectKind_Player);
AddMsg( CTC_GENERALCHAT, "[%s]: %s", pPlayer->GetObjectName(), data->Msg );
OBJECTMGR->ShowChatBalloon( pPlayer, data->Msg );
}
break;
case MP_CHAT_PARTY:
{
MSG_CHAT_WITH_SENDERID* data = (MSG_CHAT_WITH_SENDERID*)pMsg;
AddMsg( CTC_PARTYCHAT, "[%s]: %s", data->Name, data->Msg );
CPlayer* pPlayer = (CPlayer*)OBJECTMGR->GetObject( data->dwSenderID );
if( pPlayer )
OBJECTMGR->ShowChatBalloon( pPlayer, data->Msg, RGB_HALF( 115, 150, 42 ) );
}
break;
case MP_CHAT_GUILD:
{
TESTMSGID* pData = (TESTMSGID*)pMsg;
char Sendername[MAX_NAME_LENGTH+1];
SafeStrCpy(Sendername, GUILDMGR->GetMemberName(pData->dwSenderID), MAX_NAME_LENGTH+1);
if(strcmp(Sendername, "")== 0)
return;
AddMsg( CTC_GUILDCHAT, "[%s]: %s", Sendername, pData->Msg );
// CPlayer* pPlayer = (CPlayer*)OBJECTMGR->GetObject( data->dwObjectID );
// OBJECTMGR->ShowChatBalloon( pPlayer, data->Msg );
}
break;
case MP_CHAT_WHISPER:
{
MSG_CHAT* data = (MSG_CHAT*)pMsg;
AddMsg( CTC_WHISPER, "From %s: %s", data->Name, data->Msg );
//CPlayer* pPlayer = (CPlayer*)OBJECTMGR->GetObject( data->dwObjectID );
//OBJECTMGR->ShowChatBalloon( pPlayer, data->Msg );
#ifdef _GMTOOL_
GMTOOLMGR->AddChatMsg( data->Name, data->Msg, 2 ); //2:罐疽促.
#endif
}
break;
case MP_CHAT_WHISPER_GM: //傍瘤肺贸烦 拳搁俊 焊捞档废 且鳖? 1牢傍瘤扁瓷..
{
MSG_CHAT* data = (MSG_CHAT*)pMsg;
AddMsg( CTC_GMCHAT, "From %s: %s", data->Name, data->Msg );
//CPlayer* pPlayer = (CPlayer*)OBJECTMGR->GetObject( data->dwObjectID );
//OBJECTMGR->ShowChatBalloon( pPlayer, data->Msg );
#ifdef _GMTOOL_
GMTOOLMGR->AddChatMsg( data->Name, data->Msg, 2 ); //2:罐疽促.
#endif
}
break;
case MP_CHAT_WHISPER_ACK:
{
MSG_CHAT* data = (MSG_CHAT*)pMsg;
#ifdef _GMTOOL_
if( MAINGAME->GetUserLevel() == eUSERLEVEL_GM )
AddMsg( CTC_GMCHAT, "To %s: %s", data->Name, data->Msg );
else
AddMsg( CTC_WHISPER, "To %s: %s", data->Name, data->Msg );
#else
AddMsg( CTC_WHISPER, "To %s: %s", data->Name, data->Msg );
#endif
char strWhisper[MAX_NAME_LENGTH + 3];
wsprintf( strWhisper, "/%s ", data->Name );
m_pChatDialog->GetChatEditBox()->SetEditText( strWhisper );
//CPlayer* pPlayer = (CPlayer*)OBJECTMGR->GetObject( data->dwObjectID );
//OBJECTMGR->ShowChatBalloon( pPlayer, data->Msg );
#ifdef _GMTOOL_
GMTOOLMGR->AddChatMsg( data->Name, data->Msg, 1 ); //1:沁促.
#endif
}
break;
case MP_CHAT_WHISPER_NACK:
{
MSG_BYTE* data = (MSG_BYTE*)pMsg;
if( data->bData == CHATERR_NO_NAME )
AddMsg( CTC_WHISPER, GetChatMsg(125) );
else if( data->bData == CHATERR_NOT_CONNECTED )
AddMsg( CTC_WHISPER, GetChatMsg(126) );//confirm
else if( data->bData == CHATERR_OPTION_NOWHISPER )
AddMsg( CTC_WHISPER, GetChatMsg(127) );//confirm
else
AddMsg( CTC_WHISPER, GetChatMsg(128) );//confirm
#ifdef _GMTOOL_
if( data->bData == CHATERR_NO_NAME )
GMTOOLMGR->AddChatMsg( "", GetChatMsg(125), 3 ); //3:俊矾
else if( data->bData == CHATERR_NOT_CONNECTED )
GMTOOLMGR->AddChatMsg( "", GetChatMsg(126), 3 ); //3:俊矾
else if( data->bData == CHATERR_OPTION_NOWHISPER )
GMTOOLMGR->AddChatMsg( "", GetChatMsg(127), 3 ); //3:俊矾
else
GMTOOLMGR->AddChatMsg( "", GetChatMsg(128), 3 ); //3:俊矾
#endif
}
break;
case MP_CHAT_FROMMONSTER_ALL:
{
TESTMSG* data = (TESTMSG*)pMsg;
// char chat[128];
// 阁胶磐狼 措拳
CMonster* pMonster = (CMonster*)OBJECTMGR->GetObject(data->dwObjectID);
if( !pMonster ) return;
OBJECTMGR->ShowChatBalloon( pMonster, data->Msg );
// sprintf(chat, "[%s] %s", pMonster->GetObjectName(), data->Msg);
}
break;
case MP_CHAT_FASTCHAT:
{
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(697) );
}
break;
case MP_CHAT_GM:
{
TESTMSG* data = (TESTMSG*)pMsg;
CPlayer* pPlayer = (CPlayer*)OBJECTMGR->GetObject( data->dwObjectID );
if( !pPlayer ) return;
AddMsg( CTC_GMCHAT, "[%s]: %s", pPlayer->GetObjectName(), data->Msg );
OBJECTMGR->ShowChatBalloon( pPlayer, data->Msg );
}
break;
}
}
void CChatManager::SaveChatList()
{
for( int i = 0 ; i < MAX_CHAT_COUNT ; ++i )
{
cPtrList* pPtr = m_pChatDialog->GetSheet(i)->GetListItem();
PTRLISTPOS pos = pPtr->GetHeadPosition();
while( pos )
{
ITEM* pItem = new ITEM;
*pItem = *(ITEM*)pPtr->GetNext( pos );
m_ListChat[i].AddTail( pItem );
}
}
}
void CChatManager::RestoreChatList()
{
for( int i = 0 ; i < MAX_CHAT_COUNT ; ++i )
{
PTRLISTPOS pos = m_ListChat[i].GetHeadPosition();
while( pos )
{
ITEM* pItem = (ITEM*)m_ListChat[i].GetNext( pos );
if( pItem )
m_pChatDialog->GetSheet(i)->AddItem( pItem->string, pItem->rgb, pItem->line );
}
}
ReleaseChatList();
}
void CChatManager::AddMsgToList( BYTE ChatLimit, DWORD MsgColor, char* str )
{
int nLen = strlen( str );
char buf[128];
int nCpyNum = 0;
while( nLen > CHATLIST_TEXTLEN )
{
if( ( str + CHATLIST_TEXTLEN ) != CharNext( CharPrev( str, str + CHATLIST_TEXTLEN ) ) )
nCpyNum = CHATLIST_TEXTLEN - 1;
else
nCpyNum = CHATLIST_TEXTLEN;
strncpy( buf, str, nCpyNum );
buf[nCpyNum] = 0;
ITEM* pItem = new ITEM;
strcpy( pItem->string, buf );
pItem->rgb = MsgColor;
m_ListChat[ChatLimit].AddTail( pItem );
nLen -= nCpyNum;
str += nCpyNum;
if( *str == ' ' ) ++str; //扼牢 霉臂磊啊 胶其捞胶啊 酒聪档废...
}
if( nLen > 0 )
{
ITEM* pItem = new ITEM;
strcpy( pItem->string, str );
pItem->rgb = MsgColor;
m_ListChat[ChatLimit].AddTail( pItem );
}
}
void CChatManager::AddMsgAllToList( DWORD MsgColor, char* str )
{
int nLen = strlen( str );
char buf[128];
int nCpyNum = 0;
while( nLen > CHATLIST_TEXTLEN )
{
if( ( str + CHATLIST_TEXTLEN ) != CharNext( CharPrev( str, str + CHATLIST_TEXTLEN ) ) )
nCpyNum = CHATLIST_TEXTLEN - 1;
else
nCpyNum = CHATLIST_TEXTLEN;
strncpy( buf, str, nCpyNum );
buf[nCpyNum] = 0;
for( int i = 0 ; i < MAX_CHAT_COUNT ; ++i )
{
ITEM* pItem = new ITEM;
strcpy( pItem->string, buf );
pItem->rgb = MsgColor;
m_ListChat[i].AddTail( pItem );
}
nLen -= nCpyNum;
str += nCpyNum;
if( *str == ' ' ) ++str; //扼牢 霉臂磊啊 胶其捞胶啊 酒聪档废...
}
if( nLen > 0 )
{
for( int i = 0 ; i < MAX_CHAT_COUNT ; ++i )
{
ITEM* pItem = new ITEM;
strcpy( pItem->string, str );
pItem->rgb = MsgColor;
m_ListChat[i].AddTail( pItem );
}
}
}
void CChatManager::ReleaseChatList()
{
for( int i = 0 ; i < MAX_CHAT_COUNT ; ++i )
{
PTRLISTPOS pos = m_ListChat[i].GetHeadPosition();
while( pos )
{
ITEM* pItem = (ITEM*)m_ListChat[i].GetNext( pos );
if( pItem )
delete pItem;
}
m_ListChat[i].RemoveAll();
}
}
void CChatManager::AddChatMsg( BYTE ChatLimit, DWORD MsgColor, char* str )
{
if( m_pChatDialog )
m_pChatDialog->AddMsg( ChatLimit, MsgColor, str );
else
AddMsgToList( ChatLimit, MsgColor, str );
}
void CChatManager::AddChatMsgAll( DWORD MsgColor, char* str )
{
if( m_pChatDialog )
m_pChatDialog->AddMsgAll( MsgColor, str );
else
AddMsgAllToList( MsgColor, str );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -