/* ========================================================================== * ÀÛ ¼º ÀÚ : À̼ø±Ô * ÀÛ ¼º ÀÏ : 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; struct MSG_RES_NPC_OBT_EVENT; /// ·çÆÃâµî Ãâ·Â¿ë 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; const unsigned long DEAL_DELAYTIME = 1000; // ÆÇ¸Å´ëÇà, ¼ö·ÉÇÔ 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_SLOT_COUNT = 16; /// Àκ¥Å丮 Á¦¿Ü ½½·Ôµé /// ¾ÆÀÌÅÛ ¾ÆÀÌÄÜÀ» °ü¸®ÇϱâÀ§ÇÑ ½½·ÔÀ¸·Î, ¼­¹ö¿Í °ü·Ã¾ø´Ù 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_EQUIP_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; // ¼ö·ÉÇÔ ½½·Ô °¹¼ö const int RECEIPT_SLOT_COUNT = INVENTORY_CASH_ITEM_END - INVENTORY_CASH_ITEM_BEGIN; /// ¾ÆÀÌÅÛ ½½·Ô ¼Ò¼Ó /// °¢½½·ÔÀÌ ¾î´À â¿¡ ¼ÓÇÏ´ÂÁö ¾Ë¼ö ÀÖÀ½. 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, ITEM_IN_RECEIPT, ITEM_IN_CARDBOOK_NORMAL, ITEM_IN_CARDBOOK_NORMAL_SPREAD, }; /// ¾ÆÀÌÅÛ ½Ãµµ 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, ITEM_TRY_SEAL, ITEM_TRY_LISTRECEIPT, ITEM_TRY_THEMERESET, ITEM_TRY_GIVEPARTY, ITEM_TRY_SUMMON, // ÆíÀÇ ±â´É ¼Òȯ ÁÖ¹®¼­ ITEM_TRY_NPCEVENT, // À̺¥Æ® º¸»ó }; // ¾ÆÀÌÅÛ Á¦ÇÑ Ã¼Å© enum { ITEMLIMIT_SUCCESS = 0, ITEMLIMIT_ERROR, ITEMLIMIT_RACE, /// Á¾Á· ITEMLIMIT_GENDER, /// ¼ºº° ITEMLIMIT_JOB, /// Á÷¾÷ ITEMLIMIT_LEVEL, /// ·¹º§ ITEMLIMIT_PVPONLY, /// ÀüÀå ITEMLIMIT_TUTORIALONLY, /// Æ©Å丮¾ó ITEMLIMIT_FIELDONLY, /// Çʵå¸Ê 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; } }; struct sChangeCount { unsigned long itemIdx; int total; sChangeCount() { itemIdx = 0; total = 0; } }; // ¾ÆÀÌÅÛ °¹¼ö Á¤º¸ struct sItemCount { int bag; //ÀåÂø+°¡¹æ int etc; //etc ( ±× ¿Ü ) int total; //¸ðµç ÇÕ sItemCount() { bag = 0; etc = 0; total = 0; } }; struct sItemBillEx : public sItemBill { time_t begin; }; /// ¾ÆÀÌÅÛ °ü¸®ÀÚ class cItemManager { friend class cCheatManager; public: static cItemManager* mSingleton; /// Á¤º¸ ( text index, ºÐ·ù ¸®½ºÆ® ) typedef tPair cDataPair; public: cItemManager(); ~cItemManager(); /// ÃʱâÈ­ bool Init(); void Open(); /// µ¥ÀÌÅÍ »èÁ¦ void Close(); /// ¾ÆÀÌÄÜ void BindIcon( unsigned short slotIndex, cItemIcon* icon ); void LinkIcon( cItemIcon* icon ); void UnLinkIcon( bool setcolor = false ); void CheckItemSlot( unsigned short slotIndex ); /// ÄðŸÀÓ ¼¼ÆÃ void StartCoolTime( unsigned long itemIndex, unsigned long coolTime ); void EndCoolTime( unsigned long itemIndex ); void CopyCoolTime( unsigned long itemIndex, unsigned long startTime, unsigned long restTime, unsigned long totalTime ); /// °ÔÀÓÁ¢¼Ó½Ã, Àüü ÄðŸÀÓ Á¤º¸ º¹»ç ¼¼ÆÃ void SetAllItemCool(); /// ¹«°Ô void SetWeightGauge( cGauge* gauge ); void SetMaxWeightGauge( float max ); /// ¾ÆÀÌÅÛ º¯È­½Ã Á¤º¸ üũ ( ¹«°Ô, °¹¼ö, »ç¿ë¿©ºÎµî ) void UpdateItem(); float GetWeight(); /// ¾ÆÀÌÅÛ ¾îºô¸®Æ¼ üũ void CheckEquipAbility(); sEquipAbility* GetBasicAbil(); /// hero ÀåÂø ¹«±â ¸®ÅÏ cItem* GetHeroRightWeapon(); cItem* GetHeroLeftWeapon(); /// ¹«±â¸¦ ÀåÂøÇϰí ÀÖ´ÂÁö ¿©ºÎ bool IsEquipWeapon(); void SetActiveWeapon( int active ) { mActiveWeapon = (eItemActiveWeapon)active; } int GetActiveWeapon() { return (int)mActiveWeapon; } /// Àκ¥Å丮³»¿¡ ¼±ÅÃµÈ ¾ÆÀÌÄÜÀ» ÇѰ³¸¸ ¼¼ÆÃÇϵµ·Ï ÇÔ void SetInvenSelect( cUIWindow* win ); /// ¾ÆÀÌÅÛ ÅøÆÁ Ä÷¯ ¸®ÅÏ void GetTooltipColor( unsigned short tiptype, unsigned long& color ); /// °¡°Ý ´ÜÀ§ ÅøÆÁ ȹµæ unsigned long GetPriceUnit( unsigned long type, unsigned long itemIndex ); unsigned long GetPriceUnit( unsigned long itemIndex ); /// ¾ÆÀÌÅÛ »ç¿ëÁ¦ÇÑ Á¶°Ç üũ void CheckItemLimitAll(); /// ¾ÆÀÌÅÛ limit °Ë»ç int CheckLimit( unsigned long itemIndex ); int CheckLimitEtc( unsigned long itemIndex ); bool CheckLimitJob( cItemLimit* itemLimit ); /// ¾ÆÀÌÅÛ bool TryToUnSeal( unsigned short slotIndex ); bool TryToMoveItem( unsigned short slotIndex0, unsigned short slotIndex1, cItemIcon* icon ); bool TryToEquipItem( unsigned short slotIndex ); bool TryToUnEquipItem( unsigned short slotIndex ); bool TryToDumpItem( unsigned short slotIndex ); bool TryToSplitItem( unsigned short slotIndex0, unsigned short slotIndex1, unsigned int value ); bool TryToUseSkillReset( unsigned short slotIndex ); bool TryToUseExpRecover( unsigned short slotIndex ); bool TryToUseCashItem( unsigned short slotIndex ); bool TryToUseInventory( unsigned short slotIndex ); // È®Àå ÁÖ¹®¼­·ù /// ¹«±â bool TryToSwitchWeapon(); /// ½½·Ô¿¡ ÃÑ µé¾î°¥¼ö ÀÖ´Â °¹¼ö ±¸Çϱâ unsigned int GetRemainCount( unsigned long itemIndex, unsigned int mincount ); bool CheckDisjoint( unsigned short slotIndex ); bool CheckBuyItem( unsigned long itemIndex, unsigned int count ); /// »óÁ¡ bool TryToBuyItem( unsigned long itemIndex, unsigned int count ); bool TryToSellItem( unsigned short slotIndex, unsigned int count ); /// ¾ÆÀÌÅÛ Áݱâ bool TryToGetItem( unsigned long itemIndex, unsigned int count ); /// ¾ÆÀÌÅÛ ºÐÇØ, °­È­ (¾ÆÀÌÅÛ,Ä«µå) bool TryToDisjoint( unsigned short slotIndex ); bool TryToEnhancedStart( unsigned short slotIndex0, unsigned short slotIndex1, unsigned short slotIndex2 = 0 ); bool TryToEnhancedCancel( bool close = true ); //bool TryToEnhancedResult( unsigned short slotIndex0, unsigned short slotIndex1 ); /// 080402 PKH Npc void NpcNetTryItem( unsigned int protocol, void* msg = 0 ); /// °Å·¡°ü·Ã bool TryToTradeAsk( cPlayer* player ); /// °Å·¡¿äû void TryToTradeAccept(); /// °Å·¡ ½ÂÀÎ void TryToTradeReject( BYTE type ); /// °Å·¡ °ÅÀý void TryToTradeCancel(); /// ´Ý±â ¿äû bool TryToTradeItemAdd( unsigned short slotIndex ); /// ¾ÆÀÌÅÛ µî·Ï bool TryToTradeMoneyAdd( unsigned long money ); /// °Å·¡±Ý¾× µî·Ï bool TryToTradeItemDelete( unsigned short slotIndex, unsigned int arrIndex ); /// ¾ÆÀÌÅÛ »èÁ¦ void TryToTradeOk(); /// °Å·¡¹°Ç° È®ÀÎ ¿Ï·á void TryToTradeReTry(); /// ¼öÁ¤ ¿äû void TryToTradeEnd(); /// °Å·¡ Á¾·á /// ³ëÁ¡»ó°ü·Ã unsigned long GetUserSellTarget() { return mUserSellTarget; } void ClearUserSellTarget(); bool TryToUserSellOpen(); bool TryToUserSellReName( LPCTSTR title ); void TryToUserSellClose(); bool TryToUserSellAdd( unsigned short slot, unsigned long price ); bool TryToUserSellDelete( unsigned short slot ); bool TryToUserSellModify( unsigned short slot ); void TryToUserSellJoin( sObject& obj ); void TryToUserSellJoinClose(); /// ³ëÁ¡»ó Âü¿© ´Ý±â bool TryToUserSellGet( unsigned short slot, unsigned int count ); /// ¾ÆÀÌÅÛ ±¸ÀÔ¿äû /// Ä«µåÀåÂø °ü·Ã ( ÀåÂø¾ÆÀÌÅÛ, ÀåÂøÇÒÄ«µå, ÀåÂøÀ©µµ¿ìÀÇ ½½·Ô ) bool TryToPutCard( unsigned short itemSlot, unsigned short cardSlot, unsigned short putSlot ); /// Ä÷º¼ÇºÏ Ä«µå ÀåÂø °ü·Ã bool TryToCardBookAdd( unsigned short slot0, unsigned short slot1 ); /// ÆÇ¸Å´ëÇà °ü·Ã bool TryToNpcDealRegistReq( unsigned short slotIndex, unsigned long price, char validThru ); bool TryToNpcDealOpen( unsigned long npcIndex ); bool TryToNpcDealOpenPage( long page ); bool TryToNpcDealRegistDelete( long idx ); bool TryToNpcDealBuy( long idx, long page, short count, LPCTSTR itemName, char type, short subType, char lowLv, char highLv, char enhance, char rare, BYTE sortData ); /// ÆÇ¸Å´ëÇà - °Ë»ö bool TryToNpcDealSearchAll( long page, LPCTSTR itemName, char type, short subType, char lowLv, char highLv, char enhance, char rare, BYTE sortData ); bool TryToNpcDealSearchType( long page, char type, short subType, char lowLv, char highLv, char enhance, char rare, BYTE sortData ); /// ¾ÆÀÌÅÛ¼ö·ÉÇÔ bool TryToReceiptList(); // Å׸¶ ±Í¼Ó ÃʱâÈ­ bool TryToThemeReset( unsigned short slot, unsigned short themeNum, unsigned char themeMode ); // ÆÄƼ¿ø ºÐ¹è ¿äû bool TryToGiveParty( unsigned long playerIndex, unsigned long itemIndex ); /// mTryÀÇ ¶ôÀÌ move ¿¡¼­ merge·Î ¹Ù²Ù±â. void LockChangeToMerge(); /// ¿ìÆí °ü·Ã void DeleteInventory( unsigned short slotIndex ); /// cItem* GetItem( unsigned short slotIndex ); cItemDefine* GetItemDefine( unsigned long itemIndex ); cItemAbility* GetItemAbility( unsigned long itemIndex ); eItemIn GetItemIn( unsigned short slotIndex ); sItemCount* GetItemCount( unsigned long itemIndex ); unsigned short FindSlotIndex( unsigned long itemIndex ); unsigned short FindSlotIndexByType( ITEM_TYPE mainType, ITEM_TYPE subType ); LPCTSTR GetItemName( unsigned long textIndex ); sItemOnePieceInfo* GetItemOnePieceInfo( unsigned long itemIndex ); const char* GetItemFileName( unsigned long itemFileIdx, char race, char gender, bool weapon ); bool IsEquipedItem( unsigned long itemIndex ); cItemSetInfo* GetItemSetInfo( unsigned int setIndex ); // µå¶ø ¾ÆÀÌÅÛ ±×·¡ÇÈ À妽º unsigned long GetDropNodeIndex( unsigned long dropIndex ); /// Àá±Ý void LockItemTry( eItemTry itemTry, unsigned short slotIndex0 = USHRT_MAX ); /// ¿ÜºÎ »ç¿ëÀá±Ý /// Àá±Ý Ç®±â eItemTry GetItemTry() { return mTry; } void UnlockItemTry( eItemTry itemTry ); bool IsLocked(); /// ³×Æ®¿öÅ© ¸Þ½ÃÁö void NetworkMsgParser( char* msg ); void NetworkMsgParserTrade( char* msg ); void NetSetItem( sInventory* inv, bool setCool = true ); bool NetSetItemBill( sItemBill* bill ); void DeleteItemBill( unsigned long idx ); // void ClearCashInven(); void NetSetCashItem( sCashInventory* inv ); /// DropItem ÀÎÅÍÆäÀ̽º.. bool CreateDropItem( MSG_ITEM_INFO* dropMsg ); void DeleteDropItem( unsigned long idx ); // µå¶ø¾ÆÀÌÅÛ ÀÇ Æ©Å丮¾ó À̹ÌÁö °»½Å void UpdateTutorialDrop(); void ClearTutorialDrop(); bool CheckNearestDropItem(); bool CheckOpenTime(); /// ¹«±â ½ºÀ§Äª ÁÂÇ¥ ¼¼ÆÃ void SetWeaponIconPos( unsigned short slotIndex, cUIRect rect ); // bool FindEmptySlotArr( unsigned short* slotIndexArr, unsigned int count, unsigned short begin, unsigned short end ); bool FindEmptySlot( unsigned short* slotIndex, unsigned short begin, unsigned short end ); /// ¾ÆÀÌÅÛ ³õ´Â »ç¿îµå Àç»ý void PlayIconSettingSound( unsigned short slotIndex ); /// tArray* GetDealHighArr() { return &mDealHighArr; } tArray* GetDealCategoryMap( char key ) { return (tArray*)mDealCategoryMap.GetAt( key ); } /// ¾ÆÀÌÅÛ Á¤ÀÇ¸Ê È¹µæ tHashMap& GetDefineMap() { return mDefineMap; } protected: /// ·Îµù bool LoadText( const cStringW& 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 ); bool LoadItemOnePieceInfo( 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 EquipWeapon( unsigned short i0, unsigned short i1, eItemEquip equip0, eItemEquip equip1 ); bool EquipWear( unsigned short i0, unsigned short i1, unsigned char subType ); bool EquipAccessory( unsigned short i0, unsigned short i1, unsigned char subType ); bool EquipCard( unsigned short i0, unsigned short i1 ); /// ³×Æ®¿öÅ© void NetTryItem( unsigned int protocol, void* msg = 0 ); void NetMoveItem( unsigned short slotIndex0, unsigned short slotIndex1 ); void NetUseItem( 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 ); void NetGivePartyItem( MSG_SYN_ITEM_PARTY_GIVE* 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 ); // void ClearItemCount(); 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 typedef tPointerHashMap cItemOnpieceInfo; cItemOnpieceInfo mItemOnePieceInfo; 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 tPointerHashMap cItemCountMap; cItemCountMap mItemCountMap; /// Drop ItemÀÇ Á¤º¸¸¦ Á»´õ ½±°Ô ÂüÁ¶Çϱâ À§ÇÑ ÀڷᱸÁ¶ /// server¿¡¼­ Á¦°øµÈ index / ±×·¡ÇÈ Node Æ÷ÀÎÅÍ typedef tPointerHashMap cDropItemMap; cDropItemMap mDropItemMap; // ij½¬¾ÆÀÌÅÛ ½Ã°£Á¤º¸ (idx, sItemBillEx) typedef tPointerHashMap cItemBillMap; cItemBillMap mItemBillMap; /// °Å·¡ÇÒ »ó´ë¹æ Á¤º¸ 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()