#ifndef _CHAR_FRIEND_PACKET_H_ #define _CHAR_FRIEND_PACKET_H_ // CharFriendPacket.h #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 FriendInfo { private: enum StatusMask { IS_LOGINED = 0x00000001, GROUP = 0x000000F0 }; public: enum { MAX_NAME = 16 }; unsigned long m_dwStatusFlag; char m_szName[MAX_NAME]; bool IsLogined() { return (0 != (m_dwStatusFlag & IS_LOGINED)); } void SetLoginStatus(bool bLogined) { if(bLogined) { m_dwStatusFlag |= IS_LOGINED; } else { m_dwStatusFlag &= ~IS_LOGINED; } } unsigned long GetGroup() { return ((m_dwStatusFlag & GROUP) >> 4); } bool SetGroup(unsigned long dwGroup) { if(0xF < dwGroup) { return false; } m_dwStatusFlag = (m_dwStatusFlag & (~GROUP)) | (dwGroup << 4); return true; } }; struct BanInfo { enum { MAX_NAME = 16 }; char m_szName[MAX_NAME]; }; // Ãß°¡ ÆÐŶ 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 char m_cCmd; }; // Á¦°Å ÆÐŶ struct PktFriendRemoveReq : public PktBase { enum CMD { REMOVE_FRIEND_REQ = 0, // Ä£±¸ Á¦°Å (Client->GameServer), m_dwCID´Â Á¦°ÅÇÒ »ç¶÷ÀÇ CID. REMOVE_BAN_REQ = 1, // °ÅºÎ µî·Ï Á¦°Å (Client->GameServer), m_dwCID´Â Á¦°ÅÇÒ »ç¶÷ÀÇ CID. }; 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 { ADD_FRIEND_ACK = 0, // Ä£±¸ µî·Ï Ack (GameServer->Client) // °¡´ÉÇÑ ¿¡·¯ : SERVER_ERROR (¼­¹ö ¿¡·¯) // NOT_LOGINED (·Î±×ÀεÇÁö ¾ÊÀº ij¸¯Å͸¦ µî·ÏÇÏ·Á ÇÔ) // REJECTED (°ÅºÎ ¸®½ºÆ®¿¡ ÀÖÀ½) // LIST_FULL (Ä£±¸ ¸®½ºÆ®°¡ ²Ë Â÷ ÀÖÀ½) REMOVE_FRIEND_ACK = 1, // Ä£±¸ Á¦°Å Ack (GameServer->Client) // °¡´ÉÇÑ ¿¡·¯ : SERVER_ERROR (¼­¹ö ¿¡·¯) ADD_BAN_ACK = 2, // °ÅºÎ µî·Ï Ack (GameServer->Client) // °¡´ÉÇÑ ¿¡·¯ : SERVER_ERROR (¼­¹ö ¿¡·¯) // NOT_LOGINED (·Î±×ÀεÇÁö ¾ÊÀº ij¸¯Å͸¦ µî·ÏÇÏ·Á ÇÔ) // LIST_FULL (Ä£±¸ ¸®½ºÆ®°¡ ²Ë Â÷ ÀÖÀ½) REMOVE_BAN_ACK = 3, // °ÅºÎ Á¦°Å Ack (GameServer->Client) // °¡´ÉÇÑ ¿¡·¯ : SERVER_ERROR (¼­¹ö ¿¡·¯) FRIEND_LOGIN = 4, // Ä£±¸ ·Î±×ÀÎ (GameServer->Client), m_dwCID´Â ·Î±×ÀÎÇÑ Ä£±¸ÀÇ CID FRIEND_LOGOUT = 5 // Ä£±¸ ·Î±×¾Æ¿ô (GameServer->Client), m_dwCID´Â ·Î±×¾Æ¿ôÇÑ Ä£±¸ÀÇ CID }; enum FriendERROR { SERVER_ERROR = 1, NOT_LOGINED = 2, REJECTED = 3, LIST_FULL = 4 }; unsigned long m_dwCID; unsigned char m_cCmd; }; // Ä£±¸ °ü·Ã ÆÐŶ struct PktFriendDB : public PktBase { enum CMD { ADD_FRIEND = 0, // Ä£±¸ µî·Ï (GameServer->DBAgent) Owner°¡ Reference¸¦ µî·Ï. REMOVE_FRIEND = 1, // Ä£±¸ Á¦°Å (GameServer->DBAgent) Owner°¡ Reference¸¦ Á¦°Å. ADD_BAN = 2, // °ÅºÎ µî·Ï (GameServer->DBAgent) Owner°¡ Reference¸¦ µî·Ï. REMOVE_BAN = 3, // °ÅºÎ Á¦°Å (GameServer->DBAgent) Owner°¡ Reference¸¦ Á¦°Å. SETGROUP = 4, // ±×·ì ¼¼ÆÃ (GameServer->DBAgent) // Owner°¡ Reference¸¦ m_dwData¿¡ µé¾î ÀÖ´Â ±×·ìÀ¸·Î ¼¼ÆÃ. FRIEND_LIST = 5, // Ä£±¸ ¸®½ºÆ® (DBAgent->GameServer, GameServer->Client) // CIDTable¿¡¼­ SerializeOutÇÑ µ¥ÀÌÅͰ¡ µÚ¿¡ ºÙ´Â´Ù. // Reference´Â ÀÇ¹Ì ¾øÀ½. m_dwData´Â µÚ¿¡ ºÙ´Â µ¥ÀÌÅÍÀÇ Å©±â. BAN_LIST = 6, // °ÅºÎ ¸®½ºÆ® (DBAgent->GameServer, GameServer->Client) // CIDTable¿¡¼­ SerializeOutÇÑ µ¥ÀÌÅͰ¡ µÚ¿¡ ºÙ´Â´Ù. // Reference´Â ÀÇ¹Ì ¾øÀ½. m_dwData´Â µÚ¿¡ ºÙ´Â µ¥ÀÌÅÍÀÇ Å©±â. }; unsigned long m_dwOwnerUID; // µî·Ï ÇÏ´Â »ç¶÷ UID unsigned long m_dwOwnerCID; // µî·Ï ÇÏ´Â »ç¶÷ CID unsigned long m_dwReferenceCID; // µî·Ï µÇ´Â »ç¶÷ CID unsigned long m_dwData; // Data unsigned char m_cCmd; }; #pragma pack() #endif