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,897 @@
#ifndef _CITEM_CLASS_H_
#define _CITEM_CLASS_H_
#include <limits>
#include <vector>
#include <algorithm>
#include <Network/Packet/PacketStruct/CharItemPacketStruct.h>
#include "ItemMgr.h"
#include "ItemStructure.h"
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
class CCharacter;
#define DELITEMLOG(x) (void*)0
//#define DELITEMLOG(x) x
namespace Item
{
class CItem
{
public:
CItem();
CItem(const ItemInfo& itemInfo);
// <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);
inline void MoveItem(ItemPos itemPos);
inline unsigned __int64 GetUID(void) const { return m_ItemData.m_dwUID; }
inline ItemPos GetPos(void) const { return m_ItemData.m_ItemPos; }
inline ItemPos GetRealPos(void) const { return m_itemPos_Real; }
inline void SwapPos(void) { std::swap(m_ItemData.m_ItemPos, m_itemPos_Real); }
inline unsigned short GetPrototypeID(void) const { return m_ItemData.m_usProtoTypeID; }
inline unsigned char GetNumOrDurability(void) const { return m_ItemData.m_cNumOrDurability; }
inline unsigned char GetMaxNumOrDurability(void) const { return m_cMaxNumOrDurability; }
inline void SetNumOrDurability(unsigned char cNumOrDurability) { m_ItemData.m_cNumOrDurability = cNumOrDurability; }
inline void SetMaxNumOrDurability(unsigned char cNumOrDurability) { m_cMaxNumOrDurability = cNumOrDurability; }
inline void SetStallPrice(unsigned long dwStallPrice) { m_dwStallPrice = dwStallPrice; }
inline unsigned long GetStallPrice(void) const { return m_dwStallPrice; }
inline unsigned long GetBuyBlackPrice(void) const { return m_ItemInfo.m_DetailData.m_dwBlackPrice; }
inline unsigned long GetBuyMedalPrice(void) const { return m_ItemInfo.m_DetailData.m_dwMedalPrice; }
virtual unsigned long GetBuyPrice(void) const;
virtual unsigned long GetSellPrice(bool bStallOn = true) const;
virtual unsigned long GetRepairPrice(void) const;
virtual unsigned long GetUpgradePrice(void) const;
virtual unsigned long GetGraftPrice(void) const;
inline const char* GetItemTypeName(void) const { return m_ItemInfo.m_StringData.m_szTypeName; }
inline bool IsSet(unsigned long dwDetailDataFlag) const { return dwDetailDataFlag == (m_ItemInfo.m_DetailData.m_dwFlags & dwDetailDataFlag); }
inline bool GetEnableRepair(void);
inline bool GetEnableStack(void);
inline bool GetSocketItem(void);
inline bool GetRuneItem(void);
inline bool GetTwohandItem(void);
inline bool GetEnableEquip(void);
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); }
// SetUID<49><44> <20>ƹ<EFBFBD><C6B9><EFBFBD><EFBFBD><EFBFBD> <20>Ժη<D4BA> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ÿ<EFBFBD>!
inline void SetUID(unsigned __int64 dwItemUID) { m_ItemData.m_dwUID = dwItemUID; }
// S <20>׷<EFBFBD><D7B7>̵<EFBFBD> <20><><EFBFBD>Ѱ<EFBFBD> <20><><EFBFBD><EFBFBD>(S <20>׷<EFBFBD><D7B7>̵<EFBFBD> <20>̿ܿ<CCBF><DCBF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ȯ<EFBFBD><C8AE><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>. - by hackermz)
virtual void RevisionLimit() { }
virtual void RevisionLimit(short* lpattrLimit) { }
virtual void RevisionLimit(Item::Attribute::Type eAttributeType, short& attrLImit) { }
protected:
virtual ~CItem();
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>
unsigned long m_dwPrice; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28>ɼǿ<C9BC> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>)
friend class CItemFactory;
};
class CEquipment : public CItem
{
public:
enum EQUIPMENT_ERROR
{
// <20><><EFBFBD><EFBFBD> <20>ڱ<EFBFBD>
S_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><D7B7>̵<EFBFBD> <20><><EFBFBD><EFBFBD><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_SOCKET_NOT_MAX = 9, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 7<><37><EFBFBD><EFBFBD> <20>ƴϴ<C6B4>.
E_SOCKET_NOT_INST = 10, // <20><><EFBFBD>Ͽ<EFBFBD> <20>ν<EFBFBD><CEBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
// <20><> <20><>ġ/<2F><><EFBFBD><EFBFBD>
R_SUCCESS = 0, // <20><> <20><>ġ/<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
E_GET_RUNE_FAILED = 9, // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
E_NOT_RUNE = 10, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
E_NOT_RUNE_SLOT = 11, // <20><20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
E_NOT_RUNE_LEVEL_LIMIT = 12, // <20><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
E_USED_RUNE_SKILL_POINT = 13, // <20><20>߰<EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>־ <20><><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
E_NOT_RUNE_SCRIPT_INFO = 14, // <20><20><>ũ<EFBFBD><C5A9>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
// <20><>ȭ
E_GET_MINERAL_FAILED = 3, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
E_NOT_MINERAL = 5, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ<EFBFBD>
E_NOT_MATCH_MINERAL_TYPE = 6, // <20><><EFBFBD><EFBFBD> Ÿ<><C5B8> Ʋ<><C6B2>
E_NOT_ENOUGH_MINERAL = 7, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
E_REMOVE_EQUIP_FAILED = 8, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
E_CREATE_SCRAP_FAILED = 9, // <20><>ö <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
E_SET_SCRAP_FAILED = 10, // <20><>ö <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
E_REMOVE_MINERAL_FAILED = 11, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
E_UPGRADE_LEVEL_IS_FULL = 12, // <20><> <20>̻<EFBFBD> <20><><EFBFBD>׷<EFBFBD><D7B7>̵带 <20><> <20><> <20><><EFBFBD><EFBFBD>
E_NOT_ENOUGH_MONEY = 13, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD>
S_BROKEN_EQUIP = 14, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>μ<EFBFBD><CEBC><EFBFBD><><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.)
E_NOT_UPGRADE_LEVEL = 15, // <20>ɼ<EFBFBD> <20>̽<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ<EFBFBD>.
E_NOT_UPGRADE_AS_OVER = 16, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>̿<EFBFBD> ȸ<><C8B8> <20>ʰ<EFBFBD>.
E_NOT_UPGRADE_ENDURANCE = 17, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȸ<><C8B8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ұ<EFBFBD>.
E_NOT_UPGRADE_MINENDURANCE = 18, // <20><><EFBFBD>ð<EFBFBD><C3B0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 10<31><30> <20><><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>.
E_NOT_UPGRADE_AWAKEN = 19, // <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD>. (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ھ<EFBFBD> <20><><EFBFBD><EFBFBD>)
// <20>ɼ<EFBFBD> <20>̽<EFBFBD>
E_WRONG_ATTRIBUTE = 2, // <20>̽<EFBFBD> <20>Ұ<EFBFBD><D2B0><EFBFBD><EFBFBD><EFBFBD> <20>ɼ<EFBFBD>
E_NOT_EQUAL_KIND = 3, // <20>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
E_HIGH_GRADE_ORIGINAL = 4, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>׷<EFBFBD><D7B7>̵尡 <20><><EFBFBD><EFBFBD>
E_GRAFE_FAILD = 5, // <20>ɼ<EFBFBD><C9BC>̽<EFBFBD> <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD>
E_WRONG_TYPE = 2, // <20><><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ<EFBFBD>
E_NEW_SEASON_EQUIP = 3, // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ų<EFBFBD> <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
E_LOW_STATUS_EQUIP = 4 // <20>ʹ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
};
enum PASSIVE_TYPE
{
PASSIVE_ALWAYS = 0, // <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>׻<EFBFBD> <20>߻<EFBFBD><DFBB>ϴ<EFBFBD> <20>нú<D0BD>
PASSIVE_THIS_WEAPON = 1, // <20>ش<EFBFBD> <20><><EFBFBD><20>߻<EFBFBD><DFBB>ϴ<EFBFBD> <20>нú<D0BD>
NONE_PASSIVE_THIS_WEAPON = 2 // <20>ش<EFBFBD> <20><><EFBFBD><20>߻<EFBFBD><DFBB><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20>нú<D0BD>
};
enum RuneApplyType
{
RUNE_NONE = 0,
RUNE_INDEX = (1 << 0), // <20>ϳ<EFBFBD><CFB3><EFBFBD> <20>Ӽ<EFBFBD>.
RUNE_ALL = (1 << 1), // <20><><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD>.
RUNE_APPLY = (1 << 2), // <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20>߰<EFBFBD>.
RUNE_REMOVE = (1 << 3) // <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD>.
};
// <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> <20>߰<EFBFBD> (<28>Ӽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ŀ<EFBFBD><C4BF><EFBFBD> <20>ݵ<EFBFBD><DDB5><EFBFBD> <20><><EFBFBD><EFBFBD>/<2F>׷<EFBFBD><D7B7>̵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> <20><><EFBFBD>ݽô<DDBD>.)
inline void AddAttribute(Item::Attribute::Type eAttributeType, short nAttributeValue);
inline void SetAttribute(Item::Attribute::Type eAttributeType, short nAttributeValue);
// 3<><33> <20><EFBFBD><EBB7B1> <20><>ġ(<28><><EFBFBD><EFBFBD>, <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>)0
inline void RemoveUpgradeAttribute(Item::Attribute::Type eAttributeType);
inline void RemoveGemAttribute(Item::Attribute::Type eAttributeType);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD> <20>´<EFBFBD>.
inline short GetAttribute(Item::Attribute::Type eAttributeType);
inline void GetAttribute(short* lpAttributeArray_Out, unsigned short nArraySize);
// <20>ɼǺ<C9BC> <20>Ѱ谪<D1B0><E8B0AA> <20><><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD> üũ<C3BC>Ѵ<EFBFBD>.
bool CheckAttributeLimit(Item::Attribute::Type eAttributeType, unsigned char cType = 0);
inline bool AddSocket(unsigned char cSocket);
inline void GetSocket(unsigned char* cSockets, unsigned char cArraySize);
unsigned char GetSocket(unsigned char cIndex) { return m_cSocket[cIndex]; }
const Grade::GradeInfo& GetItemGrade(void) const { return m_GradeInfo; }
inline void InitializeAttribute(void); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ
BOOL AddRandomOption(Item::EquipType::Grade eGrade, unsigned char cBaseNum, int iMagicChance = 0);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
BOOL AddRandomSocket(int iMagicChance = -1);
// <20>ɼ<EFBFBD> <20>̽<EFBFBD>
EQUIPMENT_ERROR OptionGraft(CEquipment* lpSacrifice, bool bUpgradeLevelLimit, unsigned char cAttributeType,
unsigned long dwCurrentGold, unsigned long& dwUsedGold);
bool CanOptionGraft(Item::CItemType::ArrayType eItemType, Item::Attribute::Type eAttributeType);
// <20><><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD>
EQUIPMENT_ERROR Compensation(unsigned char cClass, unsigned char cLevel,
CharacterStatus status, CEquipment** lppResultEquip, long& lCompensationGold);
unsigned char GetUpgradeLevel(void) const { return m_cUpgradeLevel; }
unsigned char GetCoreLevel(void) const { return m_cCoreLevel; }
unsigned char GetCurrentSocketNum(void) const { return m_cSocketNum; }
unsigned char GetMaxSocketNum(void) const { return m_cMaxSocket; }
// <20><><EFBFBD><EFBFBD><EBB7B1> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>Լ<EFBFBD><D4BC><EFBFBD> ȣ<><C8A3><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>.
void SetNewEquip(char cStrong = 1)
{
if(m_cSeasonRecord != cStrong)
m_cCoreLevel = 0;
m_cSeasonRecord = cStrong; // 1 <20>⺻, 2 <20><><EFBFBD><EFBFBD>, 3 <20><><EFBFBD><EFBFBD>
}
unsigned char GetSeasonRecord(void) { return m_cSeasonRecord; }
unsigned long GetBuyPrice(void) const;
unsigned long GetSellPrice(bool bStallOn = true) const;
unsigned long GetRepairPrice(void) const;
unsigned long GetUpgradePrice(void) const;
unsigned long GetGraftPrice(void) const;
unsigned char GetUpgradeCnt(void) { return m_cUpgradeCnt; }
void SetUpgradeCnt(unsigned char cUpgradeCnt) { m_cUpgradeCnt = cUpgradeCnt; }
// <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
bool IsUpgradable(void) const;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> üũ
inline unsigned char GetMaxRuneSocket();
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> üũ
inline unsigned char GetRuneEquipable();
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD>.
inline unsigned short GetRuneEquipLimitLevel(void) const;
// <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(<28>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
inline bool SubRuneAttribute(void);
// <20><>ġ <20>Ǿ<EFBFBD> <20>ִ<EFBFBD> <20><> <20><><EFBFBD>ϰ<EFBFBD><CFB0><EFBFBD> <20>Ѱ<EFBFBD><D1B0>ش<EFBFBD>.
inline unsigned short GetRuneSocket(unsigned char cIndex)
{
if (cIndex >= EquipmentInfo::MAX_RUNE_SOCKET_NUM)
{
return 0;
}
return m_usRuneSocket[cIndex];
}
// <20><> <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD> <20><><EFBFBD><EFBFBD><E7BABB> <20>Ѱ<EFBFBD><D1B0>ش<EFBFBD>.
inline void GetSubRuneAttribute(short* psAttribute);
inline void GetSubRuneAttribute(Item::Attribute::Type eAttributeType, short& sAttribute);
// <20>ܺο<DCBA><CEBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>Ӽ<EFBFBD> <20><><EFBFBD><EFBFBD>/<2F>߰<EFBFBD>
inline void SetRuneAttribute(RuneApplyType enRuneApplyType, unsigned char ucIndex);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>.
unsigned short GetAllRuneSkillPointCheck();
// <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD>Ʈ üũ
bool GetRuneCheckSkill(CCharacter* lpCharacter, Item::ItemPos itemPos, bool bChk = true);
// ------------------------------------------------------------------------------------------------------------
// ConvertTool<6F><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD> - RebalanceOverItem.cpp <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
inline void Repair();
inline void InitEquip();
inline void SetEquip();
// ------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD> - ItemServerFunc.cpp <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
EQUIPMENT_ERROR InstallSocket(CItem& Gem);
EQUIPMENT_ERROR UpgradeItem(CItem& Mineral_InOut, unsigned long dwCurrentGold_In, unsigned long& dwUsedGold_Out, unsigned char& cValue_Out);
EQUIPMENT_ERROR InstallRuneSocket(CItem& Rune, bool bEquip, unsigned char cLevel); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><>ġ.
EQUIPMENT_ERROR UnInstallRuneSocket(CItem& Rune, bool bEquip, unsigned char cLevel, unsigned short usSkillPoint); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
// ------------------------------------------------------------------------------------------------------------
// 3<><33> <20><EFBFBD><EBB7B1> <20><>ġ <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD>
// S <20>׷<EFBFBD><D7B7>̵<EFBFBD> <20><><EFBFBD>Ѱ<EFBFBD> <20><><EFBFBD>ϱ<EFBFBD>
bool GetLimitValue(short* lpattrLimit);
bool GetLimitValue(Item::Attribute::Type eAttributeType, short& attrLimit);
// S <20>׷<EFBFBD><D7B7>̵<EFBFBD> <20><><EFBFBD>Ѱ<EFBFBD> <20><><EFBFBD><EFBFBD>(S <20>׷<EFBFBD><D7B7>̵<EFBFBD> <20>̿ܿ<CCBF><DCBF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ȯ<EFBFBD><C8AE><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>. - by hackermz)
void RevisionLimit();
void RevisionLimit(short* lpattrLimit);
void RevisionLimit(Item::Attribute::Type eAttributeType, short& attrLImit);
// <20>׷<EFBFBD><D7B7>̵<EFBFBD> å<><C3A5>
void CalculateItemGrade(void);
protected:
enum ApplyType
{
APPLY = 1, // <20><> <20>ٲ<EFBFBD><D9B2><EFBFBD> <20><> <20><>
REMOVE = -1 // <20><> <20>ٲ<EFBFBD><D9B2><EFBFBD> <20><> <20><>
};
CEquipment(const ItemInfo& itemInfo);
virtual ~CEquipment();
inline void InitializeGemAttribute(void); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20>ʱ<EFBFBD>ȭ
inline void InitializeUpgradeAttribute(void); // <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD> <20>ܰ<EFBFBD><DCB0><EFBFBD> <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD> <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20>ʱ<EFBFBD>ȭ
inline void ApplyGemAttribute(ApplyType eApplyType); // <20><><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD>
inline void ApplyUpgradeAttribute(ApplyType eApplyType); // <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD> <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD>
inline void ApplyRuneAttribute(ApplyType eApplyType); // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD>
void CalculateItemPrice(void); // <20><><EFBFBD><EFBFBD> å<><C3A5>
unsigned char m_cSocket[EquipmentInfo::MAX_SOCKET_NUM]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
ItemAttribute m_SocketAttribute[EquipmentInfo::MAX_SOCKET_ATTRIBUTE_NUM]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD>
ItemAttribute m_UpgradeAttribute[EquipmentInfo::MAX_UPGRADE_ATTRIBUTE]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD><CCB5><EFBFBD> <20>ٴ<EFBFBD> <20>Ӽ<EFBFBD>
unsigned short m_usRuneSocket[EquipmentInfo::MAX_RUNE_SOCKET_NUM]; // <20><> <20><><EFBFBD><EFBFBD>
short m_wAttribute[Attribute::MAX_ATTRIBUTE_NUM]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD> (<28><>ũ<EFBFBD><C5A9>Ʈ + DB + ...)
unsigned char m_cUpgradeLevel; // <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD> <20>ܰ<EFBFBD>
unsigned char m_cSocketNum; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned char m_cMaxSocket; // <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned char m_cMaxAttribute; // <20>ִ<EFBFBD> <20>Ӽ<EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned char m_cSeasonRecord; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ñ<EFBFBD>
Grade::GradeInfo m_GradeInfo; // <20>׷<EFBFBD><D7B7>̵<EFBFBD> <20><><EFBFBD><EFBFBD>
unsigned char m_cUpgradeCnt;
unsigned char m_cCoreLevel; // <20>ھ<DABE><EEB7B9>
friend class CItemFactory;
friend class CItemType;
};
class CUseItem : public CItem
{
public:
inline static CUseItem* DowncastToUseItem(CItem* lpItem);
// ------------------------------------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD> - ItemServerFunc.cpp <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
bool UseCashItem(CCharacter* lpSender, CCharacter* lpRecver, Item::ItemPos itemPos, unsigned short& wError);
bool Use(CCharacter* lpSender, CCharacter* lpRecver, Item::ItemPos itemPos, unsigned short& wError);
protected:
CUseItem(const ItemInfo& itemInfo);
virtual ~CUseItem();
bool UsePotion(CCharacter* lpSender, CCharacter* lpRecver);
friend class CItemFactory;
};
};
inline void Item::CItem::MoveItem(ItemPos itemPos)
{
if (TakeType::TS_STALL == itemPos.m_cPos)
{
m_itemPos_Real = itemPos;
}
else
{
m_ItemData.m_ItemPos = itemPos;
if (TakeType::TS_TEMP != itemPos.m_cPos)
{
m_itemPos_Real = itemPos;
}
}
}
inline Item::CEquipment* Item::CEquipment::DowncastToEquipment(Item::CItem* lpItem)
{
if (NULL == lpItem) { return NULL; }
return lpItem->IsSet(DetailData::EQUIP) ?
static_cast<CEquipment*>(lpItem) : NULL;
}
inline void Item::CEquipment::AddAttribute(Item::Attribute::Type eAttributeType, short nAttributeValue)
{
/*
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20>Ӽ<EFBFBD> <20>߰<EFBFBD>
if (eAttributeType == Attribute::RUNE && 0 != nAttributeValue)
{
unsigned short usRuneID = nAttributeValue + EtcItemID::RUNE_START_ID;
const ItemInfo* lpRuneInfo = CItemMgr::GetInstance().GetItemInfo(usRuneID);
if (NULL != lpRuneInfo)
{
for (unsigned char cIndex = 0; cIndex < EquipmentInfo::MAX_RUNE_SOCKET_NUM; ++cIndex)
{
if (0 != m_usRuneSocket[cIndex])
{
m_usRuneSocket[cIndex] = usRuneID;
for (int nIndex = 0; nIndex < Item::Attribute::MAX_ATTRIBUTE_NUM; ++nIndex)
{
if (Item::EquipType::S_GRADE != GetItemGrade().m_aryAttributeGrade[nIndex])
{
m_wAttribute[nIndex] += lpRuneInfo->m_EquipAttribute.m_usAttributeValue[nIndex];
}
}
return;
}
}
}
}
else
*/
{
if (Item::EquipType::S_GRADE != GetItemGrade().m_aryAttributeGrade[eAttributeType])
{
m_wAttribute[eAttributeType] += nAttributeValue;
}
/*
// edith 2009.03.15 min <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> max<61><78><EFBFBD><EFBFBD> <20><><EFBFBD>Ƶ<EFBFBD> <20>ɼ<EFBFBD><C9BC>̽<EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0>۾<EFBFBD><DBBE>Ȱ<EFBFBD>
if(eAttributeType == Attribute::MIN_DAMAGE)
{
if(m_wAttribute[Attribute::MIN_DAMAGE] > m_wAttribute[Attribute::MAX_DAMAGE])
{
// <20>ΰ<EFBFBD> <20><>ȯ
short t = m_wAttribute[Attribute::MIN_DAMAGE];
m_wAttribute[Attribute::MIN_DAMAGE] = m_wAttribute[Attribute::MAX_DAMAGE];
m_wAttribute[Attribute::MAX_DAMAGE] = t;
}
}
//*/
}
}
inline void Item::CEquipment::SetAttribute(Item::Attribute::Type eAttributeType, short nAttributeValue)
{
/*
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20>Ӽ<EFBFBD> <20>߰<EFBFBD>
if (eAttributeType == Attribute::RUNE && 0 != nAttributeValue)
{
unsigned short usRuneID = nAttributeValue + EtcItemID::RUNE_START_ID;
const ItemInfo* lpRuneInfo = CItemMgr::GetInstance().GetItemInfo(usRuneID);
if (NULL != lpRuneInfo)
{
for (unsigned char cIndex = 0; cIndex < EquipmentInfo::MAX_RUNE_SOCKET_NUM; ++cIndex)
{
if (0 != m_usRuneSocket[cIndex])
{
m_usRuneSocket[cIndex] = usRuneID;
for (int nIndex = 0; nIndex < Item::Attribute::MAX_ATTRIBUTE_NUM; ++nIndex)
{
m_wAttribute[nIndex] = lpRuneInfo->m_EquipAttribute.m_usAttributeValue[nIndex];
}
return;
}
}
}
}
else
*/
{
m_wAttribute[eAttributeType] = nAttributeValue;
}
}
inline void Item::CEquipment::RemoveUpgradeAttribute(Item::Attribute::Type eAttributeType)
{
ItemAttribute* first = m_UpgradeAttribute;
ItemAttribute* last = m_UpgradeAttribute + EquipmentInfo::MAX_UPGRADE_ATTRIBUTE;
for (;first != last; ++first)
{
if(eAttributeType == static_cast<Item::Attribute::Type>(first->m_cType))
{
first->m_usValue = 0;
}
}
}
inline void Item::CEquipment::RemoveGemAttribute(Item::Attribute::Type eAttributeType)
{
ItemAttribute* first = m_SocketAttribute;
ItemAttribute* last = m_SocketAttribute + EquipmentInfo::MAX_UPGRADE_ATTRIBUTE;
for (;first != last; ++first)
{
if(eAttributeType == static_cast<Item::Attribute::Type>(first->m_cType))
{
first->m_usValue = 0;
}
}
}
inline bool Item::CEquipment::SubRuneAttribute(void)
{
// <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
for (unsigned char cRune = 0; cRune <= EquipmentInfo::MAX_RUNE_SOCKET_NUM; ++cRune)
{
if (m_usRuneSocket[cRune])
{
unsigned short usItemId = m_usRuneSocket[cRune];
const ItemInfo* itemInfo = CItemMgr::GetInstance().GetItemInfo(usItemId);
if (itemInfo)
{
for (unsigned char cIndex = 0; cIndex < Item::Attribute::MAX_ATTRIBUTE_NUM; ++cIndex)
{
m_wAttribute[cIndex] -= itemInfo->m_EquipAttribute.m_usAttributeValue[cIndex];
}
}
m_usRuneSocket[cRune] = 0;
}
}
return true;
}
inline short Item::CEquipment::GetAttribute(Item::Attribute::Type eAttributeType)
{
return m_wAttribute[eAttributeType];
}
inline 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;
for (int nIndex = 0; nIndex < nCopyNum; ++nIndex)
{
*(lpAttributeArray_Out + nIndex) = GetAttribute(static_cast<Item::Attribute::Type>(nIndex));
}
}
inline bool Item::CEquipment::AddSocket(unsigned char cSocket)
{
if (m_cSocketNum < m_cMaxSocket && 0 == m_cSocket[m_cSocketNum])
{
m_cSocket[m_cSocketNum] = cSocket;
++m_cSocketNum;
return true;
}
return false;
}
inline void Item::CEquipment::GetSocket(unsigned char* cSockets, unsigned char cArraySize)
{
unsigned short nCopyNum = cArraySize < Item::EquipmentInfo::MAX_SOCKET_NUM
? cArraySize : Item::EquipmentInfo::MAX_SOCKET_NUM;
unsigned char* lpSocketPastEnd = m_cSocket + nCopyNum;
std::copy(m_cSocket, lpSocketPastEnd , cSockets);
}
inline void Item::CEquipment::InitializeAttribute(void)
{
for (unsigned int nIndex = 0; nIndex < Item::Attribute::MAX_ATTRIBUTE_NUM; ++nIndex)
{
m_wAttribute[nIndex] = m_ItemInfo.m_EquipAttribute.m_usAttributeValue[nIndex];
}
}
inline void Item::CEquipment::InitializeGemAttribute(void)
{
std::fill_n(m_SocketAttribute, int(EquipmentInfo::MAX_SOCKET_ATTRIBUTE_NUM), ItemAttribute());
// <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
CItemType::SetInstallGemAttribute(this);
}
inline void Item::CEquipment::InitializeUpgradeAttribute(void)
{
std::fill_n(m_UpgradeAttribute, int(EquipmentInfo::MAX_UPGRADE_ATTRIBUTE), ItemAttribute());
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD> <20>ܰ谪<DCB0><E8B0AA> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
CItemType::SetUpgradeItemAttribute(this);
}
inline void Item::CEquipment::ApplyGemAttribute(ApplyType eApplyType)
{
ItemAttribute* first = m_SocketAttribute;
ItemAttribute* last = m_SocketAttribute + EquipmentInfo::MAX_SOCKET_ATTRIBUTE_NUM;
for (;first != last; ++first)
{
AddAttribute(static_cast<Item::Attribute::Type>(first->m_cType), first->m_usValue * eApplyType);
}
}
inline unsigned char Item::CEquipment::GetMaxRuneSocket()
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> üũ
return Item::CItemMgr::GetInstance().GetMaxRuneSocket(static_cast<ItemType::Type>(GetItemInfo().m_DetailData.m_cItemType));
}
inline unsigned char Item::CEquipment::GetRuneEquipable()
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> üũ
unsigned char cRuneSocketCnt = Item::CItemMgr::GetInstance().GetMaxRuneSocket(static_cast<ItemType::Type>(GetItemInfo().m_DetailData.m_cItemType));
if (!cRuneSocketCnt)
{
return 0;
}
if (!m_usRuneSocket[0])
{
return 1;
}
if (!m_usRuneSocket[1] && cRuneSocketCnt == EquipmentInfo::MAX_RUNE_SOCKET_NUM)
{
return 2;
}
return 0;
}
inline void Item::CEquipment::ApplyUpgradeAttribute(ApplyType eApplyType)
{
ItemAttribute* first = m_UpgradeAttribute;
ItemAttribute* last = m_UpgradeAttribute + EquipmentInfo::MAX_UPGRADE_ATTRIBUTE;
for (;first != last; ++first)
{
AddAttribute(static_cast<Item::Attribute::Type>(first->m_cType), first->m_usValue * eApplyType);
}
}
inline void Item::CEquipment::ApplyRuneAttribute(ApplyType eApplyType)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20>Ӽ<EFBFBD> <20>߰<EFBFBD>/<2F><><EFBFBD><EFBFBD>
for (unsigned char cIndex = 0; cIndex < EquipmentInfo::MAX_RUNE_SOCKET_NUM; ++cIndex)
{
if (m_usRuneSocket[cIndex])
{
unsigned short usItemId = m_usRuneSocket[cIndex];
const ItemInfo* itemInfo = CItemMgr::GetInstance().GetItemInfo(usItemId);
if (itemInfo)
{
for (unsigned char cAttribute = 0; cAttribute < Item::Attribute::MAX_ATTRIBUTE_NUM; ++cAttribute)
{
m_wAttribute[cAttribute] += itemInfo->m_EquipAttribute.m_usAttributeValue[cAttribute]*eApplyType;
}
}
}
}
}
inline void Item::CEquipment::GetSubRuneAttribute(short* psAttribute)
{
// <20><> <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD> <20><><EFBFBD><EFBFBD><E7BABB> <20>Ѱ<EFBFBD><D1B0>ش<EFBFBD>.
memcpy(psAttribute, m_wAttribute, sizeof(m_wAttribute));
for (unsigned char cIndex = 0; cIndex < EquipmentInfo::MAX_RUNE_SOCKET_NUM; ++cIndex)
{
if (m_usRuneSocket[cIndex])
{
const ItemInfo* itemInfo = CItemMgr::GetInstance().GetItemInfo(m_usRuneSocket[cIndex]);
if (itemInfo)
{
for (unsigned char cAttribute = 0; cAttribute < Item::Attribute::MAX_ATTRIBUTE_NUM; ++cAttribute)
{
psAttribute[cAttribute] -= itemInfo->m_EquipAttribute.m_usAttributeValue[cAttribute];
}
}
}
}
}
inline void Item::CEquipment::GetSubRuneAttribute(Item::Attribute::Type eAttributeType, short& sAttribute)
{
sAttribute = m_wAttribute[eAttributeType];
for (unsigned char cIndex = 0; cIndex < EquipmentInfo::MAX_RUNE_SOCKET_NUM; ++cIndex)
{
if (m_usRuneSocket[cIndex])
{
const ItemInfo* itemInfo = CItemMgr::GetInstance().GetItemInfo(m_usRuneSocket[cIndex]);
if (itemInfo)
{
sAttribute -= itemInfo->m_EquipAttribute.m_usAttributeValue[eAttributeType];
}
}
}
}
inline void Item::CEquipment::SetRuneAttribute(RuneApplyType enRuneApplyType, unsigned char ucIndex)
{
// <20>ܺο<DCBA><CEBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>Ӽ<EFBFBD> <20><><EFBFBD><EFBFBD>/<2F>߰<EFBFBD>.
if (enRuneApplyType & RUNE_INDEX && enRuneApplyType & RUNE_REMOVE)
{
for (unsigned char ucRuneIndex = 0; ucRuneIndex < EquipmentInfo::MAX_RUNE_SOCKET_NUM; ucRuneIndex++)
{
if (m_usRuneSocket[ucRuneIndex])
{
const ItemInfo* itemInfo = CItemMgr::GetInstance().GetItemInfo(m_usRuneSocket[ucRuneIndex]);
if (itemInfo)
{
m_wAttribute[ucIndex] -= itemInfo->m_EquipAttribute.m_usAttributeValue[ucIndex];
}
}
}
}
else if (enRuneApplyType & RUNE_ALL && enRuneApplyType & RUNE_REMOVE)
{
ApplyRuneAttribute(REMOVE);
}
else if (enRuneApplyType & RUNE_INDEX && enRuneApplyType & RUNE_APPLY)
{
for (unsigned char ucRuneIndex = 0; ucRuneIndex < EquipmentInfo::MAX_RUNE_SOCKET_NUM; ucRuneIndex++)
{
if (m_usRuneSocket[ucRuneIndex])
{
const ItemInfo* itemInfo = CItemMgr::GetInstance().GetItemInfo(m_usRuneSocket[ucRuneIndex]);
if (itemInfo)
{
m_wAttribute[ucIndex] += itemInfo->m_EquipAttribute.m_usAttributeValue[ucIndex];
}
}
}
}
else if (enRuneApplyType & RUNE_ALL && enRuneApplyType & RUNE_APPLY)
{
ApplyRuneAttribute(APPLY);
}
}
inline unsigned short Item::CEquipment::GetRuneEquipLimitLevel(void) const
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD>.
unsigned short usResult = 0;
for (unsigned char cIndex = 0; cIndex < EquipmentInfo::MAX_RUNE_SOCKET_NUM; ++cIndex)
{
if (m_usRuneSocket[cIndex])
{
unsigned short usItemId = m_usRuneSocket[cIndex];
const ItemInfo* itemInfo = CItemMgr::GetInstance().GetItemInfo(usItemId);
if (itemInfo)
{
if (itemInfo->m_UseLimit.m_cLimitStatus==Item::StatusLimit::LEVEL)
{
if (usResult<itemInfo->m_UseLimit.m_wLimitValue)
{
usResult = itemInfo->m_UseLimit.m_wLimitValue;
}
}
}
}
}
return usResult;
}
inline Item::CUseItem* Item::CUseItem::DowncastToUseItem(CItem* lpItem)
{
if (NULL == lpItem) { return NULL; }
return lpItem->IsSet(DetailData::USE_ITEM) ?
static_cast<CUseItem*>(lpItem) : NULL;
}
inline bool Item::CItem::GetEnableRepair(void)
{
unsigned long dwFlags = GetItemInfo().m_DetailData.m_dwFlags;
return ((dwFlags & Item::DetailData::EQUIP) && !(dwFlags & Item::DetailData::STACKABLE));
}
inline bool Item::CItem::GetEnableStack(void)
{
return (GetItemInfo().m_DetailData.m_dwFlags & Item::DetailData::STACKABLE) ? true : false;
}
inline bool Item::CItem::GetEnableEquip(void)
{
return (GetItemInfo().m_DetailData.m_dwFlags & Item::DetailData::EQUIP);
}
inline bool Item::CItem::GetSocketItem(void)
{
return (GetItemInfo().m_DetailData.m_cItemType == Item::ItemType::GEM);
}
inline bool Item::CItem::GetRuneItem(void)
{
return (GetItemInfo().m_DetailData.m_cItemType == Item::ItemType::RUNE);
}
inline bool Item::CItem::GetTwohandItem(void)
{
unsigned char cItemType = GetItemInfo().m_DetailData.m_cItemType;
return (cItemType == Item::ItemType::BOW ||
cItemType == Item::ItemType::CROSSBOW ||
cItemType == Item::ItemType::STAFF ||
cItemType == Item::ItemType::TWOHANDED_AXE ||
cItemType == Item::ItemType::TWOHANDED_BLUNT ||
cItemType == Item::ItemType::TWOHANDED_SWORD ||
cItemType == Item::ItemType::OPP_SYTHE);
}
// ------------------------------------------------------------------------------------------------------------
// ConvertTool<6F><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD> - RebalanceOverItem.cpp <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
inline void Item::CEquipment::Repair()
{
SetNumOrDurability(GetMaxNumOrDurability());
CalculateItemPrice();
}
inline void Item::CEquipment::InitEquip()
{
// <20>ɼ<EFBFBD> <20>̽<EFBFBD><CCBD><EFBFBD> <20>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD> <20><> <20>߰<EFBFBD> <20>ɼ<EFBFBD><C9BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
RuneApplyType enRuneApplyType = static_cast<RuneApplyType>(RUNE_ALL | RUNE_REMOVE);
SetRuneAttribute(enRuneApplyType, 0);
// <20><><EFBFBD><EFBFBD> <20>ܰ<EFBFBD><DCB0><EFBFBD> <20>ʱ<EFBFBD>ȭ<EFBFBD>ȴ<EFBFBD>. (<28>ɼ<EFBFBD><C9BC><EFBFBD> <20><><EFBFBD>´<EFBFBD>.)
m_cUpgradeLevel = 0;
m_cCoreLevel = 0;
InitializeUpgradeAttribute();
// <20><><EFBFBD>ϵ<EFBFBD> <20>ʱ<EFBFBD>ȭ<EFBFBD>ȴ<EFBFBD>. (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD> <20>ɼ<EFBFBD><C9BC><EFBFBD> <20><><EFBFBD>´<EFBFBD>.)
m_cSocketNum = 0;
std::fill_n(m_cSocket, unsigned char(Item::EquipmentInfo::MAX_SOCKET_NUM), 0);
InitializeGemAttribute();
m_cMaxSocket = m_ItemInfo.m_DetailData.m_cMaxSocketNum;
}
inline void Item::CEquipment::SetEquip()
{
// <20><> <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20>ٽ<EFBFBD> <20>߰<EFBFBD><DFB0>Ѵ<EFBFBD>.
RuneApplyType enRuneApplyType = static_cast<RuneApplyType>(RUNE_ALL | RUNE_APPLY);
SetRuneAttribute(enRuneApplyType, 0);
}
#endif