diff --git a/lib/mapObjects/CGTownBuilding.cpp b/lib/mapObjects/CGTownBuilding.cpp index 8abf8999a..defefcbf8 100644 --- a/lib/mapObjects/CGTownBuilding.cpp +++ b/lib/mapObjects/CGTownBuilding.cpp @@ -322,7 +322,6 @@ void CTownRewardableBuilding::newTurn(CRandomGenerator & rand) const } if(configuration.resetParameters.visitors) { - cb->setObjProperty(town->id, ObjProperty::REWARD_CLEARED, indexOnTV); cb->setObjProperty(town->id, ObjProperty::STRUCTURE_CLEAR_VISITORS, indexOnTV); } } @@ -344,9 +343,6 @@ void CTownRewardableBuilding::setProperty(ui8 what, ui32 val) case ObjProperty::REWARD_SELECT: selectedReward = val; break; - case ObjProperty::REWARD_CLEARED: - onceVisitableObjectCleared = val; - break; } } @@ -359,12 +355,6 @@ void CTownRewardableBuilding::blockingDialogAnswered(const CGHeroInstance *hero, { if(visitors.find(hero->id) != visitors.end()) return; // query not for this building - - if(answer == 0) - { - cb->setObjProperty(town->id, ObjProperty::STRUCTURE_CLEAR_VISITORS, indexOnTV); - return; // player refused - } if(answer > 0 && answer-1 < configuration.info.size()) { @@ -397,7 +387,7 @@ bool CTownRewardableBuilding::wasVisitedBefore(const CGHeroInstance * contextHer case Rewardable::VISIT_UNLIMITED: return false; case Rewardable::VISIT_ONCE: - return onceVisitableObjectCleared; + return !visitors.empty(); case Rewardable::VISIT_PLAYER: return false; //not supported case Rewardable::VISIT_BONUS: diff --git a/lib/mapObjects/CGTownBuilding.h b/lib/mapObjects/CGTownBuilding.h index 94f3c81e0..998a52794 100644 --- a/lib/mapObjects/CGTownBuilding.h +++ b/lib/mapObjects/CGTownBuilding.h @@ -109,9 +109,7 @@ class DLL_LINKAGE CTownRewardableBuilding : public CGTownBuilding, public Reward { /// reward selected by player, no serialize ui16 selectedReward = 0; - - bool onceVisitableObjectCleared = false; - + std::set visitors; bool wasVisitedBefore(const CGHeroInstance * contextHero) const; @@ -139,7 +137,6 @@ public: { h & static_cast(*this); h & static_cast(*this); - h & onceVisitableObjectCleared; h & visitors; } }; diff --git a/lib/mapObjects/CGTownInstance.cpp b/lib/mapObjects/CGTownInstance.cpp index cd23d2db7..0e1528075 100644 --- a/lib/mapObjects/CGTownInstance.cpp +++ b/lib/mapObjects/CGTownInstance.cpp @@ -71,9 +71,6 @@ void CGTownInstance::setPropertyDer(ui8 what, ui32 val) case ObjProperty::REWARD_RANDOMIZE: bonusingBuildings[val]->setProperty(ObjProperty::REWARD_RANDOMIZE, 0); break; - case ObjProperty::REWARD_CLEARED: - bonusingBuildings[val]->setProperty(ObjProperty::REWARD_CLEARED, false); - break; } } CGTownInstance::EFortLevel CGTownInstance::fortLevel() const //0 - none, 1 - fort, 2 - citadel, 3 - castle @@ -506,15 +503,15 @@ void CGTownInstance::newTurn(CRandomGenerator & rand) const for(const auto * manaVortex : getBonusingBuildings(BuildingSubID::MANA_VORTEX)) cb->setObjProperty(id, ObjProperty::STRUCTURE_CLEAR_VISITORS, manaVortex->indexOnTV); //reset visitors for Mana Vortex - + //get Mana Vortex or Stables bonuses //same code is in the CGameHandler::buildStructure method if (visitingHero != nullptr) cb->visitCastleObjects(this, visitingHero); - + if (garrisonHero != nullptr) cb->visitCastleObjects(this, garrisonHero); - + if (tempOwner == PlayerColor::NEUTRAL) //garrison growth for neutral towns { std::vector nativeCrits; //slots @@ -550,7 +547,7 @@ void CGTownInstance::newTurn(CRandomGenerator & rand) const TQuantity count = creatureGrowth(i); if (!count) // no dwelling - count = VLC->creh->objects[c]->getGrowth(); + count = VLC->creatures()->getByIndex(c)->getGrowth(); {//no lower tiers or above current month