|
|
@@ -19,8 +19,10 @@ VCMI_LIB_NAMESPACE_BEGIN
|
|
|
|
|
|
class CGCreature;
|
|
|
|
|
|
-class DLL_LINKAGE CQuest
|
|
|
+class DLL_LINKAGE CQuest final
|
|
|
{
|
|
|
+ mutable std::unordered_map<ui16, unsigned> artifactsRequirements; // artifact ID -> required count
|
|
|
+
|
|
|
public:
|
|
|
enum Emission {MISSION_NONE = 0, MISSION_LEVEL = 1, MISSION_PRIMARY_STAT = 2, MISSION_KILL_HERO = 3, MISSION_KILL_CREATURE = 4,
|
|
|
MISSION_ART = 5, MISSION_ARMY = 6, MISSION_RESOURCES = 7, MISSION_HERO = 8, MISSION_PLAYER = 9, MISSION_KEYMASTER = 10};
|
|
|
@@ -34,7 +36,7 @@ public:
|
|
|
|
|
|
ui32 m13489val;
|
|
|
std::vector<ui32> m2stats;
|
|
|
- std::vector<ui16> m5arts; //artifacts id
|
|
|
+ std::vector<ui16> m5arts; // artifact IDs. Add IDs through addArtifactID(), not directly to the field.
|
|
|
std::vector<CStackBasicDescriptor> m6creatures; //pair[cre id, cre count], CreatureSet info irrelevant
|
|
|
std::vector<ui32> m7resources; //TODO: use resourceset?
|
|
|
|
|
|
@@ -52,7 +54,6 @@ public:
|
|
|
bool isCustomFirst, isCustomNext, isCustomComplete;
|
|
|
|
|
|
CQuest();
|
|
|
- virtual ~CQuest(){};
|
|
|
|
|
|
static bool checkMissionArmy(const CQuest * q, const CCreatureSet * army);
|
|
|
virtual bool checkQuest (const CGHeroInstance * h) const; //determines whether the quest is complete or not
|
|
|
@@ -61,6 +62,7 @@ public:
|
|
|
virtual void getRolloverText (MetaString &text, bool onHover) const; //hover or quest log entry
|
|
|
virtual void completeQuest (const CGHeroInstance * h) const {};
|
|
|
virtual void addReplacements(MetaString &out, const std::string &base) const;
|
|
|
+ void addArtifactID(ui16 id);
|
|
|
|
|
|
bool operator== (const CQuest & quest) const
|
|
|
{
|
|
|
@@ -161,7 +163,7 @@ protected:
|
|
|
class DLL_LINKAGE CGQuestGuard : public CGSeerHut
|
|
|
{
|
|
|
public:
|
|
|
- CGQuestGuard() : CGSeerHut(){};
|
|
|
+ CGQuestGuard() = default;
|
|
|
void init(CRandomGenerator & rand) override;
|
|
|
void completeQuest (const CGHeroInstance * h) const override;
|
|
|
|
|
|
@@ -209,7 +211,7 @@ public:
|
|
|
class DLL_LINKAGE CGBorderGuard : public CGKeys, public IQuestObject
|
|
|
{
|
|
|
public:
|
|
|
- CGBorderGuard() : IQuestObject(){};
|
|
|
+ CGBorderGuard() = default;
|
|
|
void initObj(CRandomGenerator & rand) override;
|
|
|
void onHeroVisit(const CGHeroInstance * h) const override;
|
|
|
void blockingDialogAnswered(const CGHeroInstance *hero, ui32 answer) const override;
|
|
|
@@ -231,7 +233,7 @@ public:
|
|
|
class DLL_LINKAGE CGBorderGate : public CGBorderGuard
|
|
|
{
|
|
|
public:
|
|
|
- CGBorderGate() : CGBorderGuard(){};
|
|
|
+ CGBorderGate() = default;
|
|
|
void onHeroVisit(const CGHeroInstance * h) const override;
|
|
|
|
|
|
bool passableFor(PlayerColor color) const override;
|