#ifndef _OLD_ITEM_STRUCTS_H_ #define _OLD_ITEM_STRUCTS_H_ namespace OldItem { #pragma pack(1) struct ItemPos { unsigned short m_cPos : 4; // ¾ÆÀÌÅÛ Æ÷Áö¼Ç (Equip, Inven...) (0~15) unsigned short m_cIndex : 12; // ¾ÆÀÌÅÛ À妽º (0~4095) ItemPos() : m_cPos(0), m_cIndex(0) { } ItemPos(unsigned char cPos, unsigned short usIndex) : m_cPos(cPos), m_cIndex(usIndex) { } inline void SetPos(unsigned short wIndex) { m_cIndex = wIndex; } inline void SetPos(unsigned char cXIndex, unsigned char cYIndex, unsigned char cZIndex); inline void GetPos(unsigned char& cXIndex, unsigned char& cYIndex, unsigned char& cZIndex) const; inline unsigned char GetXIndex(void) const { return (m_cIndex & 0x00F); } inline unsigned char GetYIndex(void) const { return (m_cIndex & 0x0F0) >> 4; } inline unsigned char GetZIndex(void) const { return (m_cIndex & 0xF00) >> 8; } inline void SetXIndex(unsigned char cXIndex) { m_cIndex = (m_cIndex & 0xFF0) + cXIndex; } inline void SetYIndex(unsigned char cYIndex) { m_cIndex = (m_cIndex & 0xF0F) + (cYIndex << 4); } inline void SetZIndex(unsigned char cZIndex) { m_cIndex = (m_cIndex & 0x0FF) + (cZIndex << 8); } inline bool operator == (const ItemPos& rhs) const { return (m_cPos == rhs.m_cPos && m_cIndex == rhs.m_cIndex); } }; inline void ItemPos::SetPos(unsigned char cXIndex, unsigned char cYIndex, unsigned char cZIndex) { m_cIndex = (cZIndex << 8) + (cYIndex << 4) + cXIndex; } inline void ItemPos::GetPos(unsigned char& cXIndex, unsigned char& cYIndex, unsigned char& cZIndex) const { cXIndex = (m_cIndex & 0x00F); cYIndex = (m_cIndex & 0x0F0) >> 4; cZIndex = (m_cIndex & 0xF00) >> 8; } struct ItemData { unsigned __int64 m_dwUID; // ¾ÆÀÌÅÛ UID unsigned short m_usProtoTypeID; // ¾ÆÀÌÅÛ Á¾·ù ID ItemPos m_ItemPos; // ¾ÆÀÌÅÛ À§Ä¡ unsigned char m_cItemSize; // ¾ÆÀÌÅÛ ±¸Á¶Ã¼ Å©±â. unsigned char m_cNumOrDurability; // °³¼ö ȤÀº ³»±¸µµ ItemData() { m_dwUID = m_usProtoTypeID = m_cNumOrDurability = 0; m_cItemSize = sizeof(ItemData); } void DumpInfo(unsigned long dwCID, const char* szExtraString) const; }; struct ItemAttribute { unsigned short m_cType : 6; // ¼Ó¼º °³¼ö 6bit (64°¡Áö) short m_usValue : 10; // ¼Ó¼º °ª 10bit (-512~511±îÁö) ItemAttribute() : m_cType(0), m_usValue(0) { } ItemAttribute(unsigned char cType, unsigned short usValue) : m_cType(cType), m_usValue(usValue) { } }; // µÚ¿¡ Socket³»¿ë¹°ÀÌ m_cSocketNum¸¸Å­, Attribute°¡ m_cDiffAttributeNum¸¸Å­ ºÙ´Â´Ù. struct EquipmentInfo { enum { MAX_UPGRADE_LEVEL = 15, // ÃÖ´ë ¾÷±×·¹ÀÌµå ·¹º§ - 15 MAX_UPGRADE_SOCKET_ONLY = 5, // ¼ÒÄϸ¸ ¾÷±×·¹À̵åÇÒ¶§ ÃÖ´ë ·¹º§ MAX_UPGRADE_ATTRIBUTE = 2, // ¾÷±×·¹À̵å·Î ÀÎÇØ¼­ ¾òÀ» ¼ö ÀÖ´Â ÃÖ´ë ¼Ó¼º ¼ö MAX_MINSIZE_SOCKET_NUM = 6, // Å©±â°¡ 1by1ÀÎ ¾ÆÀÌÅÛÀÇ ÃÖ´ë ¼ÒÄÏ ¼ö MAX_MINSIZE_ATTRIBUTE_NUM = 6, // Å©±â°¡ 1by1ÀÎ ¾ÆÀÌÅÛÀÇ ÃÖ´ë ¼Ó¼º ¼ö MAX_SOCKET_NUM = 8, // ÀÏ¹Ý ¾ÆÀÌÅÛÀÇ ÃÖ´ë ¼ÒÄÏ ¼ö MAX_SOCKET_ATTRIBUTE_NUM = 16, // ¼ÒÄÏ Çϳª´ç ÃÖ´ë ¼Ó¼ºÀÌ µÎ°³±îÁö ´Þ¸± ¼ö ÀÖÀ½. MAX_ATTRIBUTE_NUM = 12, // ÀÏ¹Ý ¾ÆÀÌÅÛÀÇ ÃÖ´ë ¼Ó¼º ¼ö MAX_SOCKET_AND_ATTRIBUTE_MINISIZE = (MAX_MINSIZE_SOCKET_NUM * sizeof(char) + MAX_MINSIZE_ATTRIBUTE_NUM * sizeof(ItemAttribute)), MAX_SOCKET_AND_ATTRIBUTE_SIZE = (MAX_SOCKET_NUM * sizeof(char) + MAX_ATTRIBUTE_NUM * sizeof(ItemAttribute)) }; unsigned short m_cRuneSocket : 11; // ·é ¼ÒÄÏ¿¡ µé¾îÀÖ´Â ¾ÆÀÌÅÛ Á¾·ù ID short m_cDiffMaterialType : 5; // »óÁ¡ ¾ÆÀÌÅÛ ÀçÁú + m_cDiffMaterialType = ÀÌ ¾ÆÀÌÅÛÀÇ ÀçÁú °ª(-16~15) char m_cDiffMaxSocket : 5; // »óÁ¡ ¾ÆÀÌÅÛ ¼ÒÄÏ ¼ö + m_cDiffMaxSocket = ÀÌ ¾ÆÀÌÅÛÀÇ ÃÖ´ë ¼ÒÄÏ ¼ö (-16~15) unsigned char m_cReserved : 3; // ¿¹¾à µ¥ÀÌÅÍ... unsigned char m_cSocketNum : 4; // ÀÌ ¾ÆÀÌÅÛÀÇ ÇöÀç ¼ÒÄÏ ¼ö (0~15) unsigned char m_cAttributeNum : 4; // »óÁ¡ ¾ÆÀÌÅÛ¿¡ ¾ø°Å³ª, ¼öÄ¡°¡ ´Ù¸¥ ¼Ó¼º ¼ö(0~15°³) char m_cDiffMaxDurability; // »óÁ¡ ¾ÆÀÌÅÛ°úÀÇ ÃÖ´ë ³»±¸µµ Â÷ÀÌ. unsigned char m_cReserved2; // ¿¹¾à µ¥ÀÌÅÍ... EquipmentInfo() { m_cRuneSocket = m_cDiffMaterialType = m_cDiffMaxSocket = m_cDiffMaxDurability = m_cSocketNum = m_cAttributeNum = m_cReserved = m_cReserved2 = 0; } }; #pragma pack() }; #endif