Преглед на файлове

Fix removal of towns from map via event

Ivan Savenko преди 4 месеца
родител
ревизия
c041a035c8
променени са 1 файла, в които са добавени 13 реда и са изтрити 0 реда
  1. 13 0
      lib/gameState/GameStatePackVisitor.cpp

+ 13 - 0
lib/gameState/GameStatePackVisitor.cpp

@@ -418,6 +418,18 @@ void GameStatePackVisitor::visitRemoveObject(RemoveObject & pack)
 		return;
 	}
 
+	if(obj->ID == Obj::TOWN)
+	{
+		auto * town = dynamic_cast<CGTownInstance *>(obj);
+		town->setVisitingHero(nullptr);
+
+		if (town->getGarrisonHero())
+		{
+			town->setGarrisonedHero(nullptr);
+			gs.getMap().showObject(gs.getHero(town->getGarrisonHero()->id));
+		}
+	}
+
 	const auto * quest = dynamic_cast<const IQuestObject *>(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
 }