#pragma once #include "DNEventSystem.h" /*--------------------------------------------------------------------------------------- CDNUserQuest - À¯Àú ij¸¯ÅÍ Äù½ºÆ®ÂÊ ´ã´çÇϴ Ŭ·¡½º - VillageServer, GameServer°¡ °øÅëÀ¸·Î °¡Áö°í Àִ Ŭ·¡½º À̹ǷΠItem°ú ¸¶Âù°¡Áö·Î if defined ¶±Ä¥(?)ÇÔ ¤»¤»¤» ---------------------------------------------------------------------------------------*/ class CDNUserSession; class CDNUserSendManager; class CDNQuest; class CDNUserQuest:public TBoostMemoryPool { private: CDNUserSession* m_pSession; TQuestGroup* m_pQuest; TQuestReward m_QuestReward; int m_RewardQuestID; int m_RewardCheck; // Äù½ºÆ® º¸»ó Áö±Þ ¼ø¼­°¡ »ç¿ëÀÚ°¡ ÁöÁ¤ÇÑ ¹øÈ£¿Í ¸Â´ÂÁö üũÇÏ¸ç ´ë»óÀº Äù½ºÆ® ¸Þ¸ðÀÇ Æ¯Á¤ À妽º(QUESTMEMOREWARDCHECK) CSSelectQuestReward m_PacketReward; std::set m_CompletedPeriodQuests; #if defined(PRE_ADD_REMOTE_QUEST) std::vector m_nVecRemoteQuestGainList[EventSystem::EventTypeEnum_Amount]; std::vector m_nVecRemoteQuestAcceptWaitList; //ÀÏ´Ü ÄùID ·Î ³Ö¾îº¸ÀÚ #endif public: CDNUserQuest(CDNUserSession *pSession); virtual ~CDNUserQuest(); UINT GetUserObjID(); bool IsClearQuest(int nQuestID); void SetCompleteQuestFlag(int nQuestID, bool bFlag); int AddHuntingQuest(int nQuestID, int nQuestStep, int nJournalStep, int nCountingSlot, int nCountingType, int nCountingIndex, int nTargetCnt); int AddQuest(int nQuestID, bool bSendErrorMsg = false); void OnCancelQuest(int nQuestID); int CompleteQuest(int nQuestID, bool bDelPlayList, bool bRepeat); int MarkingCompleteQuest(int nQuestID); int ForceCompleteQuest(int nQuestID, int nQuestCode, int bDoMark, int bDoDelete, int bDoRepeat); int RewardAfterCompletingQuest(int nQuestID, bool bDelPlayList); void ResetRewardFlag(); char* GetQuestCompleteBinary() { return(m_pQuest->CompleteQuest); } int GetPlayingQuestCount(); short HasQuest(int nQuestID); int SetQuestStepAndJournalStep(int nQuestID, short nQuestStep, int nJournalStep, bool bFromScript); int SetQuestStep(int nQuestID, short nQuestStep); short GetQuestStep(int nQuestID); int SetJournalStep(int nQuestID, int nJournalStep); int GetJournalStep(int nQuestID); int SetQuestMemo(int nQuestID, char nMemoIndex, TP_QUESTMEMO nVal); TP_QUESTMEMO GetQuestMemo(int nQuestID, char nMemoIndex); int IncQuestMemo(int nQuestID, char nMemoIndex); int DecQuestMemo(int nQuestID, char nMemoIndex); int SetCountingInfo(int nQuestID, int nCountingSlot, int nCountingType, int nCountingIndex, int nTargetCnt); int ClearCountingInfo(int nQuestID); int IsAllCompleteCounting(int nQuestID); #if defined(PRE_FIX_QUEST_ITEM_ONCOUNT) void OnCounting(int nCountingType, int nCountItemID, int nItemCount=0); #else void OnCounting(int nCountingType, int nCountItemID); #endif//#if defined(PRE_FIX_QUEST_ITEM_ONCOUNT) void OnKillMonster(int nMonsterID); void OnDieMonster(int nMonsterID); void OnAddItem(int nItemID, short wCount); void OnAddSymbolItem(int nItemID); void OnAddQuestItem(int nItemID); void OnStageClear(int nMapIndex); void OnAddItemEx(int nItemID, short wCount); // »óŰ¡ º¯°æµÈ Äù½ºÆ®Á¤º¸¸¦ Ŭ¶óÀÌ¾ðÆ®¿¡°Ô °»½Å ½ÃÄÑÁØ´Ù. int SendQuestRefresh(int nRefreshType, int nQuestID); // Äù½ºÆ® ¾Ë¸®¹Ì ¸®ÇÁ·¹½¬ void OnSetActiveQuest(int nQuestID); // Äù½ºÆ® º¸»óÀ» ¼¼ÆÃÇÑ´Ù. void SetReward(TQuestReward& Reward, int nQuestID, int nRewardCheck); // º¸»óÆÐŶÀ» Àӽ÷ΠÀúÀåÇÑ´Ù. void SavePacketReward(CSSelectQuestReward* pPacket); // º¸»óµ¥ÀÌÅ͸¦ Å×ÀÌºí¿¡¼­ »Ì¾Æ ÀÓ½ÃÀúÀåÇÑ´Ù. bool PreparePacketReward(int nQuestID); bool IsRewardItem(); bool IsRewardCashItem(); void OnSelectRewardEx(bool bSelectedArray[], bool bSelectedCashArray[]); void OnPeriodEvent(int nQuestID, bool bFlag); // For CheatCommand void SendAllQuestRefresh(); void ClearAllQuestInfo(); void DumpQuest(std::vector& output); int FindPlayingQuest(int nQuestID); void AddCompletedPeriodQuest(int questID); void RemoveCompletedPeriodQuest(int questID); bool IsCompletedPeriodQuest(int questID) const; #if defined(PRE_ADD_REMOTE_QUEST) void RefreshRemoteQuest(int nAcceptWaitRemoteQuestCount, int *AcceptWaitRemoteQuestList); void GetAcceptWaitRemoteQuest(int *nAcceptWaitRemoteQuestCount, int *AcceptWaitRemoteQuestList); bool OnEvent( EventSystem::EventTypeEnum Event ); void CheckRemoteQuestGain(EventSystem::EventTypeEnum Event); bool CheckRemotePreQuestCondition( TRemoteQuestData *pData ); void CheckAcceptWaitRemoteQuestList(); bool RemoveRemoteQuestFromAcceptWaitList(int nQuestID); bool AddRemoteQuestToAcceptWaitList(int nQuestID); void AcceptRemoteQuest(int nQuestID); void CancelRemoteQuest(int nQuestID); void CompleteRemoteQuest(int nQuestID, CSSelectQuestReward* pPacket); int FindRecompenseQuestIndex(int nQuestID); bool SetQuestToRecompenseState(int nQuestID); #endif //#if defined(PRE_ADD_REMOTE_QUEST) private: int _RemoveQuest(int nQuestID, bool bComplete, bool bRepeat); // ÀÌ¹Ì Ç÷¹ÀÌ ÁßÀÎ Äù½ºÆ®ÀÎÁö ã´Â´Ù. ÀÖÀ¸¸é ±× À妽º¸¦ ¸®ÅÏÇÑ´Ù. ¾øÀ¸¸é -1 int _FindPlayingQuest(int nQuestID); // Ç÷¹ÀÌ Äù½ºÆ® ½½·ÔÀÇ ºó°÷À» ã´Â´Ù. ¾øÀ¸¸é -1 int _FindEmptyPlayQuestIndex(); // ÁøÇàÁßÀÎ ¼­ºê Äù½ºÆ®Áß¿¡ °¡Àå ³ôÀº Äù½ºÆ® ½ºÅÇÀ» ã´Â´Ù. return QuestID; TQuest _FindHighestQStepSubQuest(); #if defined(PRE_ADD_REMOTE_QUEST) void _ResetRemoteQuest(); void _RefreshRemoteQuestList(); // ¿Ï·á ÈÄ º¸»ó´ë±âÁßÀÎ ¿ø°ÝÄù½ºÆ®ÀÎÁö ã´Â´Ù. ÀÖÀ¸¸é ±× À妽º¸¦ ¸®ÅÏÇÑ´Ù. ¾øÀ¸¸é -1 int _FindRecompenseQuestIndex(int nQuestID); // ¼ö¶ô ´ë±âÁßÀÎ ¿ø°ÝÄù½ºÆ®ÀÎÁö ã´Â´Ù. ÀÖÀ¸¸é ±× À妽º¸¦ ¸®ÅÏÇÑ´Ù. ¾øÀ¸¸é -1 int _FindAcceptWaitQuest(int nQuestID); // ȹµæ °¡´ÉÇÑ ¿ø°ÝÄù ÀÎÁö °ËÁõ bool _CheckRemoteQuestGainValidation(int nQuestID, CDNQuest* pQuest); #endif int _AddItemByQuestReward( const TQuestReward::_ITEMSET* pItemSet ); };