1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-03-21 21:17:49 +02:00

Partial handling of Seer Hut and sketch of Quest Guard.

This commit is contained in:
DjWarmonger 2010-01-30 20:53:47 +00:00
parent 6f0f6564d7
commit 8e81b35e92
4 changed files with 121 additions and 39 deletions

View File

@ -440,47 +440,56 @@ void CGeneralTextHandler::load()
loadToIt(buffo,buf,it,3); loadToIt(buffo,buf,it,3);
levels.push_back(buffo); levels.push_back(buffo);
} }
buf = bitmaph->getTextFile ("SEERHUT.TXT"); buf = bitmaph->getTextFile ("SEERHUT.TXT");
it = 0; it = 0;
for (i = 0; i < 7; ++i) //misc description loadToIt (dump, buf, it, 3);
loadToIt (dump,buf,it,3); loadToIt (dump, buf, it, 4); //dump description
tlog5 << "\t\t Drop the crap\n";
seerEmpty.resize(6); seerEmpty.resize(6);
for (i = 0; i < 6; ++i) for (i = 0; i < 5; ++i)
{ {
loadToIt(tmp, buf, it, 4); loadToIt(seerEmpty[i], buf, it, 4);
seerEmpty.push_back(tmp); trimQuotation (seerEmpty[i]);
} }
tlog5 << "\t\t Loaded empty\n"; loadToIt (seerEmpty[5], buf, it, 3);
trimQuotation (seerEmpty[5]);
int j,k; int j,k;
quests.resize(6); quests.resize(10);
for (i = 0; i < 6; ++i) for (i = 0; i < 9; ++i) //9 types of quests
{ {
quests[i].resize(5); quests[i].resize(5);
for (j = 0; j < 5; ++j) for (j = 0; j < 5; ++j)
{ {
quests[i][j].resize(6);
loadToIt (dump, buf, it, 4); //front desciption loadToIt (dump, buf, it, 4); //front desciption
for (k = 0; k < 6; ++k) quests[i][j].resize(6);
for (k = 0; k < 5; ++k)
{ {
loadToIt (quests[i][j][k], buf, it, 4); loadToIt (quests[i][j][k], buf, it, 4);
trimQuotation (quests[i][j][k]); trimQuotation (quests[i][j][k]);
} }
loadToIt (quests[i][j][5], buf, it, 3);
trimQuotation (quests[i][j][5]);
} }
} }
tlog5 << "\t\t Loaded quests\n"; quests[9].resize(1);
for (i = 0; i < 6; ++i) //gap description quests[9][0].resize(6);
loadToIt(dump,buf,it,4);
for (k = 0; k < 5; ++k) //Time limit
{
loadToIt (quests[9][0][k], buf, it, 4);
}
loadToIt (quests[9][0][k], buf, it, 3);
for (i = 0; i < 2; ++i) //gap description
loadToIt(dump,buf,it,3);
seerNames.resize(48); seerNames.resize(48);
for (i = 0; i < 14; ++i) //additional tabs for (i = 0; i < 14; ++i) //additional tabs
{ {
loadToIt(seerNames[i], buf, it, 4); loadToIt(seerNames[i], buf, it, 4);
loadToIt(dump, buf, it, 3); loadToIt(dump, buf, it, 3);
} }
tlog5 << "\t\t Loaded names1\n";
for (i = 14; i < 48; ++i) for (i = 14; i < 48; ++i)
loadToIt(seerNames[i], buf, it, 3); loadToIt(seerNames[i], buf, it, 3);
tlog5 << "\t\t Loaded names2\n";
} }

View File

@ -3188,31 +3188,96 @@ bool CQuest::checkQuest (const CGHeroInstance * h) const
void CGSeerHut::initObj() void CGSeerHut::initObj()
{ {
seerName = VLC->generaltexth->seerNames[ran()%VLC->generaltexth->seerNames.size()]; seerName = VLC->generaltexth->seerNames[ran()%VLC->generaltexth->seerNames.size()];
textOption = ran()%3;
progress = 0;
firstVisitText = VLC->generaltexth->quests[missionType][0][textOption];
nextVisitText = VLC->generaltexth->quests[missionType][1][textOption];
completedText = VLC->generaltexth->quests[missionType][2][textOption];
} }
const std::string & CGSeerHut::getHoverText() const const std::string & CGSeerHut::getHoverText() const
{ {
//return VLC->generaltexth->names[ID]; //TODO hoverName = VLC->generaltexth->allTexts[347];
return seerName; boost::algorithm::replace_first(hoverName,"%s", seerName);
return hoverName;
}
void CGSeerHut::setPropertyDer (ui8 what, ui32 val)
{
switch (what)
{
case 10:
progress = val;
break;
case 11:
missionType = CQuest::MISSION_NONE;
break;
}
} }
void CGSeerHut::onHeroVisit( const CGHeroInstance * h ) const void CGSeerHut::onHeroVisit( const CGHeroInstance * h ) const
{ {
InfoWindow iw;
iw.player = h->getOwner();
if (missionType) if (missionType)
{ {
if (!progress)
{
iw.text << firstVisitText;
cb->setObjProperty (id,10,1);
}
else
if (!checkQuest(h))
iw.text << nextVisitText;
else
{
//iw.text << completedText;
completeQuest (h);
return;
}
} }
else else
{ {
if (checkQuest(h)) iw.text << VLC->generaltexth->seerEmpty[textOption];
{ iw.text.addReplacement(seerName);
finishQuest(h);
}
else
{
}
} }
cb->showInfoDialog(&iw);
} }
void CGSeerHut::completeQuest (const CGHeroInstance * h) const
{
cb->setObjProperty (id,11,0); //no more mission avaliable
}
void CGQuestGuard::initObj()
{
progress = 0;
textOption = ran()%3 + 3; //3-5
firstVisitText = VLC->generaltexth->quests[missionType][0][textOption];
nextVisitText = VLC->generaltexth->quests[missionType][1][textOption];
completedText = VLC->generaltexth->quests[missionType][2][textOption];
}
const std::string & CGQuestGuard::getHoverText() const
{
hoverName = VLC->generaltexth->names[ID];
if (progress){}//what does it seek for?
return hoverName;
}
void CGQuestGuard::onHeroVisit( const CGHeroInstance * h ) const
{}
void CGQuestGuard::completeQuest (const CGHeroInstance * h) const
{
BlockingDialog bd (true, false);
bd.player = h->getOwner();
bd.soundID = soundBase::QUEST;
bd.text << completedText;
cb->showBlockingDialog (&bd, boost::bind (&CGQuestGuard::openGate, this, h, _1));
}
void CGQuestGuard::openGate(const CGHeroInstance *h, ui32 accept) const
{
if (accept)
cb->removeObject(id);
}
void CGWitchHut::initObj() void CGWitchHut::initObj()
{ {
ability = allowedAbilities[ran()%allowedAbilities.size()]; ability = allowedAbilities[ran()%allowedAbilities.size()];

View File

@ -76,7 +76,7 @@ public:
enum Emission {MISSION_NONE = 0, MISSION_LEVEL = 1, MISSION_PRIMARY_STAT = 2, MISSION_KILL_HERO = 3, MISSION_KILL_CREATURE = 4, 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_ART = 5, MISSION_ARMY = 6, MISSION_RESOURCES = 7, MISSION_HERO = 8, MISSION_PLAYER = 9};
ui8 missionType; ui8 missionType, progress;
si32 lastDay; //after this day (first day is 0) mission cannot be completed; if -1 - no limit si32 lastDay; //after this day (first day is 0) mission cannot be completed; if -1 - no limit
ui32 m13489val; ui32 m13489val;
@ -88,10 +88,11 @@ public:
std::string firstVisitText, nextVisitText, completedText; std::string firstVisitText, nextVisitText, completedText;
bool checkQuest (const CGHeroInstance * h) const; //determines whether the quest is complete or not bool checkQuest (const CGHeroInstance * h) const; //determines whether the quest is complete or not
virtual void completeQuest (const CGHeroInstance * h) const {};
template <typename Handler> void serialize(Handler &h, const int version) template <typename Handler> void serialize(Handler &h, const int version)
{ {
h & missionType & lastDay & m13489val & m2stats & m5arts & m6creatures & m7resources h & missionType & progress & lastDay & m13489val & m2stats & m5arts & m6creatures & m7resources
& firstVisitText & nextVisitText & completedText; & firstVisitText & nextVisitText & completedText;
} }
}; };
@ -603,13 +604,29 @@ public:
void initObj(); void initObj();
const std::string & getHoverText() const; const std::string & getHoverText() const;
void setPropertyDer (ui8 what, ui32 val);
void onHeroVisit (const CGHeroInstance * h) const; void onHeroVisit (const CGHeroInstance * h) const;
void finishQuest (const CGHeroInstance * h) const {}; void completeQuest (const CGHeroInstance * h) const;
template <typename Handler> void serialize(Handler &h, const int version) template <typename Handler> void serialize(Handler &h, const int version)
{ {
h & static_cast<CGObjectInstance&>(*this) & static_cast<CQuest&>(*this); h & static_cast<CGObjectInstance&>(*this) & static_cast<CQuest&>(*this);
h & rewardType & rID & rVal & textOption; h & rewardType & rID & rVal & textOption & seerName;
}
};
class DLL_EXPORT CGQuestGuard : public CGSeerHut
{
public:
void initObj();
const std::string & getHoverText() const;
void onHeroVisit( const CGHeroInstance * h ) const;
void completeQuest (const CGHeroInstance * h) const;
void openGate (const CGHeroInstance *h, ui32 accept) const;
template <typename Handler> void serialize(Handler &h, const int version)
{
h & static_cast<CGSeerHut&>(*this);
} }
}; };
@ -730,15 +747,6 @@ public:
} }
}; };
class DLL_EXPORT CGQuestGuard : public CGObjectInstance, public CQuest
{
public:
template <typename Handler> void serialize(Handler &h, const int version)
{
h & static_cast<CQuest&>(*this) & static_cast<CGObjectInstance&>(*this);
}
};
class DLL_EXPORT CGMine : public CArmedInstance class DLL_EXPORT CGMine : public CArmedInstance
{ {
public: public:

View File

@ -33,6 +33,7 @@ void registerTypes1(Serializer &s)
s.template registerType<CGCreature>(); s.template registerType<CGCreature>();
s.template registerType<CGSignBottle>(); s.template registerType<CGSignBottle>();
s.template registerType<CGSeerHut>(); s.template registerType<CGSeerHut>();
s.template registerType<CGQuestGuard>();
s.template registerType<CGWitchHut>(); s.template registerType<CGWitchHut>();
s.template registerType<CGScholar>(); s.template registerType<CGScholar>();
s.template registerType<CGGarrison>(); s.template registerType<CGGarrison>();
@ -40,7 +41,6 @@ void registerTypes1(Serializer &s)
s.template registerType<CGResource>(); s.template registerType<CGResource>();
s.template registerType<CGMine>(); s.template registerType<CGMine>();
s.template registerType<CGShrine>(); s.template registerType<CGShrine>();
s.template registerType<CGQuestGuard>();
s.template registerType<CGBonusingObject>(); s.template registerType<CGBonusingObject>();
s.template registerType<CGMagicSpring>(); s.template registerType<CGMagicSpring>();
s.template registerType<CGMagicWell>(); s.template registerType<CGMagicWell>();