/* ========================================================================== * ÆÄ ÀÏ : ThemeManager.h * ¸ñ Àû : * ÀÛ ¼º ÀÚ : ¹Ú°æÈñ * ÀÛ ¼º ÀÏ : 2008-09-04 * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once #include "ThemeObject.h" #include "rangecheck.h" #include "indexgenerator.h" #include "themeuserpool.h" #include "theme_common.h" #include "ThemeTimeScript.h" enum eTHEME_PROCESS { eTHEMEPROCESS_READY, eTHEMEPROCESS_WAITDB, eTHEMEPROCESS_RUN, eTHEMEPROCESS_5MIN, /// 5ºÐ Ãß°¡ ´ë±â }; const unsigned long THEME_OPEN_SEND_TIME = 1 * MINUTE; const unsigned long THEME_READY_TIME = 5 * MINUTE; class cThemeManager { public: static cThemeManager* mpThemeManager; public: cThemeManager(); ~cThemeManager(); /// pool ó¸® cThemeObject* AllocThemeObject() { return mThemeObjectPool.Alloc(); } void FreeThemeObject(cThemeObject* ptr) { mThemeObjectPool.Free(ptr); } bool Init( SERVER_TYPE type ); void Release(); void Process( unsigned long elapsedTime, unsigned long accumTime ); /// Àδø ÀÔÀå °ü¸®ÀÚ(npc)¸¦ ÅëÇÑ ÀÔÀå¿äû void ThemeRequest( unsigned long playerIdx, unsigned short themeMapNum ); void ThemeReadyAccept( unsigned long playerIdx, unsigned short themeMapNum, unsigned char themeMode ); void ThemeDBErr( unsigned long playerIdx, unsigned char errorCode ); /// Àδø ÀÔÀå cThemeObject* ThemeJoin( cPlayer* pPlayer, unsigned short themeIdx, unsigned char levelMode, float *pX, float *pY ); cThemeObject* TutorialJoin( cPlayer* pPlayer, unsigned char levelMode, unsigned long tutorialMode, float *pX, float *pY, bool gmJoin ); cThemeObject* GetThemeObject( unsigned long themeIdx ); void ThemeRestart(); void SetThemeRestartTime( unsigned long resetLeftTime ); void InsertDelTheme( unsigned long themeIdx ) { mDelAry.PushBack( themeIdx ); } tPointerHashMap* GetThemeObjectMap() { return &mThemeMap; } unsigned long NextResetTime() { return mNextResetTime; } unsigned long GetProcess() { return mProcess; } unsigned long GetNpcGenIdx() { return mNpcIdxGen.GeneratIdx(); } void DelNpcGenIdx( unsigned long objectIdx ) { mNpcIdxGen.DelIdx( objectIdx ); } unsigned long GetStartPosIdx() { return mStartPosIdx; } bool MonsterCntTest( unsigned short mapNum, unsigned long monsterIdx, unsigned long classIdx, unsigned long regenIdx ); private: /// ÆÄ´Ï¿¹ ¼­Ä¿½º Àδø ¸Þ¸ð¸®Ç® typedef tPool cThemeObjectPool; cThemeObjectPool mThemeObjectPool; typedef tHashMap cHashMap; typedef tPointerHashMap cPHashMap; typedef tArray cArray; SERVER_TYPE mType; /// »ý¼ºµÈ ¼­Ä¿½º Àδø¸Ê /// cPHashMap mThemeMap; /// Ç÷¹À̾ ¼­Ä¿½ºÀδø ÀÔÀå ¹æ¹øÈ£ /// cHashMap mThemePlayerMap; unsigned long mThemeOpenSendTime; cIndexGenerator mIdxGen; unsigned long mNextEventTime; unsigned long mNextResetTime; eTHEME_PROCESS mProcess; unsigned long mReadyPlusTime; cThemeTimeScript mThemeTimeScript; unsigned long mStartPosIdx; cArray mDelAry; cIndexGenerator mNpcIdxGen; }; #define THEMEMANAGER cThemeManager::mpThemeManager