/* ========================================================================== * ÀÛ ¼º ÀÚ : À̼ø±Ô * ÀÛ ¼º ÀÏ : 2007.07.02 * ³» ¿ë : ¾ÆÀÌÅÛ °ü¸®ÀÚ * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once #include "Item_Common.h" //#include "Item.h" #include "ItemScript.h" //#include "BaseStage.h" #include "UIRect.h" typedef tUIRect cUIRect; struct MSG_RES_NPC_ITEM_MOV2_INVENTORY; struct MSG_RES_NPC_ITEM_BUY; struct MSG_RES_NPC_ITEM_SELL; struct MSG_RES_NPC_ITEM_AGENT_ADD; struct MSG_RES_NPC_ITEM_AGENT_DEL; struct MSG_RES_NPC_ITEM_AGENT_GET; /// ·çÆÃâµî Ãâ·Â¿ë const int ICONSIZE = 28; const int MAX_ITEMNAME_LEN = 10; const int ITENNAME_LEN = 128; const int MAX_NAME_WIDTH = 102; const unsigned long OPEN_TIME = 500; const unsigned long TRADE_WAIT_TIME = 10000; class cParser; class cUIText; class cItemDefine; class cItemAbility; class cItemLimit; class cItemCard; class cGauge; class cPlayer; class cUIWindow; /// drop item ±×·¡ÇÈ Á¤º¸ class cSceneNode; /// npc ¾ÆÀÌÅÛ »óÁ¡ ÅÇ °¹¼ö //const int NPCSTORE_TAB_COUNT = 5; const int NPCSTORE_SLOT_COUNT = 10; /// Àκ¥Å丮 Á¦¿Ü ½½·Ôµé /// ¾ÆÀÌÅÛ ¾ÆÀÌÄÜÀ» °ü¸®ÇϱâÀ§ÇÑ ½½·ÔÀ¸·Î, ¼­¹ö¿Í °ü·Ã¾ø´Ù enum eNotInvenSlotIndex { /// ¾ÆÀÌÅÛ Npc »óÁ¡ ½½·Ô NPCSTORE_SLOT_BEGIN = MAX_INVENTORY + 1, NPCSTORE_SLOT_END = NPCSTORE_SLOT_BEGIN + NPCSTORE_SLOT_COUNT - 1, /// Ä«µåÀåÂø ¾ÆÀÌÅÛ ½½·Ô PUTCARD_ITEM_SLOT, PUTCARD_CARD_SLOT_BEGIN, PUTCARD_CARD_SLOT_END = PUTCARD_CARD_SLOT_BEGIN + MAX_CARD_SLOT - 1, NOTINVENSLOT_MAX, }; /// Àκ¥Å丮 ÀåÂø ½½·Ô const int EQUIP_SLOT_COUNT = INVENTORY_EQUIP_END - INVENTORY_WEAR_BEGIN + 1; /// Àκ¥Å丮 ½¬Æ® ½½·Ô const int INVENSHEET_SLOT_COUNT = INVENTORY_BAG0_END - INVENTORY_BAG0_BEGIN + 1; /// Àκ¥Å丮 °¡¹æ ½½·Ô const int BAG_SLOT_COUNT = INVENTORY_BAG1_END - INVENTORY_BAG1_BEGIN + 1; /// ¾ÆÀÌÅÛ Ã¢°í ½½·Ô const int WAREHOUSE_SLOT_COUNT = INVENTORY_WAREHOUSE0_END - INVENTORY_WAREHOUSE0_BEGIN + 1; /// ¾ÆÀÌÅÛ ½½·Ô const int ITEM_SLOT_COUNT = MAX_INVENTORY + NOTINVENSLOT_MAX + 1; /// ¾ÆÀÌÅÛ ½½·Ô ¼Ò¼Ó /// °¢½½·ÔÀÌ ¾î´À â¿¡ ¼ÓÇÏ´ÂÁö ¾Ë¼ö ÀÖÀ½. enum eItemIn { ITEM_IN_NULL = 0, ITEM_IN_EQUIP, ITEM_IN_INVEN_PRIVATE, ITEM_IN_INVEN_QUEST, ITEM_IN_WAREHOUSE_PRIVATE, ITEM_IN_NPCSTORE, ITEM_IN_USERSELL, ITEM_IN_PUTCARD_ITEMSLOT, ITEM_IN_PUTCARD_CARDSLOT, }; /// ¾ÆÀÌÅÛ ½Ãµµ enum eItemTry { ITEM_TRY_NULL = 0, ITEM_TRY_MOVE, ITEM_TRY_USE, ITEM_TRY_EQUIP, ITEM_TRY_UNEQUIP, ITEM_TRY_DUMP, ITEM_TRY_SPLIT, ITEM_TRY_MERGE, ITEM_TRY_SWITCH, ITEM_TRY_BUY, ITEM_TRY_SELL, ITEM_TRY_GET, /// »óÀڷκÎÅÍ ¾ÆÀÌÅÛ È¹µæ ITEM_TRY_DISJOINT, ITEM_TRY_ENHANCEDSTART, ITEM_TRY_ENHANCEDCANCEL, ITEM_TRY_TRADEADD, ITEM_TRY_TRADEDELETE, ITEM_TRY_SELLITEMADD, ITEM_TRY_SELLITEMDELETE, ITEM_TRY_SELLGET, /// ³ëÁ¡¾ÆÀÌÅÛ ±¸ÀÔ ITEM_TRY_QUEST_REWARDTAKE, /// ¾ÆÀÌÅÛ º¸»óÁö±Þ & ¹Ý³³ ó¸® ITEM_TRY_QUEST_ADDBYITEM, /// ¾ÆÀÌÅÛ º¸»óÁö±Þ & ÀÇ·Ú¾ÆÀÌÅÛ »èÁ¦ ó¸® ITEM_TRY_QUEST_TAKE, /// ¾ÆÀÌÅÛ ¹Ý³³ ITEM_TRY_PUTCARD, /// Ä«µå ÀåÂø ITEM_TRY_CARDBOOKADD, /// Ä÷º¼ÇºÏ µî·Ï ITEM_TRY_PICK, /// ½ºÆäÀ̽º¹Ù·Î ¾ÆÀÌÅÛ Áݱâ ITEM_TRY_CHANGE, /// üÀÎÁö ¾ÆÀÌÅÛ ITEM_TRY_MIXSKILL, /// Á¶ÇÕ±â¼ú ¾ÆÀÌÅÛ ITEM_TRY_SKILLRESET, /// ½ºÅ³ ÃʱâÈ­ ITEM_TRY_ITEMMIXDBWORK, /// Á¶ÇÕ DB ÀÀ´ä ´ë±âÁß ITEM_TRY_ENHANCEDBWORK, /// °­È­ DB ÀÀ´ä ´ë±âÁß ITEM_TRY_NPCDEALREGIST, /// ÆÇ¸Å´ëÇà µî·Ï ITEM_TRY_NPCDEALDELETE, /// ÆÇ¸Å´ëÇà »èÁ¦ ITEM_TRY_NPCDEALBUY, /// ÆÇ¸Å´ëÇà ±¸ÀÔ ITEM_TRY_MAILDOWNLOAD, /// ¸ÞÀÏ - ¾ÆÀÌÅÛ ´Ù¿î·Îµå ITEM_TRY_MAILSEND, /// ¸ÞÀÏ - ¾ÆÀÌÅÛ º¸³»±â ITEM_TRY_MAPCHANGE, ITEM_TRY_VEHICLE, }; // ¾ÆÀÌÅÛ Á¦ÇÑ Ã¼Å© enum { ITEMLIMIT_SUCCESS = 0, ITEMLIMIT_ERROR, ITEMLIMIT_RACE, /// Á¾Á· ITEMLIMIT_GENDER, /// ¼ºº° ITEMLIMIT_JOB, /// Á÷¾÷ ITEMLIMIT_LEVEL, /// ·¹º§ ITEMLIMIT_PVPONLY, /// ÀüÀå ITEMLIMIT_TUTORIALONLY, /// Æ©Å丮¾ó ITEMLIMIT_FORCETYPE, /// ¼¼·Â ¿À·ù ITEMLIMIT_MAKESKILL, /// Àü¹®Á÷¾÷ ¿À·ù ITEMLIMIT_MAKESKILLEXP, /// Àü¹®Á÷¾÷ ¼÷·Ãµµ ¿À·ù ITEMLIMIT_MIXSKILLSTEP, /// Àü¹®Á÷¾÷ ´Ü°è ¿¡·¯ ITEMLIMIT_MIXRECIPESTEP, /// ·¹½ÃÇÇÀÇ ¿ä±¸´Ü°è ¿¡·¯ ITEMLIMIT_MIXRECIPEEXP, /// ¼÷·Ãµµ ¿¡·¯ // ITEMLIMIT_HAVETITLE, /// À̹̼ÒÀ¯ÇÑ È£Äª }; struct sDealCategory { char mHighKey; /// ´ëºÐ·ù short mMiddleKey; /// Áߺзù sDealCategory() { mHighKey = 0; mMiddleKey = 0; } }; /// ¾ÆÀÌÅÛ °ü¸®ÀÚ class cItemManager { friend class cCheatManager; public: static cItemManager* mSingleton; /// Á¤º¸ ( text index, ºÐ·ù ¸®½ºÆ® ) typedef tPair cDataPair; public: cItemManager(); ~cItemManager(); /// ÃʱâÈ­ bool Init(); // void Open(); // /// µ¥ÀÌÅÍ »èÁ¦ // void Close(); cItemDefine* GetItemDefine( unsigned long itemIndex ); /// ¾ÆÀÌÅÛ Á¤ÀÇ¸Ê È¹µæ tHashMap& GetDefineMap() { return mDefineMap; } protected: /// ·Îµù bool LoadText( const cString& pathName ); bool LoadDefine( const cString& pathName ); bool LoadAbility( const cString& pathName ); bool LoadLimit( const cString& pathName ); bool LoadCard( const cString& pathName ); bool LoadTarot( const cString& pathName ); bool LoadSpread( const cString& pathName ); bool LoadFileName( const cString& pathName ); bool LoadNpcStore( const cString& pathName ); bool LoadDisjoint( const cString& pathName ); bool LoadEnhanced( const cString& pathName ); bool LoadCardSlot( const cString& pathName ); bool LoadDealCategoryTable( const cString& pathName ); bool LoadItemSet( const cString& pathName ); /// ÄðŸÀÓ °ü·Ã µ¥ÀÌÅÍ ·Îµå void LoadCoolData(); /// // void LockAndBackup( eItemTry itemTry, unsigned short slotIndex0, unsigned short slotIndex1 = USHRT_MAX, unsigned long tempIndex = 0, unsigned int value = 0, unsigned long price = 0, cItemIcon* icon = 0 ); // // /// ÀåÂø // bool TestMoveItemDown( unsigned short slotIndex0, unsigned short slotIndex1 ); // bool TestMoveItemUp( unsigned short slotIndex0, unsigned short slotIndex1 ); // // bool MoveItemDown( unsigned short slotIndex0, unsigned short slotIndex1 ); // bool MoveItemUp( unsigned short slotIndex0, unsigned short slotIndex1 ); // // bool TestEquipWeapon( unsigned short& slotIndex1, eItemEquip equipType ); // bool TestEquipWeapon_OneHand( unsigned short& slotIndex1 ); // bool TestEquipWeapon_TwoHands( unsigned short& slotIndex1 ); // bool TestEquipWeapon_Shield( unsigned short& slotIndex1 ); // bool TestEquipWear( unsigned short& slotIndex1, unsigned char subType ); // bool TestEquipAccessory( unsigned short& slotIndex1, unsigned char subType ); // bool TestEquipCard( unsigned short& slotIndex1 ); // // bool TestUseItem( unsigned short slotIndex0 ); // bool TestUseEtcItem( unsigned short slotIndex0 ); // Äù½ºÆ® ÀÇ·Ú¾ÆÀÌÅÛ // // bool EquipWeapon( unsigned short& slotIndex1, unsigned short slotIndex, eItemEquip equipType ); // bool EquipWeapon_OneHand( unsigned short& slotIndex1, unsigned short slotIndex ); // bool EquipWeapon_TwoHands( unsigned short& slotIndex1, unsigned short slotIndex ); // bool EquipWeapon_Shield( unsigned short& slotIndex1, unsigned short slotIndex ); // bool EquipWear( unsigned short& slotIndex1, unsigned short slotIndex, unsigned char subType ); // bool EquipAccessory( unsigned short& slotIndex1, unsigned short slotIndex, unsigned char subType ); // bool EquipCard( unsigned short& slotIndex1, unsigned short slotIndex ); // // /// ³×Æ®¿öÅ© // void NetTryItem( unsigned int protocol, void* msg = 0 ); // void NetMoveItem( unsigned short slotIndex0, unsigned short slotIndex1 ); // void NetEquipItem( unsigned short slotIndex ); // void NetUseItem( unsigned short slotIndex ); // void NetUnEquipItem( unsigned short slotIndex ); // void NetDumpItem( unsigned short slotIndex, bool onSound = false ); // void NetSplitItem( MSG_RES_ITEM_DIVIDE_INVENTORY* msgData ); // void NetSplitItem( MSG_RES_NPC_ITEM_MOV2_INVENTORY* msgData, unsigned short slotIndex0, unsigned short slotIndex1 ); // // void SetSwitchWeapon( eItemActiveWeapon activeWeapon, bool onSound = false ); // void NetSwitchWeapon( eItemActiveWeapon activeWeapon ); // void NetBuyItem( MSG_RES_NPC_ITEM_BUY* msgData ); // void NetGetItem( MSG_RES_ITEM_GET* msgData ); // void NetSellItem( MSG_RES_NPC_ITEM_SELL* msgData ); // void NetRewardItem( MSG_RES_ITEM_REWARD* msgData ); // void NetTakeItem( MSG_RES_ITEM_TAKE* msgData ); // void NetDisjointItem( MSG_RES_ITEM_DISJOINT_INVENTORY* msgData ); // void NetEnhancedItem( MSG_SYN_ITEM_ENHANCED_END* msgData ); // void NetTradeItem( MSG_RES_ITEM_EXCHANGE_END* msgData ); // void NetChangeItem( MSG_RES_ITEM_CHANGE_INVENTORY* msgData ); // void NetMixSkillItem( MSG_RES_MAKESKILL_ITEM* msgData ); // void NetMixItem( MSG_RES_ITEM_MIXED* msgData ); // void NetSkillResetItem( MSG_RES_ITEM_SKILLRESET* msgData ); // void NetItemAgentAddItem( MSG_RES_NPC_ITEM_AGENT_ADD* msgData ); // void NetItemAgentDelItem( MSG_RES_NPC_ITEM_AGENT_DEL* msgData ); // void NetItemAgentGetItem( MSG_RES_NPC_ITEM_AGENT_GET* msgData ); // // /// cItemLimit* GetItemLimit( unsigned long itemIndex ); cString* GetItemFileNames( unsigned long itemIndex ); // cItemSpread* GetItemSpread( unsigned long itemIndex ); // cItemCard* GetItemCard( unsigned long itemIndex ); // cItemTarot* GetItemTarot( unsigned long itemIndex ); // sItemDisjoint* GetItemDisjoint( unsigned long index ); // cEnhancedOptionArr* GetItemEnhanced( unsigned long index ); // sItemPutCardSlot* GetItemPutCardSlot( unsigned long index ); // // /// ¾ÆÀÌÅÛ ¾îºô¸®Æ¼ üũ // void AddAbility( cItem& item ); // void AddSpecialAbility( short type, short value ); // // void AddEnhance( cItem& item ); // void AddPutCard( unsigned long cardIndex ); // // /// ¾ÆÀÌÅÛ Àüü ¹«°Ô °Ë»ç && ¾ÆÀÌÅÛ ÃѰ¹¼ö °ü¸® // void CheckWeight(); // void CheckItemCount(); // // /// ¼±ÅÃµÈ ½½·Ô °»½Å // void ChangeSelectSlot( unsigned short slot ); // // /// ġƮ // bool CheatMakeItem( sInventory* inv ); public: /// ´ÜÀÏü¸¦ ¸®ÅÏ static cItemManager* GetSingleton(); protected: /// ÅØ½ºÆ® cUIText* mItemText; /// ¾ÆÀÌÅÛ Á¤ÀÇ typedef tHashMap cDefineMap; cDefineMap mDefineMap; /// ¾ÆÀÌÅÛ ´É·Â typedef tHashMap cAbilityMap; cAbilityMap mAbilityMap; /// ¾ÆÀÌÅÛ Á¦ÇÑ typedef tHashMap cLimitMap; cLimitMap mLimitMap; /// ¾ÆÀÌÅÛ Ä«µå typedef tHashMap cCardMap; cCardMap mCardMap; /// ¾ÆÀÌÅÛ Å¸·Ô typedef tHashMap cTarotMap; cTarotMap mTarotMap; /// ¾ÆÀÌÅÛ ½ºÇÁ·¹µå typedef tHashMap cSpreadMap; cSpreadMap mSpreadMap; /// ¾ÆÀÌÅÛ ÆÄÀÏ¸í ¹è¿­ typedef tHashMap cFileNamesMap; cFileNamesMap mFileNamesMap; /// ¾ÆÀÌÅÛ ºÐÇØ µ¥ÀÌÅÍ typedef tHashMap cDisjointMap; cDisjointMap mDisjointMap; /// ¾ÆÀÌÅÛ °­È­ µ¥ÀÌÅÍ typedef tPointerArray cEnhancedOptionArr; typedef tHashMap cEnhancedMap; cEnhancedMap mEnhancedMap; /// Ä«µå ½½·Ô µ¥ÀÌÅÍ typedef tHashMap cPutCardSlotMap; cPutCardSlotMap mPutCardSlotMap; /// ¾ÆÀÌÅÛ ¼¼Æ® µ¥ÀÌÅÍ typedef tPointerHashMap cSetInfoMap; cSetInfoMap mSetInfoMap; /// ¾ÆÀÌÅÛ ºÐ·ù¸¦ À§ÇÑ ÀڷᱸÁ¶ /// ¾ÆÀÌÅÛ Á¤ÀÇ À妽º typedef tArray cNameIdxArr; typedef tPointerHashMap cNameIdxArrMap; /// sDealCategory typedef tArray cDealArr; cNameIdxArr mDealHighArr; // ´ëºÐ·ù cNameIdxArrMap mDealCategoryMap; // highkey, *cDealArr protected: /// ¾ÆÀÌÅÛ ¹è¿­ // cItem mItemArray[LEN_INVENTORY]; /// ¾ÆÀÌÅÛ Ç÷¢ ¹è¿­ int mFlagArray[LEN_INVENTORY]; /// Àá±è ¿©ºÎ bool mLocked; /// Ȱ¼ºÈ­µÈ ÀåÂø Á¤º¸ eItemActiveWeapon mActiveWeapon; /// front / back »ó´ëÁÂÇ¥ cUIRect mFrontLeft; cUIRect mFrontRight; cUIRect mBackLeft; cUIRect mBackRight; /// ¹é¾÷ eItemTry mTry; unsigned short mSlotIndex0; unsigned short mSlotIndex1; unsigned long mTempIndex; /// °¢Á¾ »óȲº°·Î ÀúÀåÇÒ À妽º unsigned int mValue; unsigned long mPrice; // cItemIcon* mLinkedIcon; NiColorA mLinkColor; /// ¹«°Ô cGauge* mWeightGauge; float mMaxWeight; float mCurWeight; /// Àåºñ ¾îºô¸®Æ¼ ( ±âº», Ãß°¡ ) sEquipAbility mBasicAbil; /// Npc »óÁ¡ cItemScript* mpNpcStore; /// µ¿ÀÏÁ¾·ùÀÇ ¾ÆÀÌÅÛÀÇ ÃÑ °¹¼ö ÀúÀå (¾ÆÀÌÅÛÀ妽º, ¾ÆÀÌÅÛ ÃѰ¹¼ö) typedef tHashMap cItemCountMap; cItemCountMap mItemCountMap; /// Drop ItemÀÇ Á¤º¸¸¦ Á»´õ ½±°Ô ÂüÁ¶Çϱâ À§ÇÑ ÀڷᱸÁ¶ /// server¿¡¼­ Á¦°øµÈ index / ±×·¡ÇÈ Node Æ÷ÀÎÅÍ typedef tPointerHashMap cDropItemMap; cDropItemMap mDropItemMap; /// °Å·¡ÇÒ »ó´ë¹æ Á¤º¸ unsigned long mTradeTarget; cStringT mTradeName; unsigned long mTradeMoney; /// ³ëÁ¡°ü·Ã Á¤º¸ cStringT mUserSellName; unsigned long mUserSellTarget; /// º¸°íÀÖ´Â ³ëÁ¡ÀÇ Å¸°ÙÀ妽º /// ¾ÆÀÌÅÛ »óÀÚ ¿Àǽð£ üũ unsigned long mLastAccutime; }; // inline void cItemManager::SetWeightGauge( cGauge* gauge ) // { // mWeightGauge = gauge; // } // // inline float cItemManager::GetWeight() // { // return mCurWeight; // } // // inline cItem* cItemManager::GetItem( unsigned short slotIndex ) // { // if( slotIndex > MAX_INVENTORY ) // { // assert( 0 && "index out of range" ); // return 0; // } // // return &mItemArray[ slotIndex ]; // } // // inline sEquipAbility* cItemManager::GetBasicAbil() // { // return &mBasicAbil; // } // // inline void cItemManager::ClearUserSellTarget() // { // mUserSellTarget = 0; // } // inline cItemManager* cItemManager::GetSingleton() { return mSingleton; } #define ITEMMAN cItemManager::GetSingleton()