2022-03-05 12:44:06 +02:00
|
|
|
|
#ifndef __INC_METIN_II_GAME_ITEM_H__
|
|
|
|
|
#define __INC_METIN_II_GAME_ITEM_H__
|
|
|
|
|
|
|
|
|
|
#include "entity.h"
|
|
|
|
|
|
|
|
|
|
class CItem : public CEntity
|
|
|
|
|
{
|
|
|
|
|
protected:
|
|
|
|
|
// override methods from ENTITY class
|
|
|
|
|
virtual void EncodeInsertPacket(LPENTITY entity);
|
|
|
|
|
virtual void EncodeRemovePacket(LPENTITY entity);
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
CItem(DWORD dwVnum);
|
|
|
|
|
virtual ~CItem();
|
|
|
|
|
|
|
|
|
|
int GetLevelLimit();
|
|
|
|
|
|
|
|
|
|
bool CheckItemUseLevel(int nLevel);
|
|
|
|
|
|
|
|
|
|
bool IsPCBangItem();
|
|
|
|
|
|
2022-03-12 11:39:41 +02:00
|
|
|
|
int FindApplyValue(BYTE bApplyType);
|
2022-03-05 12:44:06 +02:00
|
|
|
|
|
|
|
|
|
bool IsStackable() { return (GetFlag() & ITEM_FLAG_STACKABLE)?true:false; }
|
|
|
|
|
|
|
|
|
|
void Initialize();
|
|
|
|
|
void Destroy();
|
|
|
|
|
|
|
|
|
|
void Save();
|
|
|
|
|
|
|
|
|
|
void SetWindow(BYTE b) { m_bWindow = b; }
|
|
|
|
|
BYTE GetWindow() { return m_bWindow; }
|
|
|
|
|
|
|
|
|
|
void SetID(DWORD id) { m_dwID = id; }
|
|
|
|
|
DWORD GetID() { return m_dwID; }
|
|
|
|
|
|
|
|
|
|
void SetProto(const TItemTable * table);
|
|
|
|
|
TItemTable const * GetProto() { return m_pProto; }
|
|
|
|
|
|
|
|
|
|
int GetGold();
|
|
|
|
|
int GetShopBuyPrice();
|
|
|
|
|
const char * GetName() { return m_pProto ? m_pProto->szLocaleName : NULL; }
|
|
|
|
|
const char * GetBaseName() { return m_pProto ? m_pProto->szName : NULL; }
|
|
|
|
|
BYTE GetSize() { return m_pProto ? m_pProto->bSize : 0; }
|
|
|
|
|
|
2022-03-12 11:39:41 +02:00
|
|
|
|
void SetFlag(int flag) { m_lFlag = flag; }
|
|
|
|
|
int GetFlag() { return m_lFlag; }
|
2022-03-05 12:44:06 +02:00
|
|
|
|
|
2022-03-12 11:39:41 +02:00
|
|
|
|
void AddFlag(int bit);
|
|
|
|
|
void RemoveFlag(int bit);
|
2022-03-05 12:44:06 +02:00
|
|
|
|
|
|
|
|
|
DWORD GetWearFlag() { return m_pProto ? m_pProto->dwWearFlags : 0; }
|
|
|
|
|
DWORD GetAntiFlag() { return m_pProto ? m_pProto->dwAntiFlags : 0; }
|
|
|
|
|
DWORD GetImmuneFlag() { return m_pProto ? m_pProto->dwImmuneFlag : 0; }
|
|
|
|
|
|
|
|
|
|
void SetVID(DWORD vid) { m_dwVID = vid; }
|
|
|
|
|
DWORD GetVID() { return m_dwVID; }
|
|
|
|
|
|
|
|
|
|
bool SetCount(DWORD count);
|
|
|
|
|
DWORD GetCount();
|
|
|
|
|
|
|
|
|
|
// GetVnum<75><6D> GetOriginalVnum<75><6D> <20><><EFBFBD><EFBFBD> comment
|
|
|
|
|
// GetVnum<75><6D> Masking <20><> Vnum<75>̴<EFBFBD>. <20≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ν<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Vnum<75><6D> 10<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Vnum<75><6D> 20<32><30> <20><>ó<EFBFBD><C3B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD>̴<EFBFBD>.
|
|
|
|
|
// Masking <20><><EFBFBD><EFBFBD> ori_to_new.txt<78><74><EFBFBD><EFBFBD> <20><><EFBFBD>ǵ<EFBFBD> <20><><EFBFBD>̴<EFBFBD>.
|
|
|
|
|
// GetOriginalVnum<75><6D> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Vnum<75><6D><EFBFBD><EFBFBD>, <20>α<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>, Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> Vnum<75><6D> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD> <20>Ѵ<EFBFBD>.
|
|
|
|
|
//
|
|
|
|
|
DWORD GetVnum() const { return m_dwMaskVnum ? m_dwMaskVnum : m_dwVnum; }
|
|
|
|
|
DWORD GetOriginalVnum() const { return m_dwVnum; }
|
|
|
|
|
BYTE GetType() const { return m_pProto ? m_pProto->bType : 0; }
|
|
|
|
|
BYTE GetSubType() const { return m_pProto ? m_pProto->bSubType : 0; }
|
|
|
|
|
BYTE GetLimitType(DWORD idx) const { return m_pProto ? m_pProto->aLimits[idx].bType : 0; }
|
2022-03-12 11:39:41 +02:00
|
|
|
|
int GetLimitValue(DWORD idx) const { return m_pProto ? m_pProto->aLimits[idx].lValue : 0; }
|
2022-03-05 12:44:06 +02:00
|
|
|
|
|
2022-03-12 11:39:41 +02:00
|
|
|
|
int GetValue(DWORD idx);
|
2022-03-05 12:44:06 +02:00
|
|
|
|
|
|
|
|
|
void SetCell(LPCHARACTER ch, WORD pos) { m_pOwner = ch, m_wCell = pos; }
|
|
|
|
|
WORD GetCell() { return m_wCell; }
|
|
|
|
|
|
|
|
|
|
LPITEM RemoveFromCharacter();
|
|
|
|
|
bool AddToCharacter(LPCHARACTER ch, TItemPos Cell);
|
|
|
|
|
LPCHARACTER GetOwner() { return m_pOwner; }
|
|
|
|
|
|
|
|
|
|
LPITEM RemoveFromGround();
|
2022-03-12 11:39:41 +02:00
|
|
|
|
bool AddToGround(int lMapIndex, const PIXEL_POSITION & pos, bool skipOwnerCheck = false);
|
2022-03-05 12:44:06 +02:00
|
|
|
|
|
|
|
|
|
int FindEquipCell(LPCHARACTER ch, int bCandidateCell = -1);
|
|
|
|
|
bool IsEquipped() const { return m_bEquipped; }
|
|
|
|
|
bool EquipTo(LPCHARACTER ch, BYTE bWearCell);
|
|
|
|
|
bool IsEquipable() const;
|
|
|
|
|
|
|
|
|
|
bool CanUsedBy(LPCHARACTER ch);
|
|
|
|
|
|
|
|
|
|
bool DistanceValid(LPCHARACTER ch);
|
|
|
|
|
|
|
|
|
|
void UpdatePacket();
|
|
|
|
|
void UsePacketEncode(LPCHARACTER ch, LPCHARACTER victim, struct packet_item_use * packet);
|
|
|
|
|
|
|
|
|
|
void SetExchanging(bool isOn = true);
|
|
|
|
|
bool IsExchanging() { return m_bExchanging; }
|
|
|
|
|
|
|
|
|
|
bool IsTwohanded();
|
|
|
|
|
|
|
|
|
|
bool IsPolymorphItem();
|
|
|
|
|
|
|
|
|
|
void ModifyPoints(bool bAdd); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȿ<><C8BF><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>Ϳ<EFBFBD> <20>ο<EFBFBD> <20>Ѵ<EFBFBD>. bAdd<64><64> false<73≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
bool CreateSocket(BYTE bSlot, BYTE bGold);
|
2022-03-12 11:39:41 +02:00
|
|
|
|
const int * GetSockets() { return &m_alSockets[0]; }
|
|
|
|
|
int GetSocket(int i) { return m_alSockets[i]; }
|
2022-03-05 12:44:06 +02:00
|
|
|
|
|
2022-03-12 11:39:41 +02:00
|
|
|
|
void SetSockets(const LONG * al);
|
|
|
|
|
void SetSocket(int i, int v, bool bLog = true);
|
2022-03-05 12:44:06 +02:00
|
|
|
|
|
|
|
|
|
int GetSocketCount();
|
|
|
|
|
bool AddSocket();
|
|
|
|
|
|
|
|
|
|
const TPlayerItemAttribute* GetAttributes() { return m_aAttr; }
|
|
|
|
|
const TPlayerItemAttribute& GetAttribute(int i) { return m_aAttr[i]; }
|
|
|
|
|
|
|
|
|
|
BYTE GetAttributeType(int i) { return m_aAttr[i].bType; }
|
|
|
|
|
short GetAttributeValue(int i){ return m_aAttr[i].sValue; }
|
|
|
|
|
|
|
|
|
|
void SetAttributes(const TPlayerItemAttribute* c_pAttribute);
|
|
|
|
|
|
|
|
|
|
int FindAttribute(BYTE bType);
|
|
|
|
|
bool RemoveAttributeAt(int index);
|
|
|
|
|
bool RemoveAttributeType(BYTE bType);
|
|
|
|
|
|
|
|
|
|
bool HasAttr(BYTE bApply);
|
|
|
|
|
bool HasRareAttr(BYTE bApply);
|
|
|
|
|
|
|
|
|
|
void SetDestroyEvent(LPEVENT pkEvent);
|
|
|
|
|
void StartDestroyEvent(int iSec=300);
|
|
|
|
|
|
|
|
|
|
DWORD GetRefinedVnum() { return m_pProto ? m_pProto->dwRefinedVnum : 0; }
|
|
|
|
|
DWORD GetRefineFromVnum();
|
|
|
|
|
int GetRefineLevel();
|
|
|
|
|
|
|
|
|
|
void SetSkipSave(bool b) { m_bSkipSave = b; }
|
|
|
|
|
bool GetSkipSave() { return m_bSkipSave; }
|
|
|
|
|
|
|
|
|
|
bool IsOwnership(LPCHARACTER ch);
|
|
|
|
|
void SetOwnership(LPCHARACTER ch, int iSec = 10);
|
|
|
|
|
void SetOwnershipEvent(LPEVENT pkEvent);
|
|
|
|
|
|
|
|
|
|
DWORD GetLastOwnerPID() { return m_dwLastOwnerPID; }
|
|
|
|
|
|
|
|
|
|
int GetAttributeSetIndex(); // <20>Ӽ<EFBFBD> <20>ٴ°<D9B4><C2B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>迭<EFBFBD><E8BFAD> <20><><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>.
|
|
|
|
|
void AlterToMagicItem();
|
|
|
|
|
void AlterToSocketItem(int iSocketCount);
|
|
|
|
|
|
|
|
|
|
WORD GetRefineSet() { return m_pProto ? m_pProto->wRefineSet : 0; }
|
|
|
|
|
|
|
|
|
|
void StartUniqueExpireEvent();
|
|
|
|
|
void SetUniqueExpireEvent(LPEVENT pkEvent);
|
|
|
|
|
|
|
|
|
|
void StartTimerBasedOnWearExpireEvent();
|
|
|
|
|
void SetTimerBasedOnWearExpireEvent(LPEVENT pkEvent);
|
|
|
|
|
|
|
|
|
|
void StartRealTimeExpireEvent();
|
|
|
|
|
bool IsRealTimeItem();
|
|
|
|
|
|
|
|
|
|
void StopUniqueExpireEvent();
|
|
|
|
|
void StopTimerBasedOnWearExpireEvent();
|
|
|
|
|
void StopAccessorySocketExpireEvent();
|
|
|
|
|
|
|
|
|
|
// <09>ϴ<EFBFBD> REAL_TIME<4D><45> TIMER_BASED_ON_WEAR <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20><><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|
|
|
|
int GetDuration();
|
|
|
|
|
|
|
|
|
|
int GetAttributeCount();
|
|
|
|
|
void ClearAttribute();
|
|
|
|
|
void ChangeAttribute(const int* aiChangeProb=NULL);
|
|
|
|
|
void AddAttribute();
|
|
|
|
|
void AddAttribute(BYTE bType, short sValue);
|
|
|
|
|
|
|
|
|
|
void ApplyAddon(int iAddonType);
|
|
|
|
|
|
|
|
|
|
int GetSpecialGroup() const;
|
|
|
|
|
bool IsSameSpecialGroup(const LPITEM item) const;
|
|
|
|
|
|
|
|
|
|
// ACCESSORY_REFINE
|
|
|
|
|
// <20><EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD>
|
|
|
|
|
bool IsAccessoryForSocket();
|
|
|
|
|
|
|
|
|
|
int GetAccessorySocketGrade();
|
|
|
|
|
int GetAccessorySocketMaxGrade();
|
|
|
|
|
int GetAccessorySocketDownGradeTime();
|
|
|
|
|
|
|
|
|
|
void SetAccessorySocketGrade(int iGrade);
|
|
|
|
|
void SetAccessorySocketMaxGrade(int iMaxGrade);
|
|
|
|
|
void SetAccessorySocketDownGradeTime(DWORD time);
|
|
|
|
|
|
|
|
|
|
void AccessorySocketDegrade();
|
|
|
|
|
|
|
|
|
|
// <20>Ǽ<EFBFBD><C7BC>縮 <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD><EFBFBD><EFBFBD> Ÿ<≯<EFBFBD> <20><><EFBFBD>ư<EFBFBD><C6B0>°<EFBFBD>( <20><><EFBFBD><EFBFBD>, <20><> )
|
|
|
|
|
void StartAccessorySocketExpireEvent();
|
|
|
|
|
void SetAccessorySocketExpireEvent(LPEVENT pkEvent);
|
|
|
|
|
|
|
|
|
|
bool CanPutInto(LPITEM item);
|
|
|
|
|
// END_OF_ACCESSORY_REFINE
|
|
|
|
|
|
|
|
|
|
void CopyAttributeTo(LPITEM pItem);
|
|
|
|
|
void CopySocketTo(LPITEM pItem);
|
|
|
|
|
|
|
|
|
|
int GetRareAttrCount();
|
|
|
|
|
bool AddRareAttribute();
|
|
|
|
|
bool ChangeRareAttribute();
|
|
|
|
|
|
|
|
|
|
void AttrLog();
|
|
|
|
|
|
|
|
|
|
void Lock(bool f) { m_isLocked = f; }
|
|
|
|
|
bool isLocked() const { return m_isLocked; }
|
|
|
|
|
|
|
|
|
|
private :
|
|
|
|
|
void SetAttribute(int i, BYTE bType, short sValue);
|
|
|
|
|
public:
|
|
|
|
|
void SetForceAttribute(int i, BYTE bType, short sValue);
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
bool EquipEx(bool is_equip);
|
|
|
|
|
bool Unequip();
|
|
|
|
|
|
|
|
|
|
void AddAttr(BYTE bApply, BYTE bLevel);
|
|
|
|
|
void PutAttribute(const int * aiAttrPercentTable);
|
|
|
|
|
void PutAttributeWithLevel(BYTE bLevel);
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
friend class CInputDB;
|
|
|
|
|
bool OnAfterCreatedItem(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Բ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(<28>ε<EFBFBD>)<29><> <20><> <20>Ҹ<EFBFBD><D2B8><EFBFBD><EFBFBD><EFBFBD> <20>Լ<EFBFBD>.
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
bool IsRideItem();
|
|
|
|
|
bool IsRamadanRing();
|
|
|
|
|
|
|
|
|
|
void ClearMountAttributeAndAffect();
|
|
|
|
|
bool IsNewMountItem();
|
|
|
|
|
|
|
|
|
|
#ifdef __AUCTION__
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
bool MoveToAuction ();
|
|
|
|
|
void CopyToRawData (TPlayerItem* item);
|
|
|
|
|
#endif
|
|
|
|
|
// <20><><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD> <20><><EFBFBD><EFBFBD> ij<><C4B3> <20><><EFBFBD><EFBFBD><EFBFBD>۰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><>ȯ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ٰ<EFBFBD> <20>Ͽ<EFBFBD>,
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD>, <20><>ȯ <20><><EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ο<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>۵<EFBFBD><DBB5><EFBFBD> <20><><EFBFBD>ο<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>뿪<EFBFBD><EBBFAA> <20>Ҵ<EFBFBD><D2B4>Ͽ<EFBFBD><CFBF><EFBFBD>.
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ο<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>۵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>۰<EFBFBD> <20><><EFBFBD><EFBFBD> ȿ<><C8BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴµ<CFB4>,
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Ŭ<><C5AC><EFBFBD><EFBFBD>, vnum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD><C7BE>־<EFBFBD>
|
|
|
|
|
// <20><><EFBFBD>ο<EFBFBD> vnum<75><6D> <20>˴<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ھƾ<DABE><C6BE>ϴ<EFBFBD> <20><>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> <20><>Ȳ<EFBFBD><C8B2> <20>´<EFBFBD><C2B4>Ҵ<EFBFBD>.
|
|
|
|
|
// <20><EFBFBD><D7B7><EFBFBD> <20><> vnum<75><6D> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ư<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> vnum<75><6D><EFBFBD><EFBFBD> <20>ٲ㼭 <20><><EFBFBD><EFBFBD> <20>ϰ<EFBFBD>,
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> vnum<75><6D><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2>ֵ<EFBFBD><D6B5><EFBFBD> <20>Ѵ<EFBFBD>.
|
|
|
|
|
|
|
|
|
|
// Mask vnum<75><6D> <20> <20><><EFBFBD><EFBFBD>(ex. <20><><EFBFBD><EFBFBD> <20><>Ȳ)<29><> <20><><EFBFBD><EFBFBD> vnum<75><6D> <20>ٲ<EFBFBD><D9B2><EFBFBD> <20><><EFBFBD>ư<EFBFBD><C6B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD>.
|
|
|
|
|
void SetMaskVnum(DWORD vnum) { m_dwMaskVnum = vnum; }
|
|
|
|
|
DWORD GetMaskVnum() { return m_dwMaskVnum; }
|
|
|
|
|
bool IsMaskedItem() { return m_dwMaskVnum != 0; }
|
|
|
|
|
|
|
|
|
|
// <20><>ȥ<EFBFBD><C8A5>
|
|
|
|
|
bool IsDragonSoul();
|
|
|
|
|
int GiveMoreTime_Per(float fPercent);
|
|
|
|
|
int GiveMoreTime_Fix(DWORD dwTime);
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
TItemTable const * m_pProto; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ÿ<><C5B8>
|
|
|
|
|
|
|
|
|
|
DWORD m_dwVnum;
|
|
|
|
|
LPCHARACTER m_pOwner;
|
|
|
|
|
|
|
|
|
|
BYTE m_bWindow; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
DWORD m_dwID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ
|
|
|
|
|
bool m_bEquipped; // <20><><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD><C7BE>°<EFBFBD>?
|
|
|
|
|
DWORD m_dwVID; // VID
|
|
|
|
|
WORD m_wCell; // <20><>ġ
|
|
|
|
|
DWORD m_dwCount; // <20><><EFBFBD><EFBFBD>
|
2022-03-12 11:39:41 +02:00
|
|
|
|
int m_lFlag; // <20>߰<EFBFBD> flag
|
2022-03-05 12:44:06 +02:00
|
|
|
|
DWORD m_dwLastOwnerPID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PID
|
|
|
|
|
|
|
|
|
|
bool m_bExchanging; ///< <20><><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD><C8AF> <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
2022-03-12 11:39:41 +02:00
|
|
|
|
int m_alSockets[ITEM_SOCKET_MAX_NUM]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ĺ
|
2022-03-05 12:44:06 +02:00
|
|
|
|
TPlayerItemAttribute m_aAttr[ITEM_ATTRIBUTE_MAX_NUM];
|
|
|
|
|
|
|
|
|
|
LPEVENT m_pkDestroyEvent;
|
|
|
|
|
LPEVENT m_pkExpireEvent;
|
|
|
|
|
LPEVENT m_pkUniqueExpireEvent;
|
|
|
|
|
LPEVENT m_pkTimerBasedOnWearExpireEvent;
|
|
|
|
|
LPEVENT m_pkRealTimeExpireEvent;
|
|
|
|
|
LPEVENT m_pkAccessorySocketExpireEvent;
|
|
|
|
|
LPEVENT m_pkOwnershipEvent;
|
|
|
|
|
|
|
|
|
|
DWORD m_dwOwnershipPID;
|
|
|
|
|
|
|
|
|
|
bool m_bSkipSave;
|
|
|
|
|
|
|
|
|
|
bool m_isLocked;
|
|
|
|
|
|
|
|
|
|
DWORD m_dwMaskVnum;
|
|
|
|
|
DWORD m_dwSIGVnum;
|
|
|
|
|
public:
|
|
|
|
|
void SetSIGVnum(DWORD dwSIG)
|
|
|
|
|
{
|
|
|
|
|
m_dwSIGVnum = dwSIG;
|
|
|
|
|
}
|
|
|
|
|
DWORD GetSIGVnum() const
|
|
|
|
|
{
|
|
|
|
|
return m_dwSIGVnum;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
EVENTINFO(item_event_info)
|
|
|
|
|
{
|
|
|
|
|
LPITEM item;
|
|
|
|
|
char szOwnerName[CHARACTER_NAME_MAX_LEN];
|
|
|
|
|
|
|
|
|
|
item_event_info()
|
|
|
|
|
: item( 0 )
|
|
|
|
|
{
|
|
|
|
|
::memset( szOwnerName, 0, CHARACTER_NAME_MAX_LEN );
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
EVENTINFO(item_vid_event_info)
|
|
|
|
|
{
|
|
|
|
|
DWORD item_vid;
|
|
|
|
|
|
|
|
|
|
item_vid_event_info()
|
|
|
|
|
: item_vid( 0 )
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif
|