Răsfoiți Sursa

suggested changes

SoundSSGood 1 an în urmă
părinte
comite
39a0e56169

+ 4 - 3
client/widgets/markets/CAltarArtifacts.cpp

@@ -185,11 +185,12 @@ void CAltarArtifacts::putBackArtifacts()
 CMarketBase::MarketShowcasesParams CAltarArtifacts::getShowcasesParams() const
 {
 	if(const auto art = hero->getArt(ArtifactPosition::TRANSITION_POS))
-		return std::make_tuple(
+		return MarketShowcasesParams
+		{
 			std::nullopt,
 			ShowcaseParams {std::to_string(offerQty), CGI->artifacts()->getByIndex(art->getTypeId())->getIconIndex()}
-	);
-	return std::make_tuple(std::nullopt, std::nullopt);
+		};
+	return MarketShowcasesParams {std::nullopt, std::nullopt};
 }
 
 void CAltarArtifacts::onSlotClickPressed(const std::shared_ptr<CTradeableItem> & altarSlot, std::shared_ptr<TradePanelBase> & curPanel)

+ 6 - 5
client/widgets/markets/CAltarCreatures.cpp

@@ -23,6 +23,7 @@
 #include "../../../lib/CGeneralTextHandler.h"
 #include "../../../lib/mapObjects/CGHeroInstance.h"
 #include "../../../lib/mapObjects/CGMarket.h"
+#include "../../../lib/MetaString.h"
 
 CAltarCreatures::CAltarCreatures(const IMarket * market, const CGHeroInstance * hero)
 	: CMarketBase(market, hero)
@@ -176,8 +177,8 @@ CMarketBase::MarketShowcasesParams CAltarCreatures::getShowcasesParams() const
 	if(bidTradePanel->isHighlighted())
 		bidSelected = ShowcaseParams {std::to_string(offerSlider->getValue()), CGI->creatures()->getByIndex(bidTradePanel->getSelectedItemId())->getIconIndex()};
 	if(offerTradePanel->isHighlighted() && offerSlider->getValue() > 0)
-		offerSelected = ShowcaseParams { offerTradePanel->highlightedSlot->subtitle->getText(), CGI->creatures()->getByIndex(offerTradePanel->getSelectedItemId())->getIconIndex()};
-	return std::make_tuple(bidSelected, offerSelected);
+		offerSelected = ShowcaseParams {offerTradePanel->highlightedSlot->subtitle->getText(), CGI->creatures()->getByIndex(offerTradePanel->getSelectedItemId())->getIconIndex()};
+	return MarketShowcasesParams {bidSelected, offerSelected};
 }
 
 void CAltarCreatures::sacrificeAll()
@@ -256,9 +257,9 @@ std::string CAltarCreatures::getTraderText()
 {
 	if(bidTradePanel->isHighlighted() && offerTradePanel->isHighlighted())
 	{
-		return boost::str(boost::format(
-			CGI->generaltexth->allTexts[484]) %
-			CGI->creh->objects[bidTradePanel->getSelectedItemId()]->getNamePluralTranslated());
+		MetaString message = MetaString::createFromTextID("core.genrltxt.484");
+		message.replaceNamePlural(CreatureID(bidTradePanel->getSelectedItemId()));
+		return message.toString();
 	}
 	else
 	{

+ 11 - 9
client/widgets/markets/CArtifactsBuying.cpp

@@ -88,11 +88,13 @@ void CArtifactsBuying::makeDeal()
 CMarketBase::MarketShowcasesParams CArtifactsBuying::getShowcasesParams() const
 {
 	if(bidTradePanel->isHighlighted() && offerTradePanel->isHighlighted())
-		return std::make_tuple(
+		return MarketShowcasesParams
+		{
 			ShowcaseParams {std::to_string(deal->isBlocked() ? 0 : bidQty), bidTradePanel->getSelectedItemId()},
-			ShowcaseParams {std::to_string(deal->isBlocked() ? 0 : offerQty), CGI->artifacts()->getByIndex(offerTradePanel->getSelectedItemId())->getIconIndex()});
+			ShowcaseParams {std::to_string(deal->isBlocked() ? 0 : offerQty), CGI->artifacts()->getByIndex(offerTradePanel->getSelectedItemId())->getIconIndex()}
+		};
 	else
-		return std::make_tuple(std::nullopt, std::nullopt);
+		return MarketShowcasesParams {std::nullopt, std::nullopt};
 }
 
 void CArtifactsBuying::highlightingChanged()
@@ -110,12 +112,12 @@ std::string CArtifactsBuying::getTraderText()
 {
 	if(bidTradePanel->isHighlighted() && offerTradePanel->isHighlighted())
 	{
-		return boost::str(boost::format(
-			CGI->generaltexth->allTexts[267]) %
-			CGI->artifacts()->getByIndex(offerTradePanel->getSelectedItemId())->getNameTranslated() %
-			bidQty %
-			(bidQty == 1 ? CGI->generaltexth->allTexts[161] : CGI->generaltexth->allTexts[160]) %
-			CGI->generaltexth->restypes[bidTradePanel->getSelectedItemId()]);
+		MetaString message = MetaString::createFromTextID("core.genrltxt.267");
+		message.replaceName(ArtifactID(offerTradePanel->getSelectedItemId()));
+		message.replaceNumber(bidQty);
+		message.replaceTextID(bidQty == 1 ? "core.genrltxt.161" : "core.genrltxt.160");
+		message.replaceName(GameResID(bidTradePanel->getSelectedItemId()));
+		return message.toString();
 	}
 	else
 	{

+ 10 - 9
client/widgets/markets/CArtifactsSelling.cpp

@@ -122,12 +122,13 @@ std::shared_ptr<CArtifactsOfHeroMarket> CArtifactsSelling::getAOHset() const
 CMarketBase::MarketShowcasesParams CArtifactsSelling::getShowcasesParams() const
 {
 	if(hero->getArt(selectedHeroSlot) && offerTradePanel->isHighlighted())
-		return std::make_tuple(
+		return MarketShowcasesParams
+		{
 			std::nullopt,
 			ShowcaseParams {std::to_string(offerQty), offerTradePanel->getSelectedItemId()}
-		);
+		};
 	else
-		return std::make_tuple(std::nullopt, std::nullopt);
+		return MarketShowcasesParams {std::nullopt, std::nullopt};
 }
 
 void CArtifactsSelling::updateSubtitles()
@@ -154,12 +155,12 @@ std::string CArtifactsSelling::getTraderText()
 	const auto art = hero->getArt(selectedHeroSlot);
 	if(art && offerTradePanel->isHighlighted())
 	{
-		return boost::str(boost::format(
-			CGI->generaltexth->allTexts[268]) %
-			offerQty %
-			(offerQty == 1 ? CGI->generaltexth->allTexts[161] : CGI->generaltexth->allTexts[160]) %
-			CGI->generaltexth->restypes[offerTradePanel->getSelectedItemId()] %
-			CGI->artifacts()->getByIndex(art->getTypeId())->getNameTranslated());
+		MetaString message = MetaString::createFromTextID("core.genrltxt.268");
+		message.replaceNumber(offerQty);
+		message.replaceRawString(offerQty == 1 ? CGI->generaltexth->allTexts[161] : CGI->generaltexth->allTexts[160]);
+		message.replaceName(GameResID(offerTradePanel->getSelectedItemId()));
+		message.replaceName(art->getTypeId());
+		return message.toString();
 	}
 	else
 	{

+ 16 - 11
client/widgets/markets/CFreelancerGuild.cpp

@@ -21,6 +21,7 @@
 #include "../../../CCallback.h"
 
 #include "../../../lib/CGeneralTextHandler.h"
+#include "../../../lib/MetaString.h"
 #include "../../../lib/mapObjects/CGHeroInstance.h"
 #include "../../../lib/mapObjects/CGMarket.h"
 
@@ -77,11 +78,13 @@ void CFreelancerGuild::makeDeal()
 CMarketBase::MarketShowcasesParams CFreelancerGuild::getShowcasesParams() const
 {
 	if(bidTradePanel->isHighlighted() && offerTradePanel->isHighlighted())
-		return std::make_tuple(
+		return MarketShowcasesParams
+		{
 			ShowcaseParams {std::to_string(bidQty * offerSlider->getValue()), CGI->creatures()->getByIndex(bidTradePanel->getSelectedItemId())->getIconIndex()},
-			ShowcaseParams {std::to_string(offerQty * offerSlider->getValue()), offerTradePanel->getSelectedItemId()});
+			ShowcaseParams {std::to_string(offerQty * offerSlider->getValue()), offerTradePanel->getSelectedItemId()}
+		};
 	else
-		return std::make_tuple(std::nullopt, std::nullopt);
+		return MarketShowcasesParams {std::nullopt, std::nullopt};
 }
 
 void CFreelancerGuild::highlightingChanged()
@@ -103,14 +106,16 @@ std::string CFreelancerGuild::getTraderText()
 {
 	if(bidTradePanel->isHighlighted() && offerTradePanel->isHighlighted())
 	{
-		return boost::str(boost::format(
-			CGI->generaltexth->allTexts[269]) %
-			offerQty %
-			(offerQty == 1 ? CGI->generaltexth->allTexts[161] : CGI->generaltexth->allTexts[160]) %
-			CGI->generaltexth->restypes[offerTradePanel->getSelectedItemId()] %
-			bidQty %
-			(bidQty == 1 ? CGI->creh->objects[bidTradePanel->getSelectedItemId()]->getNameSingularTranslated() :
-				CGI->creh->objects[bidTradePanel->getSelectedItemId()]->getNamePluralTranslated()));
+		MetaString message = MetaString::createFromTextID("core.genrltxt.269");
+		message.replaceNumber(offerQty);
+		message.replaceRawString(offerQty == 1 ? CGI->generaltexth->allTexts[161] : CGI->generaltexth->allTexts[160]);
+		message.replaceName(GameResID(offerTradePanel->getSelectedItemId()));
+		message.replaceNumber(bidQty);
+		if(bidQty == 1)
+			message.replaceNameSingular(bidTradePanel->getSelectedItemId());
+		else
+			message.replaceNamePlural(bidTradePanel->getSelectedItemId());
+		return message.toString();
 	}
 	else
 	{

+ 2 - 2
client/widgets/markets/CMarketBase.cpp

@@ -108,9 +108,9 @@ void CMarketBase::updateShowcases()
 
 	const auto params = getShowcasesParams();
 	if(bidTradePanel)
-		updateSelectedBody(bidTradePanel, std::get<0>(params));
+		updateSelectedBody(bidTradePanel, params.bidParams);
 	if(offerTradePanel)
-		updateSelectedBody(offerTradePanel, std::get<1>(params));
+		updateSelectedBody(offerTradePanel, params.offerParams);
 }
 
 void CMarketBase::highlightingChanged()

+ 5 - 1
client/widgets/markets/CMarketBase.h

@@ -28,7 +28,11 @@ public:
 		std::string text;
 		int imageIndex;
 	};
-	using MarketShowcasesParams = std::tuple<std::optional<const ShowcaseParams>, std::optional<const ShowcaseParams>>;
+	struct MarketShowcasesParams
+	{
+		std::optional<const ShowcaseParams> bidParams;
+		std::optional<const ShowcaseParams> offerParams;
+	};
 	using ShowcasesParamsFunctor = std::function<const MarketShowcasesParams()>;
 
 	const IMarket * market;

+ 14 - 11
client/widgets/markets/CMarketResources.cpp

@@ -21,6 +21,7 @@
 #include "../../../CCallback.h"
 
 #include "../../../lib/CGeneralTextHandler.h"
+#include "../../../lib/MetaString.h"
 #include "../../../lib/mapObjects/CGMarket.h"
 
 CMarketResources::CMarketResources(const IMarket * market, const CGHeroInstance * hero)
@@ -69,11 +70,13 @@ void CMarketResources::makeDeal()
 CMarketBase::MarketShowcasesParams CMarketResources::getShowcasesParams() const
 {
 	if(bidTradePanel->highlightedSlot && offerTradePanel->highlightedSlot && bidTradePanel->getSelectedItemId() != offerTradePanel->getSelectedItemId())
-		return std::make_tuple(
+		return MarketShowcasesParams
+		{
 			ShowcaseParams {std::to_string(bidQty * offerSlider->getValue()), bidTradePanel->getSelectedItemId()},
-			ShowcaseParams {std::to_string(offerQty * offerSlider->getValue()), offerTradePanel->getSelectedItemId()});
+			ShowcaseParams {std::to_string(offerQty * offerSlider->getValue()), offerTradePanel->getSelectedItemId()}
+		};
 	else
-		return std::make_tuple(std::nullopt, std::nullopt);
+		return MarketShowcasesParams {std::nullopt, std::nullopt};
 }
 
 void CMarketResources::highlightingChanged()
@@ -104,14 +107,14 @@ std::string CMarketResources::getTraderText()
 	if(bidTradePanel->isHighlighted() && offerTradePanel->isHighlighted() &&
 		bidTradePanel->getSelectedItemId() != offerTradePanel->getSelectedItemId())
 	{
-		return boost::str(boost::format(
-			CGI->generaltexth->allTexts[157]) %
-			offerQty %
-			(offerQty == 1 ? CGI->generaltexth->allTexts[161] : CGI->generaltexth->allTexts[160]) %
-			CGI->generaltexth->restypes[bidTradePanel->getSelectedItemId()] %
-			bidQty %
-			(bidQty == 1 ? CGI->generaltexth->allTexts[161] : CGI->generaltexth->allTexts[160]) %
-			CGI->generaltexth->restypes[offerTradePanel->getSelectedItemId()]);
+		MetaString message = MetaString::createFromTextID("core.genrltxt.157");
+		message.replaceNumber(offerQty);
+		message.replaceRawString(offerQty == 1 ? CGI->generaltexth->allTexts[161] : CGI->generaltexth->allTexts[160]);
+		message.replaceName(GameResID(bidTradePanel->getSelectedItemId()));
+		message.replaceNumber(bidQty);
+		message.replaceRawString(bidQty == 1 ? CGI->generaltexth->allTexts[161] : CGI->generaltexth->allTexts[160]);
+		message.replaceName(GameResID(offerTradePanel->getSelectedItemId()));
+		return message.toString();
 	}
 	else
 	{

+ 10 - 7
client/widgets/markets/CTransferResources.cpp

@@ -21,6 +21,7 @@
 #include "../../../CCallback.h"
 
 #include "../../../lib/CGeneralTextHandler.h"
+#include "../../../lib/MetaString.h"
 
 CTransferResources::CTransferResources(const IMarket * market, const CGHeroInstance * hero)
 	: CMarketBase(market, hero)
@@ -71,11 +72,13 @@ void CTransferResources::makeDeal()
 CMarketBase::MarketShowcasesParams CTransferResources::getShowcasesParams() const
 {
 	if(bidTradePanel->isHighlighted() && offerTradePanel->isHighlighted())
-		return std::make_tuple(
+		return MarketShowcasesParams
+		{
 			ShowcaseParams {std::to_string(offerSlider->getValue()), bidTradePanel->getSelectedItemId()},
-			ShowcaseParams {CGI->generaltexth->capColors[offerTradePanel->getSelectedItemId()], offerTradePanel->getSelectedItemId()});
+			ShowcaseParams {CGI->generaltexth->capColors[offerTradePanel->getSelectedItemId()], offerTradePanel->getSelectedItemId()}
+		};
 	else
-		return std::make_tuple(std::nullopt, std::nullopt);
+		return MarketShowcasesParams {std::nullopt, std::nullopt};
 }
 
 void CTransferResources::highlightingChanged()
@@ -96,10 +99,10 @@ std::string CTransferResources::getTraderText()
 {
 	if(bidTradePanel->isHighlighted() && offerTradePanel->isHighlighted())
 	{
-		return boost::str(boost::format(
-			CGI->generaltexth->allTexts[165]) %
-			CGI->generaltexth->restypes[bidTradePanel->getSelectedItemId()] %
-			CGI->generaltexth->capColors[offerTradePanel->getSelectedItemId()]);
+		MetaString message = MetaString::createFromTextID("core.genrltxt.165");
+		message.replaceName(GameResID(bidTradePanel->getSelectedItemId()));
+		message.replaceName(PlayerColor(offerTradePanel->getSelectedItemId()));
+		return message.toString();
 	}
 	else
 	{

+ 8 - 8
client/windows/CMarketWindow.cpp

@@ -115,7 +115,7 @@ void CMarketWindow::artifactMoved(const ArtifactLocation & srcLoc, const Artifac
 
 void CMarketWindow::createChangeModeButtons(EMarketMode currentMode, const IMarket * market, const CGHeroInstance * hero)
 {
-	auto isButton = [currentMode, market, hero](EMarketMode modeButton) -> bool
+	auto isButtonVisible = [currentMode, market, hero](EMarketMode modeButton) -> bool
 	{
 		if(currentMode == modeButton)
 			return false;
@@ -146,27 +146,27 @@ void CMarketWindow::createChangeModeButtons(EMarketMode currentMode, const IMark
 		buttonPos -= Point(0, buttonHeightWithMargin);
 	};
 
-	if(isButton(EMarketMode::RESOURCE_PLAYER))
+	if(isButtonVisible(EMarketMode::RESOURCE_PLAYER))
 		addButton(AnimationPath::builtin("TPMRKBU1.DEF"), CGI->generaltexth->zelp[612], std::bind(&CMarketWindow::createTransferResources, this, market, hero));
-	if(isButton(EMarketMode::ARTIFACT_RESOURCE))
+	if(isButtonVisible(EMarketMode::ARTIFACT_RESOURCE))
 		addButton(AnimationPath::builtin("TPMRKBU3.DEF"), CGI->generaltexth->zelp[613], std::bind(&CMarketWindow::createArtifactsSelling, this, market, hero));
-	if(isButton(EMarketMode::RESOURCE_ARTIFACT))
+	if(isButtonVisible(EMarketMode::RESOURCE_ARTIFACT))
 		addButton(AnimationPath::builtin("TPMRKBU2.DEF"), CGI->generaltexth->zelp[598], std::bind(&CMarketWindow::createArtifactsBuying, this, market, hero));
 
 	buttonPos = Point(516, 520 - buttonHeightWithMargin);
-	if(isButton(EMarketMode::CREATURE_RESOURCE))
+	if(isButtonVisible(EMarketMode::CREATURE_RESOURCE))
 		addButton(AnimationPath::builtin("TPMRKBU4.DEF"), CGI->generaltexth->zelp[599], std::bind(&CMarketWindow::createFreelancersGuild, this, market, hero));
-	if(isButton(EMarketMode::RESOURCE_RESOURCE))
+	if(isButtonVisible(EMarketMode::RESOURCE_RESOURCE))
 		addButton(AnimationPath::builtin("TPMRKBU5.DEF"), CGI->generaltexth->zelp[605], std::bind(&CMarketWindow::createMarketResources, this, market, hero));
 	
 	buttonPos = Point(516, 421);
-	if(isButton(EMarketMode::CREATURE_EXP))
+	if(isButtonVisible(EMarketMode::CREATURE_EXP))
 	{
 		addButton(AnimationPath::builtin("ALTSACC.DEF"), CGI->generaltexth->zelp[572], std::bind(&CMarketWindow::createAltarCreatures, this, market, hero));
 		if(marketWidget->hero->getAlignment() == EAlignment::GOOD)
 			changeModeButtons.back()->block(true);
 	}
-	if(isButton(EMarketMode::ARTIFACT_EXP))
+	if(isButtonVisible(EMarketMode::ARTIFACT_EXP))
 	{
 		addButton(AnimationPath::builtin("ALTART.DEF"), CGI->generaltexth->zelp[580], std::bind(&CMarketWindow::createAltarArtifacts, this, market, hero));
 		if(marketWidget->hero->getAlignment() == EAlignment::EVIL)