1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-25 22:42:04 +02:00

Exposed more of existing limiters for modders (#449)

* Exposed alignment, faction and terrain limiters
* Limiters toString() use now boost:format
This commit is contained in:
godric3
2018-04-17 14:59:30 +02:00
committed by ArseniyShestakov
parent ad2c429d8f
commit d9d01f0b68
9 changed files with 137 additions and 22 deletions

View File

@@ -19,6 +19,7 @@
#include "CModHandler.h"
#include "CGeneralTextHandler.h"
#include "JsonDetail.h"
#include "StringConstants.h"
using namespace JsonDetail;
@@ -645,6 +646,35 @@ std::shared_ptr<ILimiter> JsonUtils::parseLimiter(const JsonNode & limiter)
return bonusLimiter;
}
}
else if(limiterType == "CREATURE_ALIGNMENT_LIMITER")
{
int alignment = vstd::find_pos(EAlignment::names, parameters[0].String());
if(alignment == -1)
logMod->error("Error: invalid alignment %s.", parameters[0].String());
else
return std::make_shared<CreatureAlignmentLimiter>(alignment);
}
else if(limiterType == "CREATURE_FACTION_LIMITER")
{
std::shared_ptr<CreatureFactionLimiter> factionLimiter = std::make_shared<CreatureFactionLimiter>();
VLC->modh->identifiers.requestIdentifier("faction", parameters[0], [=](si32 faction)
{
factionLimiter->faction = faction;
});
return factionLimiter;
}
else if(limiterType == "CREATURE_TERRAIN_LIMITER")
{
std::shared_ptr<CreatureTerrainLimiter> terrainLimiter = std::make_shared<CreatureTerrainLimiter>();
if(parameters.size())
{
VLC->modh->identifiers.requestIdentifier("terrain", parameters[0], [=](si32 terrain)
{
terrainLimiter->terrainType = terrain;
});
}
return terrainLimiter;
}
else
{
logMod->error("Error: invalid customizable limiter type %s.", limiterType);