Files
Leviathan/Client/Game/game/GameSystem/SQuestMark.h
T
2026-06-01 12:46:52 +02:00

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