/* ==================================================================== * ÆÄ ÀÏ : * ¸ñ Àû : * ÀÛ ¼º ÀÚ : °ûöÁß * ÀÛ ¼º ÀÏ : 2008.02.15 * ÁÖÀÇ»çÇ× : * =================================================================== */ #pragma once #pragma pack(push,1) #include "CommonDefines.h" #include "CommonNetworkMsgStruct.h" #include "Item_Common.h" #define MAX_FRIEND 50 #define MAX_CHAT_SESSION 3 /*-- ÀϹÝäÆÃ ÆÐŶ */ struct MSG_REQ_CHAT : public MSGROOT { unsigned long emotionIdx; // Ç¥Á¤ ¿¬Ãâ ¹øÈ£ short InventoryNumber; // Àκ¥ ¸µÅ© ³Ñ¹ö unsigned long itemIndex; // ¸µÅ© ¾ÆÀÌÅÛ À妽º wchar_t Message[MAX_CHAT_BUFFER_SIZE]; // ¸Þ¼¼Áö // ½ÇÁ¦º¸³»´Â ¸Þ¼¼Áö Å©±â unsigned long GetMsgLength( ) { return sizeof(MSG_REQ_CHAT) - sizeof(Message) + ::wcslen(Message)*sizeof(wchar_t); } }; #define ERROR_CHAT_SUCCESS 0 // ¼º°ø #define ERROR_CHAT_BLOCK 1 // äÆÃ ±ÝÁö Àû¿ëÁß #define ERROR_CHAT_FAIL 2 // ½ÇÆÐ struct MSG_RES_CHAT : public MSG_ERROR { time_t validTrue; // À¯È¿¸¸±â }; struct MSG_SYN_CHAT : public MSGROOT { unsigned long CharacterIdx; // º¸³½ ij¸¯ÅÍ °íÀ¯¹øÈ£ unsigned long emotionIdx; // Ç¥Á¤ ¿¬Ãâ ¹øÈ£ unsigned short Job; // Á÷¾÷ sInventory inventory; // ¾ÆÀÌÅÛ Á¤º¸ wchar_t Name[MAX_NAME_BUFFER_SIZE]; // º¸³½ ij¸¯ÅÍ À̸§ wchar_t Message[MAX_CHAT_BUFFER_SIZE]; // ¸Þ¼¼Áö // ½ÇÁ¦º¸³»´Â ¸Þ¼¼Áö Å©±â unsigned long GetMsgLength( ) { return sizeof(MSG_SYN_CHAT) - sizeof(Message) + ::wcslen(Message)*sizeof(wchar_t); } }; /*-- ¿ÜÄ¡±â ÆÐŶ */ struct MSG_REQ_CHAT_SHOUT : public MSGROOT { wchar_t Message[MAX_CHAT_BUFFER_SIZE]; // ¸Þ¼¼Áö // ½ÇÁ¦º¸³»´Â ¸Þ¼¼Áö Å©±â unsigned long GetMsgLength( ) { return sizeof(MSG_REQ_CHAT_SHOUT) - sizeof(Message) + ::wcslen(Message)*sizeof(wchar_t); } }; struct MSG_SYN_CHAT_SHOUT : public MSGROOT { unsigned long CharacterIdx; // º¸³½ Ç÷¹À̾î À妽º unsigned short Job; // Á÷¾÷ wchar_t Name[MAX_NAME_BUFFER_SIZE]; // º¸³½ Ç÷¹À̾î À̸§ wchar_t Message[MAX_CHAT_BUFFER_SIZE]; // ¸Þ¼¼Áö // ½ÇÁ¦º¸³»´Â ¸Þ¼¼Áö Å©±â unsigned long GetMsgLength( ) { return sizeof(MSG_SYN_CHAT_SHOUT) - sizeof(Message) + ::wcslen(Message)*sizeof(wchar_t); } }; /*-- °Å·¡Ã¤ÆÃ ÆÐŶ */ struct MSG_REQ_CHAT_TRADE : public MSGROOT { short InventoryNumber; unsigned long itemIndex; wchar_t Message[MAX_CHAT_BUFFER_SIZE]; /// ½ÇÁ¦ º¸³»´Â ¸Þ¼¼Áö Å©±â unsigned long GetMsgLength() { return sizeof(MSG_REQ_CHAT_TRADE) - sizeof(Message) + ::wcslen(Message)*sizeof(wchar_t); } }; struct MSG_SYN_CHAT_TRADE : public MSGROOT { sInventory inventory; unsigned short Job; wchar_t Name[MAX_NAME_BUFFER_SIZE]; wchar_t Message[MAX_CHAT_BUFFER_SIZE]; /// ½ÇÁ¦ º¸³»´Â ¸Þ¼¼Áö Å©±â unsigned long GetMsgLength() { return sizeof(MSG_SYN_CHAT_TRADE) - sizeof(Message) + ::wcslen(Message)*sizeof(wchar_t); } }; /*-- ±Ó¼Ó¸»(±Í¿§¸») ÆÐŶ */ struct MSG_REQ_CHAT_WHISPER : public MSGROOT { short InventoryNumber; unsigned long itemIndex; wchar_t Name[MAX_NAME_BUFFER_SIZE]; // ¹Þ´Â Ç÷¹À̾î À̸§ wchar_t Message[MAX_CHAT_BUFFER_SIZE]; // ¸Þ¼¼Áö // ½ÇÁ¦º¸³»´Â ¸Þ¼¼Áö Å©±â unsigned long GetMsgLength( ) { return sizeof(MSG_REQ_CHAT_WHISPER) - sizeof(Message) + ::wcslen(Message)*sizeof(wchar_t); } }; #define ERROR_CHAT_WHISPER_SUCCESS 0 // ¼º°ø #define ERROR_CHAT_WHISPER_CHARACTER_NAME 1 // Á¸ÀçÇÏÁö ¾Ê´Â ij¸¯ÅÍ À̸§ #define ERROR_CHAT_WHISPER_DISCONNECT 2 // °ÔÀÓ¿¡ Á¢¼ÓÇϰí ÀÖÁö ¾ÊÀ½ #define ERROR_CHAT_WHISPER_NO_MESSAGE 3 // ¸Þ½ÃÁöÀÔ·Â ¾øÀ½ #define ERROR_CHAT_WHISPER_INPUT_TIME 4 // ¸Þ½ÃÁö ÀԷ½ð£ÀÌ ÂªÀ½ #define ERROR_CHAT_WHISPER_MYSELF 5 // ÀÚ±âÀڽſ¡°Ô º¸³»±â #define ERROR_CHAT_WHISPER_OPTIONREFUSE 6 // »ó´ë¹æ ¿É¼Ç °ÅºÎ »óÅ struct MSG_RES_CHAT_WHISPER : public MSG_ERROR { sInventory inventory; unsigned short Job; // ¹Þ´Â Ç÷¹À̾î Á÷¾÷ wchar_t Name[MAX_NAME_BUFFER_SIZE]; // ¹Þ´Â Ç÷¹À̾î À̸§ wchar_t Message[MAX_CHAT_BUFFER_SIZE]; // ¸Þ¼¼Áö // ½ÇÁ¦º¸³»´Â ¸Þ¼¼Áö Å©±â unsigned long GetMsgLength( ) { return sizeof(MSG_RES_CHAT_WHISPER) - sizeof(Message) + ::wcslen(Message)*sizeof(wchar_t); } }; struct MSG_SYN_CHAT_WHISPER : public MSGROOT { sInventory inventory; unsigned short Job; // º¸³½ Ç÷¹À̾î Á÷¾÷ wchar_t Name[MAX_NAME_BUFFER_SIZE]; // º¸³½ Ç÷¹À̾î À̸§ wchar_t Message[MAX_CHAT_BUFFER_SIZE]; // ¸Þ¼¼Áö // ½ÇÁ¦º¸³»´Â ¸Þ¼¼Áö Å©±â unsigned long GetMsgLength( ) { return sizeof(MSG_SYN_CHAT_WHISPER) - sizeof(Message) + ::wcslen(Message)*sizeof(wchar_t); } }; /*-- Ä£±¸ ÆÐŶ - ¸ñ·Ï/Ãß°¡/»èÁ¦/°»½Å */ #define ERROR_CHAT_FRIEND_SUCCESS 0 // ¼º°ø #define ERROR_CHAT_FRIEND_CHARACTER_NAME 1 // Á¸ÀçÇÏÁö ¾Ê´Â ij¸¯ÅÍ À̸§ #define ERROR_CHAT_FRIEND_OVER1 2 // µî·Ï°¹¼ö Ãʰú #define ERROR_CHAT_FRIEND_OVER2 3 // µî·Ï°¹¼ö Ãʰú #define ERROR_CHAT_FRIEND_UNKNOWN 4 // ¾Ë¼ö¾ø´Â ¿À·ù struct MSG_REQ_FRIEND_LIST : public MSGROOT {}; struct MSG_RES_FRIEND_LIST : public MSGROOT { long RowCount; // ¿µÇâ¹ÞÀº Çà °¹¼ö struct { long Idx; // °íÀ¯¹øÈ£ unsigned long CharacterIdx; // ij¸¯ÅÍ °íÀ¯¹øÈ£ wchar_t CharacterName[ MAX_NAME_BUFFER_SIZE ]; // ij¸¯ÅÍ À̸§(Ä£±¸) char Race; // Á¾Á· char Gender; // ¼ºº° char Level; // ·¹º§ unsigned short Job; // Á÷¾÷(ePLAYER_JOB) short MapNum; // ¸Ê(À§Ä¡) DWORD ChannelNum; // Á¢¼Ó»óÅÂ(0Á¢¼Ó¾ÈµÊ/ä³Î¹øÈ£) BYTE Status; // Ä£±¸»óÅÂ(0µî·Ï¿Ï·á/1µî·Ï½Åû) BYTE Block; // Â÷´Ü»óÅÂ(0Â÷´Ü¾ÈÇÔ/1Â÷´ÜÇÔ) } table[1]; }; struct MSG_REQ_FRIEND_ADD : public MSGROOT { wchar_t Name[MAX_NAME_BUFFER_SIZE]; // ij¸¯ÅÍ À̸§(Ä£±¸) }; struct MSG_RES_FRIEND_ADD : public MSG_ERROR {}; struct MSG_REQ_FRIEND_DEL : public MSGROOT { long Idx; // °íÀ¯¹øÈ£ }; struct MSG_REQ_FRIEND_REP : public MSGROOT { long Idx; // °íÀ¯¹øÈ£ }; // Ä£±¸ Á¢¼Ó ¿©ºÎ struct MSG_SYN_FRIEND_CONNECT : public MSGROOT { unsigned long characterIndex; char level; // ij¸¯ÅÍ ·¹º§ unsigned long job; // ij¸¯ÅÍ Á÷¾÷(ePLAYER_JOB) unsigned short mapNum; // ij¸¯ÅÍ ¸Ê(À§Ä¡) BYTE connect; DWORD channelNum; }; /*-- ÆÄƼ ÆÐŶ */ struct MSG_REQ_CHAT_PARTY : public MSGROOT { short InventoryNumber; // Àκ¥ ¸µÅ© ³Ñ¹ö unsigned long itemIndex; wchar_t Message[MAX_CHAT_BUFFER_SIZE]; // ¸Þ¼¼Áö // ½ÇÁ¦º¸³»´Â ¸Þ¼¼Áö Å©±â unsigned long GetMsgLength( ) { return sizeof(MSG_REQ_CHAT_PARTY) - sizeof(Message) + ::wcslen(Message)*sizeof(wchar_t); } }; struct MSG_SYN_CHAT_PARTY : public MSGROOT { unsigned long playerIndex; // º¸³½ Ç÷¹À̾î À妽º unsigned short job; // Á÷¾÷ sInventory inventory; // ¾ÆÀÌÅÛ Á¤º¸ wchar_t Name[MAX_NAME_BUFFER_SIZE]; // º¸³½ Ç÷¹À̾î À̸§ wchar_t Message[MAX_CHAT_BUFFER_SIZE]; // ¸Þ¼¼Áö // ½ÇÁ¦º¸³»´Â ¸Þ¼¼Áö Å©±â unsigned long GetMsgLength( ) { return sizeof(MSG_SYN_CHAT_PARTY) - sizeof(Message) + ::wcslen(Message)*sizeof(wchar_t); } }; struct MSG_SYN_CHAT_PARTYUNION : public MSGROOT { unsigned long playerIndex; unsigned short job; // Á÷¾÷ sInventory inventory; // ¾ÆÀÌÅÛ Á¤º¸ wchar_t Name[MAX_NAME_BUFFER_SIZE]; // º¸³½ Ç÷¹À̾î À̸§ wchar_t Message[MAX_CHAT_BUFFER_SIZE]; // ¸Þ¼¼Áö // ½ÇÁ¦º¸³»´Â ¸Þ¼¼Áö Å©±â unsigned long GetMsgLength( ) { return sizeof(MSG_SYN_CHAT_PARTYUNION) - sizeof(Message) + ::wcslen(Message)*sizeof(wchar_t); } }; /*-- ±æµå ÆÐŶ */ struct MSG_REQ_CHAT_GUILD : public MSGROOT { short InventoryNumber; // Àκ¥ ¸µÅ© ³Ñ¹ö unsigned long itemIndex; wchar_t Message[MAX_CHAT_BUFFER_SIZE]; // ¸Þ¼¼Áö // ½ÇÁ¦º¸³»´Â ¸Þ¼¼Áö Å©±â unsigned long GetMsgLength( ) { return sizeof(MSG_REQ_CHAT_GUILD) - sizeof(Message) + ::wcslen(Message)*sizeof(wchar_t); } }; struct MSG_SYN_CHAT_GUILD : public MSGROOT { sInventory inventory; // ¾ÆÀÌÅÛ Á¤º¸ unsigned short job; // Á÷¾÷ wchar_t Name[MAX_NAME_BUFFER_SIZE]; // º¸³½ Ç÷¹À̾î À̸§ wchar_t Message[MAX_CHAT_BUFFER_SIZE]; // ¸Þ¼¼Áö // ½ÇÁ¦º¸³»´Â ¸Þ¼¼Áö Å©±â unsigned long GetMsgLength( ) { return sizeof(MSG_SYN_CHAT_GUILD) - sizeof(Message) + ::wcslen(Message)*sizeof(wchar_t); } }; ////////////////////////////////////////////////////////// // GAME SYN struct MSG_SYN_POSTCHAT_WHISPER : public MSGROOT { sInventory inventory; // Àκ¥Á¤º¸ unsigned long senderIndex; // º¸³½ À¯Àú unsigned short senderJob; // º¸³½ À¯Àú Á÷¾÷ wchar_t senderName[MAX_NAME_BUFFER_SIZE]; // º¸³½ Ç÷¹À̾î À̸§ wchar_t recvName[MAX_NAME_BUFFER_SIZE]; // ¹Þ´Â Ç÷¹À̾î À̸§ wchar_t message[MAX_CHAT_BUFFER_SIZE]; // ¸Þ¼¼Áö // ½ÇÁ¦º¸³»´Â ¸Þ¼¼Áö Å©±â unsigned long GetMsgLength( ) { return sizeof(MSG_SYN_POSTCHAT_WHISPER) - sizeof(message) + ::wcslen(message)*sizeof(wchar_t); } }; struct MSG_SYN_POSTCHAT_WHISPERRESULT : public MSGROOT { sInventory inventory; // Àκ¥Á¤º¸ int error; // °á°ú unsigned long senderIndex; // º¸³½ À¯Àú unsigned short recvJob; // ¹Þ´Â Ç÷¹À̾î Á÷¾÷ wchar_t recvName[MAX_NAME_BUFFER_SIZE]; // ¹Þ´Â Ç÷¹À̾î À̸§ wchar_t message[MAX_CHAT_BUFFER_SIZE]; // ¸Þ¼¼Áö // ½ÇÁ¦º¸³»´Â ¸Þ¼¼Áö Å©±â unsigned long GetMsgLength( ) { return sizeof(MSG_SYN_POSTCHAT_WHISPERRESULT) - sizeof(message) + ::wcslen(message)*sizeof(wchar_t); } }; // NM_CHAT_SYSTEM_SYN ÂüÁ¶ struct MSG_SYN_CHAT_SYSTEM : public MSGROOT { wchar_t characterName[ MAX_NAME_BUFFER_SIZE ]; // ij¸¯ÅÍ À̸§ sInventory inventory; // Àκ¥Å丮 }; // TODO - ¿ìÆí½Ã½ºÅÛ - ÆÐŶ ±¸Á¶Ã¼ #define MAIL_DEFAULT_CHARGE 100 // ±âº» ¼ö¼ö·á #define MAIL_ITEM_CHARGE 300 // ¾ÆÀÌÅÛ Á¾·ù´ç ¼ö¼ö·á #define POST_TYPE_NORMAL 0 // ¿ìÆí #define POST_TYPE_AGENT_CANCEL 1 // ÆÇ¸Å´ëÇà µî·ÏÃë¼Ò #define POST_TYPE_AGENT_SALE 2 // ÆÇ¸Å´ëÇà ÆÇ¸Å¿Ï·á #define POST_TYPE_AGENT_PURCHASE 3 // ÆÇ¸Å´ëÇà ±¸ÀÔ¿Ï·á struct POST_CONTENT { wchar_t title[ LEN_POST_TITLE ]; // Á¦¸ñ wchar_t message[ MAX_POST_MESSAGE ]; // ¸Þ½ÃÁö }; struct POST_RECEIPT { long price; // ±Ý¾× long salesCharges; // ¼ö¼ö·á sInventory inventory; // ¾ÆÀÌÅÛ - ÆÇ¸ÅÇÑ ¾ÆÀÌÅÛ }; struct POST_OPEN_RESULT { long idx; // °íÀ¯¹øÈ£ SYSTEMTIME registerDate; // µî·ÏÀÏ long validThru; // À¯È¿¸¸±â BYTE type; // Á¾·ù(0¿ìÆí, 1µî·ÏÃë¼Ò, 2ÆÇ¸Å¿Ï·á, 3±¸ÀÔ¿Ï·á) BYTE status; // »óÅÂ(0ÀÐÁö¾ÊÀ½,1ÀÐÀ½,2»èÁ¦,3À¯È¿¸¸±â) wchar_t fromName[ LEN_POST_NAME ]; // ij¸¯ÅÍ À̸§(º¸³½/±¸¸Å) union { POST_CONTENT content; // ¿ìÆí ³»¿ë POST_RECEIPT receipt; // ÆÇ¸Å´ëÇà ¿µ¼öÁõ }; // ÷ºÎ sInventory inventory1; // ¾ÆÀÌÅÛ Á¤º¸ sInventory inventory2; // ¾ÆÀÌÅÛ Á¤º¸ sInventory inventory3; // ¾ÆÀÌÅÛ Á¤º¸ long money; // µ· }; // NM_CHAT_POST_OPEN_REQ ÂüÁ¶ #define ERROR_CHAT_POST_OPEN_SUCCESS 0 // ¼º°ø #define ERROR_CHAT_POST_OPEN_FAIL 1 // ½ÇÆÐ struct MSG_REQ_CHAT_POST_OPEN : public MSGROOT { long startPage; }; struct MSG_RES_CHAT_POST_OPEN : public MSG_ERROR { long startPage; long endPage; long noneRead; long RowCount; // ¿µÇâ¹ÞÀº Çà ¼ö POST_OPEN_RESULT Result[1]; // °á°ú unsigned long GetMsgLength( ) { return sizeof(MSG_RES_CHAT_POST_OPEN) - sizeof(Result) + (RowCount * sizeof(Result)); } }; // NM_CHAT_POST_CLOSE_REQ ÂüÁ¶ #define ERROR_CHAT_POST_CLOSE_SUCCESS 0 // ¼º°ø #define ERROR_CHAT_POST_CLOSE_FAIL 1 // ½ÇÆÐ struct MSG_REQ_CHAT_POST_CLOSE : public MSGROOT {}; struct MSG_RES_CHAT_POST_CLOSE : public MSG_ERROR {}; // NM_CHAT_POST_READ_REQ ÂüÁ¶ #define ERROR_CHAT_POST_READ_SUCCESS 0 // ¼º°ø #define ERROR_CHAT_POST_READ_FAIL 1 // ½ÇÆÐ struct MSG_REQ_CHAT_POST_READ : public MSGROOT { long idx; // °íÀ¯¹øÈ£ }; struct MSG_RES_CHAT_POST_READ : public MSG_ERROR { long noneRead; // ÀÐÁö¾ÊÀº ¿ìÆí }; // NM_CHAT_POST_WRITE_REQ ÂüÁ¶ #define ERROR_CHAT_POST_WRITE_SUCCESS 0 // ¼º°ø #define ERROR_CHAT_POST_WRITE_FAIL 1 // ½ÇÆÐ #define ERROR_CHAT_POST_WRITE_NOT_EXISTS 2 // ½ÇÆÐ - Á¸ÀçÇÏÁö ¾Ê´Â ij¸¯ÅÍ #define ERROR_CHAT_POST_WRITE_UNKNOW 3 // ½ÇÆÐ - ¾Ë¼ö¾ø´Â ¿À·ù(DB) #define ERROR_CHAT_POST_WRITE_TRADE_MONEY 4 // ½ÇÆÐ - ÃÖ´ë °Å·¡±Ý¾× Ãʰú #define ERROR_CHAT_POST_WRITE_EXCHANGE 5 // ½ÇÆÐ - °Å·¡ºÒ°¡ ¾ÆÀÌÅÛ struct MSG_REQ_CHAT_POST_WRITE : public MSGROOT { wchar_t name[ LEN_POST_NAME ]; // º¸³¾ - ij¸¯ÅÍ À̸§ wchar_t title[ LEN_POST_TITLE ]; // Á¦¸ñ BYTE rowCount; // Àû¿ë - Àκ¥Å丮 ¼ö short inventoryNumber1; // Àκ¥Å丮 - ¹øÈ£(½½·Ô) short inventoryNumber2; // " short inventoryNumber3; // " unsigned long money; // µ· wchar_t message[ LEN_POST_MESSAGE ]; // ¸Þ½ÃÁö }; struct MSG_RES_CHAT_POST_WRITE : public MSG_ERROR {}; // NM_CHAT_POST_DOWNLOAD_REQ ÂüÁ¶ #define ERROR_CHAT_POST_DOWNLOAD_SUCCESS 0 // ¼º°ø #define ERROR_CHAT_POST_DOWNLOAD_FAIL 1 // ½ÇÆÐ #define ERROR_CHAT_POST_DOWNLOAD_UNKNOWN 2 // ½ÇÆÐ-¾Ë¼ö¾ø´Â ¿À·ù struct MSG_REQ_CHAT_POST_DOWNLOAD : public MSGROOT { long idx; // °íÀ¯¹øÈ£ short inventoryNumber1; // Àκ¥Å丮 ¹øÈ£1(½½·Ô) short inventoryNumber2; // Àκ¥Å丮 ¹øÈ£2(½½·Ô) short inventoryNumber3; // Àκ¥Å丮 ¹øÈ£3(½½·Ô) BYTE money; // µ· }; struct MSG_RES_CHAT_POST_DOWNLOAD : public MSG_ERROR { BYTE money; // ¹ÞÀº±Ý¾× ¼ö·É¿©ºÎ(0¹ÞÁö¾ÊÀ½ / 1¹ÞÀ½) BYTE rowCount; sInventory inventory[1]; unsigned long GetMsgLength( ) { return sizeof(MSG_RES_CHAT_POST_DOWNLOAD) - sizeof(inventory) + (rowCount * sizeof(inventory)); } }; // NM_CHAT_POST_DELETE_REQ ÂüÁ¶ #define ERROR_CHAT_POST_DELETE_SUCCESS 0 // ¼º°ø #define ERROR_CHAT_POST_DELETE_FAIL 1 // ½ÇÆÐ struct MSG_REQ_CHAT_POST_DELETE : public MSGROOT { long startPage; BYTE rowCount; // Àû¿ë - ¿ìÆí ¼ö long idx[MAX_POST_DELETE]; // °íÀ¯¹øÈ£ - ÃÖ´ë MAX_POST_DELETE(10) ±îÁö. unsigned long GetMsgLength( ) { return sizeof(MSG_REQ_CHAT_POST_DELETE) - sizeof(idx) + (rowCount * sizeof(long)); } }; struct MSG_RES_CHAT_POST_DELETE : public MSG_ERROR { long startPage; long endPage; long noneRead; BYTE RowCount; // ¸ñ·Ï ¼ö. POST_OPEN_RESULT Result[1]; // »èÁ¦ÈÄ ¸ñ·Ï. unsigned long GetMsgLength( ) { return sizeof(MSG_RES_CHAT_POST_DELETE) - sizeof(Result) + (RowCount * sizeof(Result)); } }; // NM_CHAT_POST_RECEIVED_SYN struct MSG_SYN_CHAT_POST_RECEIVED : public MSGROOT {}; // ij½Ã¾ÆÀÌÅÛ-¸Þ°¡Æù struct MSG_REQ_CHAT_MEGAPHONE : public MSGROOT { unsigned long InventoryIdx; // Àκ¥Å丮 °íÀ¯¹øÈ£(DB) unsigned long EmotionIdx; // Ç¥Á¤ ¿¬Ãâ ¹øÈ£ short InventoryNumber; // Àκ¥ ¸µÅ© ³Ñ¹ö unsigned long ItemIndex; // ¸µÅ© ¾ÆÀÌÅÛ À妽º wchar_t Message[MAX_CHAT_BUFFER_SIZE]; // ¸Þ¼¼Áö // ½ÇÁ¦º¸³»´Â ¸Þ¼¼Áö Å©±â unsigned long GetMsgLength( ) { return sizeof(MSG_REQ_CHAT_MEGAPHONE) - sizeof(Message) + ::wcslen(Message)*sizeof(wchar_t); } }; #define ERROR_CHAT_MEGAPHONE_SUCCESS 0 // ¼º°ø #define ERROR_CHAT_MEGAPHONE_BLOCK 1 // äÆÃ ±ÝÁö Àû¿ëÁß #define ERROR_CHAT_MEGAPHONE_COOLTIME 2 // ÄðŸÀÓ Àû¿ëÁß #define ERROR_CHAT_MEGAPHONE_FAIL 3 // ½ÇÆÐ struct MSG_RES_CHAT_MEGAPHONE : public MSG_ERROR { time_t validTrue; // À¯È¿¸¸±â }; struct MSG_SYN_CHAT_MEGAPHONE : public MSGROOT { unsigned long ChannenNo; // ä³Î¹øÈ£ unsigned long CharacterIdx; // º¸³½ ij¸¯ÅÍ °íÀ¯¹øÈ£ unsigned long EmotionIdx; // Ç¥Á¤ ¿¬Ãâ ¹øÈ£ unsigned short Job; // Á÷¾÷ sInventory Inventory; // ¾ÆÀÌÅÛ Á¤º¸ wchar_t Name[MAX_NAME_BUFFER_SIZE]; // º¸³½ ij¸¯ÅÍ À̸§ wchar_t Message[MAX_CHAT_BUFFER_SIZE]; // ¸Þ¼¼Áö // ½ÇÁ¦º¸³»´Â ¸Þ¼¼Áö Å©±â unsigned long GetMsgLength( ) { return sizeof(MSG_SYN_CHAT_MEGAPHONE) - sizeof(Message) + ::wcslen(Message)*sizeof(wchar_t); } }; // ¿ÀÅä´õ¹Ì °ø°Ý½Ã struct MSG_SYN_CHAT_AUTODUMMY : public MSGROOT { }; #pragma pack(pop)