Files
Sun1602/SolarSlot/SCSlotStruct.h
T
2022-10-26 12:25:11 +08:00

627 lines
24 KiB
C++

#ifndef _SOLAR_SLOT_SCSLOTSTRUCT_H
#define _SOLAR_SLOT_SCSLOTSTRUCT_H
#pragma once
#include "SCSlotHeader.h"
#include "SCSlotStruct_Version.h"
// (CHANGES) move to a pre-include section
class SCItemSlot;
#include "SCItemStreamSerializer.h" //internal include file
//==================================================================================================
// CHANGES: f090923.x, waverix, BASE_ITEMINFO의 Pack구조 변환, 자주 사용하는 건데... (389->412)
// CHANGES: f100520.3L, critical changes : changes code about a 'pragma pack'
#pragma pack(push)
#pragma pack()
//==================================================================================================
struct BASE_ITEMINFO
{
//----------------------------------------------------------------------------------------------
// Common parameters
struct {
SLOTCODE m_Code; //< 코드
BYTE m_ChargeType; //< ref: eCHARGE_TYPE
BYTE m_ChargeSubType; //< ref: eCHARGE_SUB_TYPE
//
nsSlot::ItemRuleInfo item_rule_info;
//
WORD m_wType; //< ref: eITEMTYPE
WORD m_wSubType; //< eITEMSUBTYPE (ex: 0=일반 1=엘리트, ...)
ItemSubTypeDetail sub_type_detailed; // f110414.1L, integrated sub_type and level
//
POSTYPE m_wEqPos; //< 장비 위치 (ref: eEQUIPCONTAINER_POS)
BYTE m_byEventCode; //< rarely used cases
// CHANGES: f110408.3L, added tag for external control facilities like a 'SunEventInfo'.
uint8_t time_expiration_item; // _SERVER factility
LEVELTYPE m_LV; //< 레벨
};
#if defined(_DEBUG) // to support catchable point in of debug view ranges
char m_pszName[MAX_ITEMNAME_LENGTH]; //< 디버그용 이름(사용안함)
#endif
//----------------------------------------------------------------------------------------------
// Functionality parameters
typedef BYTE ZardGrade;
typedef BYTE ZardOption;
typedef WORD ZardRatio;
struct {
// CHANGES: f100510.1L, change the field name to replace use a field
WORD trade_sell_type; // Use SCItemSlot::CanTradeSell(), ref: eITEM_TRADESELL_TYPE
BYTE m_byMaterialType; // ref: eITEM_MATERIAL_TYPE, 장비사용여부
BYTE m_byMixture; //< Use SCItemSlot::CanUseMixture(), ref: eMIXTURE_FLAG, 각종 가능 여부(랭크업,조합,인첸트,결정화...etc)
BYTE m_byWasteType; // eWASTETYPE
BYTE m_bPossessionItem; //< 귀속 아이템인가 BOOL로 이용하지만 사이즈 위해 BYTE 사용
// _NA000960_101011_ITEM_CUSTOMIZING_CONTENTS_ADD_RULE_ (add) +
// _NA001202_101104_ITEM_CUSTOMIZING_CONTENTS_ETHEREALIZABLE_LUCKYITEM (extend)
eEtherealizeMode etherealization_mode_;
// _NA_000251_20100727_SOCKET_SYSTEM
ZardGrade zard_grade; // ref: eSOCKET_LEVEL, 쟈드 등급
ZardOption zard_item_option_kind; // 쟈드의 아이템 기준 옵션 종류 (g_ITEM_OPTION)
ZardRatio zard_success_per; // 쟈드 합성 추가 성공률
};
//----------------------------------------------------------------------------------------------
// Durability parameters
struct {
DURATYPE m_Dura; //< 내구도
//__NA_001062_20080623_STRENGTH_PENALTY
uint8_t m_dwStrengthPenaltyIdx;//< 내구도 패널티 인덱스
DWORD m_dwDuraStr; //< 내구도 강도
};
//----------------------------------------------------------------------------------------------
// Set Item parameters
// (WAVERIX) (ADD-IN) eSetItemOption추가. 하드코딩된 값 대체하기로 한다. 작업 매크로에서도 볼 수
// 있듯이 너무 무성의하게 작업한 경향이 있다.
enum eSetItemOption { eSetItem_None, eSetItem_Active, eSetItem_Special, eSetItem_Count };
struct {
BYTE m_bySetOptionType; //< eSetItemOption = { 0=비활성, 1=활성, 2=스페셜세트 아이템 }
WORD set_group_code; //< ver1.2 SetItemOptionInfo.txt::wSetGCode 필드와 같음
};
//----------------------------------------------------------------------------------------------
// multi-purpose usages
struct {
WORD m_wSkillCode;
};
//----------------------------------------------------------------------------------------------
// worth parameters of item
struct {
MONEY m_DropLV; //< 드랍레벨
};
//----------------------------------------------------------------------------------------------
// default item option parameters by script definitions
struct {
WORD m_wPhyAttRate; // EP2:applied, percentage (0.95 -> 95%)
WORD m_wPhyAttSpeed;
WORD m_wPhyDef;
WORD m_wPhyAvoid; // EP2:applied, percentage (0.95 -> 95%)
BYTE m_byBaseAttType; //< 기본 공격타입(근거리, 원거리, 마법)
BYTE m_byMeleeType; //< 근거리 공격 타입(1:관통, 2:타격, 3:베기)
BYTE m_byMagicalAttType; //< 속성 공격타입(물, 불, ...)
float m_fAttRange;
BYTE m_byArmorType; //< 아머 타입(1:Hard, 2:Medium, 3:Soft, 4:Siege, 5:Unarmer)
WORD m_wMinDamage;
WORD m_wMaxDamage;
WORD m_wMagicAttMinDamgage;
WORD m_wMagicAttMaxDamgage;
WORD m_wMagicAttSpeed;
WORD m_wMagicDef;
WORD m_wSpeed;
};
//----------------------------------------------------------------------------------------------
// additional item attribute parameters by script definitions
// ver1.1 : 옵션 개수 2->3로 추가
// CHANGES: type definition|resorting
#ifdef _NA_003740_20210624_ADDITEMRANDOM_ITEM6
enum { _MAX_OPTION_NUM = 6 };
#else
enum { _MAX_OPTION_NUM = 5 };
#endif
// CHANGES: f110329.5L, moved from implementation
typedef util::SEQ_BYTE_MASK<eITEM_EFFECT_ON_INVEN,
BASE_ITEMINFO::_MAX_OPTION_NUM> OPTION_EFFECT_INVEN_MASK;
typedef util::SEQ_BYTE_MASK<eITEM_EFFECT_ON_EQUIP,
BASE_ITEMINFO::_MAX_OPTION_NUM> OPTION_EFFECT_EQUIP_MASK;
typedef BYTE OptionEffects[_MAX_OPTION_NUM]; // eITEM_EFFECT_ON_(EQUIP|INVEN)
typedef WORD OptionIndexes[_MAX_OPTION_NUM]; // g_ITEM_OPTION[value] => eATTR_TYPE
typedef BYTE OptionTypes[_MAX_OPTION_NUM]; // eVALUE_TYPE, use = { 1, 2, don't use etc }
typedef int OptionValues[_MAX_OPTION_NUM];
struct {
// Normal options
OptionEffects m_byOptionExEffect;
OptionIndexes m_wOptionIndex;
OptionTypes m_byOptionType;
OptionValues m_iOptionValue;
// Pc-방 options
OptionEffects m_byPCOptionExEffect;
OptionIndexes m_wPCOptionIndex;
OptionTypes m_byPCOptionType;
OptionValues m_iPCOptionValue;
};
//----------------------------------------------------------------------------------------------
// data parameters
struct {
uint8_t m_wACCode; // ref: AchievementManager::OBJECT_TYPE_(xxx), changes to smalltype the ep2 AC system
BYTE m_byACReferenceID;
//
eRIDER_CLASS m_RidingClass;
//
WORD m_wQuestCode; //< QCODE, 아이템 사용에 따른 퀘스트 자동 수락시 필요.
BYTE m_byChaoTimeDec; // number in the minutes, __NA_1323_CHAO_TIME_DECREASE_ITEM
WORD m_wCoolTimeType; // NOTE: item grouping in items, this items has same cool-time group
DWORD m_dCoolTime; // the usages same with m_wCoolTimeType
EXPTYPE m_dwExp; // used only, if m_byWasteType is eITEMWASTE_EXP_POTION
WORD m_wTimes; // if m_wTimes exist, m_wHealHP and m_wHealHPTime are activated
WORD m_wHealHP; // used only, if m_byWasteType is eITEMWASTE_(HPPOTION, ...) that is in eWASTETYPE
DWORD m_wHealHPTime; // the usages same with m_wHealHP
SLOTCODE m_MaterialCode; // used by decomposition facilities
SLOTCODE m_ExchangedItem; //< 1:1 교환되는 아이템, (+ zard item exchangable item contents also used)
INT32 m_betakey; //_NA_20100307_BETAKEY_SYSTEM
};
//----------------------------------------------------------------------------------------------
// default restriction parameters
struct {
//_NA_002050_20110216_ADD_GENDER
BYTE gender_type; // 사용 가능한 성별 (0:모두, 1:남성, 2:여성 Const.h GenderType 참고)
// NOTE: f110408.2L, added composed bit field = { (1 << eCHAR_BERSERKER) | ... }
uint16_t equip_class_bits;
LEVELTYPE m_LimitEqLevel;
LEVELTYPE m_LimitUseLevel; // restriction about when player use the item, __CN_1299_WASTE_ITEM_LEVEL_LIMITE_CHECK
WORD m_wLimitStr;
WORD m_wLimitDex;
WORD m_wLimitVit;
WORD m_wLimitInt;
WORD m_wLimitSpr;
WORD m_wLimitSkil1;
WORD m_wLimitSkil2;
WORD m_wEqClass1; // Berserker
WORD m_wEqClass2; // Dragon Knight
WORD m_wEqClass3; // Shadow
WORD m_wEqClass4; // Valkyrie
WORD m_wEqClass5; // Elementalist
WORD m_wEqClass6; // 미스틱 착용 가능 여부 _NA_004965_20120613_NEW_CHARACTER_MYSTIC
WORD m_wEqClass7; //_NA_000000_20130812_NEW_CHARACTER_HELLROID
WORD m_wEqClass8; //위블 착용 가능 여부 _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE
};
//----------------------------------------------------------------------------------------------
// equipments restriction parameters related to item relations
struct {
DURATYPE m_byDupNum;
DURATYPE m_byDupEquipNum;
DURATYPE m_byDupEquipTypeNum;
DURATYPE m_byDupEquipGroup; //__NA_001206_20081112_DUPEQUIP_GROUP
DURATYPE m_byDupEquipGroupNum;
};
//----------------------------------------------------------------------------------------------
// Divine 관련 수치
struct {
WORD m_wDivLimitStr;
WORD m_wDivLimitDex;
WORD m_wDivLimitVit;
WORD m_wDivLimitInt;
WORD m_wDivLimitSpr;
WORD m_wDivLimitSkill1;
WORD m_wDivLimitSkill2;
WORD m_wDivPhyMinDamage;
WORD m_wDivPhyMaxDamage;
WORD m_wDivMagicMinDamage;
WORD m_wDivMagicMaxDamage;
WORD m_wDivPhyDef;
WORD m_wDivMagicDef;
};
//----------------------------------------------------------------------------------------------
//ver1.1 엘리트 항목 추가
struct {
WORD m_wElitePhyMinDamage;
WORD m_wElitePhyMaxDamage;
WORD m_wEliteMagicMinDamage;
WORD m_wEliteMagicMaxDamage;
WORD m_wElitePhyDef;
WORD m_wEliteMagicDef;
};
//----------------------------------------------------------------------------------------------
//ver1.3 : 유니크 항목 추가
struct {
WORD m_wUniPhyMinDamage;
WORD m_wUniPhyMaxDamage;
WORD m_wUniMagicMinDamage;
WORD m_wUniMagicMaxDamage;
WORD m_wUniPhyDef;
WORD m_wUniMagicDef;
};
//----------------------------------------------------------------------------------------------
// UI parameters
struct {
CODETYPE m_NCode; //< 네임코드
CODETYPE m_SCNCode; //< second 네임코드
CODETYPE m_TDNCode; //< third 네임코드
enum { MAX_COLOR_LENGTH = 7 };
bool m_bUse; //<아이템 네이밍색깔 사용여부
char m_szColor[MAX_COLOR_LENGTH]; //<아이템 네이밍색깔 RGB
CODETYPE m_wWICode; // 남성캐릭터에 사용될 그래픽리소스코드
//_NA_002050_20110216_ADD_GENDER
CODETYPE m_wWICode2;//여성캐릭터에 사용될 그래픽리소스코드 <추가필드
CODETYPE m_wVICode; // Icon image code
CODETYPE m_wDICode; // Drop image code
#ifdef _20220413_ITEM_DROP_EFFECT
DWORD m_wzItemDropEffect;
#endif
int m_nSoundIndex; // 아이템 사운드 인덱스
// 클라이언트 아이템 사용시 이펙트 출력 용
DWORD m_dwEffectCode; //< 사용시 효과 이펙트 코드
BYTE m_byEffectPosition;//< 사용시 효과 이펙트 부착 위치
BYTE m_bEfffectBoneRot;
// 스페셜 아이템 이큅용
bool m_bEquipRot; //< 장착시 본을 붙어 다닐것인가
DWORD m_dwEquipBoneID; //< 장착시 붙는 본 아이디 ver 2.3
BYTE m_bHeadType; //< 머리형태 (EP2:남성캐릭터)
BYTE m_bHeadType1; //< 머리형태, _NA_002050_20110216_ADD_GENDER
WORD m_wCustomize; //< 커스터마이즈 (EP2:남성캐릭터, 투구/헤어 관련 정보)
//_NA_002050_20110216_ADD_GENDER = { m_bHeadType1, m_wCustomize1 }
WORD m_wCustomize1; //< 커스터마이즈 < 여성캐릭터에 사용될 투구/헤어 관련 정보
WORD m_wMissile;
//BYTE m_byIsDrop; //< 몬스터 드랍 여부 사용치 않아 아이템 사용시 팝업을 보여줄껀지로 대체
BYTE m_byPopup; //< 아이템 사용시 팝업을 보여줄껀지로 대체
// 클라이언트 출력용
#if SUN_CODE_BACKUP
WORD m_wItemListType;
#endif
bool m_bApplyItemDistribution;
#ifdef _NA_003033_20110831_DICECAST_ITEM_ROUTING
BYTE dice_cast_type;
#endif //_NA_003033_20110831_DICECAST_ITEM_ROUTING
#ifdef _NA_003740_20210624_ADDBOXKEY
DWORD m_BoxKeyIndex; //藤속芎綾篤네 by:枷쟁팃숲 2021-07-23
#endif
};
//----------------------------------------------------------------------------------------------
#if !defined(_DEBUG)
char m_pszName[MAX_ITEMNAME_LENGTH]; //< 디버그용 이름(사용안함)
#endif
BASE_ITEMINFO()
{
::ZeroMemory(this, sizeof(*this));
}
//==============================================================================================
//==============================================================================================
//==============================================================================================
// 관련 메서드
// @history
// - 090906 | waverix | move impl->bottom impl, add attributes 'const' and 'BOOL' -> 'BOOLEAN'
// - 110410~110414, waverix, rearrangement of layouts for access rate and group by meanings
bool IsChargeItem() const;
bool IsElite() const;
bool IsUnique() const;
bool IsRare() const;
bool IsWeapon() const; //< 무기인가.
bool IsArmor() const; //< 방어구인가.
bool IsAccessory() const; //< 장신구인가.
bool IsSpecialAccessory() const; //< 장신구인가.
bool IsRing() const;
bool IsNecklace() const;
bool IsCanUseWaste() const; //< 사용가능한 소모품인가.
bool IsCanOnlyUseWaste() const; // 사용 가능, 소모 불가
#ifdef _NA_000000_20130521_DAILY_QUEST_RESET_ITEM
bool IsDailyQeustResetItem() const;
#endif
#ifdef _NA_008440_20150818_ADD_CHARGE_SUB_IMMEDIATELY_USE
bool IsImmediatelyUseItem() const;
#endif // _NA_008440_20150818_ADD_CHARGE_SUB_IMMEDIATELY_USE
// 사용 가능 여부 상관없이 소모 되는지 검사한다.
bool IsMaterialWaste() const
{
return (m_byMaterialType == eITEM_MATERIAL_TYPE_CAN_USE ||
m_byMaterialType == eITEM_MATERIAL_TYPE_NOT_USE_CAN_DELETE);
}
bool IsPotion() const; //< 물약인가.
eCHAR_TYPE GetFirstAvailableClass() const;
bool IsApplyItemDistribution() const;
// NOTE: the real type of the returned type is BASE_ITEMINFO::eSetItemOption
BYTE GetApplySetItemOptionType() const;
bool IsRiderItem() const;
bool IsRiderPartsItem() const;
bool CanPeriodExtend() const;
#if !defined(_SERVER) // (WAVERIX) (ADD-IN) Client 코드란다... 서버는 사용하는 사례 없기 때문에 설정
bool CanRankUpItem() const; //서버팀 사용하지 말것!
#endif
// [11/02/2009 namka199] _CN_0_20091013_RANKUP_EXTEND 랭크업 관련 부적의돌/초기화의 돌.
bool IsRankUpRequirement() const;
bool IsCanUseRankUp() const;
bool IsRankUpOptionChanger() const;
bool IsRankUpGradeRaiser() const;
// [10/30/2009 namka199] _NA_0_20091030_RANDOM_ITEM 랜덤 아이템 여부.
bool IsRandomItem() const;
// 상세한 아이템 계열값을 얻는다.
ItemSubTypeDetailValue GetSubTypeDetail() const;
#ifdef _NA_002050_20110216_ADD_GENDER
// 해당 성별이 사용 가능한지 검사한다.
bool IsCanUseGender(const BYTE gender) const;
#endif
// CHANGES: f110329.5L, moved from implementation
bool IsExistEquipOptions() const;
bool IsExistInvenOptions() const;
// NOTE: f110422.2L, f110408.2L, added easy access facility
bool CheckValidEquipClass(eCHAR_TYPE char_type) const;
//----------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------
// NOTE: internal utilities
void _UpdateSubTypeDetailedValue(); // f110414.1L, call this after loading default script data
}; //end of 'BASE_ITEMINFO'
//
//
//==================================================================================================
// Inline implementation list
//==================================================================================================
// BASE_ITEMINFO inline functions
inline bool
BASE_ITEMINFO::IsChargeItem() const {
return (m_ChargeType == eCHARGE_CHARGE);
}
inline bool
BASE_ITEMINFO::IsElite() const
{
return (m_wSubType == eITEMSUBTYPE_ELITE ||
m_wSubType == eITEMSUBTYPE_ELITE_SSQ); // (f100730.3L)
}
inline bool
BASE_ITEMINFO::IsUnique() const
{
return (m_wSubType == eITEMSUBTYPE_UNIQUE);
}
inline bool
BASE_ITEMINFO::IsRare() const
{
return (m_wSubType == eITEMSUBTYPE_RARE);
}
inline bool
BASE_ITEMINFO::IsWeapon() const //< 무기인가.
{ // (WAVERIX) (CHANGES) check 'code', because eEQUIPCONTAINER_WEAPON is 0
return (m_Code != 0 && m_wEqPos == eEQUIPCONTAINER_WEAPON);
}
inline bool
BASE_ITEMINFO::IsArmor() const //< 방어구인가.
{
return m_wEqPos == eEQUIPCONTAINER_ARMOR ||
m_wEqPos == eEQUIPCONTAINER_PROTECTOR ||
m_wEqPos == eEQUIPCONTAINER_HELMET ||
m_wEqPos == eEQUIPCONTAINER_PANTS ||
m_wEqPos == eEQUIPCONTAINER_BOOTS ||
m_wEqPos == eEQUIPCONTAINER_GLOVE ||
m_wEqPos == eEQUIPCONTAINER_BELT ||
m_wEqPos == eEQUIPCONTAINER_SHIRTS;
}
inline bool
BASE_ITEMINFO::IsAccessory() const //< 장신구인가.
{
return m_wType == eITEMTYPE_RING ||
m_wType == eITEMTYPE_NECKLACE;
}
inline bool
BASE_ITEMINFO::IsSpecialAccessory() const //< 장신구인가.
{
return m_wType == eITEMTYPE_BERSERKER_SACCESSORY ||
m_wType == eITEMTYPE_DRAGON_SACCESSORY ||
m_wType == eITEMTYPE_VALKYRIE_SACCESSORY ||
m_wType == eITEMTYPE_SHADOW_SACCESSORY ||
m_wType == eITEMTYPE_ELEMENTALIST_SACCESSORY ||
m_wType == eITEMTYPE_MYSTIC_SPECIAL_ACCESSORY1 || // _NA_004965_20120613_NEW_CHARACTER_MYSTIC
m_wType == eITEMTYPE_BERSERKER_KALBUS_ACCESSORY ||
m_wType == eITEMTYPE_DRAGON__KALBUS_ACCESSORY ||
m_wType == eITEMTYPE_VALKYRIE__KALBU_ACCESSORY ||
m_wType == eITEMTYPE_ELEMENTALIST_KALBUS_ACCESSORY ||
m_wType == eITEMTYPE_SHADOW_KALBU_ACCESSORY ||
m_wType == eITEMTYPE_MYSTIC_SPECIAL_ACCESSORY2 || // _NA_004965_20120613_NEW_CHARACTER_MYSTIC
m_wType == eITEMTYPE_HELLROID_SPECIAL_ACCESSORY1 || //_NA_000000_20130812_NEW_CHARACTER_HELLROID
m_wType == eITEMTYPE_HELLROID_SPECIAL_ACCESSORY2 || //_NA_000000_20130812_NEW_CHARACTER_HELLROID
m_wType == eITEMTYPE_WITCHBLADE_SPECIAL_ACCESSORY1 || //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE
m_wType == eITEMTYPE_WITCHBLADE_SPECIAL_ACCESSORY2 || //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE
m_wType == eITEMTYPE_ALLCLASS_CHAOSEYE || //_NA_007827_20141117_ADD_ACCESSORY_TYPE
m_wType == eITEMTYPE_ELEMENTALIST_KALVUS_ACCESSORY || //_NA_007827_20141117_ADD_ACCESSORY_TYPE
m_wType == eITEMTYPE_BERSERKER_KALVUS_ACCESSORY || //_NA_007827_20141117_ADD_ACCESSORY_TYPE
m_wType == eITEMTYPE_DRAGON_KALVUS_ACCESSORY || //_NA_007827_20141117_ADD_ACCESSORY_TYPE
m_wType == eITEMTYPE_VALKYRIE_SHADOW_KALVUS_ACCESSORY || //_NA_007827_20141117_ADD_ACCESSORY_TYPE
m_wType == eITEMTYPE_MYSTIC_KALVUS_ACCESSORY || //_NA_007827_20141117_ADD_ACCESSORY_TYPE
m_wType == eITEMTYPE_HELLROID_WITCHBLADE_KALVUS_ACCESSORY || //_NA_007827_20141117_ADD_ACCESSORY_TYPE
m_wType == eITEMTYPE_WINGS;
}
inline bool
BASE_ITEMINFO::IsRing() const {
return (m_wType == eITEMTYPE_RING);
}
inline bool
BASE_ITEMINFO::IsNecklace() const {
return (m_wType == eITEMTYPE_NECKLACE);
}
inline bool
BASE_ITEMINFO::IsCanUseWaste() const { //< 사용가능한 소모품인가.
return m_byMaterialType == eITEM_MATERIAL_TYPE_CAN_USE ||
m_byMaterialType == eITEM_MATERIAL_TYPE_CAN_BOTH;
}
inline bool
BASE_ITEMINFO::IsCanOnlyUseWaste() const {
return m_byMaterialType == eITEM_MATERIAL_TYPE_CAN_USE_NOT_DELETE;
}
inline bool
BASE_ITEMINFO::IsPotion() const //< 물약인가.
{
return m_byWasteType == eITEMWASTE_HPPOTION ||
#ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
m_byWasteType == eITEMWASTE_HPMP_POTION ||
#endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
m_byWasteType == eITEMWASTE_MPPOTION;
}
inline bool
BASE_ITEMINFO::IsApplyItemDistribution() const
{
return m_bApplyItemDistribution != false;
}
// NOTE: the real type of the returned type is BASE_ITEMINFO::eSetItemOption
inline BYTE
BASE_ITEMINFO::GetApplySetItemOptionType() const
{
return m_bySetOptionType;
}
inline bool
BASE_ITEMINFO::IsRiderItem() const
{
return m_wType == eITEMTYPE_RIDER;
}
inline bool
BASE_ITEMINFO::IsRiderPartsItem() const
{
return m_wType == eITEMTYPE_RIDER_PARTS;
}
inline bool
BASE_ITEMINFO::CanPeriodExtend() const
{
if(m_ChargeSubType != eCHARGE_SUB_FIXED_AMOUNT_WAIT &&
m_ChargeSubType != eCHARGE_SUB_FATE &&
m_ChargeSubType != eCHARGE_SUB_RIDER_WITH_PART)
{
return false;
}
return true;
}
// [11/2/2009 namka199] _CN_0_20091013_RANKUP_EXTEND
inline bool
BASE_ITEMINFO::IsRankUpRequirement() const
{
return (m_wType == eITEMTYPE_RANKUP_GRADE_RAISER ||
m_wType == eITEMTYPE_RANKUP_OPTION_CHANGER);
}
// [11/2/2009 namka199] _CN_0_20091013_RANKUP_EXTEND
inline bool
BASE_ITEMINFO::IsCanUseRankUp() const
{
return (m_wType == eITEMTYPE_RANKUP_GRADE_RAISER ||
m_wType == eITEMTYPE_RANKUP_OPTION_CHANGER);
}
// [11/2/2009 namka199] _CN_0_20091013_RANKUP_EXTEND
inline bool
BASE_ITEMINFO::IsRankUpOptionChanger() const
{
return (m_wType == eITEMTYPE_RANKUP_OPTION_CHANGER);
}
// [11/2/2009 namka199] _CN_0_20091013_RANKUP_EXTEND
inline bool
BASE_ITEMINFO::IsRankUpGradeRaiser() const
{
return (m_wType == eITEMTYPE_RANKUP_GRADE_RAISER);
}
// [10/30/2009 namka199] _NA_0_20091030_RANDOM_ITEM
inline bool
BASE_ITEMINFO::IsRandomItem() const
{
return (m_wType == eITEMTYPE_RANDOM);
}
// NOTE: f110414.x, declared by hukim, 아이템 계열 상세 타입
inline ItemSubTypeDetailValue BASE_ITEMINFO::GetSubTypeDetail() const
{
return static_cast<ItemSubTypeDetailValue>(sub_type_detailed.value);
}
#ifdef _NA_002050_20110216_ADD_GENDER
inline bool BASE_ITEMINFO::IsCanUseGender(const BYTE gender) const
{
if (gender_type == GenderType::kAll || gender_type == gender)
{
return true;
}
return false;
}
#endif // _NA_002050_20110216_ADD_GENDER
//==================================================================================================
// CHANGES: f110329.5L, moved from implementation
inline bool BASE_ITEMINFO::IsExistEquipOptions() const
{
BOOST_STATIC_ASSERT(0 < BASE_ITEMINFO::_MAX_OPTION_NUM &&
BASE_ITEMINFO::_MAX_OPTION_NUM <= sizeof(DWORD64));
const bool is_equip_effect_item = \
ARR_CHECK_IS_CONTAIN(OPTION_EFFECT_EQUIP_MASK::MASK, m_byOptionExEffect) ||
ARR_CHECK_IS_CONTAIN(OPTION_EFFECT_EQUIP_MASK::MASK, m_byPCOptionExEffect);
return is_equip_effect_item;
}
inline bool BASE_ITEMINFO::IsExistInvenOptions() const
{
const bool is_inven_effect_item = \
ARR_CHECK_IS_CONTAIN(OPTION_EFFECT_INVEN_MASK::MASK, m_byOptionExEffect) ||
ARR_CHECK_IS_CONTAIN(OPTION_EFFECT_INVEN_MASK::MASK, m_byPCOptionExEffect);
return is_inven_effect_item;
}
// NOTE: f110422.2L, f110408.2L, added easy access facility
inline bool BASE_ITEMINFO::CheckValidEquipClass(eCHAR_TYPE char_type) const
{
if ((1 << char_type) & equip_class_bits) {
return true;
};
return false;
};
//==================================================================================================
#pragma pack(pop)
#endif //_SOLAR_SLOT_SCSLOTSTRUCT_H