From b4e58d9f603d837960cde5d96f7ee14f93d36509 Mon Sep 17 00:00:00 2001 From: DjWarmonger Date: Thu, 31 Dec 2009 11:43:37 +0000 Subject: [PATCH] First part of Seer Hut code --- hch/CGeneralTextHandler.h | 3 ++ hch/CObjectHandler.cpp | 61 +++++++++++++++++++++++++++++++++++++++ hch/CObjectHandler.h | 2 ++ 3 files changed, 66 insertions(+) diff --git a/hch/CGeneralTextHandler.h b/hch/CGeneralTextHandler.h index ab754d455..0e4d6da62 100644 --- a/hch/CGeneralTextHandler.h +++ b/hch/CGeneralTextHandler.h @@ -60,6 +60,9 @@ public: std::vector terrainNames; std::vector randsign; std::vector > mines; //first - name; second - event description + std::vector > > quests; //[quest][type][index] + //type: quest, progress, complete, rollover, log OR time limit //index: 0-2 seer hut, 3-5 border guard + std::vector seerNames; //sec skills std::vector skillName; diff --git a/hch/CObjectHandler.cpp b/hch/CObjectHandler.cpp index 7df6b8111..d2115fb5f 100644 --- a/hch/CObjectHandler.cpp +++ b/hch/CObjectHandler.cpp @@ -3073,6 +3073,67 @@ void CGPickable::chosen( int which, int heroID ) const cb->removeObject(id); } +bool CQuest::checkQuest (const CGHeroInstance * h) const +{ + switch (missionType) + { + case MISSION_NONE: + return true; + break; + case MISSION_LEVEL: + if (m13489val <= h->level) + return true; + return false; + break; + case MISSION_PRIMARY_STAT: + for (int i = 0; i < 4; ++i) + { + if (m2stats[i] < h->primSkills[i]) + return false; + } + return true; + break; + case MISSION_KILL_HERO: + case MISSION_KILL_CREATURE: + if (h->cb->getObj (m13489val)) + return false; //if the pointer is not NULL + return true; + break; + case MISSION_ART: + for (int i = 0; i < m5arts.size(); ++i) + { + if (vstd::contains(h->artifacts, m5arts[i])) + continue; + if (vstd::contains(h->artifWorn, m5arts[i])) + continue; + return false; //if the artifact was not found + } + return true; + break; + case MISSION_ARMY: + case MISSION_RESOURCES: + for (int i = 0; i < 7; ++i) //including Mithril ? + { //Quest has no direct access to callback + if (h->cb->getResource (h->tempOwner, i) < m7resources[i]) + return false; + } + return true; + break; + case MISSION_HERO: + if (m13489val == h->ID) + return true; + return false; + break; + case MISSION_PLAYER: + if (m13489val == h->getOwner()) + return true; + return false; + break; + default: + return false; + } +} + const std::string & CGSeerHut::getHoverText() const { return VLC->generaltexth->names[ID]; //TODO diff --git a/hch/CObjectHandler.h b/hch/CObjectHandler.h index b603277f4..07850cdbd 100644 --- a/hch/CObjectHandler.h +++ b/hch/CObjectHandler.h @@ -87,6 +87,8 @@ public: std::string firstVisitText, nextVisitText, completedText; + bool checkQuest (const CGHeroInstance * h) const; //determines whether the quest ic complete or not + template void serialize(Handler &h, const int version) { h & missionType & lastDay & m13489val & m2stats & m5arts & m6creatures & m7resources