#pragma once #include #include #include #include #pragma pack(push,1) //------------------------------------------------------------------------------------------------------- // * Prefix // C : Client // G : Game Server // M : Master Server // D : DBP Server // W : World Server // // * Postfix // SYN - Server¿¡ ¿äû // ACK - ¿äû¿¡ ´ëÇÑ Çã¶ô // NAK - ¿äû¿¡ ´ëÇÑ °ÅºÎ // CMD - ServerÀÇ ¸í·É // BRD - Server°¡ µ¿±âÈ­ °ü·Ã ³»¿ëÀ» ¾Ë¸² // // * ÇÁ·ÎÅäÄÝ Naming Rule // Prefix_Ä«Å×°í¸®¸í_ÇÁ·ÎÅäÄݸí_Postfix // ex) CW_CONNECTION_REGISTER_SYN // //------------------------------------------------------------------------------------------------------- #define PACKET_CW_OPEN( c, p ) struct MSG_##p : public MSG_BASE_FORWARD { MSG_##p(){ m_byCategory = c; m_byProtocol = p; } #define PACKET_CW_CLOSE }; #define PACKET_CW_FWD_OPEN( c, p ) struct MSG_##p : public MSG_BASE_FORWARD { MSG_##p(){ m_byCategory = c; m_byProtocol = p; } #define PACKET_CW_FWD_CLOSE }; #define PACKET_CW_INHERIT_OPEN(c, p, b) \ struct MSG_##p : public b { \ MSG_##p() { \ m_byCategory = c; \ m_byProtocol = p; \ } #define PACKET_CW_INHERIT_CLOSE \ } //------------------------------------------------------------------------------------------------- // CW_CONNECTION Ä«Å×°í¸® //------------------------------------------------------------------------------------------------- struct MSG_CW_HEARTBEAT : public MSG_BASE { MSG_CW_HEARTBEAT() { m_byCategory = CW_CONNECTION; m_byProtocol = CW_HEARTBEAT; } int GetSize() { return sizeof(MSG_CW_HEARTBEAT); } }; struct MSG_CW_ENTER_SERVER_SYN : public MSG_BASE { DWORD dwAuthUserID; }; // Á¢¼ÓÇÏ¸é °¡Àå ¸ÕÀú ÁÖ´Â ÆÐŶ PACKET_CW_OPEN( CW_CONNECTION, CW_ENTER_READY_BRD ) PACKET_CW_CLOSE PACKET_CW_OPEN( CW_WEBPACK, CW_TEST_WEB ) //xiaomi Ìí¼Óweb ͬ²½ PACKET_CW_CLOSE //------------------------------------------------------------------------------------------------- // CW_CHAT Ä«Å×°í¸® //------------------------------------------------------------------------------------------------- // ±Ó¼Ó¸» ¿äû PACKET_CW_OPEN(CW_CHAT, CW_WHISPER_SYN) char szCharNameTo[MAX_CHARNAME_LENGTH + 1]; BYTE byMsgLen; // _tcslen(szWhisperMsg) char szWhisperMsg[MAX_CHAT_LEN + 1]; uint16_t GetSize() const { const size_t kMinSize = sizeof(*this) - sizeof(szWhisperMsg) + sizeof(szWhisperMsg[0]); return static_cast(kMinSize + sizeof(szWhisperMsg[0]) * byMsgLen); }; PACKET_CW_CLOSE; // ±Ó¼Ó¸» ¼º°ø PACKET_CW_OPEN(CW_CHAT, CW_WHISPER_ACK) BYTE byMsgLen; // _tcslen(szWhisperMsg) char szCharNameFrom[MAX_CHARNAME_LENGTH + 1]; char szWhisperMsg[MAX_CHAT_LEN + 1]; uint16_t GetSize() const { const size_t kMinSize = sizeof(*this) - sizeof(szWhisperMsg) + sizeof(szWhisperMsg[0]); return static_cast(kMinSize + sizeof(szWhisperMsg[0]) * byMsgLen); }; PACKET_CW_CLOSE; // ±Ó¼Ó¸» ½ÇÆÐ PACKET_CW_OPEN( CW_CHAT, CW_WHISPER_NAK ) enum { USER_NOT_FOUND, USER_WHISPER_OFF, }; BYTE byReason; int GetSize() { return sizeof(MSG_CW_WHISPER_NAK); } PACKET_CW_CLOSE // °øÁö ¿äû PACKET_CW_OPEN( CW_CHAT, CW_NOTICE_SYN ) BYTE byLen; char szMsg[MAX_NOTICE_LEN+1]; int GetSize() { return ( sizeof(MSG_CW_NOTICE_SYN) - ( sizeof(char) * ( MAX_NOTICE_LEN - byLen ) ) ); } PACKET_CW_CLOSE // °øÁö ºê·Îµåij½ºÆ® PACKET_CW_OPEN( CW_CHAT, CW_NOTICE_BRD ) BYTE m_byRed; BYTE m_byGreen; BYTE m_byBlue; WORD wLen; char szMsg[MAX_NOTICE_LEN+1]; // CHANGES: f101210.2L, fixed invalid calculation, this message need consider null-terminated uint16_t GetSize() const { const size_t kMinSize = sizeof(*this) - sizeof(szMsg); return static_cast(kMinSize + wLen * sizeof(szMsg[0])); }; PACKET_CW_CLOSE // ±Ó¼Ó¸» Â÷´Ü ¿äû struct MSG_CW_WHISPER_SET_SYN : public MSG_BASE { MSG_CW_WHISPER_SET_SYN() { m_byCategory = CW_CHAT; m_byProtocol = CW_WHISPER_SET_SYN; } BOOL bWhisper; // TRUE¸é ÄÔ, FALSE¸é ²û int GetSize() { return sizeof(MSG_CW_WHISPER_SET_SYN); } }; // ±Ó¼Ó¸» Â÷´Ü üũ °á°ú PACKET_CW_OPEN( CW_CHAT, CW_WHISPER_SET_ACK ) BOOL bWhisper; // »ç¿ëÀÚ°¡ º¸³½ °ªÀ» ±×´ë·Î µ¹·ÁÁØ´Ù int GetSize() { return sizeof(MSG_CW_WHISPER_SET_ACK); } PACKET_CW_CLOSE // ±Ó¼Ó¸» ½ÇÆÐ PACKET_CW_OPEN( CW_CHAT, CW_WHISPER_SET_NAK ) int GetSize() { return sizeof(MSG_CW_WHISPER_SET_NAK); } PACKET_CW_CLOSE // ÀÏ¹Ý Ã¤ÆÃ ¿äû PACKET_CW_FWD_OPEN(CW_CHAT, CW_CHAT_NORMAL_SYN) enum { _MAX_CHATMSG_SIZE = 255 }; BYTE m_byMsgLength; // _tcslen(m_pszChatMsg) char m_pszChatMsg[_MAX_CHATMSG_SIZE + 1]; uint16_t GetSize() const { const size_t kMinSize = sizeof(*this) - sizeof(m_pszChatMsg) + sizeof(m_pszChatMsg[0]); return static_cast(kMinSize + sizeof(m_pszChatMsg[0]) * m_byMsgLength); }; PACKET_CW_FWD_CLOSE // ÀÏ¹Ý Ã¤ÆÃ ½ÇÆÐ PACKET_CW_OPEN( CW_CHAT, CW_CHAT_NORMAL_NAK ) // enum // { // _ERR_DEFAULT = 0, // _ERR_CHATBLOCKED, // äÆÃ±ÝÁö »óÅ // _ERR_NOTSYNC, // ½ÌÅ©°¡ ¾È ¸ÂÀº »óÅÂ(VIEWPORT_CHARSTATE ÀçÀü¼Û ¿äû // }; WORD m_wErrorCode; // RC::eCHAT_RESULT ÂüÁ¶ PACKET_CW_CLOSE // ÀÏ¹Ý Ã¤ÆÃ ºê·Îµåij½ºÆ® PACKET_CW_OPEN(CW_CHAT, CW_CHAT_NORMAL_BRD) enum { _MAX_CHATMSG_SIZE = MSG_CW_CHAT_NORMAL_SYN::_MAX_CHATMSG_SIZE }; char m_ptszCharName[ MAX_CHARNAME_LENGTH+1 ]; BYTE m_byMsgLength; char m_ptszChatMsg[ _MAX_CHATMSG_SIZE+1 ]; uint16_t GetSize() const { const size_t kMinSize = sizeof(*this) - sizeof(m_ptszChatMsg) + sizeof(m_ptszChatMsg[0]); return static_cast(kMinSize + sizeof(m_ptszChatMsg[0]) * m_byMsgLength); } PACKET_CW_CLOSE //¿ÜÄ¡±â ¿äû PACKET_CW_OPEN(CW_CHAT, CW_CHAT_SHOUT_SYN) enum { _MAX_CHATMSG_SIZE = MSG_CW_CHAT_NORMAL_SYN::_MAX_CHATMSG_SIZE }; enum { GENERAL_SHOUT = 1, WORLD_SHOUT, }; BYTE m_byMessageType; BYTE m_byMsgLength; // _tcslen(m_pszChatMsg) char m_pszChatMsg[_MAX_CHATMSG_SIZE + 1]; uint16_t GetSize() const { const size_t kMinSize = sizeof(*this) - sizeof(m_pszChatMsg) + sizeof(m_pszChatMsg[0]); return static_cast(kMinSize + sizeof(m_pszChatMsg[0]) * m_byMsgLength); }; PACKET_CW_CLOSE; // ¿ÜÄ¡±â ºê·Îµåij½ºÆ® PACKET_CW_OPEN(CW_CHAT, CW_CHAT_SHOUT_BRD) enum { _MAX_CHATMSG_SIZE = MSG_CW_CHAT_NORMAL_SYN::_MAX_CHATMSG_SIZE }; enum { GENERAL_SHOUT = 1, DECREE_SHOUT, SUPER_MASTER_SHOUT, }; BYTE m_byMessageType; char m_szCharName[MAX_CHARNAME_LENGTH + 1]; BYTE m_byMsgLength; //_tcslen(m_pszChatMsg) char m_pszChatMsg[_MAX_CHATMSG_SIZE + 1]; uint16_t GetSize() const { const size_t kMinSize = sizeof(*this) - sizeof(m_pszChatMsg) + sizeof(m_pszChatMsg[0]); return static_cast(kMinSize + sizeof(m_pszChatMsg[0]) * m_byMsgLength); }; PACKET_CW_CLOSE; // ¿ÜÄ¡±â ½ÇÆÐ PACKET_CW_OPEN( CW_CHAT, CW_CHAT_SHOUT_NAK ) // enum // { // _ERR_DEFAULT = 0, // _ERR_CHATBLOCKED, // äÆÃ±ÝÁö »óÅ // _ERR_ALREADYSHOUT, // ¿ÜÄ¡±â ½Ã°£ °£°Ý ÀÌÀü¿¡ ´Ù½Ã ½Ãµµ // }; WORD m_wErrorCode; // RC::eCHAT_RESULT ÂüÁ¶ PACKET_CW_CLOSE // ÆÄƼ äÆÃ ¿äû PACKET_CW_FWD_OPEN( CW_CHAT, CW_CHAT_PARTY_SYN ) enum { _MAX_CHATMSG_SIZE = MSG_CW_CHAT_NORMAL_SYN::_MAX_CHATMSG_SIZE }; BYTE m_byMsgLength; // _tcslen(m_ptszChatMsg) char m_ptszChatMsg[_MAX_CHATMSG_SIZE + 1]; uint16_t GetSize() const { const size_t kMinSize = sizeof(*this) - sizeof(m_ptszChatMsg) + sizeof(m_ptszChatMsg[0]); return static_cast(kMinSize + sizeof(m_ptszChatMsg[0]) * m_byMsgLength); }; PACKET_CW_FWD_CLOSE; // ÆÄƼ äÆÃ ºê·Îµåij½ºÆ® PACKET_CW_FWD_OPEN(CW_CHAT, CW_CHAT_PARTY_BRD) enum { _MAX_CHATMSG_SIZE = MSG_CW_CHAT_NORMAL_SYN::_MAX_CHATMSG_SIZE }; char m_ptszCharName[MAX_CHARNAME_LENGTH + 1]; BYTE m_byMsgLength; // _tcslen(m_ptszChatMsg) char m_ptszChatMsg[_MAX_CHATMSG_SIZE + 1]; uint16_t GetSize() const { const size_t kMinSize = sizeof(*this) - sizeof(m_ptszChatMsg) + sizeof(m_ptszChatMsg[0]); return static_cast(kMinSize + sizeof(m_ptszChatMsg[0]) * m_byMsgLength); }; }; // À½¼º äÆÃ ¿äû PACKET_CW_OPEN( CW_CHAT, CW_CHAT_VOICE_REQUEST_SYN ) char m_ptszCharName[MAX_CHARNAME_LENGTH+1]; // »ó´ë ij¸¯¸í char m_ptszAccountID[ID_MAX_LEN+1]; // º»ÀÎ °èÁ¤ ID PACKET_CW_CLOSE // À½¼º äÆÃ ¿äûµÆÀ½ PACKET_CW_OPEN( CW_CHAT, CW_CHAT_VOICE_REQUEST_BRD ) char m_ptszCharName[MAX_CHARNAME_LENGTH+1]; // »ó´ë ij¸¯¸í char m_ptszAccountID[ID_MAX_LEN+1]; // »ó´ë °èÁ¤ ID PACKET_CW_CLOSE // À½¼º äÆÃ ¿äû ¿À·ù PACKET_CW_OPEN( CW_CHAT, CW_CHAT_VOICE_REQUEST_NAK ) enum { _ERR_DEFAULT, // ¾Ë ¼ö ¾ø´Â ÀÌÀ¯ _ERR_BLOCKVOICE, // »ó´ë°¡ À½¼ºÃ¤ÆÃ ±ÝÁö »óÅ _ERR_NO_CHARNAME, // »ó´ë ij¸¯ÅͰ¡ ¾ø°Å³ª Á¢¼ÓÇÏÁö ¾Ê¾ÒÀ½ }; WORD wErrorCode; PACKET_CW_CLOSE // À½¼º äÆÃ ¼ö¶ô PACKET_CW_OPEN( CW_CHAT, CW_CHAT_VOICE_ACCEPT_SYN ) char m_ptszAccountID[ID_MAX_LEN+1]; // º»ÀÎ °èÁ¤ ID PACKET_CW_CLOSE // À½¼º äÆÃ ¼ö¶ôµÆÀ½ PACKET_CW_OPEN( CW_CHAT, CW_CHAT_VOICE_ACCEPT_BRD ) char m_ptszCharName[MAX_CHARNAME_LENGTH+1]; // »ó´ë ij¸¯¸í char m_ptszAccountID[ID_MAX_LEN+1]; // »ó´ë °èÁ¤ ID PACKET_CW_CLOSE // À½¼º äÆÃ ¼ö¶ô ¿À·ù PACKET_CW_OPEN( CW_CHAT, CW_CHAT_VOICE_ACCEPT_NAK ) enum { _ERR_DEFAULT, // ¾Ë ¼ö ¾ø´Â ÀÌÀ¯ _ERR_NO_CHARNAME, // »ó´ë ij¸¯ÅͰ¡ ¾ø°Å³ª Á¢¼ÓÇÏÁö ¾Ê¾ÒÀ½ }; WORD wErrorCode; PACKET_CW_CLOSE // À½¼º äÆÃ °ÅÀý PACKET_CW_OPEN( CW_CHAT, CW_CHAT_VOICE_REJECT_SYN ) enum { _REASON_DEFAULT, // °ÅÀý _REASON_VOICE_CHAT, // 1:1 À½¼ºÃ¤ÆÃÁß.. _REASON_PARTY_VOICE_CHAT, // ÆÄƼ À½¼ºÃ¤ÆÃÁß _REASON_NOT_USE, // À½¼ºÃ¤ÆÃ »ç¿ë ¾ÈÇÔ _REASON_NOT_ALLOW, // Çã¿ëµÈ »ó´ë°¡ ¾Æ´Ï´Ù _REASON_BUSY, // ¿äû/¼ö¶ô ´ë±âÁßÀ̶ó °ÅÀý }; WORD wReasonCode; PACKET_CW_CLOSE // À½¼º äÆÃ °ÅÀýµÆÀ½ PACKET_CW_OPEN( CW_CHAT, CW_CHAT_VOICE_REJECT_BRD ) char m_ptszCharName[MAX_CHARNAME_LENGTH+1]; enum { _REASON_DEFAULT, // °ÅÀý _REASON_VOICE_CHAT, // 1:1 À½¼ºÃ¤ÆÃÁß.. _REASON_PARTY_VOICE_CHAT, // ÆÄƼ À½¼ºÃ¤ÆÃÁß _REASON_NOT_USE, // À½¼ºÃ¤ÆÃ »ç¿ë ¾ÈÇÔ _REASON_NOT_ALLOW, // Çã¿ëµÈ »ó´ë°¡ ¾Æ´Ï´Ù _REASON_BUSY, // ¿äû/¼ö¶ô ´ë±âÁßÀ̶ó °ÅÀý }; WORD wReasonCode; PACKET_CW_CLOSE // À½¼º äÆÃ Á¾·á PACKET_CW_OPEN( CW_CHAT, CW_CHAT_VOICE_DISCONNECT_SYN ) char m_ptszCharName[MAX_CHARNAME_LENGTH+1]; // »ó´ë enum { _REASON_DEFAULT, // À½¼ºÃ¤ÆÃ Á¾·á _REASON_PARTY_VOICE_CHAT, // ÆÄƼ Âü°¡·Î ÀÎÇÑ Á¾·á _REASON_LOGOUT, // ·Î±×¾Æ¿ô }; WORD wReasonCode; PACKET_CW_CLOSE // À½¼º äÆÃ Á¾·áµÇ¾úÀ½ PACKET_CW_OPEN( CW_CHAT, CW_CHAT_VOICE_DISCONNECT_BRD ) char m_ptszCharName[MAX_CHARNAME_LENGTH+1]; // »ó´ë enum { _REASON_DEFAULT, // À½¼ºÃ¤ÆÃ Á¾·á _REASON_PARTY_VOICE_CHAT, // ÆÄƼ Âü°¡·Î ÀÎÇÑ Á¾·á _REASON_LOGOUT, // ·Î±×¾Æ¿ô }; WORD wReasonCode; PACKET_CW_CLOSE // À½¼º äÆÃ Á¾·á ½ÇÆÐ PACKET_CW_OPEN( CW_CHAT, CW_CHAT_VOICE_DISCONNECT_NAK ) enum { _ERR_DEFAULT, // ¾Ë ¼ö ¾ø´Â ÀÌÀ¯ _ERR_NOTCHAT, // À½¼º äÆÃ Áß ¾Æ´Ï¾úÀ½ _ERR_NO_CHARNAME, // »ó´ë ij¸¯ÅͰ¡ ¾ø°Å³ª Á¢¼ÓÇÏÁö ¾Ê¾ÒÀ½ }; char m_ptszCharName[MAX_CHARNAME_LENGTH+1]; // »ó´ë WORD wErrorCode; PACKET_CW_CLOSE // À½¼º äÆÃ ¸¶ÀÌÅ© ON/OFF => ÆÄƼ¿ø¿¡°Ô »óŸ¦ Àü´ÞÇØ¾ß ÇÕ´Ï´Ù. PACKET_CW_OPEN( CW_CHAT, CW_CHAT_VOICE_MIC_STATUS_SYN ) BOOL bOn; PACKET_CW_CLOSE // À½¼º äÆÃ ON/OFF ºê·Îµå PACKET_CW_OPEN( CW_CHAT, CW_CHAT_VOICE_MIC_STATUS_BRD ) char m_ptszCharName[MAX_CHARNAME_LENGTH+1]; // »ó´ë BOOL bOn; PACKET_CW_CLOSE // À½¼º äÆÃ ON/OFF ½ÇÆÐ PACKET_CW_OPEN( CW_CHAT, CW_CHAT_VOICE_MIC_STATUS_NAK ) enum { _ERR_DEFAULT, // ¾Ë ¼ö ¾ø´Â ÀÌÀ¯ }; char m_ptszCharName[MAX_CHARNAME_LENGTH+1]; // »ó´ë WORD wErrorCode; PACKET_CW_CLOSE // ÆÄƼ °¡ÀÔÇßÀ» ¶§ ±âÁ¸ ÆÄƼ¿øµé À½¼º äÆÃ Á¤º¸ ¿äû PACKET_CW_OPEN( CW_CHAT, CW_CHAT_PARTY_MIC_STATUS_REQ ) PACKET_CW_CLOSE // ÆÄƼ °¡ÀÔÇßÀ» ¶§ ±âÁ¸ ÆÄƼ¿øµé À½¼º äÆÃ Á¤º¸ Àü¼Û PACKET_CW_OPEN( CW_CHAT, CW_CHAT_PARTY_MIC_STATUS_ANS ) enum { _MAX_PARTYMEMBER_NUM = 9, }; // ÃÑ ÆÄƼ¿ø 10¸íÀ̹ǷΠÃÖ´ë ±âÁ¸ ÆÄƼ¿øÀº 9¸í BYTE m_byMemberNum; STRUCT_VOICE_STATUS m_sMemberStatus[_MAX_PARTYMEMBER_NUM]; int GetSize() { return ( sizeof(MSG_CW_CHAT_PARTY_MIC_STATUS_ANS) - ( sizeof(STRUCT_VOICE_STATUS) * ( _MAX_PARTYMEMBER_NUM - m_byMemberNum ) ) ); } PACKET_CW_CLOSE // ÆÄƼ °¡ÀÔÇßÀ» ¶§ ±âÁ¸ ÆÄƼ¿øµé À½¼º äÆÃ Á¤º¸ Àü¼Û ½ÇÆÐ // ÀÌ °æ¿ì ÆÄƼ°¡ ¾ø°Å³ª ÆÄƼ Á¤º¸¸¦ ¾ÆÁ÷ ¹ÞÁö ¸øÇÑ »óÅÂÀÓ PACKET_CW_OPEN( CW_CHAT, CW_CHAT_PARTY_MIC_STATUS_NAK ) PACKET_CW_CLOSE // ´Ù¸¥ ij¸¯ÅÍ À½¼º äÆÃ on/off »óÅ ȮÀÎ ¿äû(C->W) // CW_CHAT_PARTY_MIC_STATUS_NAK ¹Þ¾ÒÀ» ¶§ »ç¿ë PACKET_CW_OPEN( CW_CHAT, CW_CHAT_PLAYER_MIC_STATUS_REQ ) enum { _MAX_PLAYER_NUM = 9, }; BYTE m_byMemberNum; char m_ptszMemberStatus[_MAX_PLAYER_NUM][MAX_CHARNAME_LENGTH+1]; int GetSize() { return ( sizeof(MSG_CW_CHAT_PLAYER_MIC_STATUS_REQ) - ( (sizeof(char) * (MAX_CHARNAME_LENGTH+1)) * ( _MAX_PLAYER_NUM - m_byMemberNum ) ) ); } PACKET_CW_CLOSE // ´Ù¸¥ ij¸¯ÅÍ À½¼º äÆÃ on/off »óÅ ȮÀÎ ¼º°ø(C->W) // ÀÌ ¶§ ½ÇÆÐÇÑ´Ù¸é ±×³É MemberNumÀ» 0À¸·Î º¸³½´Ù PACKET_CW_OPEN( CW_CHAT, CW_CHAT_PLAYER_MIC_STATUS_ANS ) enum { _MAX_PLAYER_NUM = 9, }; BYTE m_byMemberNum; STRUCT_VOICE_STATUS m_sMemberStatus[_MAX_PLAYER_NUM]; int GetSize() { return ( sizeof(MSG_CW_CHAT_PLAYER_MIC_STATUS_ANS) - ( sizeof(STRUCT_VOICE_STATUS) * ( _MAX_PLAYER_NUM - m_byMemberNum ) ) ); } PACKET_CW_CLOSE // äÆÃ ±ÝÁö Å뺸 PACKET_CW_OPEN( CW_CHAT, CW_CHAT_BLOCKED_CMD ) DWORD m_dwRemainTime; // äÆÃ ±ÝÁö ³²Àº ½Ã°£(ºÐ ´ÜÀ§) PACKET_CW_CLOSE // ä³Î äÆÃ °ü·Ã // ä³Î äÆÃ Âü¿© PACKET_CW_OPEN( CW_CHAT, CW_CHAT_CHANNEL_JOIN_SYN ) BYTE m_byRoomNameLength; // ¹æÁ¦ ±æÀÌ, without null terminated character char m_ptszRoomName[MAX_ROOMTITLE_LENGTH + 1]; // ¹æÁ¦ uint16_t GetSize() const { return sizeof(*this); }; PACKET_CW_CLOSE // ä³Î äÆÃ Âü¿© ¼º°ø PACKET_CW_OPEN( CW_CHAT, CW_CHAT_CHANNEL_JOIN_ACK ) BOOL m_bCreated; // »ý¼ºµÈ °ÍÀ̸é TRUE, Âü¿©ÇÑ °ÍÀ̸é FALSE BYTE m_byUserNum; // ÇöÀç ´ëÈ­¹æ¿¡ Âü¿©ÁßÀÎ À¯Àú ¼ýÀÚ PACKET_CW_CLOSE // ä³Î äÆÃ Âü¿© ½ÇÆÐ PACKET_CW_OPEN( CW_CHAT, CW_CHAT_CHANNEL_JOIN_NAK ) BYTE m_byErrorCode; // RC::eCHAT_RESULT ÂüÁ¶ PACKET_CW_CLOSE // ä³Î äÆÃ Âü¿© ¾Ë¸² PACKET_CW_OPEN( CW_CHAT, CW_CHAT_CHANNEL_JOIN_BRD ) BYTE m_byChannelID; // µé¾î¿Â »ç¿ëÀÚÀÇ Ã¤³Î À妽º BYTE m_byUserNum; // ÇöÀç ´ëÈ­¹æ¿¡ Âü¿©ÁßÀÎ À¯Àú ¼ýÀÚ char m_ptszJoinMember[MAX_CHARNAME_LENGTH+1]; // µé¾î¿Â »ç¿ëÀÚ PACKET_CW_CLOSE // ä³Î äÆÃ ³»¿ë º¸³¿ PACKET_CW_OPEN(CW_CHAT, CW_CHAT_CHANNEL_SEND_SYN) BYTE m_byChatLength; // äÆÃ ±æÀÌ, _tcslen(m_ptszChat) char m_ptszChat[MAX_CHAT_LEN + 1]; // äÆÃ ³»¿ë uint16_t GetSize() const { const size_t kMinSize = sizeof(*this) - sizeof(m_ptszChat) + sizeof(m_ptszChat[0]); return static_cast(kMinSize + sizeof(m_ptszChat[0]) * m_byChatLength); }; PACKET_CW_CLOSE; // ä³Î äÆÃ ³»¿ë ºê·Îµå PACKET_CW_OPEN(CW_CHAT, CW_CHAT_CHANNEL_SEND_BRD) //enum { _MAX_CHATMSG_SIZE = 255 }; BYTE m_byChannelID; // º¸³½ ³ðÀÇ Ã¤³Î À妽º char m_ptszCharName[MAX_CHARNAME_LENGTH + 1]; // º¸³½ ³ð BYTE m_byChatLength; // äÆÃ ±æÀÌ, _tcslen(m_ptszChat) char m_ptszChat[MAX_CHAT_LEN + 1]; // äÆÃ ³»¿ë uint16_t GetSize() const { const size_t kMinSize = sizeof(*this) - sizeof(m_ptszChat) + sizeof(m_ptszChat[0]); return static_cast(kMinSize + sizeof(m_ptszChat[0]) * m_byChatLength); }; PACKET_CW_CLOSE; // ä³Î äÆÃ ³»¿ë º¸³»±â ½ÇÆÐ PACKET_CW_OPEN( CW_CHAT, CW_CHAT_CHANNEL_SEND_NAK ) BYTE m_byErrorCode; // RC::eCHAT_RESULT ÂüÁ¶ PACKET_CW_CLOSE // ä³Î äÆÃ ÃÊ´ë PACKET_CW_OPEN( CW_CHAT, CW_CHAT_CHANNEL_INVITE_SYN ) char m_ptszInviteName[MAX_CHARNAME_LENGTH+1]; // ÃÊ´ëÇÒ »ç¶÷ PACKET_CW_CLOSE // ÃÊ´ë ¼º°ø PACKET_CW_OPEN( CW_CHAT, CW_CHAT_CHANNEL_INVITE_ACK ) PACKET_CW_CLOSE // ÃÊ´ë ½ÇÆÐ PACKET_CW_OPEN( CW_CHAT, CW_CHAT_CHANNEL_INVITE_NAK ) BYTE m_byErrorCode; // added by _NA_000849_20101001_ENHANCED_INVITATION_FOR_CHAT_CHANNEL = { // Ŭ¶ó->¼­¹ö : ÃÊ´ë ½ÅûÀÚ À̸§ // ¼­¹ö->Ŭ¶ó : ÃÊ´ë ´ë»óÀÚ À̸§ TCHAR invite_target_name_[MAX_CHARNAME_LENGTH+1]; // } PACKET_CW_CLOSE // ÃÊ´ë ¹Þ¾ÒÀ½ PACKET_CW_OPEN( CW_CHAT, CW_CHAT_CHANNEL_INVITE_CMD ) char m_ptszInviteName[MAX_CHARNAME_LENGTH+1]; // ³ª¸¦ ÃÊ´ëÇÑ »ç¶÷ BYTE m_byRoomNameLength; // ¹æÁ¦ ±æÀÌ char m_ptszRoomName[MAX_ROOMTITLE_LENGTH+1]; uint16_t GetSize() const { return sizeof(*this); }; PACKET_CW_CLOSE // ä³Î äÆÃ¹æ ÅðÀå ¿äû PACKET_CW_OPEN( CW_CHAT, CW_CHAT_CHANNEL_OUT_SYN ) PACKET_CW_CLOSE // ÅðÀå ¼º°ø PACKET_CW_OPEN( CW_CHAT, CW_CHAT_CHANNEL_OUT_ACK ) PACKET_CW_CLOSE // ÅðÀå ½ÇÆÐ PACKET_CW_OPEN( CW_CHAT, CW_CHAT_CHANNEL_OUT_NAK ) BYTE m_byErrorCode; // RC::eCHAT_RESULT ÂüÁ¶ PACKET_CW_CLOSE // ÅðÀå»ç½Ç ¾Ë¸² PACKET_CW_OPEN( CW_CHAT, CW_CHAT_CHANNEL_OUT_BRD ) BYTE m_byUserNum; // ÇöÀç ´ëÈ­¹æ¿¡ Âü¿©ÁßÀÎ À¯Àú ¼ýÀÚ char m_ptszOutName[MAX_CHARNAME_LENGTH+1]; // ³ª°£ »ç¶÷ À̸§ PACKET_CW_CLOSE // ä³ÎäÆÃ¹æ Á¤º¸ ¿äû(Àοø, À̸§) PACKET_CW_OPEN( CW_CHAT, CW_CHAT_CHANNEL_INFO_REQ ) PACKET_CW_CLOSE // ä³ÎäÆÃ¹æ Á¤º¸ PACKET_CW_OPEN( CW_CHAT, CW_CHAT_CHANNEL_INFO_ANS ) BYTE m_byUserNum; // ÇöÀç Âü¿©ÁßÀÎ À¯Àú ¼ýÀÚ char m_ptszCharName[MAX_CHATZONE_USER][MAX_CHARNAME_LENGTH+1]; // ÇöÀç Âü¿©ÁßÀÎ Àοø Á¤º¸ WORD GetSize() { return ( sizeof(MSG_CW_CHAT_CHANNEL_INFO_ANS) - ( MAX_CHATZONE_USER - m_byUserNum ) ); } PACKET_CW_CLOSE PACKET_CW_OPEN( CW_CHAT, CW_CHAT_CHANNEL_INFO_NAK ) BYTE m_byErrorCode; PACKET_CW_CLOSE //////////////////////////////////// // GM ¸í·É¾î // GM °øÁö ¸í·É PACKET_CW_OPEN(CW_GM, CW_GM_NOTICE_SYN) enum { _MAX_CHATMSG_SIZE = MSG_CW_CHAT_NORMAL_SYN::_MAX_CHATMSG_SIZE }; enum { NOTICE_WORLD = 0, // ÀÚ½ÅÀÌ ¼ÓÇÑ ¿ùµå Àüü °øÁö NOTICE_CHANNEL, // ÀÚ½ÅÀÌ ¼ÓÇÑ Ã¤³Î Àüü °øÁö NOTICE_ZONE, // ÀڱⰡ µé¾î¿Í ÀÖ´Â Áö¿ª¿¡¸¸ °øÁö }; BYTE byNoticeType; // °øÁö Á¾·ù DWORD dwNoticeLength; // °øÁö ¹®ÀÚ¿­ÀÇ ±æÀÌ char szNotice[_MAX_CHATMSG_SIZE+1]; // °øÁö ¹®ÀÚ¿­ int GetSize() { return sizeof(MSG_CW_GM_NOTICE_SYN); } // °¡º¯ ÆÐŶ ¾Æ´Ô //WORD GetSize() { return sizeof(MSG_CW_GM_NOTICE_SYN) - ( MAX_NOTICE_LEN - byNoticeLen ); } }; // GM °øÁö ½ÇÆÐ PACKET_CW_OPEN( CW_GM, CW_GM_NOTICE_NAK ) enum { ERR_NOTICE_DEFAULT, }; DWORD dwResultCode; PACKET_CW_CLOSE PACKET_CW_OPEN( CW_GM, CW_GM_STRING_CMD_SYN ) enum { MAX_STRING_CMD_LENGTH = 100 }; char m_szStringCmd[MAX_STRING_CMD_LENGTH]; // ½ºÆ®¸µ ¸í·É¾î PACKET_CW_CLOSE PACKET_CW_OPEN( CW_GM, CW_GM_STRING_CMD_NAK ) BYTE m_byErrorCode; // eGM_RESULT PACKET_CW_CLOSE // GM ±Ó¸» ÄÔ/²û °á°ú PACKET_CW_OPEN( CW_GM, CW_GM_WHISPER_SET_ACK ) BOOL m_bOn; PACKET_CW_CLOSE PACKET_CW_OPEN( CW_GM, CW_GM_WHISPER_SET_NAK ) PACKET_CW_CLOSE // À¯Àú äÆÃ±ÝÁö/Çã¿ë °á°ú PACKET_CW_OPEN( CW_GM, CW_GM_USERCHAT_BLOCK_ACK ) CHARGUID m_CharGuid; BOOL m_bBlock; DWORD m_dwBlockTime; PACKET_CW_CLOSE PACKET_CW_OPEN( CW_GM, CW_GM_USERCHAT_BLOCK_NAK ) enum { _ERR_DEFAULT = 0, _ERR_NOTCONNUSER, // Á¢¼ÓÁßÀÌ ¾Æ´Ñ »ç¿ëÀÚ - WOPS¸¦ ÅëÇØ ó¸®ÇØ¾ß ÇÑ´Ù _ERR_BLOCKED, // ÀÌ¹Ì Ã¤ÆÃ±ÝÁöµÈ »ç¿ëÀÚ _ERR_NOTBLOCK, // ÀÌ¹Ì Ã¤ÆÃÇã¿ëµÈ »ç¿ëÀÚ }; WORD m_wErrorCode; PACKET_CW_CLOSE ////////////////////////////////// // ºäÆ÷Æ® Á¤º¸ ÆÐŶ struct MSG_CW_VIEWPORT_CHARSTATE : public MSG_BASE_FORWARD { DWORD dwSectorIndex; // ÇöÀç À§Ä¡ÇÑ ¼½ÅÍ À妽º DWORD dwFieldCode; // ÇöÀç À§Ä¡ÇÑ ¸ÊÀÇ Çʵå ÄÚµå int GetSize() { return sizeof(MSG_CW_VIEWPORT_CHARSTATE); } }; ////////////////////////////////// // Armorkit °ü·Ã ÆÐŶ struct MSG_CW_ARMORKIT_FINDHACK_SYN : public MSG_BASE { MSG_CW_ARMORKIT_FINDHACK_SYN() { m_byCategory = CW_ARMORKIT; m_byProtocol = CW_ARMORKIT_FINDHACK; } int HackType; // ŽÁöÇÑ ÇØÅ· ŸÀÔ (e.g. AKDETECT_SPEEDHACK) int Size; // Buffer ÀÇ ±æÀÌ char Buf[1024]; // µ¥ÀÌÅÍ ¹öÆÛ-1024´Â º¸¾ÈÆÄÆ®¿¡¼­ Àü´Þ¹ÞÀº ¾Ï¹¬Àû ÃÖ´ë°ª(¼ºÇöâ) int GetSize() { return sizeof(MSG_CW_ARMORKIT_FINDHACK_SYN); } }; ////////////////////////////////// ////////////////////////////////// // Ä£±¸ °ü·Ã ÆÐŶ struct STRUCT_FRIEND_STAT // Ä£±¸ »óÅ ±¸Á¶Ã¼ { char ptszFriendName[MAX_CHARNAME_LENGTH+1]; // Ä£±¸ À̸§ BOOL bOnline; // ¿Â¶óÀÎÀ̸é TRUE, ¿ÀÇÁ¶óÀÎÀ̸é FALSE }; // óÀ½ Á¢¼ÓÇÒ ¶§ Ä£±¸ ¸ñ·Ï ¿äû PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_NEWLIST_SYN ) int GetSize() { return sizeof(MSG_CW_FRIEND_NEWLIST_SYN); } PACKET_CW_CLOSE // óÀ½ Á¢¼ÓÇÒ ¶§ Ä£±¸ ¸ñ·Ï ¼ö½Å(°¡º¯) PACKET_CW_OPEN(CW_FRIEND, CW_FRIEND_FRIENDLIST_ACK) BYTE byFriendStatNum; // Ä£±¸ ¼ýÀÚ STRUCT_FRIEND_INFO sFriendStat[MAX_FRIENDBLOCK_STAT_NUM]; // Ä£±¸µéÀÇ »óÅÂ(Â÷´Üµµ Æ÷ÇÔ) uint16_t GetSize() const { const size_t kMinSize = sizeof(*this) - sizeof(sFriendStat); return static_cast(kMinSize + sizeof(sFriendStat[0]) * byFriendStatNum); }; PACKET_CW_CLOSE; // óÀ½ Á¢¼ÓÇÒ ¶§ Â÷´Ü ¸ñ·Ï ¼ö½Å(°¡º¯) PACKET_CW_OPEN(CW_FRIEND, CW_FRIEND_BLOCKLIST_ACK) BYTE byBlockStatNum; // Â÷´ÜµÈ ij¸¯ÅÍ ¼ýÀÚ STRUCT_BLOCK_INFO sBlockStat[MAX_BLOCK_STAT_NUM]; // ij¸¯Å͵éÀÇ Á¤º¸ uint16_t GetSize() const { const size_t kMinSize = sizeof(*this) - sizeof(sBlockStat); return static_cast(kMinSize + sizeof(sBlockStat[0]) * byBlockStatNum); }; PACKET_CW_CLOSE; // óÀ½ Á¢¼ÓÇÒ ¶§ Ä£±¸ ¸ñ·Ï ¿äû ½ÇÆÐ PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_NEWLIST_NAK ) enum { ERR_DEFAULT, NO_FRIEND_DATA, // µ¥ÀÌÅÍ ¾ø´Ù }; DWORD dwResult; PACKET_CW_CLOSE // Á¢¼Ó Áß¿¡ Ä£±¸ ·Î±×¿Â PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_LOGIN_BRD ) //#ifdef _NA_0_20080612_WORLDSERVER_REFACTORING // CHARGUID loginCharGuid; //#endif char ptszFriendName[MAX_CHARNAME_LENGTH+1]; BYTE byChannelID; PACKET_CW_CLOSE PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_LOGOUT_BRD ) //#ifdef _NA_0_20080612_WORLDSERVER_REFACTORING // CHARGUID logoutCharGuid; //#endif char ptszFriendName[MAX_CHARNAME_LENGTH+1]; PACKET_CW_CLOSE /* struct MSG_CW_FRIEND_CHGSTATE_BRD : public MSG_BASE { MSG_CW_FRIEND_CHGSTATE_BRD() { m_byCategory = CW_FRIEND; m_byProtocol = CW_FRIEND_CHGSTATE_BRD; } char ptszFriendName[MAX_CHARNAME_LENGTH+1]; LEVELTYPE Level; BYTE byClass; }; */ // Ä£±¸ Ãß°¡ PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_ADD_SYN ) char ptszCharNameTo[MAX_CHARNAME_LENGTH+1]; PACKET_CW_CLOSE PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_ADD_ACK ) STRUCT_FRIEND_INFO sFriendStat; // ÇØ´ç Ä£±¸ÀÇ Á¤º¸ PACKET_CW_CLOSE // Ä£±¸ ¿äû ºÒ°¡ »óÅ PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_ADD_NAK ) enum { ERR_DEFAULT, // ±âŸ µîµî NO_USER, // ÇØ´çÇÏ´Â À¯Àú°¡ ¾øÀ½ ALREADY_FRIEND, // ÀÌ¹Ì Ä£±¸ »óÅ FRIEND_IS_ME, // ³ª¸¦ Ä£±¸ ¿äûÇßÀ½ #ifdef _FRIEND_OVERFLOW FRIEND_OVERFLOW, //Ä£±¸ ¼ýÀÚ Á¦ÇÑ Ãʰú(90¸í) #endif }; BYTE m_byResult; PACKET_CW_CLOSE // Ä£±¸ »èÁ¦ ¿äû PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_DEL_SYN ) char ptszFriendName[MAX_CHARNAME_LENGTH+1]; PACKET_CW_CLOSE // Ä£±¸ »èÁ¦ ¼º°ø PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_DEL_ACK ) //#ifdef _NA_0_20080612_WORLDSERVER_REFACTORING // CHARGUID deleteBuddyIndex; //#endif char ptszDeletedName[MAX_CHARNAME_LENGTH+1]; PACKET_CW_CLOSE // Ä£±¸ »èÁ¦ ½ÇÆÐ PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_DEL_NAK ) enum { ERR_DEFAULT, // ¾Ë ¼ö ¾ø´Â ÀÌÀ¯ NOT_FRIEND_USER, // Ä£±¸ ¾Æ´Ô }; BYTE m_byResult; PACKET_CW_CLOSE // Â÷´Ü ¿äû PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_BLOCK_SYN ) char ptszBlockName[MAX_CHARNAME_LENGTH+1]; PACKET_CW_CLOSE // Â÷´Ü ¼º°ø PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_BLOCK_ACK ) char ptszBlockedName[MAX_CHARNAME_LENGTH+1]; PACKET_CW_CLOSE // Â÷´Ü ½ÇÆÐ PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_BLOCK_NAK ) enum { ERR_DEFAULT, // ¾Ë ¼ö ¾ø´Â ÀÌÀ¯ NO_USER, // Á¸ÀçÇÏÁö ¾Ê´Â ij¸¯ÅÍ À̸§ BLOCKED_ME, // ÀÚ½ÅÀ» Â÷´ÜÇÏ·Á°í ½Ãµµ ALREADY_BLOCKED, // ÀÌ¹Ì ºí·ÏµÈ »óÅ #ifdef _FRIEND_OVERFLOW BLOCK_OVERFLOW, // Â÷´Ü ÃÖ´ë °³¼ö Ãʰú #endif }; DWORD m_byResult; PACKET_CW_CLOSE // Â÷´Ü »èÁ¦ ¿äû PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_BLOCK_FREE_SYN ) char ptszBlockName[MAX_CHARNAME_LENGTH+1]; PACKET_CW_CLOSE // Â÷´Ü »èÁ¦ ¼º°ø PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_BLOCK_FREE_ACK ) //#ifdef _NA_0_20080612_WORLDSERVER_REFACTORING // CHARGUID blockFreeCharGuid; // CHARGUID FreeCharOnlineState; //#endif char ptszBlockedName[MAX_CHARNAME_LENGTH+1]; PACKET_CW_CLOSE // Â÷´Ü »èÁ¦ ½ÇÆÐ PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_BLOCK_FREE_NAK ) enum { ERR_DEFAULT, // ¾Ë ¼ö ¾ø´Â ÀÌÀ¯ NO_USER, // Á¸ÀçÇÏÁö ¾Ê´Â ij¸¯ÅÍ À̸§ NOT_BLOCKED, // Â÷´ÜµÈ ij¸¯ÅͰ¡ ¾Æ´Ô }; DWORD m_byResult; PACKET_CW_CLOSE // Ä£±¸ äÆÃ PACKET_CW_OPEN(CW_FRIEND, CW_FRIEND_CHAT_SYN) enum { _MAX_CHATMSG_SIZE = MSG_CW_CHAT_NORMAL_SYN::_MAX_CHATMSG_SIZE }; char ptszFriendNameTo[MAX_CHARNAME_LENGTH + 1]; BYTE byMsgLength; // _tcslen(ptszChatMsg) char ptszChatMsg[_MAX_CHATMSG_SIZE + 1]; // NOTE: f110907.2L, the client send message with total size. // NOTE: f110915.1L, added uint16_t GetSize() const { const size_t kMinSize = sizeof(*this) - sizeof(ptszChatMsg) + sizeof(ptszChatMsg[0]); return static_cast(kMinSize + sizeof(ptszChatMsg[0]) * byMsgLength); }; PACKET_CW_CLOSE; // Ä£±¸ äÆÃ ¼ö½Å PACKET_CW_OPEN(CW_FRIEND, CW_FRIEND_CHAT_BRD) enum { _MAX_CHATMSG_SIZE = MSG_CW_CHAT_NORMAL_SYN::_MAX_CHATMSG_SIZE }; char ptszFriendNameFrom[MAX_CHARNAME_LENGTH + 1]; BYTE byMsgLength; // _tcslen(ptszChatMsg) char ptszChatMsg[_MAX_CHATMSG_SIZE + 1]; uint16_t GetSize() const { const size_t kMinSize = sizeof(*this) - sizeof(ptszChatMsg) + sizeof(ptszChatMsg[0]); return static_cast(kMinSize + sizeof(ptszChatMsg[0]) * byMsgLength); }; PACKET_CW_CLOSE; // Ä£±¸ äÆÃ ½ÇÆÐ PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_CHAT_NAK ) enum { ERR_DEFAULT, // ¾Ë ¼ö ¾ø´Â ÀÌÀ¯ NOT_FRIEND, // Ä£±¸ ¾Æ´Ô OFFLINE_FRIEND, // Ä£±¸°¡ ¿ÀÇÁ¶óÀÎ »óÅ BLOCKED_FRIEND, // ´ç½ÅÀº Â÷´ÜµÈ Ä£±¸ÀÔ´Ï´Ù.-0-/ BLOCK_CHAT, // Ä£±¸°¡ äÆÃ °ÅºÎ »óÅ }; char ptszFriendNameTo[MAX_CHARNAME_LENGTH+1]; // ´©±¸ÇÑÅ× º¸³»´Â äÆÃÀ̾ú³Ä?! DWORD m_byResult; PACKET_CW_CLOSE // Ä£±¸ äÆÃ °ÅºÎ üũ(Åä±Û ¹æ½Ä) PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_CHATBLOCK_SYN ) BOOL m_bBlock; // 0: Çã¿ë 1: °ÅºÎ PACKET_CW_CLOSE // Ä£±¸ äÆÃ °ÅºÎ Åä±Û ¼º°ø PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_CHATBLOCK_ACK ) BOOL m_bNowBlock; // °á°úÀûÀ¸·Î °ÅºÎ µÆÀ¸¸é TRUE, Çã¿ë µÆÀ¸¸é FALSE PACKET_CW_CLOSE // Ä£±¸ äÆÃ °ÅºÎ Åä±Û ½ÇÆÐ PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_CHATBLOCK_NAK ) enum { ERR_DEFAULT = 0, }; DWORD dwResult; // ¿øÀÎ PACKET_CW_CLOSE //Ä£±¸ Ãßõ ¸ñ·ÏÁß ÀϹÝÄ£±¸·Î »óŰ¡ º¯°æµÈ ¸®½ºÆ®, _KR_0_20091021_FIRENDINVITATION_EXTEND PACKET_CW_OPEN( CW_FRIEND, CW_FRIENDINVITATE_INVITATELIST_CMD ) INVITATEFRIENDLIST_INFO m_InvitateFriendInfo; WORD GetSize() const { // (CHANGES) (f100624.2L) const WORD kMinSize = sizeof(*this) - sizeof(m_InvitateFriendInfo); return static_cast(kMinSize + m_InvitateFriendInfo.GetSize()); //return ( sizeof(MSG_CW_FRIENDINVITATE_INVITATELIST_CMD) - ( (MAX_REVENGE_STAT_NUM - m_InvitateFriendInfo.m_byListCount) * sizeof(DWORD) ) ); } PACKET_CW_CLOSE /* // Ä£±¸ äÆÃ ÃÊ´ë(3ÀÎ ÀÌ»óÀÇ °æ¿ì) struct MSG_CW_FRIEND_CHAT_INVITE_SYN : public MSG_BASE { MSG_CW_FRIEND_CHAT_INVITE_SYN() { m_byCategory = CW_FRIEND; m_byProtocol = CW_FRIEND_CHAT_INVITE_SYN; } char ptszFriendNameTo[MAX_CHARNAME_LENGTH+1]; }; // Ä£±¸ ÃÊ´ë Å뺸 struct MSG_CW_FRIEND_CHAT_INVITE_BRD : public MSG_BASE { MSG_CW_FRIEND_CHAT_INVITE_BRD() { m_byCategory = CW_FRIEND; m_byProtocol = CW_FRIEND_CHAT_INVITE_BRD; } char ptszFriendName[MAX_CHARNAME_LENGTH+1]; }; // Ä£±¸ ÃÊ´ë ½ÇÆÐ struct MSG_CW_FRIEND_CHAT_INVITE_NAK : public MSG_BASE { MSG_CW_FRIEND_CHAT_INVITE_NAK() { m_byCategory = CW_FRIEND; m_byProtocol = CW_FRIEND_CHAT_INVITE_NAK; } enum { ERR_DEFAULT, // ¾Ë ¼ö ¾ø´Â ÀÌÀ¯ NOT_FRIEND, // Ä£±¸ ¾Æ´Ô OFFLINE_FRIEND, // Ä£±¸°¡ ¿ÀÇÁ¶óÀÎ »óÅ BLOCKED_FRIEND, // ³Í Â÷´Ü´çÇß´Ù }; char ptszFriendName[MAX_CHARNAME_LENGTH+1]; }; */ // Ä£±¸ ·¹º§¾÷ ¾Ë¸² PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_LEVELUP_BRD ) char m_ptszCharName[MAX_CHARNAME_LENGTH+1]; LEVELTYPE m_Level; void Clear() { const size_t kClearSize = static_cast((char*)(this + 1) - m_ptszCharName); ZeroMemory(m_ptszCharName, kClearSize); }; PACKET_CW_CLOSE // Ä£±¸ »ó¼¼Á¤º¸ °ü·Ã PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_STATUS_REQ ) #ifdef _NA_0_20100527_ADD_CHAR_RELATION_MEMO CHARGUID m_dwToCharGuid; #else char m_ptszCharName[MAX_CHARNAME_LENGTH+1]; #endif PACKET_CW_CLOSE PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_STATUS_ANS ) char m_ptszCharName[MAX_CHARNAME_LENGTH+1]; BYTE m_byChannel; BYTE m_byZoneType; // ÇöÀç À§Ä¡(¸¶À»/Çʵå/·Îºñ...), eZONETYPE Âü°í MAPCODE m_MapCode; // ÇöÀç ¸Ê ÄÚµå DWORD m_dwZoneKey; // ÇöÀç Áö¿ª À妽º(¹èƲÁ¸ ¹øÈ£·Î »ç¿ë °¡´É) char m_tszGuildName[MAX_GUILDNAME_LENGTH+1]; // ¼Ò¼ÓµÈ ±æµå¸í(¾øÀ¸¸é 0) BYTE m_byDuty; // ±æµå°¡ ÀÖÀ» °æ¿ì ±æµå¿¡¼­ÀÇ ÁöÀ§. #ifdef _NA_0_20100527_ADD_CHAR_RELATION_MEMO TCHAR m_ptszMemo[MAX_FRIEND_MEMO_LENGHT+1]; #endif PACKET_CW_CLOSE PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_STATUS_NAK ) BYTE m_byErrorCode; // ¿¡·¯ÄÚµå(ResultCode Âü°í) PACKET_CW_CLOSE //_NA_0_20100527_ADD_CHAR_RELATION_MEMO PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_MEMO_UPDATE_SYN ) CHARGUID m_dwToCharGuid; TCHAR m_ptszMemo[MAX_FRIEND_MEMO_LENGHT+1]; PACKET_CW_CLOSE PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_MEMO_UPDATE_ACK ) CHARGUID m_dwToCharGuid; PACKET_CW_CLOSE PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_MEMO_UPDATE_NAK ) BYTE m_byErrorCode; // ¿¡·¯ÄÚµå(ResultCode Âü°í) PACKET_CW_CLOSE // Ä£±¸¿Í °ÔÀÓ °°ÀÌÇϱâ - '°°ÀÌÇϱâ' ¹öư ´­·¶À» ¶§ ÃֽŠÁ¤º¸¸¦ ¾ò¾î¿À±â À§ÇØ »ç¿ëÇÑ´Ù PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_STATUS_JOIN_SYN ) //#ifdef _NA_0_20080612_WORLDSERVER_REFACTORING // CHARGUID m_dwToCharGuid; //#endif char m_ptszCharName[MAX_CHARNAME_LENGTH+1]; PACKET_CW_CLOSE PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_STATUS_JOIN_ACK ) char m_ptszCharName[MAX_CHARNAME_LENGTH+1]; BYTE m_byZoneType; DWORD m_dwZoneKey; PACKET_CW_CLOSE PACKET_CW_OPEN( CW_FRIEND, CW_FRIEND_STATUS_JOIN_NAK ) char m_ptszCharName[MAX_CHARNAME_LENGTH+1]; BYTE m_byZoneType; DWORD m_dwZoneKey; BYTE m_byErrorCode; PACKET_CW_CLOSE ////////////////////////////// // ±æµå °ü·Ã ÇÁ·ÎÅäÄÝ PACKET_CW_OPEN(CW_GUILD, CW_GUILD_CHAT_SYN) enum { _MAX_CHATMSG_SIZE = MSG_CW_CHAT_NORMAL_SYN::_MAX_CHATMSG_SIZE }; GUILDGUID m_GuildGuid; BYTE m_byMsgLen; // _tcslen(m_ptszCharMsg) char m_ptszCharMsg[_MAX_CHATMSG_SIZE + 1]; // WARNING: f110826.1L, not null terminated string uint16_t GetSize() const { const size_t kMinSize = sizeof(*this) - sizeof(m_ptszCharMsg) + sizeof(m_ptszCharMsg[0]); return static_cast(kMinSize + sizeof(m_ptszCharMsg[0]) * m_byMsgLen); }; PACKET_CW_CLOSE; PACKET_CW_OPEN(CW_GUILD, CW_GUILD_CHAT_BRD) enum { _MAX_CHATMSG_SIZE = MSG_CW_CHAT_NORMAL_SYN::_MAX_CHATMSG_SIZE }; // char ptszCharName[MAX_CHARNAME_LENGTH + 1]; // º¸³½ »ç¶÷ BYTE byMsgLen; // _tcslen(m_ptszCharMsg) char ptszChatMsg[_MAX_CHATMSG_SIZE + 1]; // WARNING: f110826.1L, m_byMsgLen include the null character (strlen(ptszChatMsg) + 1) uint16_t GetSize() const { const size_t kMinSize = sizeof(*this) - sizeof(ptszChatMsg) + sizeof(ptszChatMsg[0]); return static_cast(kMinSize + sizeof(ptszChatMsg[0]) * byMsgLen); }; PACKET_CW_CLOSE; PACKET_CW_OPEN( CW_GUILD, CW_GUILD_CHAT_NAK ) enum { ERR_DEFAULT, ERR_NOT_GUILD, // ±×·± ±æµå ¾ø´Ù(¼­¹ö¿Í Ŭ¶óÀÇ GuildGuid ´Ù¸§) ERR_NOT_MEMBER, // ±æµå ¸â¹ö ¾Æ´Ï´Ù ERR_WAIT_INFO, // Á¤º¸°¡ ¾øÀ¸¹Ç·Î ±æµå¼­¹ö¿¡ ¿äû µé¾î°¬À½(Àá½Ã ÈÄ ´Ù½Ã ½ÃµµÇϽʽÿÀ) }; BYTE byResult; PACKET_CW_CLOSE // ±æµå °øÁö PACKET_CW_OPEN( CW_GUILD, CW_GUILD_SELECT_NOTICE_SYN ) GUILDGUID m_GuildGuid; CHARGUID m_OperCharGuid; BYTE m_NoticeType; PACKET_CW_CLOSE PACKET_CW_OPEN( CW_GUILD, CW_GUILD_SELECT_NOTICE_NAK ) DWORD m_dwErrorCode; PACKET_CW_CLOSE PACKET_CW_OPEN( CW_GUILD, CW_GUILD_SELECT_NOTICE_ACK ) BYTE m_NoticeType; WORD m_wNoticeLen; char m_ptszNotice[MAX_GUILDNOTICE_LENGTH+1]; uint16_t GetSize() const { // with null char size const size_t kMinSize = sizeof(*this) - sizeof(m_ptszNotice) + sizeof(m_ptszNotice[0]); return static_cast(kMinSize + sizeof(m_ptszNotice[0]) * m_wNoticeLen); }; PACKET_CW_CLOSE PACKET_CW_OPEN( CW_GUILD, CW_GUILD_CHANGE_NOTICE_SYN ) WORD m_byNoticeLen; char m_tszGuildNotice[MAX_GUILDNOTICE_LENGTH+1]; uint16_t GetSize() const { // with null char size const size_t kMinSize = sizeof(*this) - sizeof(m_tszGuildNotice) + sizeof(m_tszGuildNotice[0]); return static_cast(kMinSize + sizeof(m_tszGuildNotice[0]) * m_byNoticeLen); }; PACKET_CW_CLOSE PACKET_CW_OPEN( CW_GUILD, CW_GUILD_CHANGE_NOTICE_BRD ) WORD m_wNoticeLen; // _tcslen(m_ptszNotice) char m_ptszNotice[MAX_GUILDNOTICE_LENGTH+1]; uint16_t GetSize() const { // with null char size const size_t kMinSize = sizeof(*this) - sizeof(m_ptszNotice) + sizeof(m_ptszNotice[0]); return static_cast(kMinSize + sizeof(m_ptszNotice[0]) * m_wNoticeLen); }; PACKET_CW_CLOSE PACKET_CW_OPEN( CW_GUILD, CW_GUILD_CHANGE_NOTICE_NAK ) BYTE m_byErrorCode; PACKET_CW_CLOSE PACKET_CW_OPEN( CW_GUILD, CW_GUILD_NOTICE_CMD ) WORD m_wNoticeLen; // _tcslen(m_ptszNotice) char m_ptszNotice[MAX_GUILDNOTICE_LENGTH+1]; uint16_t GetSize() const { const size_t kMinSize = sizeof(*this) - sizeof(m_ptszNotice) + sizeof(m_ptszNotice[0]); return static_cast(kMinSize + sizeof(m_ptszNotice[0]) * m_wNoticeLen); }; PACKET_CW_CLOSE // // ÆÐŶ ¾Ïȣȭ Ű ±³È¯ ¹× ÁÖ±âÀû ¾Ë°í¸®Áò º¯È¯ PACKET_CW_OPEN( CW_CRYPTOGRAPHY, CW_CRYPTOGRAPHY_KEY ) BYTE m_bySN; // Sequence Number BYTE m_byCryptInfo; // ÀÎÄÚµùµÈ ÆÐŶ ¾ÏȣȭŰ ºí·Ï Ç®±â À§ÇÑ Å° union { DWORD m_dwUserKey; BYTE m_byCryptData[200]; // ¾Ë°í¸®Áò Á¤º¸ (Ű, µîµî...) }; BYTE& GetSNKey() { return m_bySN; } VOID SetSNKey( BYTE bySNKey ) { m_bySN = bySNKey; } BYTE& GetCryptInfo() { return m_byCryptInfo; } VOID SetCryptInfo( BYTE byCryptInfo ) { m_byCryptInfo = byCryptInfo; } BYTE* GetCryptStream() { return m_byCryptData; } PACKET_CW_CLOSE PACKET_CW_OPEN( CW_CRYPTOGRAPHY, CW_CRYPTOGRAPHY_ACK ) PACKET_CW_CLOSE PACKET_CW_OPEN( CW_CRYPTOGRAPHY, CW_CRYPTOGRAPHY_NAK ) PACKET_CW_CLOSE // ¾ÏȣȭµÈ ÆÐŶ Ç®±âÀ§ÇÑ... struct MSG_CW_CRYPTOGRAPHY_PACKET_ENCODED { BYTE m_bySN; // Sequence Number : received BYTE m_byCRC; BYTE m_byStream[1]; // ÆÐŶ¸¶´Ù ´Ù¸¥ Å©±â¸¦ °¡Áú °ÍÀÌ´Ù. BYTE& GetSNKey() { return m_bySN; } VOID SetSNKey( BYTE bySNKey ) { m_bySN = bySNKey; } BYTE& GetCRC() { return m_byCRC; } VOID SetCRC( BYTE byCRC ) { m_byCRC = byCRC; } BYTE* GetPacketStream() { return m_byStream; } DWORD GetHeaderSize() { return (sizeof(BYTE)*2); } }; // ÆÐŶ ¾Ïȣȭ Çϱâ À§ÇÑ... struct MSG_CW_CRYPTOGRAPHY_PACKET_ENCODING { BYTE m_bySN; // Sequence Number : sending BYTE m_byCRC; BYTE m_byStream[1]; // ÆÐŶ¸¶´Ù ´Ù¸¥ Å©±â¸¦ °¡Áú °ÍÀÌ´Ù. BYTE& GetSNKey() { return m_bySN; } VOID SetSNKey( BYTE bySNKey ) { m_bySN = bySNKey; } BYTE& GetCRC() { return m_byCRC; } VOID SetCRC( BYTE byCRC ) { m_byCRC = byCRC; } BYTE* GetPacketStream() { return m_byStream; } DWORD GetHeaderSize() { return (sizeof(BYTE)*2); } }; // // ¾Ïȣȭ ³»¿ë »ç¿ëÇØ¶ó! PACKET_CW_OPEN( CW_CRYPTOGRAPHY, CW_CRYPTOGRAPHY_CMD ) PACKET_CW_CLOSE // ´Ù¸¥ À¯ÀúÀÇ UserID ¿äû(À¥ Á¢±Ù ¶§¹®) PACKET_CW_OPEN( CW_COMMUNITY, CW_COMM_USERID_REQ ) char m_ptszCharName[MAX_CHARNAME_LENGTH+1]; PACKET_CW_CLOSE PACKET_CW_OPEN( CW_COMMUNITY, CW_COMM_USERID_ACK ) char m_ptszAccountID[ID_MAX_LEN+1]; char m_ptszCharName[MAX_CHARNAME_LENGTH+1]; PACKET_CW_CLOSE PACKET_CW_OPEN( CW_COMMUNITY, CW_COMM_USERID_NAK ) enum { _ERR_DEFAULT, _ERR_NOTCONNUSER, // Á¢¼Ó ÁßÀÌ ¾Æ´Ñ »ç¿ëÀÚ Á¤º¸ ¿äû }; WORD m_wErrorCode; PACKET_CW_CLOSE ////////////////////////////////// ////////////////////////////////// // ¸®º¥Áö(³ª»ÛÄ£±¸) °ü·Ã ÆÐŶ PACKET_CW_OPEN( CW_REVENGE, CW_REVENGE_ADD_CMD ) BYTE m_byRevengePoint; // Remain Revenge Point #ifdef _NA_0_20100527_ADD_CHAR_RELATION_MEMO STRUCT_REVENGE_INFO m_sRevengeStat; #else STRUCT_REVENGE_PACKET_INFO m_sRevengeStat; #endif PACKET_CW_CLOSE // ¸®º¥Áö ¸®½ºÆ®¿¡¼­ Á¦°Å PACKET_CW_OPEN( CW_REVENGE, CW_REVENGE_DEL_SYN ) //#ifdef _NA_0_20080612_WORLDSERVER_REFACTORING // CHARGUID m_RevengeGuid; //#endif char m_ptszCharName[MAX_CHARNAME_LENGTH+1]; PACKET_CW_CLOSE PACKET_CW_OPEN( CW_REVENGE, CW_REVENGE_DEL_ACK ) char m_ptszCharName[MAX_CHARNAME_LENGTH+1]; PACKET_CW_CLOSE PACKET_CW_OPEN( CW_REVENGE, CW_REVENGE_DEL_NAK ) char m_ptszCharName[MAX_CHARNAME_LENGTH+1]; // »ç¿ëÇÏÁö ¾ÊÀ½ - »èÁ¦ ¿¹Á¤ BYTE m_byErrorCode; // RC::eREVENGE_RESULT Âü°í PACKET_CW_CLOSE // óÀ½ Á¢¼ÓÇÒ ¶§ ¸®º¥Áö ¸®½ºÆ® ¼ö½Å(°¡º¯) - Ä£±¸ ¸®½ºÆ® ¿äûÇßÀ» ¶§ ÇÔ²² º¸³¿ PACKET_CW_OPEN( CW_REVENGE, CW_REVENGE_LIST_CMD ) BYTE byRevengePoint; // ¸®º¥Áö Æ÷ÀÎÆ® // CHANGES: f111004.2L, changes default type, this is changed by _NA002676_WORLD_SERVER_RENEWAL uint8_t byRevengeStatNum; // º¹¼ö ´ë»ó ij¸¯ÅÍ ¼ýÀÚ, #ifdef _NA_0_20100527_ADD_CHAR_RELATION_MEMO STRUCT_REVENGE_INFO sRevengeStat[MAX_REVENGE_STAT_NUM]; #else STRUCT_REVENGE_PACKET_INFO sRevengeStat[MAX_REVENGE_STAT_NUM]; // ij¸¯Å͵éÀÇ Á¤º¸(Àӽ÷Π챏 °³¼ö¿Í µ¿ÀÏÇϰÔ) #endif uint16_t GetSize() const { const size_t kMinSize = sizeof(*this) - sizeof(sRevengeStat); return static_cast(kMinSize + sizeof(sRevengeStat[0]) * byRevengeStatNum); }; PACKET_CW_CLOSE // ¸®º¥Áö ´ë»ó ·Î±×ÀÎ PACKET_CW_OPEN( CW_REVENGE, CW_REVENGE_LOGIN_BRD ) char m_ptszCharName[MAX_CHARNAME_LENGTH+1]; BYTE byChannelID; // Á¢¼ÓÁßÀΠä³Î PACKET_CW_CLOSE PACKET_CW_OPEN( CW_REVENGE, CW_REVENGE_LOGOUT_BRD ) char ptszCharName[MAX_CHARNAME_LENGTH+1]; PACKET_CW_CLOSE // ¸®º¥Áö ´ë»ó ·¹º§¾÷ ¾Ë¸² PACKET_CW_INHERIT_OPEN(CW_REVENGE, CW_REVENGE_LEVELUP_BRD, MSG_CW_FRIEND_LEVELUP_BRD) void Clear() { // NOTE: first configurable data field = 'MSG_CW_FRIEND_LEVELUP_BRD::m_ptszCharName' const size_t kClearSize = static_cast((char*)(this + 1) - m_ptszCharName); ZeroMemory(m_ptszCharName, kClearSize); }; PACKET_CW_INHERIT_CLOSE; ////////////////////////////////// ////////////////////////////////// // ÂÊÁö °ü·Ã ÆÐŶ // ÂÊÁö Àü¼Û PACKET_CW_OPEN( CW_MEMO, CW_MEMO_SEND_SYN ) char m_ptszRecvName[MAX_CHARNAME_LENGTH+1]; char m_ptszMemo[MAX_MEMO_LENGTH + 1]; PACKET_CW_CLOSE PACKET_CW_OPEN( CW_MEMO, CW_MEMO_SEND_ACK ) char m_ptszRecvName[MAX_CHARNAME_LENGTH+1]; PACKET_CW_CLOSE PACKET_CW_OPEN( CW_MEMO, CW_MEMO_SEND_NAK ) BYTE m_byErrorCode; // RC::eMEMO_RESULT ÂüÁ¶ PACKET_CW_CLOSE // ÂÊÁö ¸ñ·Ï PACKET_CW_OPEN( CW_MEMO, CW_MEMO_LIST_REQ ) PACKET_CW_CLOSE PACKET_CW_OPEN( CW_MEMO, CW_MEMO_LIST_ANS ) BYTE m_byMemoCnt; // ÂÊÁö °³¼ö(ÇöÀç ÆäÀÌÁö¿¡¼­) BYTE m_byMemoPage; // ÂÊÁö ¸ñ·ÏÀÇ ÇöÀç ÆäÀÌÁö(20°³ ´ÜÀ§·Î Àü¼Û) BYTE m_byMemoPageCnt; // ÂÊÁö ¸ñ·ÏÀÇ ÃÑ ÆäÀÌÁö(ÇöÀç ÂÊÁö 123°³¸é 7ÆäÀÌÁö°¡ µÊ. m_byMemoPage=m_byMemoPageCnt¸é ¼Û½Å ¿Ï·á) STRUCT_SUBJECT_PACKETINFO m_Subject[MAX_MEMO_PAGENUM]; // ÂÊÁö ¿ä¾à°ú ÀоúÀ½ Ç¥½Ã¸¸ Àü¼Û WORD GetSize() { return ( sizeof(MSG_CW_MEMO_LIST_ANS) - ( sizeof(STRUCT_SUBJECT_PACKETINFO) * (MAX_MEMO_PAGENUM - m_byMemoCnt) ) ); } PACKET_CW_CLOSE PACKET_CW_OPEN( CW_MEMO, CW_MEMO_LIST_NAK ) BYTE m_byErrorCode; PACKET_CW_CLOSE // ÂÊÁö ³»¿ë È®ÀÎ PACKET_CW_OPEN( CW_MEMO, CW_MEMO_VIEW_REQ ) MEMOGUID m_MemoGuid; PACKET_CW_CLOSE PACKET_CW_OPEN( CW_MEMO, CW_MEMO_VIEW_ANS ) MEMOGUID m_MemoGuid; char m_ptszMemo[MAX_MEMO_LENGTH + 1]; // added by _NA_20100812_INTEGRATE_SYSTEM_MEMO_DOMINATION = { SLOTCODE m_recvItemCode;//ȯ±Þ ¹ÞÀ» ¾ÆÀÌÅÛ ÄÚµå ULONGLONG m_amountCost;//ȯ±Þ ¹ÞÀ» ±Ý¾× eSYSTEM_MEMO_TYPE m_typeSystemMemo;//½Ã½ºÅÛ ¸Þ¸ð ±¸ºÐÀÚ // } PACKET_CW_CLOSE PACKET_CW_OPEN( CW_MEMO, CW_MEMO_VIEW_NAK ) BYTE m_byErrorCode; PACKET_CW_CLOSE // ÂÊÁö »èÁ¦ PACKET_CW_OPEN( CW_MEMO, CW_MEMO_DELETE_SYN ) MEMOGUID m_MemoGuid; STRUCT_SUBJECT_PACKETINFO::eMEMOTYPE m_MemoType; //_NA_1798_20110114_SYSTEM_MEMO_ADDITIONAL_LOGGING PACKET_CW_CLOSE PACKET_CW_OPEN( CW_MEMO, CW_MEMO_DELETE_ACK ) MEMOGUID m_MemoGuid; PACKET_CW_CLOSE PACKET_CW_OPEN( CW_MEMO, CW_MEMO_DELETE_NAK ) BYTE m_byErrorCode; PACKET_CW_CLOSE // »õ ÂÊÁö ¾Ë¸² PACKET_CW_OPEN( CW_MEMO, CW_MEMO_NEWMEMO_BRD ) STRUCT_SUBJECT_PACKETINFO m_Subject; // º¸³½ »ç¶÷ - Ŭ¸¯ÇÏ¿© È®ÀÎÇÏ¸é ¹Ù·Î CW_MEMO_VIEW_REQ Àü¼ÛÇÏ¸é µÊ PACKET_CW_CLOSE //±æµå °ü°è PACKET_CW_OPEN( CW_GUILD, CW_GUILD_RELATION_BRD ) GUILD_RELATION m_stRELGuild; PACKET_CW_CLOSE PACKET_CW_OPEN( CW_GUILD, CW_GUILD_RELATION_DELETE_BRD ) eGUILD_RELATION m_eRelType; GUILDGUID m_RelGuildGuid; CHAR m_szGuildName[MAX_GUILDNAME_LENGTH + 1]; PACKET_CW_CLOSE PACKET_CW_OPEN( CW_GUILD, CW_GUILD_RELATION_BOTH_AGAINST_BRD ) GUILDGUID m_BothGuildGuid; eGUILD_RELATION m_eDELType; eGUILD_RELATION m_eMOVType; CHAR m_tszBothGuildName[MAX_GUILDNAME_LENGTH + 1]; PACKET_CW_CLOSE PACKET_CW_OPEN( CW_GUILD, CW_GUILD_RELATION_MOVE_BRD) GUILDGUID m_GuildGuid; eGUILD_RELATION m_eDELType; eGUILD_RELATION m_eMOVType; CHAR m_szGuildName[MAX_GUILDNAME_LENGTH + 1]; PACKET_CW_CLOSE PACKET_CW_OPEN(CW_GUILD, CW_GUILD_RECOVERY_GUILD_BRD) GUILDGUID m_GuildIndex; PACKET_CW_CLOSE PACKET_CW_OPEN(CW_GUILD, CW_GUILD_GUILDMARK_REGISTER_BRD) GUILDGUID m_GuildIndex; GUILDMARKIDX m_PatternIndex; GUILDMARKIDX m_BackGroundIndex; PACKET_CW_CLOSE PACKET_CW_OPEN(CW_GUILD, CW_GUILD_GUILDMARK_DELETE_BRD) GUILDGUID m_GuildIndex; GUILDMARKIDX m_PatternIndex; GUILDMARKIDX m_BackGroundIndex; PACKET_CW_CLOSE // ±æµå â°í ·Î±× PACKET_CW_OPEN(CW_GUILD, CW_GUILD_WAREHOUSE_LOGLIST_REQ ) PACKET_CW_CLOSE PACKET_CW_OPEN(CW_GUILD, CW_GUILD_WAREHOUSE_LOGLIST_ANS ) BYTE m_byLogCount; // ·Î±× °³¼ö(ÇöÀç ÆäÀÌÁö¿¡¼­) BYTE m_byCurrentPage; // Àü¼Û µÇ´Â ÇöÀç ÆäÀÌÁö BYTE m_byLogPageCount; // ·Î±× ¸ñ·ÏÀÇ ÃÑ ÆäÀÌÁö(ÇöÀç ·Î±× 123°³¸é 7ÆäÀÌÁö°¡ µÊ. m_byCurrentPage=m_byLogPageCount¸é ¼Û½Å ¿Ï·á) STRUCT_GUILDWAREHOUSE_LOGINFO m_LogList[MAX_GUILDWAREHOUSE_LOGPAGE_NUM]; WORD GetSize() { return (sizeof(MSG_CW_GUILD_WAREHOUSE_LOGLIST_ANS) - (sizeof(STRUCT_GUILDWAREHOUSE_LOGINFO) * (MAX_GUILDWAREHOUSE_LOGPAGE_NUM - m_byLogCount))); } PACKET_CW_CLOSE PACKET_CW_OPEN(CW_GUILD, CW_GUILD_WAREHOUSE_LOGLIST_NAK ) BYTE m_byErrorCode; PACKET_CW_CLOSE PACKET_CW_OPEN(CW_GUILD, CW_DOMINATION_RETURN_HEIM_CMD) TCHAR m_ptszMemo[MAX_MEMO_LENGTH + 1]; PACKET_CW_CLOSE ////////////////////////////////////////////////////////////////////////// //////////////////////////GROUPING SYSTEM///////////////////////////////// ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// //±×·ì ½Ã½ºÅÛ Å뺸 ¸Þ¼¼Áö PACKET_CW_OPEN(CW_GROUP, CW_GROUP_LOGIN_BRD) //Á¢¼Ó Áß¿¡ ±×·ì¸É¹ö ·Î±×¿Â Å뺸 BYTE byChannel; char ptszMemeberName[MAX_CHARNAME_LENGTH+1]; PACKET_CW_CLOSE PACKET_CW_OPEN(CW_GROUP, CW_GROUP_LOGOUT_BRD) //Á¢¼Ó Áß¿¡ ±×·ì¸É¹ö ·Î±×¾Æ¿ô Å뺸 char ptszMemeberName[MAX_CHARNAME_LENGTH+1]; PACKET_CW_CLOSE PACKET_CW_OPEN(CW_GROUP, CW_GROUP_ACCUMEXP_BRD) //·Î±×Àνà ÇÏÀ§ ¸â¹ö°¡ ½×¾Æ ³õÀº °æÇèÄ¡¸¦ ¹Þ¾ÒÀ½À» Å뺸 char ptszMemeberName[MAX_CHARNAME_LENGTH+1]; DWORD accumEXP; eGROUP_STAT checkDATE; PACKET_CW_CLOSE PACKET_CW_OPEN(CW_GROUP, CW_GROUP_BONUSMONEY_BRD) //±×·ì º¸³Ê½º ÇÏÀÓ Å뺸 char ptszMemeberName[MAX_CHARNAME_LENGTH+1]; DWORD bonusMoney; PACKET_CW_CLOSE PACKET_CW_OPEN(CW_GROUP, CW_GROUP_BONUSEXP_BRD) //±×·ì º¸³Ê½º °æÇèÄ¡ Å뺸 char ptszMemeberName[MAX_CHARNAME_LENGTH+1]; DWORD bonusEXP; PACKET_CW_CLOSE PACKET_CW_OPEN(CW_GROUP, CW_GROUP_LEVELUP_BRD) //ÇÏÀ§ ¸â¹ö ·¹º§¾÷ char ptszMemeberName[MAX_CHARNAME_LENGTH+1]; BYTE charLevel; PACKET_CW_CLOSE PACKET_CW_OPEN(CW_GROUP, CW_GROUP_DEL_BRD) //¸â¹ö »èÁ¦ Å뺸 char ptszMemeberName[MAX_CHARNAME_LENGTH+1]; PACKET_CW_CLOSE PACKET_CW_OPEN(CW_GROUP, CW_GROUP_RESTOR_CMD) //¸â¹ö Á¤º¸ Àç¿äû char ptszMemeberName[MAX_CHARNAME_LENGTH+1]; PACKET_CW_CLOSE ////////////////////////////////////////////////////////////////////////// //±×·ì ¸â¹ö Ãß°¡ //¿äû PACKET_CW_OPEN(CW_GROUP, CW_GROUP_ADD_SYN) char ptszMemeberName[MAX_CHARNAME_LENGTH+1]; //¿äû¹Þ´Â Äɸ¯ÅÍ À̸§ PACKET_CW_CLOSE //¼º°ø PACKET_CW_OPEN(CW_GROUP, CW_GROUP_ADD_ACK) #ifdef _NA_0_20100527_ADD_CHAR_RELATION_MEMO DWORD charGUID; //¸É¹öµéÀÇ GUID #endif STRUCT_GROUP_MEMBER_PACKET_INFO m_MemberInfo; //¿äû ¹ÞÀº ¸É¹ö Á¤º¸ ±¸Á¶Ã¼ eGROUP_STAT m_GroupInfo; PACKET_CW_CLOSE //½ÇÆÐ PACKET_CW_OPEN(CW_GROUP, CW_GROUP_ADD_NAK) enum { NONE = 0, // none or not set // ERR_DEFAULT, // ±âŸ µîµî NO_USER, // ÇØ´çÇÏ´Â À¯Àú°¡ ¾øÀ½ ALREADY_GROUP, // ÀÌ¹Ì ±×·ì »óÅ NOT_ADD_ME, // ½º½º·Î¸¦ Ä£±¸ ¿äûÇßÀ½ NOT_MATCHING_LEVEL, // ·¹º§ÀÌ Àû´çÇÏÁö ¾Ê´Ù. GROUP_OVERFLOW, // ±×·ì Á¦ÇÑ Ãʰú(6¸í) IGNOR_ADD_MEMBER, // »ó´ë¹æÀÌ ¸É¹ö ¼ö¶ô ¿äû °ÅºÎ RES_TIME_OUT, // ¿äû ½Ã°£ Ãʰú ON_TOGGLE_ADDBLOCK, // ¸É¹ö Ãß°¡ °ÅºÎ Åä±Û ÄÑÀÖÀ½ ALREADY_GROUP_REQ, // ´Ù¸¥ ¸É¹ö·ÎºÎÅÍ ±×·ì ¿äûÁßÀÌ´Ù. BEHAVE_VENDOR_ESTABLISHER, // »óÁ¡ °³¼³Áß // MAX_COUNTS // upperbound }; char ptszMemeberName[MAX_CHARNAME_LENGTH+1]; //»èÁ¦ ¿äûÇÏ´Â Äɸ¯ÅÍ À̸§, f110811.5L, unused? BYTE m_byResult; //°á°ú °ª PACKET_CW_CLOSE ////////////////////////////////////////////////////////////////////////// //±×·ì ¸â¹ö Ãß°¡ ÀÀ´ä //¿äû PACKET_CW_OPEN(CW_GROUP, CW_GROUP_ADD_RESPONSE_SYN) char ptszMemeberName[MAX_CHARNAME_LENGTH+1]; //ÀÚ½ÅÀ» ÃÊ´ëÇÑ Äɸ¯ÅÍ À̸§ PACKET_CW_CLOSE //¼º°ø PACKET_CW_OPEN(CW_GROUP, CW_GROUP_ADD_RESPONSE_ACK) char ptszMemeberName[MAX_CHARNAME_LENGTH+1]; //ÀÚ½ÅÀ» ÃÊ´ëÇÑ Äɸ¯ÅÍ À̸§ PACKET_CW_CLOSE //½ÇÆÐ PACKET_CW_OPEN(CW_GROUP, CW_GROUP_ADD_RESPONSE_NAK) enum { ERR_DEFAULT, //¾Ë¼ö ¾ø´Â ¿À·ù RES_TIME_OUT, //¼ö¶ô ŸÀ̹ÖÀÌ Áö³µ´Ù. IGNOR_ADD_MEMBER, //°ÅÀýÀ» Çß´Ù. }; char ptszMemeberName[MAX_CHARNAME_LENGTH+1]; //ÀÚ½ÅÀ» ÃÊ´ëÇÑ Äɸ¯ÅÍ À̸§ BYTE m_byResult; //½ÇÆÐ °á°ú °ª PACKET_CW_CLOSE ////////////////////////////////////////////////////////////////////////// //±×·ì ¸â¹ö »èÁ¦ //¿äû PACKET_CW_OPEN(CW_GROUP, CW_GROUP_DEL_SYN) char ptszMemeberName[MAX_CHARNAME_LENGTH+1]; //»èÁ¦ÇÒ Äɸ¯ÅÍ À̸§ PACKET_CW_CLOSE //¼º°ø PACKET_CW_OPEN(CW_GROUP, CW_GROUP_DEL_ACK) char ptszMemeberName[MAX_CHARNAME_LENGTH+1]; //»èÁ¦µÈ Äɸ¯ÅÍ À̸§ PACKET_CW_CLOSE //½ÇÆÐ PACKET_CW_OPEN(CW_GROUP, CW_GROUP_DEL_NAK) enum { ERR_DEFAULT, //¾Ë ¼ö ¾ø´Â ÀÌÀ¯ DB_ERROR, //DB¿¡¼­ µ¥ÀÌÅÍ Ã³¸® ¿¡·¯ NOT_MEMBER_USER, //±×·ì ¸É¹ö°¡ ¾Æ´Ô }; char ptszMemeberName[MAX_CHARNAME_LENGTH+1]; //»èÁ¦µÈ Äɸ¯ÅÍ À̸§ BYTE m_byResult; //°á°ú°ª PACKET_CW_CLOSE ////////////////////////////////////////////////////////////////////////// //±×·ì ¸â¹ö ¸®½ºÆ® ¿äû //¿äû PACKET_CW_OPEN(CW_GROUP, CW_GROUP_GROUPLIST_REQ) PACKET_CW_CLOSE //¼º°ø PACKET_CW_OPEN(CW_GROUP, CW_GROUP_GROUPLIST_ANS) BYTE byGroupMemberNum; //¸É¹ö ¼ö static const size_t MAX_RECORDS = MAX_GROUP_MEMBER; STRUCT_GROUP_MEMBER_INFO sGroupMemberInfo[MAX_RECORDS]; //¸É¹ö Á¤º¸ uint16_t GetSize() const { const size_t kMinSize = sizeof(*this) - sizeof(sGroupMemberInfo); return static_cast(kMinSize + sizeof(sGroupMemberInfo[0]) * byGroupMemberNum); } PACKET_CW_CLOSE //½ÇÆÐ PACKET_CW_OPEN(CW_GROUP, CW_GROUP_GROUPLIST_NAK) enum { ERR_DEFAULT, //¾Ë¼ö¾ø´Â ¿¡·¯ NO_MEMBER_DATA, //µ¥ÀÌÅÍ ¾ø´Ù GROUP_OVERFLOW, //±×·ì¿øÀÌ ´õ ¸¹´Ù }; DWORD dwResult; //°á°ú °ª PACKET_CW_CLOSE ////////////////////////////////////////////////////////////////////////// //±×·ì ¸â¹ö »ó¼¼Á¤º¸ ¿äû //¿äû PACKET_CW_OPEN(CW_GROUP,CW_GROUP_STATUS_REQ) char m_ptszCharName[MAX_CHARNAME_LENGTH+1]; //»ó¼¼Á¤º¸ÀÇ Äɸ¯ÅÍ À̸§ PACKET_CW_CLOSE //¼º°ø PACKET_CW_OPEN(CW_GROUP, CW_GROUP_STATUS_ANS) char m_ptszCharName[MAX_CHARNAME_LENGTH+1]; //Äɸ¯ÅÍ À̸§ BYTE m_byChannel; //Äɸ¯ÅÍ À§Ä¡ ü³Î BYTE m_byZoneType; //ÇöÀç À§Ä¡(¸¶À»/Çʵå/·Îºñ...), eZONETYPE Âü°í MAPCODE m_MapCode; //ÇöÀç ¸Ê ÄÚµå DWORD m_dwZoneKey; //ÇöÀç Áö¿ª À妽º(¹èƲÁ¸ ¹øÈ£·Î »ç¿ë °¡´É) char m_tszGuildName[MAX_GUILDNAME_LENGTH+1]; //¼Ò¼ÓµÈ ±æµå¸í(¾øÀ¸¸é 0) BYTE m_byDuty; //±æµå°¡ ÀÖÀ» °æ¿ì ±æµå¿¡¼­ÀÇ ÁöÀ§. PACKET_CW_CLOSE //½ÇÆÐ PACKET_CW_OPEN(CW_GROUP, CW_GROUP_STATUS_NAK) enum { ERR_DEFAULT, //¾Ë¼ö¾ø´Â ¿¡·¯ NO_MEMBER_DATA,//µ¥ÀÌÅÍ ¾ø´Ù NOT_MEMBER, }; DWORD dwResult; //°á°ú °ª PACKET_CW_CLOSE ////////////////////////////////////////////////////////////////////////// //±×·ì ÃÊ´ë °ÅºÎ Åä±Û //¿äû PACKET_CW_OPEN( CW_GROUP, CW_GROUP_ADDBLOCK_SYN ) BOOL m_bBlock; // 0: Çã¿ë 1: °ÅºÎ PACKET_CW_CLOSE //¼º°ø PACKET_CW_OPEN( CW_GROUP, CW_GROUP_ADDBLOCK_ACK ) BOOL m_bNowBlock; //°ÅºÎ µÆÀ¸¸é TRUE, Çã¿ë µÆÀ¸¸é FALSE PACKET_CW_CLOSE //½ÇÆÐ PACKET_CW_OPEN( CW_GROUP, CW_GROUP_ADDBLOCK_NAK ) PACKET_CW_CLOSE ////////////////////////////////////////////////////////////////////////// //±×·ì ¸É¹ö ¼ö°¡ ÇöÀç Á¤»óÀÌ ¾Æ´Ò °æ¿ì ÇØ´ç À¯Àú¿¡°Ô ¾Ë·ÁÁØ´Ù. //¿äû PACKET_CW_OPEN( CW_GROUP, CW_GROUP_REWARD_FAIL_CMD ) PACKET_CW_CLOSE //------------------------------------------------------------------------------ // CW_LOTTO : ÇÏÀÓ ·Î¶Ç Ä«Å×°í¸® //------------------------------------------------------------------------------ // ÇÏÀÓ ·Î¶Ç ÀÀ¸ð ½ÃÀÛ °øÁö PACKET_CW_OPEN(CW_LOTTO, CW_LOTTO_START_BRD) WORD wDrawNum; // ȸÂ÷ PACKET_CW_CLOSE // (³») ÇÏÀÓ ·Î¶Ç Á¤º¸ ¿äû PACKET_CW_OPEN(CW_LOTTO, CW_LOTTO_INFO_SYN) BYTE bFlag; // Ŭ¶óÀÌ¾ðÆ®¸¦ À§ÇÑ ±¸ºÐ Ç÷¡±×: ±×´ë·Î ÀÀ´äÀ¸·Î Àü´Þ PACKET_CW_CLOSE // (³») ÇÏÀÓ ·Î¶Ç Á¤º¸ ÀÀ´ä PACKET_CW_OPEN(CW_LOTTO, CW_LOTTO_INFO_ACK) BYTE bFlag; // ¿äûÀ¸·Î Àü´ÞµÈ Ŭ¶óÀÌ¾ðÆ®¿ë Ç÷¡±× BYTE bStatus; // ÇöÀç ·Î¶Ç È°¼ºÈ­ »óÅ - 0:ÁøÇàÁßÀÌ ¾Æ´Ô(Ãß÷ ¶Ç´Â º¸»ó Áö±ÞÁß), 1: ÁøÇàÁß CHARGUID iCharGuid; // ij¸¯ÅÍ ID WORD wCurrentDrawNum; // ÇöÀç ȸÂ÷ INT64 i64TotalAccum; // ÇöÀç ÃÑ Àû¸³¾× BYTE bNumTickets; // ÇöÀç ¼ÒÁöÇϰí ÀÖ´Â º¹±Ç ¿ëÁö ¼ö BYTE bNumResultRecords; // °ú°Å ¸î ȸÀÇ ·Î¶Ç °á°ú µ¥ÀÌÅͰ¡ Æ÷ÇԵǾî ÀÖ´ÂÁö LottoResultRecord results[LOTTO_NUM_RECENT_DRAWS - 1]; // ÇöÀç ȸÂ÷ Á¦¿ÜÇÑ °ú°Å Ãß÷ °á°ú BYTE bNumEntryRecords; // ¸î °³ÀÇ ÀÀ¸ð µ¥ÀÌÅͰ¡ Æ÷ÇԵǾî ÀÖ´ÂÁö (ÇöÀç/°ú°Å ¸ðµÎ Æ÷ÇÔ) LottoEntryRecord entries[LOTTO_NUM_RECENT_DRAWS * LOTTO_MAX_TICKETS]; // ÀÀ¸ð ³»¿ª int GetSize() const { return (sizeof(MSG_CW_LOTTO_INFO_ACK) - (sizeof(LottoEntryRecord) * ((LOTTO_NUM_RECENT_DRAWS * LOTTO_MAX_TICKETS) - bNumEntryRecords))); } PACKET_CW_CLOSE // (³») ÇÏÀÓ ·Î¶Ç Á¤º¸ ¿À·ù ÀÀ´ä PACKET_CW_OPEN(CW_LOTTO, CW_LOTTO_INFO_NAK) enum Reason { NOT_READY // ÇÏÀÓ ·Î¶Ç°¡ ¾ÆÁ÷ ÃʱâÈ­µÇÁö ¾Ê¾Æ »ç¿ëÇÒ ¼ö ¾øÀ½ , UNKNOWN }; CHARGUID iCharGuid; // ij¸¯ÅÍ ID BYTE bReason; // ½ÇÆÐ »çÀ¯ PACKET_CW_CLOSE // ÇÏÀÓ ·Î¶Ç ¿ëÁö ȹµæ ¾Ë¸² PACKET_CW_OPEN(CW_LOTTO, CW_LOTTO_TICKET_NTF) CHARGUID iCharGuid; // ij¸¯ÅÍ ID BYTE bNumTickets; // °á°úÀûÀ¸·Î ¼ÒÁöÇϰí ÀÖ´Â º¹±Ç ¿ëÁö ¼ö PACKET_CW_CLOSE // ÇÏÀÓ ·Î¶Ç ÀÀ¸ð ¿äû PACKET_CW_OPEN(CW_LOTTO, CW_LOTTO_ENTRY_SYN) WORD wDrawNum; // ȸÂ÷ BYTE bAuto; // ÀÚµ¿ ¿©ºÎ BYTE bPickedNum[LOTTO_NUM_PICKS]; // ÀÀ¸ð ¹øÈ£ PACKET_CW_CLOSE // ÇÏÀÓ ·Î¶Ç ÀÀ¸ð Á¤»ó ÀÀ´ä PACKET_CW_OPEN(CW_LOTTO, CW_LOTTO_ENTRY_ACK) CHARGUID iCharGuid; // ij¸¯ÅÍ ID WORD wDrawNum; // ȸÂ÷ BYTE bNumTickets; // ¼Ò¸ð ÈÄ °á°úÀûÀ¸·Î ¼ÒÁöÇϰí ÀÖ´Â º¹±Ç ¿ëÁö ¼ö BYTE bAuto; // ÀÚµ¿ ¿©ºÎ BYTE bPickedNum[LOTTO_NUM_PICKS]; // ÀÀ¸ð ¹øÈ£ #ifdef _NA_0_20100115_HEIM_LOTTO_TICKET_PURCHASE INT64 i64TicketPrice; // º¹±Ç¿ëÁö Á÷Á¢ ±¸ÀԽà Â÷°¨µÈ °¡°Ý #endif PACKET_CW_CLOSE // ÇÏÀÓ ·Î¶Ç ÀÀ¸ð ¿À·ù ÀÀ´ä PACKET_CW_OPEN(CW_LOTTO, CW_LOTTO_ENTRY_NAK) enum Reason { NOT_READY // ÇÏÀÓ ·Î¶Ç°¡ ÁøÇà ÁßÀÌ ¾Æ´Ô , OUT_OF_TICKET // ÇÏÀÓ ·Î¶Ç ¿ëÁö ¾øÀ½ (_NA_0_20100115_HEIM_LOTTO_TICKET_PURCHASE »ç¿ë½Ã¿¡´Â ±¸¸Å Á¦ÇÑ Ãʰú) , NOT_ENOUGH_MONEY // º¹±Ç¿ëÁö ±¸ÀÔÀ» À§ÇÑ ÀÜ¾× ºÎÁ· (_NA_0_20100115_HEIM_LOTTO_TICKET_PURCHASE) , UNKNOWN }; CHARGUID iCharGuid; // ij¸¯ÅÍ ID BYTE bReason; // ½ÇÆÐ »çÀ¯ PACKET_CW_CLOSE // ÇÏÀÓ ·Î¶Ç Àû¸³¾× °»½Å °øÁö PACKET_CW_OPEN(CW_LOTTO, CW_LOTTO_ACCUM_BRD) WORD wDrawNum; // ȸÂ÷ INT64 i64TotalAccum; // ÇöÀç ÃÑ Àû¸³¾× PACKET_CW_CLOSE // ÇÏÀÓ ·Î¶Ç Ãß÷ Ä«¿îÆ®´Ù¿î °øÁö PACKET_CW_OPEN(CW_LOTTO, CW_LOTTO_COUNTDOWN_BRD) WORD wDrawNum; // ȸÂ÷ WORD wSeconds; // Ãß÷±îÁö ³²Àº ÃÊ ¼ö PACKET_CW_CLOSE // ÇÏÀÓ ·Î¶Ç Ãß÷/Á¾·á °øÁö PACKET_CW_OPEN(CW_LOTTO, CW_LOTTO_FINISH_BRD) WORD wDrawNum; // ȸÂ÷ BYTE bWinningNum[LOTTO_NUM_PICKS]; // ´ç÷ ¹øÈ£ PACKET_CW_CLOSE // ´ç÷ ¾È³» ÂÊÁö µµÂø ¾Ë¸² PACKET_CW_OPEN(CW_LOTTO, CW_LOTTO_NOTICE_ALM) PACKET_CW_CLOSE // ´ç÷ ¾È³» ÂÊÁö Å뺸 PACKET_CW_OPEN(CW_LOTTO, CW_LOTTO_NOTICE_NTF) LottoNoticeRecord notice; PACKET_CW_CLOSE // ´ç÷ ¾È³» ÂÊÁö ¸ñ·Ï ¿äû PACKET_CW_OPEN(CW_LOTTO, CW_LOTTO_NOTICE_LIST_SYN) PACKET_CW_CLOSE // ´ç÷ ¾È³» ÂÊÁö ¸ñ·Ï ÀÀ´ä PACKET_CW_OPEN(CW_LOTTO, CW_LOTTO_NOTICE_LIST_ACK) BYTE bNumNoticeRecords; LottoNoticeRecord notices[LOTTO_MAX_NOTICE]; // ´ç÷ ¾È³» ÂÊÁö ¸ñ·Ï int GetSize() const { return (sizeof(MSG_CW_LOTTO_NOTICE_LIST_ACK) \ - (sizeof(LottoNoticeRecord) * (LOTTO_MAX_NOTICE - bNumNoticeRecords))); } PACKET_CW_CLOSE // ´ç÷ ¾È³» ÂÊÁö ÀÐÀ½ È®ÀÎ PACKET_CW_OPEN(CW_LOTTO, CW_LOTTO_NOTICE_CONFIRM) INT64 i64Index; PACKET_CW_CLOSE #ifdef _NA_008283_20150511_NOTIFICATIONS_SYSTEM // ¾Ë¸² ¸Þ¼¼Áö PACKET_CW_OPEN(CW_NOTIFICATION, CW_NOTIFICATION_BRD) NotificationInfo info; PACKET_CW_CLOSE // Áö³­ ¾Ë¸² ¸Þ¼¼Áö ¿äû PACKET_CW_OPEN(CW_NOTIFICATION, CW_NOTIFICATION_PREV_SYN) PACKET_CW_CLOSE // Áö³­ ¾Ë¸² ¸Þ¼¼Áö ÀÀ´ä PACKET_CW_OPEN(CW_NOTIFICATION, CW_NOTIFICATION_PREV_ACK) int count; NotificationInfo infos[MAX_NOTIFICATION_COUNT]; PACKET_CW_CLOSE #endif // _NA_008283_20150511_NOTIFICATIONS_SYSTEM //////////////////////////////////////////////////////////////////////////////////////////////////// #pragma pack(pop)