128 lines
3.3 KiB
C++
128 lines
3.3 KiB
C++
|
|
#ifndef _SQuestMark_h_
|
|
#define _SQuestMark_h_
|
|
|
|
#include <map>
|
|
//#include <vector>
|
|
#include <algorithm>
|
|
#include "QuestBase.h"
|
|
|
|
class SQuestMgr;
|
|
|
|
/*
|
|
*/
|
|
struct sQuestMark
|
|
{
|
|
sQuestMark(SQuestMgr* questMgr) : m_questMgr(questMgr) {}
|
|
virtual ~sQuestMark() { m_list.clear(); }
|
|
|
|
bool existAnotherQuest(int id);
|
|
|
|
virtual void insertFromId(int id, QuestBase::QuestCode code) {};
|
|
virtual void insertFromCode(QuestBase* quest) {}
|
|
virtual void removeFromCode(QuestBase* quest) {}
|
|
virtual void removeFromId(int id, QuestBase::QuestCode code) {}
|
|
virtual bool is(int id, bool checkQuestInProgress = false);
|
|
|
|
void clear()
|
|
{
|
|
m_list.clear();
|
|
}
|
|
|
|
protected:
|
|
virtual bool existAnotherQuest(int id, bool isAuto) { return false; }
|
|
bool checkOverCount(int& count);
|
|
void addList(int id, QuestBase::QuestCode code);
|
|
void delList(int id, QuestBase::QuestCode code);
|
|
|
|
struct sQuestCode
|
|
{
|
|
sQuestCode() {}
|
|
sQuestCode(int code) { add(code); }
|
|
~sQuestCode() { m_list.clear(); }
|
|
void add(QuestBase::QuestCode code)
|
|
{
|
|
std::vector<QuestBase::QuestCode>::iterator it = std::find(m_list.begin(), m_list.end(), code);
|
|
if (it != m_list.end())
|
|
return ;
|
|
m_list.push_back(code);
|
|
}
|
|
void del(QuestBase::QuestCode code)
|
|
{
|
|
std::vector<QuestBase::QuestCode>::iterator it = std::find(m_list.begin(), m_list.end(), code);
|
|
if (it == m_list.end())
|
|
return ;
|
|
m_list.erase(it);
|
|
}
|
|
bool empty() const { return m_list.empty(); }
|
|
std::vector<QuestBase::QuestCode> m_list;
|
|
};
|
|
typedef std::map<int, sQuestCode> map_data;
|
|
typedef map_data::iterator it_data;
|
|
|
|
private:
|
|
/// std::map<값(몹 id, item id 등등), 퀘스트 코드> m_list, 같은 값에 퀘스트 코드가 여러개 들어 올 수 있기 때문에 sQuestCode를 사용함
|
|
std::map<int, sQuestCode> m_list;
|
|
protected:
|
|
SQuestMgr* m_questMgr;
|
|
};
|
|
/*
|
|
*/
|
|
struct sQuestMarkProp : public sQuestMark
|
|
{
|
|
sQuestMarkProp(SQuestMgr* questMgr) : sQuestMark(questMgr) {}
|
|
|
|
virtual void insertFromId(int id, QuestBase::QuestCode code);
|
|
virtual void insertFromCode(QuestBase* quest);
|
|
virtual void removeFromCode(QuestBase* quest);
|
|
virtual void removeFromId(int id, QuestBase::QuestCode code);
|
|
|
|
protected:
|
|
virtual bool existAnotherQuest(int id, bool isAuto);
|
|
};
|
|
/*
|
|
*/
|
|
struct sQuestMarkMob : public sQuestMark
|
|
{
|
|
sQuestMarkMob(SQuestMgr* questMgr) : sQuestMark(questMgr) {}
|
|
|
|
virtual void insertFromId(int id, QuestBase::QuestCode code);
|
|
virtual void insertFromCode(QuestBase* quest);
|
|
virtual void removeFromCode(QuestBase* quest);
|
|
virtual void removeFromId(int id, QuestBase::QuestCode code);
|
|
|
|
protected:
|
|
virtual bool existAnotherQuest(int id, bool isAuto);
|
|
};
|
|
/*
|
|
*/
|
|
struct sQuestMarkNpc : public sQuestMark
|
|
{
|
|
sQuestMarkNpc(SQuestMgr* questMgr) : sQuestMark(questMgr) {}
|
|
|
|
virtual void insertFromId(int id, QuestBase::QuestCode code);
|
|
virtual void insertFromCode(QuestBase* quest);
|
|
virtual void removeFromCode(QuestBase* quest);
|
|
virtual void removeFromId(int id, QuestBase::QuestCode code);
|
|
|
|
protected:
|
|
virtual bool existAnotherQuest(int id, bool isAuto);
|
|
};
|
|
/*
|
|
*/
|
|
struct sQuestMarkDropItem : public sQuestMark
|
|
{
|
|
sQuestMarkDropItem(SQuestMgr* questMgr) : sQuestMark(questMgr) {}
|
|
|
|
virtual void insertFromCode(QuestBase* quest);
|
|
virtual void removeFromCode(QuestBase* quest);
|
|
|
|
protected:
|
|
void removeFromCodeFinding(QuestBase* quest, int dropItemId, bool isAuto);
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#endif |