#ifndef __GAMESERVER_EQUIP_SLOTCONTAINER_H #define __GAMESERVER_EQUIP_SLOTCONTAINER_H #pragma once //================================================================================================== #if defined(_NA_002289_20110322_EQUIPMENTS_CALCULATOR_CHANGES_FOR_IMPROVEMENT) //================================================================================================== #include "./EquipmentSlotContainerEP2.h" //================================================================================================== #else //if !defined(_NA_002289_20110322_EQUIPMENTS_CALCULATOR_CHANGES_FOR_IMPROVEMENT) //================================================================================================== // EquipmentSlotContainer.h: interface for the CEquipmentSlotContainer class. // ////////////////////////////////////////////////////////////////////// //================================================================================================== /// CEquipmentSlotContainer class /** @author Kim Min Wook < taiyo@webzen.com > @since 2004. 8. 11~ @history - 2006/2/15 : ¾ÆÀÌÅÛÁ¦ÇÑ󸮶§¹®¿¡ ½ºÅÝup¾ÆÀÌÅÛÀ» ³»¸®±âÀ§ÇØ CanUnEquip() ÇÔ¼öÃß°¡ => DeleteSlot()ÀÇ ¸®Åϰª(BOOL) Ãß°¡, ½ÇÆÐÇÒ ¶§ ¿¹¿Ü(nak) ó¸® - 2006/5/12 : Á¦ÇѼöÄ¡°¡ ¸ÂÁö ¾Ê´Â ¾ÆÀÌÅÛÀ̸é Å»Âø °¡´ÉÇϰÔ! */ //================================================================================================== #include #include #include #include //================================================================================================== class Player; class SCItemSlot; typedef STLX_HASH_MAP HASHMAP_EQUIP_COUNT; typedef HASHMAP_EQUIP_COUNT::iterator HASHMAP_EQUIP_COUNT_ITR; typedef std::pair HASHMAP_EQUIP_COUNT_PAIR; typedef STLX_HASH_MAP HASHMAP_EQUIP_TYPE_COUNT; typedef HASHMAP_EQUIP_TYPE_COUNT::iterator HASHMAP_EQUIP_TYPE_COUNT_ITR; typedef std::pair HASHMAP_EQUIP_TYPE_COUNT_PAIR; typedef STLX_HASH_MAP EQUIP_GROUP_COUNT_MAP; typedef EQUIP_GROUP_COUNT_MAP::iterator EQUIP_GROUP_COUNT_MAP_ITER; //================================================================================================== class CEquipmentSlotContainer : public SCItemSlotContainer { public: CEquipmentSlotContainer(); virtual ~CEquipmentSlotContainer(); //virtual void UpdateSlot(POSTYPE at_pos, eSlotType type, DBSERIAL serial, SLOTCODE code, POSTYPE quickPos, DURATYPE dura, BYTE level, eUPDATE_BIT upbits = UB_ALL); //virtual void UpdateSlot(POSTYPE at_pos, SCSlot& IN rSlot); virtual void ClearAll(); virtual RC::eSLOT_INSERT_RESULT InsertSlot(POSTYPE at_pos, SCSlot& IN rSlot); virtual BOOL DeleteSlot(POSTYPE at_pos, SCSlot* pSlotOut); virtual void OnInsert(SCSlot& IN rSlot); virtual void OnDelete(SCSlot& IN rSlot); virtual BOOL ValidState(); BOOL CanEquip(POSTYPE at_pos, SCSlot& IN rSlotIn, BOOL bCheckEquipState = TRUE); BOOL CanUnEquip(POSTYPE at_pos, SCSlot& IN rSlotIn); BOOL ValidLimitStr(SCItemSlot& item_slot); BOOL ValidLimitDex(SCItemSlot& item_slot); BOOL ValidLimitVit(SCItemSlot& item_slot); BOOL ValidLimitInt(SCItemSlot& item_slot); BOOL ValidLimitSpr(SCItemSlot& item_slot); BOOL ValidLimitLevel(SCItemSlot& item_slot); BOOL ValidLimitSKill1(SCItemSlot& item_slot); BOOL ValidLimitSKill2(SCItemSlot& item_slot); WORD CalcLimitStat(WORD ItemLimitStr, SCItemSlot& item_slot, BOOL IsWeapon, BOOL IsArmor); void SetPlayer(Player* pPlayer) { m_pPlayer = pPlayer; } // ÀåÂø °³¼ö Á¦ÇÑ °ü¸® int GetEquipCount(SLOTCODE item_code); void IncEquipCount(SLOTCODE item_code); void DecEquipCount(SLOTCODE item_code); int GetEquipTypeCount(eITEMTYPE item_type); void IncEquipTypeCount(eITEMTYPE item_type); void DecEquipTypeCount(eITEMTYPE item_type); //±×·ìº° ÀåÂø °³¼ö Á¦ÇÑ °ü¸® // (NOTE) it has not the usage case at this point in time (100505) int GetEquipGroupCount(BYTE byEquipGroup); void IncEquipGroupCount(BYTE byEquipGroup); void DecEquipGroupCount(BYTE byEquipGroup); void SendSetItemBrd(BOOL bFullOption); void CheckupActiveEquipItemAll(); BOOL IsRealEquip(POSTYPE at_pos) { return m_bRealEquip[at_pos]; } POSTYPE GetPosEquipByItemType(eITEMTYPE Type, POSTYPE start, POSTYPE end); // _NA_0_20100722_AUTO_SYSTEM BOOL IsEquipEventItem(BYTE byEventCode); // CHANGES: f110420.5L, constant information is added whether this item is renderable equipment. static bool IsDefaultRenderableEquipItem(POSTYPE pos); protected: inline BOOL ValidLimitAll(short player_limit, short item_limit); //internal function //---------------------------------------------------------------------------------------------- Player* m_pPlayer; BOOL m_bRealEquip[MAX_EQUIPMENT_SLOT_NUM]; HASHMAP_EQUIP_COUNT m_mapEquipCount; // °°Àº ¾ÆÀÌÅÛ ÀåÂø°³¼ö °ü¸® HASHMAP_EQUIP_TYPE_COUNT m_mapEquipTypeCount; // °°Àº Á¾·ù ¾ÆÀÌÅÛ ÀåÂø °³¼ö °ü¸® // (NOTE) it has not the usage case at this point in time (100505) EQUIP_GROUP_COUNT_MAP m_mapEquipGroupCount; // °°Àº ¾ÆÀÌÅÛ ±×·ìº° ÀåÂø °³¼ö °ü¸® // WAVERIX_TEST_BLOCK_IN_CLASS(CEquipmentSlotContainer); }; //================================================================================================== #endif //_NA_002289_20110322_EQUIPMENTS_CALCULATOR_CHANGES_FOR_IMPROVEMENT //================================================================================================== #endif //__GAMESERVER_EQUIP_SLOTCONTAINER_H