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>
This commit is contained in:
2025-11-29 20:17:20 +09:00
parent 5d3cd64a25
commit dd97ddec92
11602 changed files with 1446576 additions and 0 deletions

View File

@@ -0,0 +1,354 @@
#ifndef _CITEM_CLASS_H_
#define _CITEM_CLASS_H_
#include <limits>
#include <algorithm>
#include "ItemStructure.h"
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
namespace Skill
{
struct ProtoType;
}
namespace Item
{
class CItem
{
public:
CItem();
CItem(unsigned __int64 dwItemUID, const ItemInfo& itemInfo); // Create Item
virtual ~CItem();
// <20><>ũ<EFBFBD><C5A9>Ʈ<EFBFBD>κ<EFBFBD><CEBA><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> <20><><EFBFBD><EFBFBD> <20>´<EFBFBD>.
const ItemInfo& GetItemInfo() const { return m_ItemInfo; }
// Desc : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> char<61><72><EFBFBD>۷<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
// In : <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> ũ<><C5A9>
// Out : (Return)<29><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, nBufferLength_InOut - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<><C5A9>
virtual bool SerializeOut(char* lpSerializeItem_Out, size_t& nBufferLength_InOut);
// Desc : char<61><72><EFBFBD>۷κ<DBB7><CEBA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>о<EFBFBD> <20>´<EFBFBD>.
// In : <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> ũ<><C5A9>
// Out : (Return)<29><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, nBufferLength_InOut - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ũ<><C5A9>
virtual bool SerializeIn(const char* lpSerializeItem_In, size_t& nBufferLength_InOut);
// Move Item
inline void MoveItem(ItemPos itemPos) { m_ItemData.m_ItemPos = itemPos; }
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
inline unsigned __int64 GetUID() const { return m_ItemData.m_dwUID; }
inline ItemPos GetPos() const { return m_ItemData.m_ItemPos; }
inline ItemPos GetRealPos() const { return m_itemPos_Real; }
inline unsigned short GetPrototypeID() const { return m_ItemData.m_usProtoTypeID; }
inline unsigned char GetNumOrDurability() const { return m_ItemData.m_cNumOrDurability; }
inline unsigned char GetMaxNumOrDurability() const { return m_cMaxNumOrDurability; }
inline void SetNumOrDurability(unsigned char cNumOrDurability) { m_ItemData.m_cNumOrDurability = cNumOrDurability; }
inline void SetStallPrice(unsigned long dwStallPrice) { m_dwStallPrice = dwStallPrice; }
inline unsigned long GetBuyPrice() const { return (0 == m_dwStallPrice) ? m_ItemInfo.m_DetailData.m_dwPrice : m_dwStallPrice; }
inline unsigned long GetBuyBlackPrice() const { return m_ItemInfo.m_DetailData.m_dwBlackPrice; }
inline unsigned long GetSellPrice() const;
inline unsigned long GetRepairPrice() const;
inline const char* GetItemTypeName() const;
inline unsigned char GetOptionLimit() const { return m_ItemInfo.m_DetailData.m_cOptionLimit; }
inline bool IsSet(unsigned long dwDetailDataFlag) const { return dwDetailDataFlag == (m_ItemInfo.m_DetailData.m_dwFlags & dwDetailDataFlag); }
// <20><><EFBFBD><EFBFBD><EFBFBD>̰<EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><>
inline bool GetEnableRepair();
inline bool GetEnableStack();
inline bool GetSocketItem();
inline bool GetTwohandItem();
inline bool GetEnableEquip();
inline void SetItemPos(unsigned short wItemPos) { m_ItemData.m_ItemPos.m_cPos = wItemPos; }
inline unsigned short GetItemPos(void) { return m_ItemData.m_ItemPos.m_cPos; }
inline void SetPos(unsigned char cXIndex, unsigned char cYIndex, unsigned char cZIndex) { m_ItemData.m_ItemPos.SetPos(cXIndex, cYIndex, cZIndex); }
inline void SetXIndex(unsigned char cXIndex) { m_ItemData.m_ItemPos.SetXIndex(cXIndex); }
inline void SetYIndex(unsigned char cYIndex) { m_ItemData.m_ItemPos.SetYIndex(cYIndex); }
inline void SetZIndex(unsigned char cZIndex) { m_ItemData.m_ItemPos.SetZIndex(cZIndex); }
inline void SetPos(unsigned short wIndex) { m_ItemData.m_ItemPos.SetPos(wIndex); }
protected:
const ItemInfo& m_ItemInfo; // <20><>ũ<EFBFBD><C5A9>Ʈ<EFBFBD>κ<EFBFBD><CEBA><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ItemData m_ItemData; // DB<44><42> <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ItemPos m_itemPos_Real; // <20>ӽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ
unsigned char m_cMaxNumOrDurability; // <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned long m_dwStallPrice; // <20><><EFBFBD><EFBFBD><EFBFBD>󿡼<EFBFBD><F3BFA1BC><EFBFBD> <20><><EFBFBD><EFBFBD>
};
class CEquipment : public CItem
{
public:
enum EQUIPMENT_ERROR
{
E_SUCCESS = 0, // <20><><EFBFBD><EFBFBD>
E_SERVER_ERROR = 1, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
E_GET_EQUIP_FAILED = 2, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
E_GET_GEM_FAILED = 3, // <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
E_NOT_EQUIP = 4, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ<EFBFBD>
E_NOT_GEM = 5, // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ<EFBFBD>
E_REMOVE_GEM_FAILED = 6, // <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
E_SOCKET_IS_FULL = 7, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʰ<EFBFBD>
E_OVER_MAX_SOCKET = 8, // <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʰ<EFBFBD>
E_GET_MINERAL_FAILED = 3,
E_NOT_MINERAL = 5,
E_NOT_MATCH_MINERAL_TYPE = 6,
E_NOT_ENOUGH_MINERAL = 7,
E_REMOVE_EQUIP_FAILED = 8,
E_CREATE_ITEM_FAILED = 9,
E_REMOVE_MINERAL_FAILED = 10
};
CEquipment(unsigned __int64 dwItemUID, const ItemInfo& itemInfo);
virtual ~CEquipment();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Downcast<73>Ѵ<EFBFBD>.
inline static CEquipment* DowncastToEquipment(CItem* lpItem);
// Desc : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> char<61><72><EFBFBD>۷<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
// In : <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> ũ<><C5A9>
// Out : (Return)<29><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, nBufferLength_InOut - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<><C5A9>
virtual bool SerializeOut(char* lpSerializeItem_Out, size_t& nBufferLength_InOut);
// Desc : char<61><72><EFBFBD>۷κ<DBB7><CEBA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>о<EFBFBD> <20>´<EFBFBD>.
// In : <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> ũ<><C5A9>
// Out : (Return)<29><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, nBufferLength_InOut - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ũ<><C5A9>
virtual bool SerializeIn(const char* lpSerializeItem_In, size_t& nBufferLength_InOut);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD>Ƿ<EFBFBD> <20>ٲٱ<D9B2> <20><><EFBFBD><EFBFBD>.
void AddAttribute(Item::Attribute::Type eAttributeType, unsigned short nAttributeValue) { m_usAttribute[eAttributeType] += nAttributeValue; }
inline void AddAttribute(const short* lpAttributeArray_In, unsigned short nArraySize);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD> <20>´<EFBFBD>.
unsigned short GetAttribute(Item::Attribute::Type eAttributeType) { return m_usAttribute[eAttributeType]; }
inline void GetAttribute(short* lpAttributeArray_Out, unsigned short nArraySize);
// Desc : InstallSocket -
// <20><><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڴ<EFBFBD> <20><><EFBFBD><EFBFBD>. 1. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>´<EFBFBD>. 2. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>Ƽ<EFBFBD> <20><><EFBFBD>´<EFBFBD>.
// 3. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڴ´<DAB4>. 4. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ش<EFBFBD>. 5. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> <20>Դ´<D4B4>.
EQUIPMENT_ERROR InstallSocket(CItem& Gem);
// Desc : UpgradeItem -
EQUIPMENT_ERROR UpgradeItem(CItem& Mineral);
void InitializeAttribute();
unsigned char m_cSocket[Item::EquipmentInfo::MAX_SOCKET_NUM]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
short m_usAttribute[Item::Attribute::MAX_ATTRIBUTE_NUM]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD>
unsigned short m_usRuneSocket; // <20><> <20><><EFBFBD><EFBFBD>
unsigned char m_cMaterialType; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned char m_cMaxSocket; // <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned char m_cSocketNum; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned char m_cMaxAttribute; // <20>ִ<EFBFBD> <20>Ӽ<EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned char m_cReserved; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned char m_cReserved2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
};
class CUseItem : public CItem
{
public:
CUseItem(unsigned __int64 dwItemUID, const ItemInfo& itemInfo);
virtual ~CUseItem();
inline static CUseItem* DowncastToUseItem(CItem* lpItem);
bool Use();
};
class CSkillItem : public CItem
{
public:
CSkillItem();
virtual ~CSkillItem() { }
inline void SetProtoTypeID(unsigned short usProtoTypeID) { m_ItemData.m_usProtoTypeID = usProtoTypeID; }
inline unsigned char GetMaxNumOrDurability() const { return m_cMaxDurability; }
inline void SetMaxNumOrDurability(unsigned char cMaxNumOrDurability) { m_cMaxDurability = cMaxNumOrDurability; }
bool SetSkillInfo(const Skill::ProtoType *lpSkillInfo);
protected:
ItemInfo m_ItemInfoInstance;
unsigned char m_cMaxDurability; // <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
};
inline const char* Item::CItem::GetItemTypeName() const
{
switch (m_ItemInfo.m_DetailData.m_cItemType)
{
case Item::CItemType::HELM: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
case Item::CItemType::SHIRT: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
case Item::CItemType::TUNIC: return "Ʃ<EFBFBD><EFBFBD>";
case Item::CItemType::ARMOUR: return "<EFBFBD>Ƹ<EFBFBD>";
case Item::CItemType::GLOVE: return "<EFBFBD>";
case Item::CItemType::BOOTS: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
case Item::CItemType::SWORD: return "<EFBFBD>Ѽհ<EFBFBD>";
case Item::CItemType::BLUNT: return "<EFBFBD>Ѽյб<EFBFBD>";
case Item::CItemType::AXE: return "<EFBFBD>Ѽյ<EFBFBD><EFBFBD><EFBFBD>";
case Item::CItemType::TWOHANDED_BLUNT: return "<EFBFBD><EFBFBD><EFBFBD>յб<EFBFBD>";
case Item::CItemType::TWOHANDED_AXE: return "<EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD>";
case Item::CItemType::TWOHANDED_SWORD: return "<EFBFBD><EFBFBD><EFBFBD>հ<EFBFBD>";
case Item::CItemType::BOW: return "Ȱ";
case Item::CItemType::CROSSBOW: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
case Item::CItemType::STAFF: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
case Item::CItemType::DAGGER: return "<EFBFBD>ܰ<EFBFBD>";
case Item::CItemType::SHIELD: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
case Item::CItemType::CLOAK: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
case Item::CItemType::RING: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
case Item::CItemType::NECKLACE: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
case Item::CItemType::POTION: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
case Item::CItemType::POISON: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
case Item::CItemType::TRAP: return "Ʈ<EFBFBD><EFBFBD>";
case Item::CItemType::SKILLBOOK: return "<EFBFBD><EFBFBD>ų<EFBFBD><EFBFBD>";
case Item::CItemType::GEM: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
case Item::CItemType::RUNE: return "<EFBFBD><EFBFBD>";
case Item::CItemType::MATERIAL: return "<EFBFBD><EFBFBD><EFBFBD>׸<EFBFBD><EFBFBD><EFBFBD>";
case Item::CItemType::AMMO: return "<EFBFBD>Ҹ<EFBFBD>ǰ";
case Item::CItemType::ETC: return "<EFBFBD><EFBFBD>Ÿ";
case Item::CItemType::HEAD: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƹ<EFBFBD>";
case Item::CItemType::BODY: return "<EFBFBD>ٵ<EFBFBD><EFBFBD>Ƹ<EFBFBD>";
case Item::CItemType::PROTECT_A: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD>";
case Item::CItemType::PELVIS: return "<EFBFBD><EFBFBD><EFBFBD>񽺾Ƹ<EFBFBD>";
case Item::CItemType::COM_BLUNT: return "<EFBFBD>Ĺ<EFBFBD><EFBFBD><EFBFBD>Ʈ <20>б<EFBFBD>";
case Item::CItemType::COM_SWORD: return "<EFBFBD>Ĺ<EFBFBD><EFBFBD><EFBFBD>Ʈ <20><>";
case Item::CItemType::OPP_HAMMER: return "<EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>б<EFBFBD>";
case Item::CItemType::OPP_AXE: return "<EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>";
case Item::CItemType::OPP_SLUSHER: return "<EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
case Item::CItemType::OPP_TALON: return "<EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ż<><C5BB>";
case Item::CItemType::OPP_SYTHE: return "<EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD>";
case Item::CItemType::SKILL_A_GUARD: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
case Item::CItemType::SKILL_A_ATTACK: return "<EFBFBD><EFBFBD><EFBFBD>þ<EFBFBD>";
case Item::CItemType::SKILL_A_GUN: return "<EFBFBD>Ǿ<EFBFBD>";
case Item::CItemType::SKILL_A_KNIFE: return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
case Item::CItemType::ACCESSORY: return "<EFBFBD>Ǽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
case Item::CItemType::ARROW: return "ȭ<EFBFBD><EFBFBD>";
case Item::CItemType::BOLT: return "<EFBFBD><EFBFBD>Ʈ";
}
return NULL;
}
inline unsigned long Item::CItem::GetSellPrice() const
{
if (0 != m_dwStallPrice) { return m_dwStallPrice; }
unsigned long dwSellPrice = m_ItemInfo.m_DetailData.m_dwPrice;
unsigned long dwFlags = m_ItemInfo.m_DetailData.m_dwFlags;
if(IsSet(DetailData::EQUIP))
{
dwSellPrice = IsSet(DetailData::STACKABLE) ?
dwSellPrice / 2 : (dwSellPrice * m_ItemData.m_cNumOrDurability / m_cMaxNumOrDurability / 2);
}
else
{
dwSellPrice = (Item::CItemType::SKILLBOOK == m_ItemInfo.m_DetailData.m_cItemType) ?
dwSellPrice / 4 : dwSellPrice / 2;
}
return (0 == dwSellPrice) ? 1 : dwSellPrice;
}
inline unsigned long Item::CItem::GetRepairPrice() const
{
unsigned long dwRepairPrice = (m_ItemInfo.m_DetailData.m_dwPrice *
(m_cMaxNumOrDurability - m_ItemData.m_cNumOrDurability) / m_cMaxNumOrDurability / 2);
return (0 == dwRepairPrice) ? 1 : dwRepairPrice;
}
inline Item::CEquipment* Item::CEquipment::DowncastToEquipment(Item::CItem* lpItem)
{
return lpItem->IsSet(DetailData::EQUIP) ?
static_cast<CEquipment*>(lpItem) : NULL;
}
void Item::CEquipment::AddAttribute(const short* lpAttributeArray_In, unsigned short nArraySize)
{
unsigned short nCopyNum = nArraySize < Item::Attribute::MAX_ATTRIBUTE_NUM
? nArraySize : Item::Attribute::MAX_ATTRIBUTE_NUM;
while(0 <= --nCopyNum) { m_usAttribute[nCopyNum] += lpAttributeArray_In[nCopyNum]; }
}
void Item::CEquipment::GetAttribute(short* lpAttributeArray_Out, unsigned short nArraySize)
{
unsigned short nCopyNum = nArraySize < Item::Attribute::MAX_ATTRIBUTE_NUM
? nArraySize : Item::Attribute::MAX_ATTRIBUTE_NUM;
short* lpAttributePastEnd = m_usAttribute + nCopyNum;
std::copy(m_usAttribute, lpAttributePastEnd, lpAttributeArray_Out);
}
inline Item::CUseItem* Item::CUseItem::DowncastToUseItem(CItem* lpItem)
{
return lpItem->IsSet(DetailData::USE_ITEM) ?
static_cast<CUseItem*>(lpItem) : NULL;
}
// <20><><EFBFBD><EFBFBD><EFBFBD>̰<EFBFBD> <20>߰<EFBFBD> <20><> <20><>
inline bool Item::CItem::GetEnableRepair()
{
unsigned long dwFlags = GetItemInfo().m_DetailData.m_dwFlags;
if((dwFlags & Item::DetailData::EQUIP) && !(dwFlags & Item::DetailData::STACKABLE))
return true;
return false;
}
inline bool Item::CItem::GetEnableStack()
{
if(GetItemInfo().m_DetailData.m_dwFlags & Item::DetailData::STACKABLE)
return true;
return false;
}
inline bool Item::CItem::GetEnableEquip()
{
if(GetItemInfo().m_DetailData.m_dwFlags & Item::DetailData::EQUIP)
return true;
return false;
}
inline bool Item::CItem::GetSocketItem()
{
unsigned char cItemType = GetItemInfo().m_DetailData.m_cItemType;
if(cItemType == Item::CItemType::GEM || cItemType == Item::CItemType::RUNE)
return true;
return false;
}
inline bool Item::CItem::GetTwohandItem()
{
unsigned char cItemType = GetItemInfo().m_DetailData.m_cItemType;
if(cItemType == Item::CItemType::BOW || cItemType == Item::CItemType::CROSSBOW ||
cItemType == Item::CItemType::STAFF || cItemType == Item::CItemType::TWOHANDED_AXE ||
cItemType == Item::CItemType::TWOHANDED_BLUNT || cItemType == Item::CItemType::TWOHANDED_SWORD ||
cItemType == Item::CItemType::OPP_SYTHE)
return true;
return false;
}
#endif