/* ========================================================================== * ÀÛ ¼º ÀÚ : À̼ø±Ô * ÀÛ ¼º ÀÏ : 2007.07.02 * ³» ¿ë : ¾ÆÀÌÅÛ * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once #include "Item_Common.h" #include "Player_Common.h" class cIconParam; /// ¾ÆÀÌÅÛ ºÐÇØ µ¥ÀÌÅÍ const int MAX_DISJOINT = 6; struct sDisjointData { unsigned long itemIndex; unsigned int count; }; /// ¾ÆÀÌÅÛ ºÐÇØ struct sItemDisjoint { /// ºñ¿ë unsigned long mPrice; /// ºÐÇØ µ¥ÀÌÅÍ sDisjointData mDisjoint[MAX_DISJOINT]; }; enum eEnhancedType { eENHANCE_PHYSICATTACK = 1, /// ¹°°ø eENHANCE_MAGICATTACK, /// ¸¶°ø eENHANCE_PHYSICDEFENSE, /// ¹°¹æ eENHANCE_MAGICDEFENSE, /// ¸¶¹æ eENHANCE_HEAL, /// Èú ȸº¹·® }; /// ¾ÆÀÌÅÛ °­È­ struct sItemEnhanced { /// °­È­µÇ´Â ¼Ó¼º unsigned char mEnhancedType; /// Áõ°¡°ª short mValue[MAX_ITEM_ENHANCED]; }; typedef tPointerArray cEnhancedOptionArr; /// ¾îºô¸®Æ¼ È¿°ú Á¤º¸ struct sAblityOption { short mOptType; /// ¿É¼Ç À妽º°â ŸÀÔ short mOptValue; /// ¿É¼Ç °ª sAblityOption() { mOptType = 0; mOptValue = 0; } }; struct sSetAblityOption { short mOptType[2]; short mOptValue[2]; unsigned long mActIdx; sSetAblityOption() { mOptType[0] = 0; mOptValue[0] = 0; mOptType[1] = 0; mOptValue[1] = 0; mActIdx = 0; } }; /// Ä«µå ÀåÂø struct sItemPutCardSlot { short mSlotType[MAX_CARD_SLOT]; }; /// ¾ÆÀÌÅÛ ÀåÂø ŸÀÔ enum eItemEquip { ITEM_EQUIP_NORMAL = 0, ITEM_EQUIP_ONE_HAND, ITEM_EQUIP_TWO_HANDS, ITEM_EQUIP_SHIELD }; /// ¾ÆÀÌÅÛ Ç÷¢ /// ¾ÆÀÌÅÛ°ú ½½·ÔÀÌ µ¿ÀÏÇÑ Å¸ÀÔÀÎÁö °Ë»ç ( ¾Æ´Ñ°÷¿¡ ÀåÂøµÇÁö ¸øÇÔ ) enum eItemFlag { ITEM_FLAG_NULL = 0, ITEM_FLAG_WEAPON = (1 << 0), ITEM_FLAG_WEAR = (1 << 1), ITEM_FLAG_ACCESSORY = (1 << 2), ITEM_FLAG_SWORD = (1 << 3) | ITEM_FLAG_WEAPON, /// ÇÑ¼Õ°Ë ITEM_FLAG_BLADE = (1 << 4) | ITEM_FLAG_WEAPON, /// ¾ç¼Õ°Ë ITEM_FLAG_DUAL = (1 << 5) | ITEM_FLAG_WEAPON, /// À̵µ·ù ITEM_FLAG_CUTTER = (1 << 6) | ITEM_FLAG_WEAPON, /// ´Ü°Ë ITEM_FLAG_GUN = (1 << 7) | ITEM_FLAG_WEAPON, /// ÃÑ ITEM_FLAG_STAFF = (1 << 8) | ITEM_FLAG_WEAPON, /// ÁöÆÎÀÌ ITEM_FLAG_SHIELD = (1 << 9) | ITEM_FLAG_WEAPON, /// ¹æÆÐ ITEM_FLAG_HEAD = (1 << 10) | ITEM_FLAG_WEAR, /// ¸Ó¸® ITEM_FLAG_UPPER = (1 << 11) | ITEM_FLAG_WEAR, /// »óÀÇ ITEM_FLAG_LOWER = (1 << 12) | ITEM_FLAG_WEAR, /// ÇÏÀÇ ITEM_FLAG_HANDS = (1 << 13) | ITEM_FLAG_WEAR, /// ¼Õ ITEM_FLAG_FEET = (1 << 14) | ITEM_FLAG_WEAR, /// ¹ß ITEM_FLAG_ONEPIECE = (1 << 15) | ITEM_FLAG_WEAR, /// ¿øÇǽº ITEM_FLAG_COSTUME_HEAD = (1 << 16) | ITEM_FLAG_WEAR, /// ÄÚ½ºÆ¬ ¸Ó¸® ITEM_FLAG_COSTUME_UPPER = (1 << 17) | ITEM_FLAG_WEAR, /// ÄÚ½ºÆ¬ »óÀÇ ITEM_FLAG_COSTUME_LOWER = (1 << 18) | ITEM_FLAG_WEAR, /// ÄÚ½ºÆ¬ ÇÏÀÇ ITEM_FLAG_COSTUME_HANDS = (1 << 19) | ITEM_FLAG_WEAR, /// ÄÚ½ºÆ¬ ¼Õ ITEM_FLAG_COSTUME_FEET = (1 << 20) | ITEM_FLAG_WEAR, /// ÄÚ½ºÆ¬ ¹ß ITEM_FLAG_EARRING = (1 << 21) | ITEM_FLAG_ACCESSORY, /// ±Í°ÉÀÌ ITEM_FLAG_NECKLACE = (1 << 22) | ITEM_FLAG_ACCESSORY, /// ¸ñ°ÉÀÌ ITEM_FLAG_BROOCH = (1 << 23) | ITEM_FLAG_ACCESSORY, /// ºê·ÎÄ¡ ITEM_FLAG_BRACELET = (1 << 24) | ITEM_FLAG_ACCESSORY, /// ÆÈÂî ITEM_FLAG_RING = (1 << 25) | ITEM_FLAG_ACCESSORY, /// ¹ÝÁö ITEM_FLAG_COSTUME_FACE = (1 << 26) | ITEM_FLAG_ACCESSORY, /// ÄÚ½ºÆ¬ ¾ó±¼ ITEM_FLAG_COSTUME_BACK = (1 << 27) | ITEM_FLAG_ACCESSORY, /// ÄÚ½ºÆ¬ µî ITEM_FLAG_EQUIPCARD = (1 << 28), /// ÀåÂø¿ë Ä«µå ITEM_FLAG_UNKNOWN = (1 << 29), ITEM_FLAG_ALL = 0x7FFFFFFF }; /// ¼¼Æ® ¾ÆÀÌÅÛ Á¤º¸ class cItemSetInfo { friend class cItemManager; public: ~cItemSetInfo() { tPointerHashMap::cIterator i = mSetOption.Begin(); tPointerHashMap::cIterator end = mSetOption.End(); for( ; i != end; ++i ) { delete (sSetAblityOption*)(i->mSecond); } mSetOption.Clear(); mItemList.Clear(); } void AddItem( unsigned long itemIdx ) { mItemList.PushBack( itemIdx ); } void AddOption( unsigned int cnt, sSetAblityOption* opt ) { mSetOption.Insert( cnt, opt ); } tList* GetItemList() { return &mItemList; } unsigned int GetItemCount() { return mItemList.GetSize(); } unsigned int GetNameIndex() { return mSetNameIdx; } sSetAblityOption* GetItemOption( unsigned int cnt ) { return (sSetAblityOption*)mSetOption.GetAt(cnt); } private: unsigned int mSetNameIdx; /// °¹¼öº° Ãß°¡ È¿°ú( key:°¹¼ö ) tPointerHashMap mSetOption; /// Æ÷ÇÔ ¾ÆÀÌÅÛ ¸®½ºÆ® tList mItemList; }; /// ¾ÆÀÌÅÛ ´É·Â class cItemAbility { friend class cItemManager; public: inline long GetDescription() { return mDescription; } inline short GetTargetType() { return mTargetType; } inline short GetDefenseType() { return mDefenseType; } inline short GetUseRange() { return mUseRange; } inline short GetPhysicMaxAttack() { return mPhysicMaxAttack; } inline short GetPhysicMinAttack() { return mPhysicMinAttack; } inline short GetMagicMaxAttack() { return mMagicMaxAttack; } inline short GetMagicMinAttack() { return mMagicMinAttack; } inline short GetPhysicDefense() { return mPhysicDefense; } inline short GetMagicDefense() { return mMagicDefense; } inline short GetHealValue() { return mHealValue; } inline short GetAttackRange() { return mAttackRange; } inline short GetAttackSpeed() { return mAttackSpeed; } inline long GetCoolTime() { return mCoolTime; } inline unsigned int GetGroupNum() { return mGroupNum; } inline sAblityOption* GetOption() { return mOption; } inline long GetInfluenceIndex() { return mInfluenceIndex; } inline long GetActiveInfluenceIndex() { return mActiveInfluenceIndex; } private: /// »ç¿ëÈ¿°ú ¼³¸í long mDescription; /// ¹æ¾î±¸ÀçÁú short mDefenseType; /// ¹üÀ§¹æ½Ä short mRangeType; /// È¿°úÀû¿ëŸ°Ù short mTargetType; /// »ç¿ë°Å¸® short mUseRange; /// ¹°¸® ¹æ¾î·Â short mPhysicDefense; /// ¸¶¹ý ¹æ¾î·Â short mMagicDefense; /// »çÁ¤°Å¸® short mAttackRange; /// °ø°Ý ¼Óµµ short mAttackSpeed; /// Àç»ç¿ë½Ã°£ long mCoolTime; /// ±×·ìÄðŸÀÓ ¹øÈ£ unsigned int mGroupNum; /// ¹°¸® °ø°Ý·Â(¼Ò) short mPhysicMinAttack; /// ¹°¸® °ø°Ý·Â(´ë) short mPhysicMaxAttack; /// ¸¶¹ý °ø°Ý·Â(¼Ò) short mMagicMinAttack; /// ¸¶¹ý °ø°Ý·Â(´ë) short mMagicMaxAttack; /// Èú ȸº¹·® short mHealValue; /// ¿É¼Ç °ª sAblityOption mOption[5]; /// ¼Ò¸ðÈ¿°ú long mInfluenceIndex; /// ¹ßµ¿ È¿°ú long mActiveInfluenceIndex; }; /// ¾ÆÀÌÅÛ Á¦ÇÑ class cItemLimit { friend class cItemManager; public: cItemLimit(); inline char GetRace() { return mCharRace; } inline char GetGender() { return mCharGender; } inline long GetJob1() { return mCharJob1; } inline long GetJob2() { return mCharJob2; } inline char GetLevel() { return mCharLevel; } inline char GetPVPOnly() { return mUsePVPOnly; } inline char GetForceType() { return mForceType; } inline long GetMakeSkill() { return mMakeSkill; } inline unsigned long GetMakeSkillExp() { return mMakeSkillExp; } private: /// ij¸¯ÅÍ:Á¾Á· char mCharRace; /// ij¸¯ÅÍ:¼ºº° char mCharGender; /// Á÷¾÷1 long mCharJob1; /// Á÷¾÷2 long mCharJob2; /// ij¸¯ÅÍ:·¹º§ char mCharLevel; /// ij¸¯ÅÍ:ÃÖ´ë·¹º§ char mCharMaxLevel; /// ÀüÀå Àü¿ë »ç¿ë ( 0 : »ç¿ëºÒ°¡, 1 : »ç¿ë°¡´É ) char mUsePVPOnly; /// ¼¼·Â ( 0 : ÀüºÎ, 1: Çï·», 2:³×·Î, 3:¾Æ³×½º, 4:µ¥¶ó ) char mForceType; /// º¸Á¶Á÷¾÷ long mMakeSkill; /// º¸Á¶Á÷¾÷ ¼÷·Ãµµ unsigned long mMakeSkillExp; }; inline cItemLimit::cItemLimit() : mCharRace( 0 ) , mCharGender( 0 ) , mCharLevel( 0 ) , mCharJob1( 0 ) , mCharJob2( 0 ) , mUsePVPOnly( 1 ) , mForceType( 0 ) , mMakeSkill( 0 ) , mMakeSkillExp( 0 ) { } /// ½ºÇÁ·¹µå µ¥ÀÌÅÍ class cSpreadParam { public: /// À̹ÌÁö À妽º int mImageIndex; /// ÁÂÇ¥ unsigned int mX; /// ÁÂÇ¥ unsigned int mY; /// ¹æÇâ int mDir; /// °è»ê½Ä ( 0 : ³ë¸», 1 : *, 2 : /, 3 : + ) int mCalc; /// °è»ê¼öÄ¡ int mValue; }; /// ¾ÆÀÌÅÛ ½ºÇÁ·¹µå class cItemSpread { friend class cItemManager; public: cItemSpread(); public: /// ½ºÇÁ·¹µå µ¥ÀÌÅÍ ¹è¿­ cSpreadParam mParam[10]; }; inline cItemSpread::cItemSpread() { memset( mParam, 0, sizeof(mParam) ); } /// ¾ÆÀÌÅÛ Ä«µå class cItemCard { friend class cItemManager; public: cItemCard(); private: /// ÆÇ char mEpisode; /// Ä«µå³Ñ¹ö unsigned int mCardNumber; /// Èñ±Íµµ char mRareLevel; /// Ä«µåºÐ·ù char mCardType; /// ÀåÂøÀ§Ä¡ char mWearPos; /// À̹ÌÁöÀ妽º unsigned int mImageIndex; }; inline cItemCard::cItemCard() : mEpisode(0) , mCardNumber(0) , mRareLevel(0) , mCardType(0) , mWearPos(0) , mImageIndex(0) { } /// ¾ÆÀÌÅÛ Å¸·ÎÄ«µå class cItemTarot { friend class cItemManager; public: cItemTarot(); /// inline unsigned int GetImageIndex() { return mImageIndex; } inline unsigned char GetUniqueNumber() { return mNumber; } /// inline short GetStraightValue() { return mStraightValue; } inline short GetInverseValue() { return mInverseValue; } /// ÇØ¼®¹øÈ£ inline unsigned long GetStraightDesc() { return mStraightIdx; } inline unsigned long GetInverseDesc() { return mInverseIdx; } private: /// Ä«µå À̹ÌÁö À妽º unsigned int mImageIndex; /// °íÀ¯ ¹øÈ£ char mNumber; /// Ä«µå·¹º§ char mLevel; /// Á¤¹æÇâ¼öÄ¡ short mStraightValue; /// ¿ª¹æÇâ¼öÄ¡ short mInverseValue; /// ¼Ó¼º char mProperty; /// ¿¡ÇǼҵå(ÆÇ) char mEpisode; /// Á¤¹æÇâÇØ¼® À妽º unsigned long mStraightIdx; /// ¿ª¹æÇâÇØ¼® À妽º unsigned long mInverseIdx; }; inline cItemTarot::cItemTarot() : mImageIndex(0) , mNumber(0) , mLevel(0) , mStraightValue(0) , mInverseValue(0) , mProperty(0) , mEpisode(0) , mStraightIdx(0) , mInverseIdx(0) { } /// ¾ÆÀÌÅÛ Á¤ÀÇ class cItemDefine { friend class cItemManager; public: cItemDefine(); inline LPCTSTR GetName() { return mName; } inline LPCTSTR GetDescription() { return mDescription; } inline unsigned char GetType() { return mType; } inline unsigned char GetSubType() { return mSubType; } inline unsigned long GetHighType() { return mHighType; } inline unsigned long GetMiddleType() { return mMiddleType; } inline unsigned long GetLowType() { return mLowType; } inline unsigned short GetTipType() { return mTooltipColor; } inline short GetWeight() { return mWeight; } inline unsigned short GetCapacity() { return mCapacity; } inline cIconParam* GetIconParam() { return mIconParam; } inline const char* GetFileName0( unsigned int race, unsigned int gender ); inline const char* GetFileName1( unsigned int race, unsigned int gender ); inline eItemEquip GetEquipType() { return mEquipType; } inline cItemCard* GetCardDefine() { return mCard; } inline cItemTarot* GetTarotDefine() { return mTarot; } inline cItemSpread* GetSpreadDefine() { return mSpread; } inline sItemDisjoint* GetDisjoint() { return mDisjoint; } inline sItemPutCardSlot* GetPutCard() { return mPutCardSlot; } inline cItemAbility* GetAbililty() { return mAbility; } inline cItemLimit* GetLimit() { return mLimit; } inline cEnhancedOptionArr* GetEnhancedOptionArr() { return mEnhanceArr; } inline unsigned long GetBuyPrice() { return mBuyPrice; } inline unsigned long GetSellPrice() { return mSellPrice; } inline unsigned long GetBuyType() { return mBuyType; } inline unsigned long GetSellType() { return mSellType; } inline unsigned short GetPutSlotCount() { return mPutSlotCount; } inline char GetExchange() { return mExchange; } inline unsigned long GetTitleIndex() { return mTitleIndex; } inline unsigned long GetSetIndex() { return mSetIndex; } inline char GetHideEar() { return mHideEar; } /// 0 : ±ÍÇ¥½Ã on, 1 : ±ÍÇ¥½Ã off inline unsigned int GetMaxHaveInven() { return mMaxHaveInven; } private: /// À̸§ LPCTSTR mName; /// ¼³¸í LPCTSTR mDescription; /// Á¾·ù unsigned char mType; /// ¼¼ºÎ Á¾·ù unsigned char mSubType; /// °Ë»ö ´ëºÐ·ù unsigned long mHighType; /// °Ë»ö Áߺзù unsigned long mMiddleType; /// °Ë»ö ¼ÒºÐ·ù unsigned long mLowType; /// ¹«°Ô short mWeight; /// Á¦ÇÑ ¼ö·® unsigned short mCapacity; /// ÆÇ¸Å ¹æ¹ý unsigned long mSellType; /// ÆÇ¸Å°¡°Ý unsigned long mSellPrice; /// ±¸ÀÔ ¹æ¹ý unsigned long mBuyType; /// ±¸ÀÔ°¡°Ý unsigned long mBuyPrice; /// ÃÖ´ë ÃâÇö°¹¼ö unsigned long mPresentNum; /// º¸À¯ °¡´É °³¼ö unsigned int mMaxHaveInven; // ±â°£Á¦ ¼³Á¤(0ÀϹÝ/1½ÇÁ¦½Ã°£/2°ÔÀӽð£/3¹«Á¦ÇÑ) BYTE mLicenseClass; // »ç¿ë±âÇÑ long mLicenseValidThru; // ÀÎÁõ¿©ºÎ(0ÀÎÁõ¿Ï·á/1¹ÌÀÎÁõ) BYTE mLicenseType; /// ÅøÆÁ Ä÷¯ ( ·¹¾îµµ°ü·Ã ) unsigned short mTooltipColor; // ȨÆäÀÌÁö °ø°³¿©ºÎ(0°ø°³/1°ø°³¾ÈÇÔ) BYTE mWebPage; /// ȣĪ À妽º unsigned long mTitleIndex; /// ¼¼Æ® À妽º unsigned long mSetIndex; /// °Å·¡ °¡´É ¿©ºÎ(0°Å·¡°¡´É/1°Å·¡ºÒ°¡) char mExchange; /// ´É·Â cItemAbility* mAbility; /// Á¦ÇÑ cItemLimit* mLimit; /// Ä«µå À妽º cItemCard* mCard; /// Ÿ·Ô À妽º cItemTarot* mTarot; /// ½ºÇÁ·¹µå À妽º cItemSpread* mSpread; /// ºÐÇØ Á¤º¸ sItemDisjoint* mDisjoint; /// °­È­ Á¤º¸ cEnhancedOptionArr* mEnhanceArr; /// Ä«µåÀåÂø ½½·Ô Á¤º¸ sItemPutCardSlot* mPutCardSlot; unsigned short mPutSlotCount; /// Ä«µåÀåÂø °¡´ÉÇÑ ½½·Ô °¹¼ö /// ¾ÆÀÌÄÜ À̹ÌÁö cIconParam* mIconParam; /// ÆÄÀÏ¸í ¹è¿­ cString* mFileNames0; cString* mFileNames1; /// ÀåÂø ŸÀÔ eItemEquip mEquipType; /// Åõ±¸ º¸±â char mHideEar; /// Ç÷¢ eItemFlag mFlag; }; inline cItemDefine::cItemDefine() : mName( 0 ) , mDescription( 0 ) , mType( 0 ) , mSubType( 0 ) , mWeight( 0 ) , mBuyPrice( 0 ) , mSellPrice( 0 ) , mAbility( 0 ) , mLimit( 0 ) , mCard( 0 ) , mTarot(0) , mSpread( 0 ) , mDisjoint( 0 ) , mEnhanceArr( 0 ) , mPutCardSlot( 0 ) , mIconParam( 0 ) , mFileNames0( 0 ) , mFileNames1( 0 ) , mEquipType( ITEM_EQUIP_NORMAL ) , mFlag( ITEM_FLAG_NULL ) , mTooltipColor( 0 ) , mPutSlotCount( 0 ) , mTitleIndex( 0 ) , mExchange( false ) , mHideEar( 0 ) , mMaxHaveInven( 0 ) , mSetIndex(0) , mHighType(0) , mMiddleType(0) , mLowType(0) , mLicenseClass(0) , mLicenseValidThru(0) , mLicenseType(0) , mWebPage(0) { } inline const char* cItemDefine::GetFileName0( unsigned int race, unsigned int gender ) { assert( race < eRACE_MAX ); assert( gender < eGENDER_MAX ); if( mFileNames0 == 0 ) return 0; else { if( mType == ITEM_WEAPON ) { /// NoneÀÎ °æ¿ì´Â Àΰ£/³²ÀÚ »ç¿ë if( mFileNames0[race * eGENDER_MAX + gender] == "None" ) return mFileNames0[0].Cstr(); else return mFileNames0[race * eGENDER_MAX + gender].Cstr(); } else { return mFileNames0[race * eGENDER_MAX + gender].Cstr(); } } } inline const char* cItemDefine::GetFileName1( unsigned int race, unsigned int gender ) { assert( race < eRACE_MAX ); assert( gender < eGENDER_MAX ); if( mFileNames1 == 0 ) return 0; else { if( mType == ITEM_WEAPON ) { /// NoneÀÎ °æ¿ì´Â Àΰ£/³²ÀÚ »ç¿ë if( mFileNames1[race * eGENDER_MAX + gender] == "None" ) return mFileNames1[0].Cstr(); else return mFileNames1[race * eGENDER_MAX + gender].Cstr(); } else { return mFileNames1[race * eGENDER_MAX + gender].Cstr(); } } }