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:
parent
6f0f6564d7
commit
8e81b35e92
@ -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";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -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()];
|
||||||
|
@ -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:
|
||||||
|
@ -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>();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user