diff --git a/hch/CObjectHandler.cpp b/hch/CObjectHandler.cpp index 901c00c55..781ccdbdf 100644 --- a/hch/CObjectHandler.cpp +++ b/hch/CObjectHandler.cpp @@ -1408,6 +1408,9 @@ void CGTownInstance::setPropertyDer(ui8 what, ui32 val) case 11: //add visitor of town building bonusingBuildings[val]->setProperty (4, visitingHero->id); break; + case 12: + bonusingBuildings[val]->setProperty (12, 0); + break; } } int CGTownInstance::fortLevel() const //0 - none, 1 - fort, 2 - citadel, 3 - castle @@ -1594,7 +1597,7 @@ void CGTownInstance::initObj() case 2: case 3: case 5: case 6: bonusingBuildings.push_back (new CTownBonus(23, this)); if (subID == 5) - bonusingBuildings.push_back (new COPWBonus(18, this)); //Vortex + bonusingBuildings.push_back (new COPWBonus(21, this)); //Vortex break; case 7: bonusingBuildings.push_back (new CTownBonus(17, this)); @@ -1604,6 +1607,15 @@ void CGTownInstance::initObj() removeCapitols (getOwner(), false); // destroy other capitols } +void CGTownInstance::newTurn() const +{ + if (cb->getDate(0)%7 == 1) //reset on new week + { + for (std::vector::const_iterator i = bonusingBuildings.begin(); i!=bonusingBuildings.end(); i++) + cb->setObjProperty (id, 12, 0); //reset visitors for Mana Vortex + } + +} int3 CGTownInstance::getSightCenter() const { return pos - int3(2,0,0); @@ -1987,7 +1999,7 @@ void COPWBonus::setProperty(ui8 what, ui32 val) case 4: visitors.insert(val); break; - case 11: + case 12: visitors.clear(); break; } @@ -1999,25 +2011,29 @@ void COPWBonus::onHeroVisit (const CGHeroInstance * h) const { InfoWindow iw; iw.player = h->tempOwner; - switch (ID) + switch (town->subID) { - case 18: //Mana Vortex - if (visitors.size()) - { - cb->setObjProperty (town->id, 11, id); //add to visitors - } - break; - case 21: //Stables + case 0: //Stables if (!h->getBonus(HeroBonus::OBJECT, 94)) //no advMap Stables { GiveBonus gb; gb.bonus = HeroBonus(HeroBonus::ONE_WEEK, HeroBonus::LAND_MOVEMENT, HeroBonus::OBJECT, 600, 94, VLC->generaltexth->arraytxt[100]); gb.hid = heroID; cb->giveHeroBonus(&gb); - iw.text << std::pair(11, 137); + iw.text << VLC->generaltexth->allTexts[580]; cb->showInfoDialog(&iw); } break; + case 5: //Mana Vortex + if (visitors.find(heroID) == visitors.end() && h->mana <= h->manaLimit()) + { + cb->setManaPoints (heroID, 2 * h->manaLimit()); + cb->setObjProperty (id, 5, true); + iw.text << VLC->generaltexth->allTexts[579]; + cb->showInfoDialog(&iw); + cb->setObjProperty (town->id, 11, id); //add to visitors + } + break; } } } @@ -2038,7 +2054,7 @@ void CTownBonus::onHeroVisit (const CGHeroInstance * h) const if ((town->builtBuildings.find(ID) != town->builtBuildings.end()) && (visitors.find(heroID) == visitors.end())) { InfoWindow iw; - int what, val; + int what, val, mid; switch (ID) { case 23: @@ -2047,21 +2063,25 @@ void CTownBonus::onHeroVisit (const CGHeroInstance * h) const case 2: //wall what = 3; val = 1; + mid = 581; iw.components.push_back (Component(Component::PRIM_SKILL, 3, 1, 0)); break; case 3: //order of fire what = 2; val = 1; + mid = 582; iw.components.push_back (Component(Component::PRIM_SKILL, 2, 1, 0)); break; case 6://hall of valhalla what = 0; val = 1; + mid = 584; iw.components.push_back (Component(Component::PRIM_SKILL, 0, 1, 0)); break; case 5://academy of battle scholars what = 4; val = 1000; + mid = 583; iw.components.push_back (Component(Component::EXPERIENCE, 0, 1000, 0)); break; } @@ -2072,13 +2092,14 @@ void CTownBonus::onHeroVisit (const CGHeroInstance * h) const case 7: //cage of warlords what = 1; val = 1; + mid = 585; iw.components.push_back (Component(Component::PRIM_SKILL, 1, 1, 0)); break; } break; } iw.player = cb->getOwner(heroID); - iw.text << VLC->generaltexth->buildings[town->subID][ID].second; + iw.text << VLC->generaltexth->allTexts[mid]; cb->showInfoDialog(&iw); cb->changePrimSkill (heroID, what, val); cb->setObjProperty (town->id, 11, id); //add to visitors diff --git a/hch/CObjectHandler.h b/hch/CObjectHandler.h index 0f065b633..b903b3108 100644 --- a/hch/CObjectHandler.h +++ b/hch/CObjectHandler.h @@ -444,6 +444,7 @@ public: int getSightRadious() const; //returns sight distance void getOutOffsets(std::vector &offsets) const; //offsets to obj pos when we boat can be placed void setPropertyDer(ui8 what, ui32 val); + void newTurn() const; //////////////////////////////////////////////////////////////////////////