📄 questinfomanager.h
字号:
#ifndef __QUEST_INFO_MANAGER_H__#define __QUEST_INFO_MANAGER_H__#include "Types.h"#include "Exception.h"#include "Gpackets/GCNPCResponse.h"#include <hash_map>class QuestInfo;class QuestStatus;class PlayerCreature;class NPC;class QuestInfoManager{protected: typedef hash_map<QuestID_t, QuestInfo*> QuestInfoHashMap;public: QuestInfoManager( NPC* pNPC ) { m_QuestInfos.clear(); m_pOwnerNPC = pNPC; } virtual ~QuestInfoManager() throw(Error);public: void clear() throw(Error); virtual void load( const string& name = "" ) throw(Error) = 0; void addQuestInfo(QuestInfo* pQI) throw(Error); QuestMessage canExecuteQuest( QuestID_t qID, PlayerCreature* pPC ) const throw(Error); QuestMessage startQuest( QuestID_t qID, PlayerCreature* pPC ) throw(Error); QuestStatus* makeQuestStatus( QuestID_t qID, PlayerCreature* pPC ) const throw(Error); bool isEventQuest( QuestID_t qID ) const; // OutITR篮 container<QuestID_t>::output_iterator 鸥涝捞绢具 茄促. template <class OutITR> void getEventQuestIDs( int questLevel, PlayerCreature* pPC, OutITR outItr ) const throw(Error) { __BEGIN_TRY QuestInfoHashMap::const_iterator itr = m_QuestInfos.begin(); QuestInfoHashMap::const_iterator endItr = m_QuestInfos.end(); for ( ; itr != endItr ; ++itr ) if ( itr->second->isEventQuest() && itr->second->getQuestLevel() == questLevel && canExecuteQuest( itr->first, pPC ) == START_SUCCESS ) (*outItr++) = itr->first; __END_CATCH } // OutITR篮 container<QuestID_t>::output_iterator 鸥涝捞绢具 茄促. template <class OutITR> void getPossibleQuestIDs( PlayerCreature* pPC, OutITR outItr ) const throw(Error) { __BEGIN_TRY QuestInfoHashMap::const_iterator itr = m_QuestInfos.begin(); QuestInfoHashMap::const_iterator endItr = m_QuestInfos.end(); for ( ; itr != endItr ; ++itr ) if ( canExecuteQuest( itr->first, pPC ) == START_SUCCESS ) (*outItr++) = itr->first; __END_CATCH } // *InITR 篮 QuestID_t, *OutITR篮 QuestInfo* template <class InITR, class OutITR> void getMonsterKillQuests( InITR b, InITR e, OutITR t ) { QuestInfoHashMap::const_iterator endItr = m_QuestInfos.end(); for ( InITR i = b ; i != e ; ++i ) { QuestInfoHashMap::const_iterator itr = m_QuestInfos.find(*i); if ( itr != endItr ) { QuestInfo* pQI = itr->second; if ( pQI->isMonsterKillQuest() ) (*t++) = pQI; } } }private: NPC* m_pOwnerNPC; QuestInfoHashMap m_QuestInfos;};#endif // __QUEST_INFO_MANAGER_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -