/* ========================================================================== * ÆÄ ÀÏ : ChatManager.h * ¸ñ Àû : äÆÃ ¸Å´ÏÁ® * ÀÛ ¼º ÀÚ : ±è°¡¶÷ * ÀÛ ¼º ÀÏ : 2006-11-20 * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once class cChatCommands; class cUIWindow; class cUINode; struct sInventory; enum ePLAYER_JOB; enum eChatMsgKind { eCHAT_NORMAL, eCHAT_PARTY, eCHAT_PARTYUNION, eCHAT_GUILD, eCHAT_SHOUT, eCHAT_TRADE, eCHAT_WHISPER, eCHAT_SYSTEM, eCHAT_NOTICE, // GMÅø °øÁö ¹× ¾ÆÀÌÅÛ °­È­ eCHAT_GM, // GM ÀÇ ÀÏ¹Ý Ã¤ÆÃ eCHAT_MEGAPHONE, eCHAT_GUILD_NOTICE, eCHAT_MAX, }; enum eSystemMsgKind { eSYSTEM_NORMAL, /// ÀϹÝÀûÀÎ ½Ã½ºÅÛ ¸Þ½ÃÁö(·¹º§¾÷, °æÇèÄ¡ ȹµæ, ½ºÅ³ »ç¿ë µî) eSYSTEM_GETMONEY, /// µ· ȹµæ eSYSTEM_GETITEM, /// ÀÏ¹Ý ¾ÆÀÌÅÛ È¹µæ(´Ü ¾ÆÀÌÅÛÀ̸§ »ö»óÀº ·¹¾îµµ »ö»ó°ª »ç¿ë) eSYSTEM_QUEST, /// Äù½ºÆ® °ü·Ã ¸Þ½ÃÁö(Äù½ºÆ® ½ÃÀÛ Á¾·á, Äù½ºÆ® ¾ÆÀÌÅÛ È¹µæ) eSYSTEM_DOITEM, /// Á¶ÇÕ, ºÐÇØ, ÀÎæƮ, Ä«µå ÀåÂø½Ã ¾Ë¸² ¸Þ½ÃÁö eSYSTEM_CASH, /// ij½¬ ¾ÆÀÌÅÛ »ç¿ë ¹× ±â°£ ¸¸·á ½Ã ¾Ë¸² ¸Þ½ÃÁö eSYSTEM_NPCSTORE, /// NPC »óÁ¡ ÆÇ¸Å/±¸ÀԽà eSYSTEM_PVP, /// PVP ¾Ë¸² eSYSTEM_GM, /// GM ¿¡°Ô ƯÁ¤ Á¶Ä¡¸¦ ´çÇßÀ» ¶§ ¾Ë¸² ¸Þ½ÃÁö }; struct POST_OPEN_RESULT; struct sFriendData; class cChatManager { static cChatManager* mInstance; public: /// ´ÜÀÏ °´Ã¼¸¦ ¸®ÅÏ static cChatManager* Get(); public: cChatManager(); ~cChatManager(); /// ÃʱâÈ­ bool Init(); void Close(); void ClearChat(); /// ¸Þ½ÃÁö ÆÄ¼­ void NetworkMsgParser( char* pMsg, u_long length); /// Æ÷Ä¿½º¸¦ °¡Áö´Â ¿¡µðÆ® Ãß°¡ ( Æ÷Ä¿½º°ü¸® ) void AddFocusNode( cUINode* n ); /// ½Ã½ºÅÛ ¸Þ¼¼Áö Ãâ·Â void AddSystemMsg( eSystemMsgKind kind, LPCTSTR chatmsg, bool onlychatmain = false ); /// ¾ÆÀÌÅÛ È¹µæ ¸Þ¼¼Áö Ãâ·Â void AddItemMsg( unsigned long itemIndex, unsigned short slotIndex, LPCTSTR msg1, LPCTSTR msg2, bool IsQuest = false ); void AddItemMsg( sInventory inventory, LPCTSTR name, LPCTSTR msg, ePLAYER_JOB job, eChatMsgKind msgkind, void* exdata = NULL ); /// äÆÃ ¸Þ½ÃÁö º¸³»±â ( äÆÃâ -> ¼­¹ö ) bool SendChatMsg( eChatMsgKind type, LPCTSTR msg ); /// °¢ À©µµ¿ì ÀúÀå void SetChatWindow( cUIWindow* w ); void SetMtoMChatWindow( cUIWindow* w ); /// äÆÃâ Æ÷Ä¿½º ¹Ù²Ù±â ( shift + tab : äÆÃâ <-> 1:1´ëȭâ ) void ChangeFocus(); /// °¨Á¤Ç¥Çö °ü·Ãµ¥ÀÌÅÍ »ðÀÔ bool AddCommunityData( LPCTSTR key, unsigned long index ); /// ¸Þ¼¼Áö Ãâ·Â void AddChatMsg( LPCTSTR chatmsg, eChatMsgKind msgkind, bool checkPress = true, bool onlychatmain = false ); /// ¸Þ¼¼Áö Ãâ·Â void AddChatMsgEx( LPCTSTR chatmsg, unsigned long color, unsigned long infoIndex, bool paste, bool onlychatmain, bool checkPress = false, eChatMsgKind msgkind = eCHAT_MAX ); /// °øÁö³»¿ë º¸³»±â void AddNoticeMsg( LPCTSTR msg, unsigned long color ); void AddPvPNoticeMsg( LPCTSTR msg, unsigned long color ); void AddDiceMsg(); // void SendPostOpen(); POST_OPEN_RESULT* GetMailData( long idx ); // »õ ¸ÞÀÏ Ã¼Å© void CheckNewMail(); // unsigned long GetTextColor( eChatMsgKind kind ); unsigned long GetInfoTextIndex( eChatMsgKind kind ); // sFriendData* GetFriendData( unsigned long characterIdx ); protected: void ClearMail(); // void ClearFriend(); private: /// äÆÃâ ( ±âº» + ºÐ¸®Ã¢ 3°³ ) typedef tPointerList cChatWindowList; cChatWindowList mChatWindowList; /// °¢Ã¢ Æ÷Ä¿½º°ü¸® ( äÆÃâ, ÀÏ´ëÀÏ´ëȭ⸸ µî·Ï ) typedef tPointerArray cFocusArr; cFocusArr mFocusArr; /// ¿ìÆí Á¤º¸ typedef tPointerHashMap cMailDataMap; cMailDataMap mMailDataMap; /// Ä£±¸ Á¤º¸ (sFriendData*) typedef tPointerHashMap cFriendDataMap; cFriendDataMap mFriendDataMap; /// cChatCommands* mpCommands; }; inline sFriendData* cChatManager::GetFriendData( unsigned long characterIdx ) { return (sFriendData*)mFriendDataMap.GetAt( characterIdx ); } inline cChatManager* cChatManager::Get() { return mInstance; } #define CHATMANAGER cChatManager::Get()