فهرست منبع

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
 }