Quellcode durchsuchen

Show Seer Hut quest icon on right click. Fix broken tooltip.

Ivan Savenko vor 2 Jahren
Ursprung
Commit
c1c2119f3d
3 geänderte Dateien mit 36 neuen und 2 gelöschten Zeilen
  1. 29 0
      lib/mapObjects/CQuest.cpp
  2. 5 0
      lib/mapObjects/CQuest.h
  3. 2 2
      lib/rewardable/Limiter.cpp

+ 29 - 0
lib/mapObjects/CQuest.cpp

@@ -513,6 +513,35 @@ std::string CGSeerHut::getHoverText(PlayerColor player) const
 	return hoverName;
 }
 
+std::string CGSeerHut::getHoverText(const CGHeroInstance * hero) const
+{
+	return getHoverText(hero->getOwner());
+}
+
+std::string CGSeerHut::getPopupText(PlayerColor player) const
+{
+	return getHoverText(player);
+}
+
+std::string CGSeerHut::getPopupText(const CGHeroInstance * hero) const
+{
+	return getHoverText(hero->getOwner());
+}
+
+std::vector<Component> CGSeerHut::getPopupComponents(PlayerColor player) const
+{
+	std::vector<Component> result;
+	quest->mission.loadComponents(result, nullptr);
+	return result;
+}
+
+std::vector<Component> CGSeerHut::getPopupComponents(const CGHeroInstance * hero) const
+{
+	std::vector<Component> result;
+	quest->mission.loadComponents(result, hero);
+	return result;
+}
+
 void CGSeerHut::setPropertyDer(ui8 what, ui32 val)
 {
 	switch(what)

+ 5 - 0
lib/mapObjects/CQuest.h

@@ -119,6 +119,11 @@ public:
 
 	void initObj(CRandomGenerator & rand) override;
 	std::string getHoverText(PlayerColor player) const override;
+	std::string getHoverText(const CGHeroInstance * hero) const override;
+	std::string getPopupText(PlayerColor player) const override;
+	std::string getPopupText(const CGHeroInstance * hero) const override;
+	std::vector<Component> getPopupComponents(PlayerColor player) const override;
+	std::vector<Component> getPopupComponents(const CGHeroInstance * hero) const override;
 	void newTurn(CRandomGenerator & rand) const override;
 	void onHeroVisit(const CGHeroInstance * h) const override;
 	void blockingDialogAnswered(const CGHeroInstance *hero, ui32 answer) const override;

+ 2 - 2
lib/rewardable/Limiter.cpp

@@ -187,14 +187,14 @@ void Rewardable::Limiter::loadComponents(std::vector<Component> & comps,
 								 const CGHeroInstance * h) const
 {
 	if (heroExperience)
-		comps.emplace_back(ComponentType::EXPERIENCE, static_cast<si32>(h->calculateXp(heroExperience)));
+		comps.emplace_back(ComponentType::EXPERIENCE, static_cast<si32>(h ? h->calculateXp(heroExperience) : heroExperience));
 
 	if (heroLevel > 0)
 		comps.emplace_back(ComponentType::EXPERIENCE, heroLevel);
 
 	if (manaPoints || manaPercentage > 0)
 	{
-		int absoluteMana = h->manaLimit() ? (manaPercentage * h->mana / h->manaLimit() / 100) : 0;
+		int absoluteMana = (h && h->manaLimit()) ? (manaPercentage * h->mana / h->manaLimit() / 100) : 0;
 		comps.emplace_back(ComponentType::MANA, absoluteMana + manaPoints);
 	}