📄 item.h
字号:
// add by zlong 2003-11-24
bool IsChestItem() { return (GetInt(ITEMDATA_TYPE) >= TYPE_CHEST_SPACE3) && (GetInt(ITEMDATA_TYPE) <= TYPE_CHEST_SPACE9); }
// add by zlong 3002-12-05
bool IsPick() { return 470 == (GetInt(ITEMDATA_TYPE)/1000)%1000; } // 是否挖矿用的锄头
bool IsMantle() { return IsFinery() && GetItemType() == ITEMTYPE_MANTLE; }
public: // static
static bool IsBowSort(int nType) { return CItem::IsBow(nType) || CItem::IsCrossBow(nType); }
static bool IsBow(int nType) { return CItem::GetItemSort(nType) == ITEMSORT_WEAPON2 && CItem::GetItemType(nType) == DWEAPON_BOW; }
static bool IsCrossBow(int nType) { return CItem::GetItemSort(nType) == ITEMSORT_WEAPON2 && CItem::GetItemType(nType) == DWEAPON_CROSSBOW; }
static bool IsShield(int nType) { return CItem::GetItemSort(nType) == ITEMSORT_SHIELD; }
static bool IsGameCard(int nType) { return ((nType == CARD_FEE_POINT) || (nType == CARD_FEE_POINT2)); }
static bool IsExpend(int nType) { return CItem::IsArrowSort(nType) || (CItem::GetItemSort(nType) == ITEMSORT_EXPEND && CItem::GetItemType(nType) < ITEMTYPE_SPECIAL_USE); }
static bool IsCountable(int nType) { return CItem::IsArrowSort(nType) || (CItem::GetItemSort(nType) == ITEMSORT_EXPEND && !CItem::IsEudemon(nType) && !CItem::IsEudemonEgg(nType)); }
// add by zlong 2003-11-20
static bool IsMount(int nType) { return CItem::GetItemSort(nType) == ITEMSORT_MOUNT; }
static bool IsEquipment(int nType) { return !CItem::IsArrowSort(nType) && ((GetItemSort(nType) >= IETMSORT_FINERY && GetItemSort(nType) <= ITEMSORT_MOUNT) || CItem::IsShield(nType)); }
// add by zlong 2003-12-05
static bool IsArrowSort(int nType) { return CItem::IsArrow(nType) || CItem::IsDart(nType); }
static bool IsArrow(int nType) { return nType == ARROW_TYPE_ID; }
static bool IsDart(int nType) { return nType == DART_TYPE_ID; }
static int GetQuality(int nType) { return (nType/1000000000)*10 + (nType%10); }
static bool IsMedicine(int nType) { return CItem::IsExpend(nType) && CItem::GetItemType(nType)==ITEMTYPE_PHYSIC; }
static bool IsSpell(int nType) { return CItem::IsExpend(nType) && CItem::GetItemType(nType)==ITEMTYPE_SCROLL; }
static bool IsWPGBadge(int nType) { return nType/100 == 10600 && (nType/10)%10 >= 1 && (nType/10)%10 <= 5 && (nType%10) >= 1 && (nType%10) <= 5; }
// 魔魂宝石判断 -- zlong 2004-02-05
static bool IsGhostGem(int nType) { return CItem::IsExpend(nType) && CItem::GetItemType(nType) == ITEMTYPE_GHOSTGEM; }
static bool IsNeedIdent(int nIdent) { return (nIdent & _ITEM_STATUS_NOT_IDENT) != 0; }
static int HideTypeUnident(OBJID idType) { if(CItem::IsEquipment(idType)) return ((idType/10)*10)%10000000; if(CItem::IsSpell(idType)) return ((idType/100)*100)%10000000; return idType; }
static int HideTypeQuality(OBJID idType) { if(CItem::IsEquipment(idType)) return ((idType/10)*10)%10000000; return idType; }
public:
//modified by jinggy--2004-11-11
bool ChangeAddition(int nLevel);//改变装备的追加等级
bool IsHoldEnable() { return IsWeapon1() || IsWeapon2() || IsShield() || IsArrowSort(); }
// modified by zlong 2003-12-01 -- Sprite is equip enable
bool IsEquipEnable() { return IsEquipment() || IsArrowSort() || IsSprite(); }
bool IsEatEnable() { return IsMedicine(); }
bool IsPileEnable() { return IsExpend() && GetInt(ITEMDATA_AMOUNTLIMIT) > 1; }
bool IsRepairEnable() { return !IsExpend() && !IsNeedIdent() && GetInt(ITEMDATA_AMOUNTLIMIT) >= 100 && !IsCannotRepair(); }
// modified by zlong 2003-11-24 ---- chest item can not Exchange and store
bool IsExchangeEnable() { return (GetInt(ITEMDATA_MONOPOLY) & MONOPOLY_MASK) == 0 && !IsChestItem(); }
bool IsStorageEnable() { return (GetInt(ITEMDATA_MONOPOLY) & STORAGE_MASK) == 0 && !IsChestItem(); }
bool IsSellEnable() { return ((GetInt(ITEMDATA_MONOPOLY) & SELL_DISABLE_MASK) == 0 &&!IsGameCard() && !IsChestItem()); }
bool IsNeverDropWhenDead() { return (GetInt(ITEMDATA_MONOPOLY) & NEVER_DROP_WHEN_DEAD_MASK) != 0; }
bool IsNonsuchItem(); // { return (GetInt(ITEMDATA_TYPE)%10) >= 8; }
bool IsNormalArrow() { return GetInt(ITEMDATA_TYPE) == NORMAL_ARROW_TYPE; }
// modified by zlong 2003-11-24 ---- chest item is not discardable
bool IsDiscardable() { return (!IsGameCard() && !IsChestItem()); }
bool IsNeedIdent() { return IsNeedIdent(GetInt(ITEMDATA_IDENT)); }
bool IsCannotRepair() { return (GetInt(ITEMDATA_IDENT) & _ITEM_STATUS_CANNOT_REPAIR) != 0; }
bool IsNeverWear() { return (GetInt(ITEMDATA_IDENT) & _ITEM_STATUS_NEVER_DAMAGE) != 0; }
public: // 幻兽 -- zlong 2004-02-03
static bool IsEudemon(OBJID idType) { return CItem::GetItemSort(idType) == ITEMSORT_EXPEND && CItem::GetItemType(idType) == ITEMTYPE_EUDEMON; }
static bool IsEudemonEgg(OBJID idType) { return CItem::GetItemSort(idType) == ITEMSORT_EXPEND && CItem::GetItemType(idType) == ITEMTYPE_EUDEMON_EGG; }
static int GetEudemonType(OBJID idType) { return (idType/1000)%10; }
bool IsEudemon() { return CItem::IsEudemon(GetInt(ITEMDATA_TYPE)); }
bool IsEudemonEgg() { return CItem::IsEudemonEgg(GetInt(ITEMDATA_TYPE)); }
bool IsEvilEudemon() { return (IsEudemon() && (GetInt(ITEMDATA_TYPE)%10)==EUDEMON_GROUP_EVIL); }
bool IsEvolveEnable();
bool IsEvolve2Enable();
bool IsAliveEudemon() { return (IsEudemon() && GetInt(ITEMDATA_EUDEMON_LIFE) > 0); }
int GetEudemonType() { return CItem::GetEudemonType(GetInt(ITEMDATA_TYPE)); }
int GetEudemonLevel() { return GetInt(ITEMDATA_EUDEMON_LEVEL); }
// int GetEudemonGrowth100(){return GetInt(ITEMDATA_GROWTH)*GetInt(ITEMDATA_GROWTH_ORIGINAL)/100;}
// bool SendEudemonAttrib(CUser* pUser);
int GetEudemonMaxLife() { return __max(1, (GetEudemonLevel() * (GetInt(ITEMDATA_LIFE) * GetInt(ITEMDATA_GROWTH) + GetAddition(ITEMADDITIONDATA_LIFE)*100) / 10000)); }
OBJID GetEudemonID() { CHECKF (m_pEudemonData); return m_pEudemonData->GetID(); }
OBJID GetDivineID() { return (GetInt(ITEMDATA_TYPE)/10%10); }
UCHAR GetRelationShip(OBJID idDivine);
bool AddRelationShip(OBJID idDivine, int nValue);
public: //精灵 -- add by zlong 2003-11-28
static bool IsSprite(OBJID idType) { return CItem::GetItemSort(idType) == ITEMSORT_EXPEND && CItem::GetItemType(idType) == ITEMTYPE_SPRITE; }
static int GetSpriteType(OBJID idType) { return (idType/1000)%10; }
bool IsSprite() { return CItem::IsSprite(GetInt(ITEMDATA_TYPE)); }
int GetSpriteType() { return CItem::GetSpriteType(GetInt(ITEMDATA_TYPE)); }
int GetSpriteLevel() { return GetInt(ITEMDATA_SPRITE_LEVEL); }
int AwardExp(int nExp, int nLuck = 0);
int AddGrowth(int nGrowth);
int AdjustOriginalGrowth();
protected:
void GrowUp(int nLuck = 0);
int GetExp() { return GetInt(ITEMDATA_EXP); }
int GetGrowth100() { return GetInt(ITEMDATA_GROWTH); }
public: // get
int GetAddition(ITEMADDITIONDATA idx);
int GetMaxAtk() { return GetAddition(ITEMADDITIONDATA_ATTACK_MAX) + GetInt(ITEMDATA_ATTACK_MAX_); }
int GetMinAtk() { return GetAddition(ITEMADDITIONDATA_ATTACK_MIN) + GetInt(ITEMDATA_ATTACK_MIN_); }
int GetMgcMaxAtk() { return GetAddition(ITEMADDITIONDATA_MGCATK_MAX) + GetInt(ITEMDATA_MAGICATK_MAX_); }
int GetMgcMinAtk() { return GetAddition(ITEMADDITIONDATA_MGCATK_MIN) + GetInt(ITEMDATA_MAGICATK_MIN_); }
int GetDef() { return GetAddition(ITEMADDITIONDATA_DEFENSE) + GetInt(ITEMDATA_DEFENSE_); }
int GetMgcDef() { return GetAddition(ITEMADDITIONDATA_MAGICDEF) + GetInt(ITEMDATA_MAGICDEF_); }
int GetDexteriy() { return GetAddition(ITEMADDITIONDATA_DEXTERITY); } // + GetInt(ITEMDATA_DEXTERITY); }
int GetDodge() { return GetAddition(ITEMADDITIONDATA_DODGE) + GetInt(ITEMDATA_DODGE); }
int GetLife() { return GetAddition(ITEMADDITIONDATA_LIFE) + GetInt(ITEMDATA_LIFE); }
int GetHitRate() { return GetInt(ITEMDATA_HITRATE); }
public: // const
int CalcRepairMoney();
DWORD GetSellPrice();
int GetItemCount() { if(IsExpend()) return GetInt(ITEMDATA_AMOUNT); return 1; } // 物品的数量,非易耗品返回1
int GetWeight() { if(IsArrowSort()) return (GetInt(ITEMDATA_AMOUNT)-1)*GetInt(ITEMDATA_WEIGHT_)/ARROW_PILE_WEIGHT + 1; return GetItemCount() * GetInt(ITEMDATA_WEIGHT_); }
static int GetWeight(OBJID idType, int nAmount=0); // nAmount: amount 字段值
public: // modify attribute
void SetIdent(bool bNeedIdent, bool bUpdate) {
if(bNeedIdent) SetInt(ITEMDATA_IDENT, GetInt(ITEMDATA_IDENT)|_ITEM_STATUS_NOT_IDENT, bUpdate);
else SetInt(ITEMDATA_IDENT, GetInt(ITEMDATA_IDENT)&(~_ITEM_STATUS_NOT_IDENT), bUpdate); }
void SetStatus(DWORD dwData, bool bUpdate) { SetInt(ITEMDATA_IDENT, dwData, bUpdate); }
public: // gem effect
int GetGemDmgEffect (void);
int GetGemMgcAtkEffect (void);
int GetGemHitRateEffect (void);
int GetGemExpEffect (void);
int GetGemWpnExpEffect (void);
int GetGemMgcExpEffect (void);
int GetGemDurEffect (OBJID idGemType=ID_NONE);
public: // application
CItem* Split(int nNum);
public:
//升级战魂等级-------jinggy------2004-11-12
void WarGhostLevelUpgrade(CUserPtr pUser);
bool WarGhostLevelReset();
//判断是否是状态攻击类宝石-----jinggy---2004-11-12
bool IsGemActiveAtk();
int GetItemSubType();
int GetLevel (void);
int GetQuality (void) { return GetQuality(GetInt(ITEMDATA_TYPE)); }
bool ChangeType (OBJID idNewType);
bool ChangeColor (int nColor);
bool RecoverDur (void);
int GetRecoverDurCost (void);
protected: // 类型
int GetItemSort() { return CItem::GetItemSort(GetInt(ITEMDATA_TYPE)); }
int GetItemType() { return CItem::GetItemType(GetInt(ITEMDATA_TYPE)); }
public:
static int GetItemSort(OBJID idType) { return (idType%10000000)/100000; } // 百万 + 十万
static int GetItemType(OBJID idType); // 武器返回(万位,千位)*千,其它返回万位*万
public:
//---jinggy---铸造系统---begin
void WarGhostLevelDec(int nDec);
int GetSuperAddition();
int GetWarGhostLevel();
bool DecSuperAddition();
bool UpSuperAddition();
bool UpQuality();
bool UpLevel();
bool IsGemForEmbedEquip();
bool IsGemForUpSuperAddition();
bool IsGemForUpQuality();
bool IsGemForUpLevel();
//---jinggy---铸造系统---end
static int GetSubType(OBJID idType) { return (idType%1000000)/1000; }
protected: //
CItem* Clone(); // 新物品存数据库
MYHEAP_DECLARATION(s_heap)
};
#endif // !defined(AFX_ITEM_H__CA7CE885_1DCF_4B96_B308_FB7F40CCF4BA__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -