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:
354
GameTools/GLOBALSCRIPT/Item/Item.h
Normal file
354
GameTools/GLOBALSCRIPT/Item/Item.h
Normal 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
|
||||
Reference in New Issue
Block a user