浏览代码

Show generic dialog if building was already visited

Ivan Savenko 1 年之前
父节点
当前提交
8b2821456a

+ 5 - 1
client/windows/CCastleInterface.cpp

@@ -54,6 +54,7 @@
 #include "../../lib/entities/building/CBuilding.h"
 #include "../../lib/mapObjects/CGHeroInstance.h"
 #include "../../lib/mapObjects/CGTownInstance.h"
+#include "../../lib/mapObjects/TownBuildingInstance.h"
 
 
 static bool useCompactCreatureBox()
@@ -855,7 +856,10 @@ void CCastleBuildings::enterRewardable(BuildingID building)
 	}
 	else
 	{
-		LOCPLINT->cb->visitTownBuilding(town, building);
+		if (town->rewardableBuildings.at(building)->wasVisited(town->visitingHero))
+			enterBuilding(building);
+		else
+			LOCPLINT->cb->visitTownBuilding(town, building);
 	}
 }
 

+ 5 - 0
lib/mapObjects/TownBuildingInstance.cpp

@@ -165,6 +165,11 @@ void TownRewardableBuildingInstance::grantReward(ui32 rewardID, const CGHeroInst
 	}
 }
 
+bool TownRewardableBuildingInstance::wasVisited(const CGHeroInstance * contextHero) const
+{
+	return wasVisitedBefore(contextHero);
+}
+
 bool TownRewardableBuildingInstance::wasVisitedBefore(const CGHeroInstance * contextHero) const
 {
 	switch (configuration.visitMode)

+ 1 - 0
lib/mapObjects/TownBuildingInstance.h

@@ -70,6 +70,7 @@ class DLL_LINKAGE TownRewardableBuildingInstance : public TownBuildingInstance,
 public:
 	void setProperty(ObjProperty what, ObjPropertyID identifier) override;
 	void onHeroVisit(const CGHeroInstance * h) const override;
+	bool wasVisited(const CGHeroInstance * contextHero) const override;
 	
 	void newTurn(vstd::RNG & rand) const override;