/*! * \file ObjectManager.h * \brief ¿ÀºêÁ§Æ®¸¦ »ý¼º,»èÁ¦,°ü¸® * \bug * \todo ÃÖÀûÈ­ ÇÊ¿ä * \author ±è°æÇ¥ (lammy@webzen.co.kr) * \version 2008/12/30 ±è°æÇ¥ - doxygen command ÀÛ¼º */ #ifndef _OBJECTMANAGER_H #define _OBJECTMANAGER_H #include class ObjectFactory; class Object; class MapObject; struct APPEARANCEINFO; typedef stdext::hash_map Object_Map; typedef Object_Map::iterator Object_Map_Itr; typedef std::pair Object_Map_Pair; typedef util::CObjKeyGenerator OBJ_KEY_GENERATOR; /*! * \class ObjectManager Class * \brief ¿ÀºêÁ§Æ®¸¦ »ý¼º,»èÁ¦,°ü¸® * \author ±è°æÇ¥ (lammy@webzen.co.kr) */ class ObjectManager { #ifdef _K2P_OBJECT_MANAGER_MODIFIDY typedef std::multimap OBJECT_MULTIMAP_TYPE; typedef std::multimap::iterator OBJECT_MULTIMAP_ITRTYPE; typedef std::pair OBJECT_MULTIMAP_PAIR_TYPE; OBJECT_MULTIMAP_TYPE m_ObjectKindMap; #endif public: /// ±âº» »ý¼ºÀÚ ObjectManager( void ); /// ¼Ò¸êÀÚ ~ObjectManager( void ); protected: /// ¿ÀºêÁ§Æ® °ü¸®ÇÏ´Â ÇØ½¬ ¸Ê Object_Map m_hashmapObject; /// ¿ÀºêÁ§Æ®¸¦ »ý¼ºÇÏ´Â ÆåÅ丮 ObjectFactory* m_pObjectFactory; /// Æê°ü·Ã std::vector m_vPetContainer; OBJ_KEY_GENERATOR* m_pPetKeyGenerator; //! ÆÖ OBJ_KEY_GENERATOR* m_pBattleZoneKeyGenerator; //!< ¹èƲÁ¸ Ç÷¹À̾î /// ½Ì±Û ¸ðµåÀÇ Å°»ý¼º°ú µ¶¸³ÀûÀ¸·Î Ŭ¶óÀÌ¾ðÆ®¿¡¼­ ۸¦ »ý¼ºÇØ¾ß ÇÒ Çʿ䰡 ÀÖÀ»°æ¿ì¿¡ »ç¿ëµÇ´Â º¯¼ö OBJ_KEY_GENERATOR* m_pPlayerKeyGenerator; OBJ_KEY_GENERATOR* m_pMonsterKeyGenerator; OBJ_KEY_GENERATOR* m_pNpcKeyGenerator; OBJ_KEY_GENERATOR* m_pItemKeyGenerator; OBJ_KEY_GENERATOR* m_pMapObjectKeyGenerator; OBJ_KEY_GENERATOR* m_pNonCharacterKeyGenerator; #ifndef _K2P_OBJECT_MANAGER_MODIFIDY int m_iPlayerCount; int m_iMonsterCount; int m_iItemCount; #endif protected: /// Ű »ý¼º °ü·Ã. void InitKeyGenerator( void ); void RestoreKey( Object * pObject ); void ReleaseKeyGenerator(); void SafeRestoreKey(OBJ_KEY_GENERATOR* generator, DWORD key); /// Æê°ü·Ã »èÁ¦ÇÔ¼ö void InitPetContainer() { m_vPetContainer.clear(); } void CheckPetSummoned( Object * pObject ); void DeletePetContainer(); BOOL DeletePet( DWORD dwObjectKey ); public: BOOL Create( void ); void Destroy( void ); void Destroy( const std::vector &vdwKeys); Object * Add( DWORD dwObjectKey, eOBJECT_TYPE objType, DWORD class_code, BOOL bHero = FALSE ); Object * AddMapObject( DWORD dwObjectKey, eOBJECT_TYPE objType, APPEARANCEINFO * pAppearInfo, OBJECT_SUB_TYPE subType = OBJECT_SUB_TYPE_NONE ); BOOL Delete( DWORD dwObjectKey ); #ifdef _MOD_CHAGNE_DELETE_HERO BOOL DeleteHero(); #endif Object * GetObject(DWORD dwKey); Object * GetObject( const TCHAR *szName ); void GetMonsters(std::vector& pMonsterArry); void GetPlayers(std::vector& pPlayerArry); Player* GetPlayer(DWORD object_key); Character* GetCharacter(DWORD object_key); MapObject * GetTerrainObject( DWORD dwID );//Åø»óÀÇ ÀÔ·ÂµÈ ¾ÆÀ̵ð·Î ¿ÀºêÁ§Æ®¸¦ ã´Â´Ù void DeleteObjectsByType( eOBJECT_TYPE eObjectType ); void DeletePlayersWithoutHero( DWORD dwHeroKey ); #ifdef _MOD_CHAGNE_DELETE_HERO void DeleteAllObjectWithoutHero(); #endif int GetObjectCount(eOBJECT_TYPE objType); int GetAllObjectCnt(); #ifdef _K2P_OBJECT_MANAGER_MODIFIDY void ProcessUnits( DWORD dwTick ); DWORD GetObjectKey( const char * szName ); #endif DWORD GenerateKeyByBattleZonePlayer(eOBJECT_TYPE obj_type); DWORD GenerateKeyByPet(eOBJECT_TYPE obj_type); DWORD GenerateKeyAtSingleMode(eOBJECT_TYPE objType); Object_Map::iterator GetBegin() { return m_hashmapObject.begin(); } Object_Map::iterator GetEnd() { return m_hashmapObject.end(); } virtual void RestoreObjectName(); void RefreshPlayerHideState(); }; extern ObjectManager g_ObjectManager; #endif // _OBJECTMANAGER_H