From c041a035c868ace17aedbf6de789e8f4b1a342a2 Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Fri, 20 Jun 2025 17:23:37 +0300 Subject: [PATCH] Fix removal of towns from map via event --- lib/gameState/GameStatePackVisitor.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/gameState/GameStatePackVisitor.cpp b/lib/gameState/GameStatePackVisitor.cpp index ee71eaee5..309b15cd2 100644 --- a/lib/gameState/GameStatePackVisitor.cpp +++ b/lib/gameState/GameStatePackVisitor.cpp @@ -418,6 +418,18 @@ void GameStatePackVisitor::visitRemoveObject(RemoveObject & pack) return; } + if(obj->ID == Obj::TOWN) + { + auto * town = dynamic_cast(obj); + town->setVisitingHero(nullptr); + + if (town->getGarrisonHero()) + { + town->setGarrisonedHero(nullptr); + gs.getMap().showObject(gs.getHero(town->getGarrisonHero()->id)); + } + } + const auto * quest = dynamic_cast(obj); if (quest) { @@ -429,6 +441,7 @@ void GameStatePackVisitor::visitRemoveObject(RemoveObject & pack) } } + obj->detachFromBonusSystem(gs); gs.getMap().eraseObject(pack.objectID); gs.getMap().calculateGuardingGreaturePositions();//FIXME: excessive, update only affected tiles }