Files
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

109 lines
4.8 KiB
C++

#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