mirror of
https://github.com/vcmi/vcmi.git
synced 2025-09-16 09:26:28 +02:00
Merge pull request #5725 from IvanSavenko/bonus_description
Custom descriptions and icons for creature abilities
This commit is contained in:
@@ -638,10 +638,10 @@ std::shared_ptr<ILimiter> JsonUtils::parseLimiter(const JsonNode & limiter)
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::shared_ptr<Bonus> JsonUtils::parseBonus(const JsonNode &ability)
|
||||
std::shared_ptr<Bonus> JsonUtils::parseBonus(const JsonNode &ability, const TextIdentifier & descriptionID)
|
||||
{
|
||||
auto b = std::make_shared<Bonus>();
|
||||
if (!parseBonus(ability, b.get()))
|
||||
if (!parseBonus(ability, b.get(), descriptionID))
|
||||
{
|
||||
// caller code can not handle this case and presumes that returned bonus is always valid
|
||||
logGlobal->error("Failed to parse bonus! Json config was %S ", ability.toString());
|
||||
@@ -651,7 +651,7 @@ std::shared_ptr<Bonus> JsonUtils::parseBonus(const JsonNode &ability)
|
||||
return b;
|
||||
}
|
||||
|
||||
bool JsonUtils::parseBonus(const JsonNode &ability, Bonus *b)
|
||||
bool JsonUtils::parseBonus(const JsonNode &ability, Bonus *b, const TextIdentifier & descriptionID)
|
||||
{
|
||||
const JsonNode * value = nullptr;
|
||||
|
||||
@@ -694,12 +694,23 @@ bool JsonUtils::parseBonus(const JsonNode &ability, Bonus *b)
|
||||
|
||||
if(!ability["description"].isNull())
|
||||
{
|
||||
if (ability["description"].isString())
|
||||
b->description.appendTextID(ability["description"].String());
|
||||
if (ability["description"].isString() && !ability["description"].String().empty())
|
||||
{
|
||||
if (ability["description"].String()[0] == '@')
|
||||
b->description.appendTextID(ability["description"].String());
|
||||
else if (!descriptionID.get().empty())
|
||||
{
|
||||
LIBRARY->generaltexth->registerString(ability.getModScope(), descriptionID, ability["description"]);
|
||||
b->description.appendTextID(descriptionID.get());
|
||||
}
|
||||
}
|
||||
if (ability["description"].isNumber())
|
||||
b->description.appendTextID("core.arraytxt." + std::to_string(ability["description"].Integer()));
|
||||
}
|
||||
|
||||
if(!ability["icon"].isNull())
|
||||
b->customIconPath = ImagePath::fromJson(ability["icon"]);
|
||||
|
||||
value = &ability["effectRange"];
|
||||
if (!value->isNull())
|
||||
b->effectRange = static_cast<BonusLimitEffect>(parseByMapN(bonusLimitEffect, value, "effect range "));
|
||||
|
@@ -11,6 +11,7 @@
|
||||
|
||||
#include "JsonNode.h"
|
||||
#include "../GameConstants.h"
|
||||
#include "../texts/TextIdentifier.h"
|
||||
|
||||
VCMI_LIB_NAMESPACE_BEGIN
|
||||
|
||||
@@ -18,12 +19,11 @@ struct Bonus;
|
||||
class ILimiter;
|
||||
class CSelector;
|
||||
class CAddInfo;
|
||||
|
||||
namespace JsonUtils
|
||||
{
|
||||
std::shared_ptr<Bonus> parseBonus(const JsonVector & ability_vec);
|
||||
std::shared_ptr<Bonus> parseBonus(const JsonNode & ability);
|
||||
bool parseBonus(const JsonNode & ability, Bonus * placement);
|
||||
std::shared_ptr<Bonus> parseBonus(const JsonNode & ability, const TextIdentifier & descriptionID = "");
|
||||
bool parseBonus(const JsonNode & ability, Bonus * placement, const TextIdentifier & descriptionID = "");
|
||||
std::shared_ptr<ILimiter> parseLimiter(const JsonNode & limiter);
|
||||
CSelector parseSelector(const JsonNode &ability);
|
||||
}
|
||||
|
Reference in New Issue
Block a user