#pragma once //======================================================================================================================= /// QuestManager_Concrete class /** @author Kim Min Wook < taiyo@webzen.com > @since 2006. 3. 29 @remarks - ·ÎÁ÷¿¡¼­ Äù½ºÆ®¸¦ ´Ù·ê ¶§ »ç¿ëÇÏ´Â Åë·Î Ŭ·¡½º @description - QuestManager¸¦ »ó¼Ó - QuestManagerÀÇ virtual VOID OnEvent( Quest* pQuest )¸¦ ±¸Çö »ó¼Ó @scenario 1. DB·ÎºÎÅÍ (ÁøÇàÁßand¿Ï·áµÈ)Äù½ºÆ®ÀÇ Á¤º¸¸¦ ¹Þ¾Æ¼­ Player¸¶´Ù Quest°´Ã¼¸¦ QuestManager¸¦ ÅëÇØ¼­ »ý¼ºÇÑ´Ù(CreateQuest()) 2. ÃʱâÈ­µÈ QuestManager_Concrete´Â À̺¥Æ®°¡ ¹ß»ý½Ã¿¡ ·ÎÁ÷ÀÇ À̺¥Æ®(Event())¸¦ È£ÃâÇØÁÖ°í ¸ó½ºÅÍ Å³ÀÏ °æ¿ì Ŭ¶óÀÌ¾ðÆ®·Î ¾Ë·ÁÁØ´Ù 3. Ŭ¶óÀ̾ðÆ®ÀÇ ÆÐŶÀÇ ¿äû¿¡ µû¶ó Á¶°Çüũ¿Í ¾×¼ÇÀÌ ÀϾ°í, ÀÀ´äÀ» ÇØÁØ´Ù @history - */ //======================================================================================================================= #include #include "QuestCondition_Concrete.h" #include "QuestAction_Concrete.h" class Quest; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // class QuestManager_Concrete : public QuestManager { public: QuestManager_Concrete( QuestInfoManager* pmgr ) : QuestManager(pmgr) {} virtual ~QuestManager_Concrete() { Release(); } // DB·Î ºÎÅÍ ¿ÔÀ» ¶§ // Äù½ºÆ® °´Ã¼¸¦ ¹Ì¸® ¸¸µé¾î¼­ ³õ´Â´Ù.Manager¿¡ Quest¸¦ µî·ÏÇØµÐ´Ù. // ±×¸®°í MonsterKillConditionÀÌ addµÉ¶§ EstablishÇÑ´Ù? // // VOID SerializeStream( QUEST_PROGR_TOTAL_INFO & IN rTotalInfo, eQUEST_SERIALIZE eType ); // Ŭ¶óÀÌ¾ðÆ®¿¡¼­¸¸ È£ÃâÇØÁØ´Ù. ±»ÀÌ ¼­¹ö¿¡¼­´Â ½Ã°£ üũ´Â ºÎÇϸ¦ ÁÙ ÇÊ¿ä¾ø´Ù. // VOID Update(); // ·ÎÁ÷¿¡¼­ È£ÃâÇØÁØ´Ù. // VOID Event( eQUEST_EVENT evt, QUEST_MSG* pMsg ); // VOID Event( QCODE QCode, eQUEST_EVENT evt, QUEST_MSG* pMsg ); // 󸮿Ϸá ------------------------------------------------------------------------------------ // Ŭ¶óÀÌ¾ðÆ®·Î ºÎÅÍ Á¶°Çüũ ÆÐŶÀÌ ¿Â ¼ø°£ ó¸®ÇØ ÁØ´Ù // BOOL CanAccept( QCODE qCode, VOID* pvParam ); // BOOL CanComplete( QCODE qCode, VOID* pvParam ); static VOID Init( WORD wPoolSize ); VOID Init( Player* pPlayer ); VOID Release(); VOID SendQuestStream(); //VOID RecvQuestStream( MSG_CG_QUEST_STREAM_CMD* pcmd ); BOOLEAN MakeInfoQuestNpcNaviStream(MSG_CG_QUEST_OBJECT_NAVI_POS_CMD* INOUT pMsg, QCODE questCode = 0); BOOLEAN OnEventNpcSummonQuestAbandon(); inline void RegisterNpcSummonEvent(MONSTERCODE npcCode, CODETYPE npcKey); protected: // Äݺ¤ÀÌ µÇ´Â ºÎºÐ virtual VOID OnEvent( eQUEST_EVENT evt, QUEST_MSG* pMsg, Quest* pQuest ); // ÇÏÀ§ Ŭ·¡½º¿¡¼­ ±¸ÇöÀ» ÇØ¾ß ÇÏ´Â ºÎºÐ virtual QuestCondition* CreateQuestCondition( QuestConditionInfo* pInfo ); virtual QuestAction* CreateQuestAction( QuestActionInfo* pInfo ); virtual VOID DestroyQuestCondition( QuestCondition* pCondition ); virtual VOID DestroyQuestAction( QuestAction* pAction ); inline VOID SetPlayer( Player* pPlayer ) { m_pPlayer = pPlayer; } //__NA000000_090320_v0902_LOGIC_CHANGE_ABOUT_QUEST__ enum eNpcSummonInfo { eNpcSummonInfo_Code, eNpcSummonInfo_Key, eNpcSummonInfo_Count }; typedef DWORD NpcSummonInfo[eNpcSummonInfo_Count]; private: static VarMsg2 m_VarMsg; Player* m_pPlayer; NpcSummonInfo m_NpcSummonInfo; // static util::PoolRouter ms_PoolRouter; }; // (BUGFIX) (WAVERIX) (091018) change type for 'remove mob key' event on 'mob summon' quest abandon // ÀÌ·Ð... ¸ó½ºÅÍ Å° ´ë¿ªÀº 50001~ÀÌ´Ù... Äù½ºÆ® Ãë¼Ò½Ã ¸ó½ºÅͰ¡ Á¦°ÅµÇÁö ¾ÊÀ» ¼öµµ ÀÖ¾ú´Ù. inline void QuestManager_Concrete::RegisterNpcSummonEvent(MONSTERCODE npcCode, CODETYPE npcKey) { m_NpcSummonInfo[eNpcSummonInfo_Code] = npcCode; m_NpcSummonInfo[eNpcSummonInfo_Key] = npcKey; }