/* ========================================================================== * ÆÄ ÀÏ : QuestManager.h * ¸ñ Àû : * ÀÛ ¼º ÀÚ : ±è°¡¶÷ * ÀÛ ¼º ÀÏ : 2008-01-18 * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once #include "Lexer.h" #include "BaseStage.h" #include "QuestDefine.h" /// Äù½ºÆ® ÆÁº¸±â 0.5ÃÊ °£°Ý const unsigned long QUESTTIP_SHOWTIME = 500; /// Äù½ºÆ® ¸Å´ÏÀú class cParser; class cQuestDefine; class cUIFuncText; class cUIFuncTextNode; class cTrigger; class cNpcWindow; /// ³×Æ®¿öÅ© ¶ô enum { eLOCK_QUESTNONE, eLOCK_QUESTADD, eLOCK_QUESTADDBYITEM, eLOCK_QUESTCOMPLETE, eLOCK_QUESTREWARD, eLOCK_QUESTDELETE, eLOCK_QUESTDELETEAUTO, }; /// Äù½ºÆ® ³²Àº½Ã°£ struct sQuestTime { long restTime; long startTime; sQuestTime() { restTime = 0; startTime = 0; } }; // struct sNpcStausData { // npc Á¾·ù À妽º unsigned long npcClassIndex; // »óÅ eNpcQuestStatus status; }; struct MSG_RES_NPC_QUEST_REWARD; struct MSG_RES_NPC_QUEST_COMPLETE; struct MSG_RES_NPC_QUEST_FAIL; class cQuestManager { public: static cQuestManager* mpSingleton; public: cQuestManager(); ~cQuestManager(); bool Init(); cQuestDefine* GetQuestDefine( unsigned long questIdx ); public: static cQuestManager* GetSingleton(); private: bool Load( const cString& pathname ); bool LoadNpcQuest( const cString& pathname ); bool LoadQuests( const cString& pathname ); bool LoadQuestData( cParser& parser, cQuestDefine* p, cTrigger* trigger ); /// bool LoadTrigger( cParser& parser, cTrigger* trigger ); bool LoadInfo( cParser& parser, cQuestInfo* info ); bool LoadDuty( cParser& parser, cQuestDuty* duty, __int64& complete ); bool LoadLimit( cParser& parser, cQuestLimit* limit ); bool LoadEnd( cParser& parser, cQuestEnd* end ); bool LoadDefault( cParser& parser, cQuestReward* reward ); bool LoadSelect( cParser& parser, cQuestReward* select ); bool LoadFail( cParser& parser, cQuestFail* fail ); // /// À¯È¿¼º °Ë»ç bool IsValid( cQuestDefine* define ); bool CheckAura( unsigned long influenceIndex ); sNpcQuestList* GetNpcQuestMap( unsigned long npcClassIdx ); /// ÇöÀç ¸Ê¿¡ Á¸ÀçÇÏ´Â NPCÀÇ »óÅ °»½ÅÇϱâ eNpcQuestStatus UpdateNpcStatus( unsigned long npcIndex, unsigned long npcClassIndex ); private: /// Äù½ºÆ® ½ºÅ©¸³Æ® Á¤º¸ ¸Ê typedef tPointerHashMap cQuestDefineMap; cQuestDefineMap mQuestDefine; /// NPC º¸À¯ ÀüüÄù½ºÆ® ¸Ê ( npc À妽º, sNpcQuestList ) typedef tPointerHashMap cNpcQuestMap; cNpcQuestMap mNpcQuestMap; /// Äù½ºÆ® ³²Àº ½Ã°£ ÀúÀå (ÀüºÎÀúÀå) typedef tPointerHashMap cTimeMap; cTimeMap mTimeMap; /// ½Å±Ô Äù½ºÆ® ¸®½ºÆ® typedef tHashSet cNewQuestSet; cNewQuestSet mNewQuestSet; /// ½Å±Ô À̺¥Æ® Äù½ºÆ® ¸®½ºÆ® typedef tHashSet cNewEventQuestSet; cNewEventQuestSet mNewEventQuestSet; /// Äù½ºÆ® Á¤º¸ ¹®ÀÚ¿­ cUIFuncText* mpQuestText; /// Äù½ºÆ® Á¤º¸ ÀúÀå sQuestList mQuest[MAX_KEEPQUEST]; unsigned int mTotalKeepCount; /// ¿Ï·á°¡´É¸ñ·Ï °¹¼ö unsigned int mCompleteCount; /// ÁøÇàÁß ¸ñ·Ï °¹¼ö unsigned int mProgressCount; /// »èÁ¦³ª ¿Ï·á·Î ÀÎÇØ, check »óÅ Ǯ¾î¾ßÇÏ´Â Äù½ºÆ® unsigned long mCheckQuestIndex; /// ÀÓ½ÃÀúÀå¼Ò unsigned long mTempQuestIndex; unsigned long mTempNpcIndex; unsigned int mTempArrIndex; /// ÃßÀûÁßÀÎ Äù½ºÆ® unsigned long mChaseQuestIndex; /// ³×Æ®¿öÅ© °ü·Ã ¶ô bool mNetLock; int mLockTry; /// ¼±ÅÃµÈ Äù½ºÆ® Á¤º¸ ÀúÀå typedef tHashSet cSelectSet; cSelectSet mSelectSet; /// ¸Ê´ÜÀ§ Äù½ºÆ® °¹¼ö ÀúÀå ( ¸ÊÀ妽º, °¹¼ö ) typedef tHashMap cCountMap; cCountMap mCountMap; /// °¢ npc »óÅ ÀúÀå typedef tPointerHashMap cNpcStatusMap; cNpcStatusMap mNpcStatusMap; }; inline cQuestManager* cQuestManager::GetSingleton() { return mpSingleton; } #define QUESTMAN cQuestManager::GetSingleton() ////////////////////////////////////////////////////////////////// // Äù½ºÆ® ½ºÅ©¸³Æ® ÅäÅ« enum { /// Äù½ºÆ® ¼±¾ð eTOKEN_QUESTDATA = 100, eTOKEN_TITLE, eTOKEN_TYPE, eTOKEN_DESC, eTOKEN_REPEAT, eTOKEN_GROUP, eTOKEN_SHARETYPE, eTOKEN_GIVENPC, eTOKEN_TAKENPC, eTOKEN_TAKEMAP, eTOKEN_GIVEITEM, eTOKEN_TAKEITEM, eTOKEN_SELECTCOUNT, eTOKEN_LEVEL, eTOKEN_CHALLEANGE, eTOKEN_REPETITION, eTOKEN_ALL, eTOKEN_ORDER, eTOKEN_INFO, eTOKEN_DUTY, eTOKEN_LIMIT, eTOKEN_END, eTOKEN_DEFAULTREWARD, eTOKEN_SELECTREWARD, eTOKEN_FAIL, eTOKEN_TALKNPC, eTOKEN_HUNT, eTOKEN_COLLECT, eTOKEN_PVP, eTOKEN_ACTIVESKILL, eTOKEN_ENHANCE, eTOKEN_PUTCARD, eTOKEN_INFOMAP, eTOKEN_BUFF, eTOKEN_DEBUFF, eTOKEN_EQUIPITEM, eTOKEN_TIMETYPE, eTOKEN_TIME, eTOKEN_MAPCHANGEPOS, eTOKEN_MONSTER, eTOKEN_MONSTERTIME, eTOKEN_TAKEMONEY, eTOKEN_TAKEFIRE, eTOKEN_TAKEWATER, eTOKEN_TAKEWIND, eTOKEN_TAKEEARTH, eTOKEN_TUTORIALMODE, eTOKEN_EXP, eTOKEN_SXP, eTOKEN_MONEY, eTOKEN_SKILLPOINT, eTOKEN_ITEM, eTOKEN_CHANGEJOB, eTOKEN_FORCETYPE, eTOKEN_GIVETITLE, /// Æ®¸®°Å À̺¥Æ® °ü·Ã eTOKEN_TRIGGER, eTOKEN_TE_LEVEL, eTOKEN_TE_RACE, eTOKEN_TE_JOB, eTOKEN_TE_GENDER, eTOKEN_TE_HAVEITEM, eTOKEN_TE_LINKQUEST, eTOKEN_TE_DAYEVENT, eTOKEN_TE_TIMEEVENT, eTOKEN_TE_TRANSMON, eTOKEN_TE_SETTITLE, eTOKEN_TE_SJOBSKILL, eTOKEN_HUMAN, eTOKEN_ELF, eTOKEN_BEAST, // ¿äÀÏ ÁöÁ¤ eTOKEN_NONE, eTOKEN_MON, eTOKEN_TUE, eTOKEN_WED, eTOKEN_THU, eTOKEN_FRI, eTOKEN_SAT, eTOKEN_SUN, eTOKEN_TRUE, eTOKEN_FALSE, }; /// Äù½ºÆ® ½ºÅ©¸³Æ® ¾îÈÖ ºÐ¼®±â class cQuestLexer : public cLexer { public: cQuestLexer( const char* buffer, unsigned int size ); };