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

Fix: Captured town should not be duplicated on the UI

This commit is contained in:
Dmitry Orlov 2021-10-27 01:37:45 +03:00 committed by Andrii Danylchenko
parent e4c2f0c822
commit 7cfd1fe0ca
2 changed files with 17 additions and 5 deletions

View File

@ -1505,6 +1505,7 @@ void CPlayerInterface::objectPropertyChanged(const SetObjectProperty * sop)
towns -= obj;
adventureInt->townList.update();
adventureInt->minimap.update();
}
assert(cb->getTownsInfo().size() == towns.size());
}

View File

@ -887,12 +887,8 @@ void CGameHandler::endBattle(int3 tile, const CGHeroInstance * heroAttacker, con
if(battleResult.data->winner != BattleSide::DEFENDER && heroDefender) //remove beaten Defender
{
auto town = heroDefender->visitedTown;
RemoveObject ro(heroDefender->id);
sendAndApply(&ro);
if(town && !town->garrisonHero) // TODO: that must be called from CGHeroInstance or CGTownInstance
town->battleFinished(heroAttacker, *battleResult.get());
}
if(battleResult.data->winner == BattleSide::DEFENDER
@ -5341,7 +5337,22 @@ void CGameHandler::objectVisited(const CGObjectInstance * obj, const CGHeroInsta
auto startVisit = [&](ObjectVisitStarted & event)
{
visitQuery = std::make_shared<CObjectVisitQuery>(this, obj, h, obj->visitablePos());
auto visitedObject = obj;
if(obj->ID == Obj::HERO)
{
auto visitedHero = static_cast<const CGHeroInstance *>(obj);
const auto visitedTown = visitedHero->visitedTown;
if(visitedTown)
{
const bool isEnemy = visitedHero->getOwner() != h->getOwner();
if(isEnemy && !visitedTown->isBattleOutsideTown(visitedHero))
visitedObject = visitedTown;
}
}
visitQuery = std::make_shared<CObjectVisitQuery>(this, visitedObject, h, visitedObject->visitablePos());
queries.addQuery(visitQuery); //TODO real visit pos
HeroVisit hv;