#ifndef _CHAR_FRIEND_PACKET_H_ #define _CHAR_FRIEND_PACKET_H_ // CharFriendPacket.h #include #include #pragma pack(1) /* struct PktFriendAddReq : public PktBase CMD : 0x64 struct PktFriendRemoveReq : public PktBase CMD : 0x65 struct PktFriendEtc : public PktBase CMD : 0x66 struct PktFriendAck : public PktBase CMD : 0x67 struct PktFriendDB : public PktBase CMD : 0x68 Ä£±¸ °ü·Ã Operations GameServer> Ä£±¸ µî·Ï : PktFriendAddReq °ÅºÎ µî·Ï : PktFriendAddReq Ä£±¸ »èÁ¦ : PktFriendRemoveReq °ÅºÎ »èÁ¦ : PktFriendRemoveReq ±×·ì ¼³Á¤ : PktFriendEtc(Ack¾øÀ½) Client> Ä£±¸ ¸®½ºÆ® ÁÖ±â : PktFriendDB °ÅºÎ ¸®½ºÆ® Ãß±â : PktFriendDB Ä£±¸ µî·Ï Ack : PktFriendAck Ä£±¸ »èÁ¦ Ack : PktFriendAck °ÅºÎ µî·Ï Ack : PktFriendAck °ÅºÎ »èÁ¦ Ack : PktFriendAck Ä£±¸ ·Î±×ÀÎ : PktFriendAck Ä£±¸ ·Î±×¾Æ¿ô : PktFriendAck Ä£±¸ µî·Ï´çÇÔ : PktFriendAddReq DBAgent> Ä£±¸ µî·Ï : PktFriendDB °ÅºÎ µî·Ï : PktFriendDB Ä£±¸ Á¦°Å : PktFriendDB °ÅºÎ Á¦°Å : PktFriendDB ±×·ì ¼¼ÆÃ : PktFriendDB GameServer> Ä£±¸ ¸®½ºÆ® ÁÖ±â : PktFriendDB °ÅºÎ ¸®½ºÆ® ÁÖ±â : PktFriendDB */ struct DBFriend { enum { MAX_NAME = 16 }; unsigned long m_dwCID; unsigned long m_dwStatusFlag; char m_szName[MAX_NAME]; }; struct DBFriendInfo { unsigned long m_dwGID; // ±æµåÁ¤º¸. unsigned short m_wClass; // Ŭ·¡½ºÁ¤º¸. char m_cLevel; // ·¹º§Á¤º¸. }; struct FriendInfo { private: enum StatusMask { IS_LOGINED = 0x00000001, GROUP = 0x000000F0, }; public: enum { MAX_NAME = 16, MOVE_ZONE = 0x00000100, }; unsigned long m_dwCID; unsigned long m_dwStatusFlag; char m_szName[MAX_NAME]; unsigned long m_dwGID; // ±æµåÁ¤º¸. unsigned short m_wClass; // Ŭ·¡½ºÁ¤º¸. char m_cLevel; // ·¹º§Á¤º¸. unsigned long m_dwServerID; // ¼­¹ö Á¤º¸. FriendInfo() : m_dwCID(0), m_dwStatusFlag(0), m_dwGID(0), m_wClass(0), m_cLevel(0), m_dwServerID(0) { } bool IsLogined() { return (0 != (m_dwStatusFlag & IS_LOGINED)); } void SetLoginStatus(bool bLogined) { unsigned long dwMoveZone = 0; if(!bLogined) { if(m_dwStatusFlag&MOVE_ZONE ) dwMoveZone = MOVE_ZONE; } m_dwStatusFlag = bLogined ? (m_dwStatusFlag | IS_LOGINED) : (m_dwStatusFlag & (~IS_LOGINED)); m_dwStatusFlag = (m_dwStatusFlag - dwMoveZone); } unsigned long GetGroup() { return ((m_dwStatusFlag & GROUP) >> 4); } bool IsMoveZone() { if(m_dwStatusFlag & MOVE_ZONE) return true; return false; } void SetMoveZone(unsigned long dwMoveZone) { m_dwStatusFlag = (m_dwStatusFlag | MOVE_ZONE); } bool SetGroup(unsigned long dwGroup) { if(dwGroup <= 0xF) { m_dwStatusFlag = (m_dwStatusFlag & (~GROUP)) | (dwGroup << 4); return true; } return false; } }; struct DBBan { enum { MAX_NAME = 16 }; unsigned long m_dwCID; char m_szName[MAX_NAME]; }; struct DBBanInfo { unsigned long m_dwGID; // ±æµåÁ¤º¸. unsigned short m_wClass; // Ŭ·¡½ºÁ¤º¸. char m_cLevel; // ·¹º§Á¤º¸. }; struct BanInfo { enum { MAX_NAME = 16 }; unsigned long m_dwCID; char m_szName[MAX_NAME]; unsigned long m_dwGID; unsigned short m_wClass; char m_cLevel; unsigned long m_dwServerID; BanInfo() : m_dwCID(0) { } }; // Ãß°¡ ÆÐŶ struct PktFriendAddReq : public PktBase { enum { MAX_NAME = 16 }; enum CMD { ADD_FRIEND_REQ = 0, // Ä£±¸ µî·Ï (Client->GameServer), m_szName´Â µî·ÏÇÒ »ç¶÷ÀÇ À̸§. BAN_FRIEND_REQ = 1, // °ÅºÎ µî·Ï (Client->GameServer), m_szNameÀº µî·ÏÇÒ »ç¶÷ÀÇ À̸§. ADDED_INFO = 2 // Ä£±¸°¡ µî·ÏµÊ (GameServer->Client), m_szNameÀº ³ª¸¦ µî·ÏÇÑ »ç¶÷ÀÇ À̸§. }; char m_szName[MAX_NAME]; // µî·ÏÇÑ »ç¶÷ À̸§. unsigned long m_dwCID; // ADDED_INFOÀ϶§¸¸ CID¸¦ ³Ö¾î ÁØ´Ù. unsigned char m_cCmd; }; // Á¦°Å ÆÐŶ struct PktFriendRemoveReq : public PktBase { enum { MAX_NAME = 16 }; enum CMD { REMOVE_FRIEND_REQ = 0, // Ä£±¸ Á¦°Å (Client->GameServer), m_dwCID´Â Á¦°ÅÇÒ »ç¶÷ÀÇ CID. REMOVE_BAN_REQ = 1, // °ÅºÎ µî·Ï Á¦°Å (Client->GameServer), m_dwCID´Â Á¦°ÅÇÒ »ç¶÷ÀÇ CID. NOFRIEND_REQ = 2, // »ó´ëÄ£±¸ ¸®½ºÆ®¿¡¼­ ÀÚ½ÅÀ» »èÁ¦ }; char m_szName[MAX_NAME]; // »èÁ¦ÇÒ »ç¶÷ À̸§. unsigned long m_dwCID; // ´ë»óÀÚ CID; unsigned char m_cCmd; }; // ±âŸ ÆÐŶ struct PktFriendEtc : public PktBase { enum CMD { SETGROUP = 0, // ±×·ì µî·Ï (Client->GameServer), // m_dwCID´Â ±×·ì ¼¼ÆÃÇÒ »ç¶÷ÀÇ CID, m_dwData´Â ¹Ù²ð ±×·ì ¹øÈ£ }; unsigned long m_dwCID; unsigned long m_dwData; unsigned char m_cCmd; }; // Ä£±¸ °ü·Ã ÆÐŶ ( Client <--> GameServer ) struct PktFriendAck : public PktBase { enum CMD { UNKNOWN_ERROR_ACK = 0, // ¾Ë ¼ö ¾ø´Â Ä¿¸Çµå ¿¡·¯ (Ack) ADD_FRIEND_ACK = 1, // Ä£±¸ µî·Ï Ack (GameServer->Client) // °¡´ÉÇÑ ¿¡·¯ : SERVER_ERROR (¼­¹ö ¿¡·¯) // CLIENT_ERROR (Ŭ¶óÀÌ¾ðÆ®°¡ À߸øµÈ Ä¿¸Çµå¸¦ ÁÖ´Â °æ¿ì) // NOT_LOGINED (·Î±×ÀεÇÁö ¾ÊÀº ij¸¯Å͸¦ µî·ÏÇÏ·Á ÇÔ) // LIST_FULL (Ä£±¸ ¸®½ºÆ®°¡ ²Ë Â÷ ÀÖÀ½) // REJECTED (»ó´ëÀÇ °ÅºÎ ¸®½ºÆ®¿¡ ¼ÓÇØ ÀÖÀ½) // m_dwCID : µî·Ï ¼º°ø½Ã : µî·ÏÇÑ »ç¶÷ÀÇ CID, ½ÇÆÐ½Ã : 0 MOVE_BAN_TO_FRIEND = 2, // Ä£±¸ µî·Ï Ack (GameServer->Client) °ÅºÎ ¸®½ºÆ®¿¡¼­ »èÁ¦Çϰí Ä£±¸¸¦ Ãß°¡ÇÔ. // °¡´ÉÇÑ ¿¡·¯ : SERVER_ERROR (¼­¹ö ¿¡·¯) // CLIENT_ERROR (Ŭ¶óÀÌ¾ðÆ®°¡ À߸øµÈ Ä¿¸Çµå¸¦ ÁÖ´Â °æ¿ì) // NOT_LOGINED (·Î±×ÀεÇÁö ¾ÊÀº ij¸¯Å͸¦ µî·ÏÇÏ·Á ÇÔ) // LIST_FULL (Ä£±¸ ¸®½ºÆ®°¡ ²Ë Â÷ ÀÖÀ½) // REJECTED (»ó´ëÀÇ °ÅºÎ ¸®½ºÆ®¿¡ ¼ÓÇØ ÀÖÀ½) // m_dwCID : µî·Ï ¼º°ø½Ã : µî·ÏÇÑ »ç¶÷ÀÇ CID, ½ÇÆÐ½Ã : 0 REMOVE_FRIEND_ACK = 3, // Ä£±¸ Á¦°Å Ack (GameServer->Client) // °¡´ÉÇÑ ¿¡·¯ : SERVER_ERROR (¼­¹ö ¿¡·¯) // CLIENT_ERROR (Ŭ¶óÀÌ¾ðÆ®°¡ À߸øµÈ Ä¿¸Çµå¸¦ ÁÖ´Â °æ¿ì) // NOT_IN_LIST (¿äûÇϴ ij¸¯ÅͰ¡ ¸®½ºÆ®¿¡ ¾ø¾î¼­ »èÁ¦ÇÒ ¼ö ¾øÀ½) // m_dwCID : 0 ADD_BAN_ACK = 4, // °ÅºÎ µî·Ï Ack (GameServer->Client) // °¡´ÉÇÑ ¿¡·¯ : SERVER_ERROR (¼­¹ö ¿¡·¯) // CLIENT_ERROR (Ŭ¶óÀÌ¾ðÆ®°¡ À߸øµÈ Ä¿¸Çµå¸¦ ÁÖ´Â °æ¿ì) // NOT_LOGINED (·Î±×ÀεÇÁö ¾ÊÀº ij¸¯Å͸¦ µî·ÏÇÏ·Á ÇÔ) // LIST_FULL (Ä£±¸ ¸®½ºÆ®°¡ ²Ë Â÷ ÀÖÀ½) // m_dwCID : µî·Ï ¼º°ø½Ã : µî·ÏÇÑ »ç¶÷ÀÇ CID, ½ÇÆÐ½Ã : 0 MOVE_FRIEND_TO_BAN = 5, // Ä£±¸ µÕ·Ï Ack (GameServer->Client) Ä£±¸ ¸®½ºÆ®¿¡¼­ »èÁ¦ÇÏ°í °ÅºÎ¸¦ Ãß°¡ÇÔ. // °¡´ÉÇÑ ¿¡·¯ : SERVER_ERROR (¼­¹ö ¿¡·¯) // CLIENT_ERROR (Ŭ¶óÀÌ¾ðÆ®°¡ À߸øµÈ Ä¿¸Çµå¸¦ ÁÖ´Â °æ¿ì) // NOT_LOGINED (·Î±×ÀεÇÁö ¾ÊÀº ij¸¯Å͸¦ µî·ÏÇÏ·Á ÇÔ) // LIST_FULL (Ä£±¸ ¸®½ºÆ®°¡ ²Ë Â÷ ÀÖÀ½) // REJECTED (»ó´ëÀÇ °ÅºÎ ¸®½ºÆ®¿¡ ¼ÓÇØ ÀÖÀ½) // m_dwCID : µî·Ï ¼º°ø½Ã : µî·ÏÇÑ »ç¶÷ÀÇ CID, ½ÇÆÐ½Ã : 0 REMOVE_BAN_ACK = 6, // °ÅºÎ Á¦°Å Ack (GameServer->Client) // °¡´ÉÇÑ ¿¡·¯ : SERVER_ERROR (¼­¹ö ¿¡·¯) // CLIENT_ERROR (Ŭ¶óÀÌ¾ðÆ®°¡ À߸øµÈ Ä¿¸Çµå¸¦ ÁÖ´Â °æ¿ì) // NOT_IN_LIST (¿äûÇϴ ij¸¯ÅͰ¡ ¸®½ºÆ®¿¡ ¾ø¾î¼­ »èÁ¦ÇÒ ¼ö ¾øÀ½) // m_dwCID : 0 FRIEND_LOGIN = 7, // Ä£±¸ ·Î±×ÀÎ (GameServer->Client), m_dwCID´Â ·Î±×ÀÎÇÑ Ä£±¸ÀÇ CID, m_szNameÀº ·Î±×ÀÎÇÑ Ä£±¸ÀÇ À̸§ FRIEND_LOGOUT = 8, // Ä£±¸ ·Î±×¾Æ¿ô (GameServer->Client), m_dwCID´Â ·Î±×¾Æ¿ôÇÑ Ä£±¸ÀÇ CID, m_szNameÀº ·Î±×ÀÎÇÑ Ä£±¸ÀÇ À̸§ FRIEND_LOGIN_TO_GAME = 9, // Ä£±¸ ·Î±×ÀÎ (Chat->GameServer) // m_dwCID´Â ·Î±×ÀÎÇÑ Ä£±¸ÀÇ CID, m_szNameÀº ·Î±×ÀÎÇÑ Ä£±¸ÀÇ À̸§ // ÆÐŶ µÚ¿¡ ij¸¯ÅÍ CID°³¼ö(2byte unsigned long) // ij¸¯ÅÍ CID°¡ CID°³¼ö¸¸Å­ µû¶ó¿Â´Ù. ÇØ´ç ij¸¯Å͵鿡°Ô ÆÐŶÀ» Àü¼ÛÇÏ¸é µÈ´Ù. FRIEND_LOGOUT_TO_GAME = 10, // Ä£±¸ ·Î±×¾Æ¿ô (Chat->GameServer) // m_dwCID´Â ·Î±×¾Æ¿ôÇÑ Ä£±¸ÀÇ CID, m_szNameÀº ·Î±×ÀÎÇÑ Ä£±¸ÀÇ À̸§ // ÆÐŶ µÚ¿¡ ij¸¯ÅÍ CID°³¼ö(2byte unsigned long) // ij¸¯ÅÍ CID°¡ CID°³¼ö¸¸Å­ µû¶ó¿Â´Ù. ÇØ´ç ij¸¯Å͵鿡°Ô ÆÐŶÀ» Àü¼ÛÇÏ¸é µÈ´Ù. FRIEND_INFO_UPDATE = 11, // Ä£±¸ Á¤º¸ ¾÷µ¥ÀÌÆ®. BAN_INFO_UPDATE = 12, // °ÅºÎ Á¤º¸ ¾÷µ¥ÀÌÆ®. BAN_LOGIN = 13, // °ÅºÎ ·Î±×ÀÎ. (GameServer->Client) BAN_LOGOUT = 14, // °ÅºÎ ·Î±×¾Æ¿ô. (GameServer->Client) BAN_LOGIN_TO_GAME = 15, // °ÅºÎ ·Î±×ÀÎ. (Chat->GameServer) BAN_LOGOUT_TO_GAME = 16, // °ÅºÎ ·Î±×¾Æ¿ô. (Chat->GameServer) // edith 2009.08.28 NoFriend Ãß°¡ NOFRIEND_ACK = 17, // Ä£±¸ Á¦°Å Ack (GameServer->Client) // °¡´ÉÇÑ ¿¡·¯ : SERVER_ERROR (¼­¹ö ¿¡·¯) // CLIENT_ERROR (Ŭ¶óÀÌ¾ðÆ®°¡ À߸øµÈ Ä¿¸Çµå¸¦ ÁÖ´Â °æ¿ì) // NOT_IN_LIST (¿äûÇϴ ij¸¯ÅͰ¡ ¸®½ºÆ®¿¡ ¾ø¾î¼­ »èÁ¦ÇÒ ¼ö ¾øÀ½) // m_dwCID : 0 }; enum FriendERROR { SERVER_ERROR = 1, // ¼­¹ö ¿¡·¯ CLIENT_ERROR = 2, // Ŭ¶óÀÌ¾ðÆ®°¡ À߸øµÈ Ä¿¸Çµå¸¦ ÁÖ´Â °æ¿ì NOT_LOGINED = 3, // ·Î±×ÀÎÇÏÁö ¾Ê¾ÒÀ½ LIST_FULL = 4, // ¸®½ºÆ®°¡ ²Ë áÀ½ REJECTED = 5, // °ÅºÎ´çÇßÀ½ NOT_IN_LIST = 6, // ¿äûÇÏ´Â ÀÛ¾÷ÀÌ ¸®½ºÆ®¿¡ ¾øÀ½ FAIL_ENEMY = 7 // Àû±ºÀº Ãß°¡ ºÒ°¡´É }; enum { MAX_NAME = 16 }; unsigned long m_dwCID; char m_szName[MAX_NAME]; unsigned long m_dwGID; // ±æµå ¾ÆÀ̵ð. unsigned short m_wClass; // Ŭ·¡½º. char m_cLevel; // ·¹º§. unsigned long m_dwServerID; // ¼­¹ö ¾ÆÀ̵ð. unsigned char m_cCmd; }; // Ä£±¸ °ü·Ã ÆÐŶ struct PktFriendDB : public PktDD { enum CMD { ADD_FRIEND = 0, // Ä£±¸ µî·Ï (GameServer->DBAgent) Owner°¡ Reference¸¦ µî·Ï. REMOVE_FRIEND = 1, // Ä£±¸ Á¦°Å (GameServer->DBAgent) Owner°¡ Reference¸¦ Á¦°Å. À̶§´Â ReferenceUID = 0; ADD_BAN = 2, // °ÅºÎ µî·Ï (GameServer->DBAgent) Owner°¡ Reference¸¦ µî·Ï. REMOVE_BAN = 3, // °ÅºÎ Á¦°Å (GameServer->DBAgent) Owner°¡ Reference¸¦ Á¦°Å. À̶§´Â ReferenceUID = 0; SETGROUP = 4, // ±×·ì ¼¼ÆÃ (GameServer->DBAgent) // Owner°¡ Reference¸¦ m_dwData¿¡ µé¾î ÀÖ´Â ±×·ìÀ¸·Î ¼¼ÆÃ. À̶§´Â ReferenceUID = 0; FRIEND_LIST = 5, // Ä£±¸ ¸®½ºÆ® (DBAgent->GameServer, GameServer->Client) // FriendListÀÇ ¹è¿­ÀÌ ºÙ´Â´Ù. // Reference´Â ÀÇ¹Ì ¾øÀ½. m_dwData´Â µÚ¿¡ ºÙ´Â µ¥ÀÌÅÍÀÇ Å©±â. BAN_LIST = 6, // °ÅºÎ ¸®½ºÆ® (DBAgent->GameServer, GameServer->Client) // BanInfoÀÇ ¹è¿­ÀÌ ºÙ´Â´Ù. // Reference´Â ÀÇ¹Ì ¾øÀ½. m_dwData´Â µÚ¿¡ ºÙ´Â µ¥ÀÌÅÍÀÇ Å©±â. FRIEND_INFO_UPDATE = 7, // Á¤º¸ ¾÷µ¥ÀÌÆ®. FRIEND_INFO = 8, // Á¤º¸ ¾÷µ¥ÀÌÆ®. BAN_INFO = 9, // Á¤º¸ ¾÷µ¥ÀÌÆ®. }; unsigned long m_dwOwnerUID; // µî·Ï ÇÏ´Â »ç¶÷ UID unsigned long m_dwOwnerCID; // µî·Ï ÇÏ´Â »ç¶÷ CID unsigned long m_dwReferenceUID; // µî·Ï µÇ´Â »ç¶÷ UID unsigned long m_dwReferenceCID; // µî·Ï µÇ´Â »ç¶÷ CID unsigned long m_dwData; // Data unsigned long m_dwGID; // µî·Ï µÇ´Â »ç¶÷ ±æµå Á¤º¸. unsigned short m_wClass; // µî·Ï µÇ´Â »ç¶÷ Ŭ·¡½º Á¤º¸. char m_cLevel; // µî·Ï µÇ´Â »ç¶÷ ·¹º§ Á¤º¸. unsigned long m_dwServerID; // µî·Ï µÇ´Â »ç¶÷ ¼­¹ö Á¤º¸. unsigned char m_cCmd; }; #pragma pack() #endif