#include "StdAfx.h" #include ".\chatcommands.h" #include "ChatManager.h" #include "Hero.h" #include "ObjectManager.h" #include "gameResourceManager.h" #include "FilterManager.h" #include "GuildManager.h" // #include "Protocol.h" #include "Chat_Common.h" // #include "CommunityScript.h" #include "ChatWindow.h" #include "SkillWindow.h" #include "MegaphoneWindow.h" // #include "PVPManager.h" cChatCommands::cChatCommands() { } cChatCommands::~cChatCommands() { } bool cChatCommands::AddCommunityData( LPCTSTR key, unsigned long index ) { if( mCommunityCommandMap.Insert( key, index ) == false ) { assert( 0 && "failed to add community command string" ); return false; } return true; } bool cChatCommands::MessageParser( LPCTSTR message ) { /// ¸Þ¼¼Áö ÆÄ½Ì cTokenizerT tokenizer( message, ::_tcslen(message), _T(" ") ); cStringT keyToken, tailToken; tokenizer.GetNext( &keyToken ); if( tokenizer.GetTail() ) tailToken = tokenizer.GetTail(); keyToken.ToLower(); /// °¨Á¤Ç¥Çö°Ë»ç cCommunityCommandMap::cIterator i = mCommunityCommandMap.Find( (LPCTSTR)keyToken.Cstr() ); if( i != mCommunityCommandMap.End() ) { /// ±â´ÉÀ妽º ±¸Çϱâ unsigned long index = (*i).mSecond; sCommunitySkillInfo* pInfo = COMMUNITYSCRIPT->GetCommunityInfo( index ); if( pInfo ) { if( pInfo->mType == 0 ) { cSkillWindow* win = (cSkillWindow*)UIMAN->FindNodeByID( eUIID_GAME_SKILLWINDOW ); if( win ) { switch( pInfo->mRoleIndex ) { case eCOMMU_LIFE_REST: case eCOMMU_LIFE_DUEL: case eCOMMU_LIFE_STREETSTALL: case eCOMMU_LIFE_ENHANCED: case eCOMMU_LIFE_TITLE: case eCOMMU_LIFE_ITEMMIX: case eCOMMU_LIFE_FOLLOW: case eCOMMU_LIFE_REPORT_AUTO: { if( tailToken.GetLength() <= 0 ) win->RequestLifeCommand( pInfo->mIndex, 0, 0 ); else CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 57 ) ); } break; case eCOMMU_LIFE_PARTY: /// /ÆÄƼ case eCOMMU_LIFE_TRADE: { LPCTSTR name = 0; if( tailToken.GetLength() > 0 ) { /// + ID ÀÎÁö °Ë»ç cTokenizerT token( tailToken.Cstr(), tailToken.GetLength(), _T(" ") ); cStringT IDToken, endToken; token.GetNext( &IDToken ); if( token.GetTail() ) endToken = token.GetTail(); /// id µÚ¿¡ ¾µµ¥ ¾ø´Â ±¸¹®ÀÌ ºÙÁö ¾Êµµ·Ï ÇÑ´Ù. if( endToken.GetLength() > 0 ) { /// À߸øµÈ ¸í·É¾î CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 57 ) ); return true; } name = (LPCTSTR)IDToken.Cstr(); } win->RequestLifeCommand( pInfo->mIndex, name, 0 ); } break; case eCOMMU_LIFE_PUTCARD: case eCOMMU_LIFE_TAROT: { win->RequestLifeCommand( pInfo->mIndex, 0, 0 ); } break; } } return true; } else { /// emotion command if( HERO->GetState() == eOBJECT_STATE_IDLE ) { /// network msg cSkillWindow* win = (cSkillWindow*)UIMAN->FindNodeByID( eUIID_GAME_SKILLWINDOW ); if( win ) win->RequestCommuSkill( pInfo->mIndex ); } return true; } } } /// äÆÃ¸í·É¾î °Ë»ç /// ±Ó¸» Ű¿öµå /W, /w, /¤¸ if( !keyToken.CompareNoCase( UIMAN->GetUIText(10002) ) || !keyToken.CompareNoCase( UIMAN->GetUIText(10004) ) ) { if( tailToken.GetLength() == 0 ) { /// ¸í·É¾î¸¸ ÀÔ·ÂÇßÀ»½Ã ÀÚµ¿ ¼±Åà »çÇ× ¹Ù²ñ cChatWindow* chatWin = (cChatWindow*)UIMAN->FindNodeByID( eUIID_GAME_CHATWINDOW ); if( chatWin ) chatWin->UpdateChatType( eCHAT_WHISPER ); } else { /// ¾ÆÀ̵ð ÆÄ½Ì cTokenizerT token( tailToken.Cstr(), tailToken.GetLength(), _T(" ") ); cStringT IDToken, msgToken; token.GetNext( &IDToken ); if( token.GetTail() ) msgToken = token.GetTail(); if( msgToken.GetLength() == 0 ) { cStringT Message; Message.Format( GAMERESOURCEMAN->GetGameText( 28 ) ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, (LPCTSTR)Message.Cstr() ); } else { /// send SendWhisperMsg( IDToken.Cstr(), msgToken.Cstr() ); /// ±Ó¼Ó¸» À¯Àú ¾ÆÀ̵ð µî·Ï Å×½ºÆ® cChatWindow* chatWin = (cChatWindow*)UIMAN->FindNodeByID( eUIID_GAME_CHATWINDOW ); if( chatWin ) chatWin->AddWhisperUser( IDToken ); } } } /// ÆÄƼ Ű¿öµå /P, /p, /¤Ä else if(!keyToken.CompareNoCase( UIMAN->GetUIText(10011) ) || !keyToken.CompareNoCase( UIMAN->GetUIText(10012) ) ) { if( HERO->GetPartyIndex() > 0 || HERO->GetPartyUnionIndex() > 0 ) { if( tailToken.GetLength() == 0 ) { /// ¸í·É¾î¸¸ ÀÔ·ÂÇßÀ»½Ã ÀÚµ¿ ¼±Åà »çÇ× ¹Ù²ñ cChatWindow* chatWin = (cChatWindow*)UIMAN->FindNodeByID( eUIID_GAME_CHATWINDOW ); if( chatWin ) chatWin->UpdateChatType( eCHAT_PARTY ); } else { SendPartyMsg( (LPCTSTR)tailToken.Cstr() ); } } } /// ¿ÜÄ¡±â Ű¿öµå /Y, /y, /¤Ë else if( !keyToken.CompareNoCase( UIMAN->GetUIText(10021) ) || !keyToken.CompareNoCase( UIMAN->GetUIText(10022) ) ) { if( tailToken.GetLength() == 0 ) { /// ¸í·É¾î¸¸ ÀÔ·ÂÇßÀ»½Ã ÀÚµ¿ ¼±Åà »çÇ× ¹Ù²ñ cChatWindow* chatWin = (cChatWindow*)UIMAN->FindNodeByID( eUIID_GAME_CHATWINDOW ); if( chatWin ) chatWin->UpdateChatType( eCHAT_SHOUT ); } else { SendShoutMsg( (LPCTSTR)tailToken.Cstr() ); } } /// ±æµå Ű¿öµå /G, /g, /¤¾ else if( !keyToken.CompareNoCase( UIMAN->GetUIText(10031) ) || !keyToken.CompareNoCase( UIMAN->GetUIText(10032) ) ) { if( HERO->GetGuildIndex() > 0 ) { if( tailToken.GetLength() == 0 ) { /// ¸í·É¾î¸¸ ÀÔ·ÂÇßÀ»½Ã ÀÚµ¿ ¼±Åà »çÇ× ¹Ù²ñ cChatWindow* chatWin = (cChatWindow*)UIMAN->FindNodeByID( eUIID_GAME_CHATWINDOW ); if( chatWin ) chatWin->UpdateChatType( eCHAT_GUILD ); } else { SendGuildMsg( (LPCTSTR)tailToken.Cstr() ); } } } /// ÀÏ¹Ý Å°¿öµå /N, /n, /¤Ì else if( !keyToken.CompareNoCase( UIMAN->GetUIText(10006) ) || !keyToken.CompareNoCase( UIMAN->GetUIText(10007) ) ) { /// ÀÏ¹Ý ¸Þ½ÃÁö Ãâ·Â assert( HERO ); if( tailToken.GetLength() == 0 ) { /// ¸í·É¾î¸¸ ÀÔ·ÂÇßÀ»½Ã ÀÚµ¿ ¼±Åà »çÇ× ¹Ù²ñ cChatWindow* chatWin = (cChatWindow*)UIMAN->FindNodeByID( eUIID_GAME_CHATWINDOW ); if( chatWin ) chatWin->UpdateChatType( eCHAT_NORMAL ); } else { SendNormalMsg( (LPCTSTR)tailToken.Cstr() ); } } /// °Å·¡ Ű¿öµå /T, /t, /¤µ else if( !keyToken.CompareNoCase( UIMAN->GetUIText(10008) ) || !keyToken.CompareNoCase( UIMAN->GetUIText(10009) ) ) { if( tailToken.GetLength() == 0 ) { /// ¸í·É¾î¸¸ ÀÔ·ÂÇßÀ»½Ã ÀÚµ¿ ¼±Åà »çÇ× ¹Ù²ñ cChatWindow* chatWin = (cChatWindow*)UIMAN->FindNodeByID( eUIID_GAME_CHATWINDOW ); if( chatWin ) chatWin->UpdateChatType( eCHAT_TRADE ); } else { SendTradeMsg( (LPCTSTR)tailToken.Cstr() ); } } /// "/Æ÷±â" else if( !keyToken.CompareNoCase( UIMAN->GetUIText(10131) ) ) { HERO->DuelGiveUp(); } /// "/Ç¥Á¤" else if( !keyToken.CompareNoCase( UIMAN->GetUIText(10141) ) ) { /// if( tailToken.GetLength() <= 0 ) { /// À߸øµÈ ¸í·É¾î HERO->SetStaticFaceReq( 0 ); } else { /// º¸Åë check cTokenizerT token( tailToken.Cstr(), tailToken.GetLength(), _T(" ") ); cStringT keyToken, endToken; token.GetNext( &keyToken ); if( token.GetTail() ) endToken = token.GetTail(); /// id µÚ¿¡ ¾µµ¥ ¾ø´Â ±¸¹®ÀÌ ºÙÁö ¾Êµµ·Ï ÇÑ´Ù. if( endToken.GetLength() <= 0 ) { /// if( !keyToken.CompareNoCase( UIMAN->GetUIText(10142) ) ) { /// static face = 0 HERO->SetStaticFaceReq( 0 ); } else { unsigned long faceIdx = FILTERMAN->GetEmontionIndex( keyToken.Cstr() ); if( faceIdx != 0 ) HERO->SetStaticFaceReq( faceIdx ); } } else { /// À߸øµÈ ¸í·É¾î CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 57 ) ); } } } /// "/±æµå" else if( !keyToken.CompareNoCase( UIMAN->GetUIText(10171) ) || !keyToken.CompareNoCase( UIMAN->GetUIText(10172) ) ) { if( tailToken.GetLength() == 0 ) { GUILDMAN->GuildAdd( _T("") ); } else { /// º¸Åë check cTokenizerT token( tailToken.Cstr(), tailToken.GetLength(), _T(" ") ); cStringT IDToken, endToken; token.GetNext( &IDToken ); if( token.GetTail() ) endToken = token.GetTail(); /// id µÚ¿¡ ¾µµ¥ ¾ø´Â ±¸¹®ÀÌ ºÙÁö ¾Êµµ·Ï ÇÑ´Ù. if( endToken.GetLength() <= 0 ) { if( IDToken.GetLength() > 0 ) { GUILDMAN->GuildAdd( (LPCTSTR)IDToken.Cstr() ); } else { GUILDMAN->GuildAdd( _T("") ); } } else { /// À߸øµÈ ¸í·É¾î CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 121 ) ); } } } /// "/ÀüÀå½Å°í" else if( !keyToken.CompareNoCase( UIMAN->GetUIText(10190) ) ) { if( tailToken.GetLength() == 0 ) { PVPMAN->RequestReport( _T("") ); } else { cTokenizerT token( tailToken.Cstr(), tailToken.GetLength(), _T(" ") ); cStringT IDToken, endToken; token.GetNext( &IDToken ); if( token.GetTail() ) endToken = token.GetTail(); /// id µÚ¿¡ ¾µµ¥ ¾ø´Â ±¸¹®ÀÌ ºÙÁö ¾Êµµ·Ï ÇÑ´Ù. if( endToken.GetLength() <= 0 ) { if( IDToken.GetLength() > 0 ) { PVPMAN->RequestReport( (LPCTSTR)IDToken.Cstr() ); } else { PVPMAN->RequestReport( _T("") ); } } else { /// À߸øµÈ ¸í·É¾î CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 871 ) ); } } } /// "/»ìÆìº¸±â" else if( !keyToken.CompareNoCase( UIMAN->GetUIText(10195) ) ) { if( tailToken.GetLength() == 0 ) { HERO->RequestLookPlayer( 0 ); } else { /// À߸øµÈ ¸í·É¾î CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 880 ) ); } } else { return false; } return true; } bool cChatCommands::MessageParserByType( unsigned char type, LPCTSTR message ) { unsigned int msgLen = ::_tcslen(message); /// ÀÏ¹Ý if( type == eCHAT_NORMAL ) { /// ÀÏ¹Ý ¸Þ½ÃÁö Ãâ·Â assert( HERO ); #ifdef _GMTOOL SendGMNormalMsg( message ); #else SendNormalMsg( message ); #endif } /// ÆÄƼ else if( type == eCHAT_PARTY ) { if( HERO->GetPartyIndex() > 0 || HERO->GetPartyUnionIndex() > 0 ) { SendPartyMsg( message ); } else { /// ÆÄƼ ¾øÀ½ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 114 ) ); } } /// ±æµå else if( type == eCHAT_GUILD ) { if( HERO->GetGuildIndex() > 0 ) SendGuildMsg( message ); else { /// ±æµå ¾øÀ½ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 1205 ) ); } } /// ¿ÜÄ¡±â else if( type == eCHAT_SHOUT ) { SendShoutMsg( message ); } /// °Å·¡ else if( type == eCHAT_TRADE ) { SendTradeMsg( message ); } /// ±Ó¸» else if( type == eCHAT_WHISPER ) { cChatWindow* chatWin = (cChatWindow*)UIMAN->FindNodeByID( eUIID_GAME_CHATWINDOW ); if( !chatWin ) return false; cStringT Message; if( chatWin->IsLinked() == false ) { if( msgLen == 0 ) { Message.Format( GAMERESOURCEMAN->GetGameText( 28 ) ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, (LPCTSTR)Message.Cstr() ); return false; } } LPCTSTR toName = chatWin->GetWhisperName(); unsigned int toLen = ::_tcslen(toName); if( toLen == 0 ) { Message.Format( GAMERESOURCEMAN->GetGameText( 30 ) ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, (LPCTSTR)Message.Cstr() ); } else { SendWhisperMsg( toName, message ); chatWin->AddWhisperUser( toName ); } } /// ¸Þ°¡Æù else if( type == eCHAT_MEGAPHONE ) { if( SendMegaphoneMsg( message ) == false ) return false; } else { return false; } return true; } bool cChatCommands::CheckChatMsg( LPCTSTR chatmsg, unsigned int len ) { if( len <= 0 ) return false; /// ³»¿ë¿¡ " "¸¦ Á¦¿ÜÇÑ ¹®ÀÚ°¡ ÀԷµǾú´ÂÁö °Ë»çÈÄ send bool search = false; LPCTSTR str = chatmsg; for( unsigned int i = 0;i < len; ++i ) { if( *str != 32 ) { search = true; break; } else str++; } return search; } /// void cChatCommands::SendNormalMsg( LPCTSTR chatmsg ) { cChatWindow* chatWin = (cChatWindow*)UIMAN->FindNodeByID( eUIID_GAME_CHATWINDOW ); if( !chatWin ) { assert(0); return; } /// ¸µÅ©³»¿ëµµ ¾ø°í ¸Þ¼¼Áöµµ ¾øÀ¸¸é º¸³»Áö ¾Ê´Â´Ù. int len = ::_tcslen( chatmsg ); if( len == 0 && chatWin->IsLinked() == false ) return; // ¸µÅ©¾ÆÀÌÅÛ ¾øÀ»¶§¸¸ °ø¹é¹®ÀÚ¿­ °Ë»ç if( chatWin->IsLinked() == false ) { if( CheckChatMsg( chatmsg, len ) == false ) return; } /// filtering if( FILTERMAN->CheckWholeMatch( chatmsg ) == true ) { /// ¿¡·¯¸Þ½ÃÁö Ãâ·Â cStringT errorMsg; errorMsg.Format( GAMERESOURCEMAN->GetGameText( 80 ) ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, (LPCTSTR)errorMsg.Cstr() ); return; } /// filtering if( FILTERMAN->CheckPartMatch( chatmsg ) == true ) { /// ¿¡·¯¸Þ½ÃÁö Ãâ·Â cStringT errorMsg; errorMsg.Format( GAMERESOURCEMAN->GetGameText( 80 ) ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, (LPCTSTR)errorMsg.Cstr() ); return; } MSG_REQ_CHAT msg; ::memset( &msg, 0, sizeof( msg ) ); msg.Category = NM_CHAT; msg.Protocol = NM_CHAT_NORMAL_REQ; msg.emotionIdx = FILTERMAN->GetEmontionIndex( chatmsg ); msg.InventoryNumber = chatWin->GetLinkSlotIndex(); msg.itemIndex = chatWin->GetLinkItemIndex(); Sstrncpy( msg.Message, MAX_CHAT_BUFFER_SIZE, chatmsg, len ); NETWORK->SendNetworkMsg( (char*)&msg, (u_short)msg.GetMsgLength() ); } /// void cChatCommands::SendWhisperMsg( LPCTSTR toname, LPCTSTR chatmsg ) { assert( HERO ); cChatWindow* chatWin = (cChatWindow*)UIMAN->FindNodeByID( eUIID_GAME_CHATWINDOW ); if( !chatWin ) { assert(0); return; } /// ¸µÅ©³»¿ëµµ ¾ø°í ¸Þ¼¼Áöµµ ¾øÀ¸¸é º¸³»Áö ¾Ê´Â´Ù. int len = ::_tcslen( chatmsg ); if( len == 0 && chatWin->IsLinked() == false ) return; // ¸µÅ©¾ÆÀÌÅÛ ¾øÀ»¶§¸¸ °ø¹é¹®ÀÚ¿­ °Ë»ç if( chatWin->IsLinked() == false ) { if( CheckChatMsg( chatmsg, len ) == false ) return; } /// filtering if( FILTERMAN->CheckWholeMatch( chatmsg ) == true ) { /// ¿¡·¯¸Þ½ÃÁö Ãâ·Â cStringT errorMsg; errorMsg.Format( GAMERESOURCEMAN->GetGameText( 80 ) ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, (LPCTSTR)errorMsg.Cstr() ); return; } /// filtering if( FILTERMAN->CheckPartMatch( chatmsg ) == true ) { /// ¿¡·¯¸Þ½ÃÁö Ãâ·Â cStringT errorMsg; errorMsg.Format( GAMERESOURCEMAN->GetGameText( 80 ) ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, (LPCTSTR)errorMsg.Cstr() ); return; } MSG_REQ_CHAT_WHISPER msg; ::memset( &msg, 0, sizeof( msg ) ); msg.Category = NM_CHAT; msg.Protocol = NM_CHAT_WHISPER_REQ; msg.InventoryNumber = chatWin->GetLinkSlotIndex(); msg.itemIndex = chatWin->GetLinkItemIndex(); Sstrncpy( msg.Name, MAX_NAME_BUFFER_SIZE, toname, MAX_NAME_SIZE ); Sstrncpy( msg.Message, MAX_CHAT_BUFFER_SIZE, chatmsg, len ); NETWORK->SendNetworkMsg( (char*)&msg, (u_short)msg.GetMsgLength() ); } /// void cChatCommands::SendShoutMsg( LPCTSTR chatmsg ) { assert( HERO ); int len = ::_tcslen( chatmsg ); if( len == 0 ) return; // ¾ÆÀÌÅÛÀÌ ¾øÀ»¶§¸¸ °Ë»ç if( CheckChatMsg( chatmsg, len ) == false ) return; /// filtering if( FILTERMAN->CheckWholeMatch( chatmsg ) == true ) { /// ¿¡·¯¸Þ½ÃÁö Ãâ·Â cStringT errorMsg; errorMsg.Format( GAMERESOURCEMAN->GetGameText( 80 ) ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, (LPCTSTR)errorMsg.Cstr() ); return; } /// filtering if( FILTERMAN->CheckPartMatch( chatmsg ) == true ) { /// ¿¡·¯¸Þ½ÃÁö Ãâ·Â cStringT errorMsg; errorMsg.Format( GAMERESOURCEMAN->GetGameText( 80 ) ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, (LPCTSTR)errorMsg.Cstr() ); return; } MSG_REQ_CHAT_SHOUT msg; ::memset( &msg, 0, sizeof( msg ) ); msg.Category = NM_CHAT; msg.Protocol = NM_CHAT_SHOUT_REQ; Sstrncpy( msg.Message, MAX_CHAT_BUFFER_SIZE, chatmsg, MAX_CHAT_SIZE ); NETWORK->SendNetworkMsg( (char*)&msg, (u_short)msg.GetMsgLength() ); } /// void cChatCommands::SendPartyMsg( LPCTSTR chatmsg ) { assert( HERO ); cChatWindow* chatWin = (cChatWindow*)UIMAN->FindNodeByID( eUIID_GAME_CHATWINDOW ); if( !chatWin ) { assert(0); return; } /// ¸µÅ©³»¿ëµµ ¾ø°í ¸Þ¼¼Áöµµ ¾øÀ¸¸é º¸³»Áö ¾Ê´Â´Ù. int len = ::_tcslen( chatmsg ); if( len == 0 && chatWin->IsLinked() == false ) return; // ¸µÅ©¾ÆÀÌÅÛ ¾øÀ»¶§¸¸ °ø¹é¹®ÀÚ¿­ °Ë»ç if( chatWin->IsLinked() == false ) { if( CheckChatMsg( chatmsg, len ) == false ) return; } /// filtering if( FILTERMAN->CheckWholeMatch( chatmsg ) == true ) { /// ¿¡·¯¸Þ½ÃÁö Ãâ·Â cStringT errorMsg; errorMsg.Format( GAMERESOURCEMAN->GetGameText( 80 ) ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, (LPCTSTR)errorMsg.Cstr() ); return; } /// filtering if( FILTERMAN->CheckPartMatch( chatmsg ) == true ) { /// ¿¡·¯¸Þ½ÃÁö Ãâ·Â cStringT errorMsg; errorMsg.Format( GAMERESOURCEMAN->GetGameText( 80 ) ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, (LPCTSTR)errorMsg.Cstr() ); return; } MSG_REQ_CHAT_PARTY msg; ::memset( &msg, 0, sizeof( msg ) ); msg.Category = NM_CHAT; msg.Protocol = NM_CHAT_PARTY_REQ; msg.InventoryNumber = chatWin->GetLinkSlotIndex(); msg.itemIndex = chatWin->GetLinkItemIndex(); Sstrncpy( msg.Message, MAX_CHAT_BUFFER_SIZE, chatmsg, MAX_CHAT_SIZE ); NETWORK->SendNetworkMsg( (char*)&msg, (u_short)msg.GetMsgLength() ); } /// void cChatCommands::SendTradeMsg( LPCTSTR chatmsg ) { assert( HERO ); cChatWindow* chatWin = (cChatWindow*)UIMAN->FindNodeByID( eUIID_GAME_CHATWINDOW ); if( !chatWin ) { assert(0); return; } // ÀüÀå¿¡¼­´Â °Å·¡ äÆÃ ºÒ°¡ if( PVPMAN->IsEnableBattle() == true ) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 862 ) ); return; } /// ¸µÅ©³»¿ëµµ ¾ø°í ¸Þ¼¼Áöµµ ¾øÀ¸¸é º¸³»Áö ¾Ê´Â´Ù. int len = ::_tcslen( chatmsg ); if( len == 0 && chatWin->IsLinked() == false ) return; // ¸µÅ©¾ÆÀÌÅÛ ¾øÀ»¶§¸¸ °ø¹é¹®ÀÚ¿­ °Ë»ç if( chatWin->IsLinked() == false ) { if( CheckChatMsg( chatmsg, len ) == false ) return; } /// filtering if( FILTERMAN->CheckWholeMatch( chatmsg ) == true ) { /// ¿¡·¯¸Þ½ÃÁö Ãâ·Â cStringT errorMsg; errorMsg.Format( GAMERESOURCEMAN->GetGameText( 80 ) ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, (LPCTSTR)errorMsg.Cstr() ); return; } /// filtering if( FILTERMAN->CheckPartMatch( chatmsg ) == true ) { /// ¿¡·¯¸Þ½ÃÁö Ãâ·Â cStringT errorMsg; errorMsg.Format( GAMERESOURCEMAN->GetGameText( 80 ) ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, (LPCTSTR)errorMsg.Cstr() ); return; } MSG_REQ_CHAT_TRADE msg; ::memset( &msg, 0, sizeof( msg ) ); msg.Category = NM_CHAT; msg.Protocol = NM_CHAT_TRADE_REQ; msg.InventoryNumber = chatWin->GetLinkSlotIndex(); msg.itemIndex = chatWin->GetLinkItemIndex(); Sstrncpy( msg.Message, MAX_CHAT_BUFFER_SIZE, chatmsg, MAX_CHAT_SIZE ); NETWORK->SendNetworkMsg( (char*)&msg, (u_short)msg.GetMsgLength() ); } void cChatCommands::SendGuildMsg( LPCTSTR chatmsg ) { assert( HERO ); // ÀüÀå¿¡¼­´Â ±æµå äÆÃ ºÒ°¡ if( PVPMAN->IsEnableBattle() == true ) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 861 ) ); return; } cChatWindow* chatWin = (cChatWindow*)UIMAN->FindNodeByID( eUIID_GAME_CHATWINDOW ); if( !chatWin ) { assert(0); return; } /// ¸µÅ©³»¿ëµµ ¾ø°í ¸Þ¼¼Áöµµ ¾øÀ¸¸é º¸³»Áö ¾Ê´Â´Ù. int len = ::_tcslen( chatmsg ); if( len == 0 && chatWin->IsLinked() == false ) return; // ¸µÅ©¾ÆÀÌÅÛ ¾øÀ»¶§¸¸ °ø¹é¹®ÀÚ¿­ °Ë»ç if( chatWin->IsLinked() == false ) { if( CheckChatMsg( chatmsg, len ) == false ) return; } /// filtering if( FILTERMAN->CheckWholeMatch( chatmsg ) == true ) { /// ¿¡·¯¸Þ½ÃÁö Ãâ·Â cStringT errorMsg; errorMsg.Format( GAMERESOURCEMAN->GetGameText( 80 ) ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, (LPCTSTR)errorMsg.Cstr() ); return; } /// filtering if( FILTERMAN->CheckPartMatch( chatmsg ) == true ) { /// ¿¡·¯¸Þ½ÃÁö Ãâ·Â cStringT errorMsg; errorMsg.Format( GAMERESOURCEMAN->GetGameText( 80 ) ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, (LPCTSTR)errorMsg.Cstr() ); return; } MSG_REQ_CHAT_GUILD msg; ::memset( &msg, 0, sizeof( msg ) ); msg.Category = NM_CHAT; msg.Protocol = NM_CHAT_GUILD_REQ; msg.InventoryNumber = chatWin->GetLinkSlotIndex(); msg.itemIndex = chatWin->GetLinkItemIndex(); Sstrncpy( msg.Message, MAX_CHAT_BUFFER_SIZE, chatmsg, MAX_CHAT_SIZE ); NETWORK->SendNetworkMsg( (char*)&msg, (u_short)msg.GetMsgLength() ); } void cChatCommands::SendGMNormalMsg( LPCTSTR chatmsg ) { cChatWindow* chatWin = (cChatWindow*)UIMAN->FindNodeByID( eUIID_GAME_CHATWINDOW ); if( !chatWin ) { assert(0); return; } /// ¸µÅ©³»¿ëµµ ¾ø°í ¸Þ¼¼Áöµµ ¾øÀ¸¸é º¸³»Áö ¾Ê´Â´Ù. int len = ::_tcslen( chatmsg ); if( len == 0 && chatWin->IsLinked() == false ) return; // ¸µÅ©¾ÆÀÌÅÛ ¾øÀ»¶§¸¸ °ø¹é¹®ÀÚ¿­ °Ë»ç if( chatWin->IsLinked() == false ) { if( CheckChatMsg( chatmsg, len ) == false ) return; } /// filtering if( FILTERMAN->CheckWholeMatch( chatmsg ) == true ) { /// ¿¡·¯¸Þ½ÃÁö Ãâ·Â cStringT errorMsg; errorMsg.Format( GAMERESOURCEMAN->GetGameText( 80 ) ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, (LPCTSTR)errorMsg.Cstr() ); return; } /// filtering if( FILTERMAN->CheckPartMatch( chatmsg ) == true ) { /// ¿¡·¯¸Þ½ÃÁö Ãâ·Â cStringT errorMsg; errorMsg.Format( GAMERESOURCEMAN->GetGameText( 80 ) ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, (LPCTSTR)errorMsg.Cstr() ); return; } MSG_REQ_CHAT msg; ::memset( &msg, 0, sizeof( msg ) ); msg.Category = NM_CHAT; msg.Protocol = NM_CHAT_GM_NORMAL_REQ; msg.emotionIdx = FILTERMAN->GetEmontionIndex( chatmsg ); msg.InventoryNumber = chatWin->GetLinkSlotIndex(); msg.itemIndex = chatWin->GetLinkItemIndex(); Sstrncpy( msg.Message, MAX_CHAT_BUFFER_SIZE, chatmsg, MAX_CHAT_SIZE ); NETWORK->SendNetworkMsg( (char*)&msg, (u_short)msg.GetMsgLength() ); } bool cChatCommands::SendMegaphoneMsg( LPCTSTR chatmsg ) { assert( HERO ); cMegaphoneWindow* win = (cMegaphoneWindow*)UIMAN->FindNodeByID( eUIID_MEGAPHONE_WINDOW ); if( !win ) { assert(0); return false; } int len = ::_tcslen( chatmsg ); if( len == 0 && win->IsLinked() == false ) return false; // if( win->IsLinked() == false ) { if( CheckChatMsg( chatmsg, len ) == false ) return false; } /// filtering if( FILTERMAN->CheckWholeMatch( chatmsg ) == true ) { /// ¿¡·¯¸Þ½ÃÁö Ãâ·Â UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 12001 ), GAMERESOURCEMAN->GetGameText( 301 ) ); return false; } /// filtering if( FILTERMAN->CheckPartMatch( chatmsg ) == true ) { /// ¿¡·¯¸Þ½ÃÁö Ãâ·Â UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 12001 ), GAMERESOURCEMAN->GetGameText( 301 ) ); return false; } MSG_REQ_CHAT_MEGAPHONE msg; ::memset( &msg, 0, sizeof( msg ) ); msg.Category = NM_CHAT; msg.Protocol = NM_CHAT_MEGAPHONE_REQ; msg.InventoryIdx = win->GetInventoryIndex(); msg.ItemIndex = win->GetLinkItemIndex(); msg.InventoryNumber = win->GetLinkSlotIndex(); msg.EmotionIdx = 0; Sstrncpy( msg.Message, MAX_CHAT_BUFFER_SIZE, chatmsg, MAX_CHAT_SIZE ); NETWORK->SendNetworkMsg( (char*)&msg, (u_short)msg.GetMsgLength() ); return true; }