浏览代码

Parsing for CREATURE_TYPE_LIMITER

DjWarmonger 12 年之前
父节点
当前提交
97db289d3c
共有 3 个文件被更改,包括 18 次插入2 次删除
  1. 5 0
      lib/HeroBonus.cpp
  2. 1 0
      lib/HeroBonus.h
  3. 12 2
      lib/JsonNode.cpp

+ 5 - 0
lib/HeroBonus.cpp

@@ -1369,6 +1369,11 @@ CCreatureTypeLimiter::CCreatureTypeLimiter()
 	includeUpgrades = false;
 	includeUpgrades = false;
 }
 }
 
 
+void CCreatureTypeLimiter::setCreature (TCreature id)
+{
+	creature = VLC->creh->creatures[id];
+}
+
 HasAnotherBonusLimiter::HasAnotherBonusLimiter( TBonusType bonus )
 HasAnotherBonusLimiter::HasAnotherBonusLimiter( TBonusType bonus )
 	: type(bonus), subtype(0), isSubtypeRelevant(false)
 	: type(bonus), subtype(0), isSubtypeRelevant(false)
 {
 {

+ 1 - 0
lib/HeroBonus.h

@@ -785,6 +785,7 @@ public:
 
 
 	CCreatureTypeLimiter();
 	CCreatureTypeLimiter();
 	CCreatureTypeLimiter(const CCreature &Creature, ui8 IncludeUpgrades = true);
 	CCreatureTypeLimiter(const CCreature &Creature, ui8 IncludeUpgrades = true);
+	void setCreature (TCreature id);
 
 
 	int limit(const BonusLimitationContext &context) const OVERRIDE;
 	int limit(const BonusLimitationContext &context) const OVERRIDE;
 
 

+ 12 - 2
lib/JsonNode.cpp

@@ -1053,8 +1053,18 @@ Bonus * JsonUtils::parseBonus (const JsonNode &ability)
 						shared_ptr<ILimiter> l;
 						shared_ptr<ILimiter> l;
 						if (limiter["type"].String() == "CREATURE_TYPE_LIMITER")
 						if (limiter["type"].String() == "CREATURE_TYPE_LIMITER")
 						{
 						{
-							//continue;
-							//l = make_shared<CCreatureTypeLimiter>(); //TODO: How the hell resolve pointer to creature?
+							shared_ptr<CCreatureTypeLimiter> l2 = make_shared<CCreatureTypeLimiter>(); //TODO: How the hell resolve pointer to creature?
+							const JsonVector vec = limiter["parameters"].Vector();
+							VLC->modh->identifiers.requestIdentifier(std::string("creature.") + vec[0].String(), [=](si32 creature)
+							{
+								l2->setCreature (creature);
+							});
+							if (vec.size() > 1)
+							{
+								l2->includeUpgrades = vec[1].Bool();
+							}
+							else
+								l2->includeUpgrades = false;
 						}
 						}
 						if (limiter["type"].String() == "HAS_ANOTHER_BONUS_LIMITER")
 						if (limiter["type"].String() == "HAS_ANOTHER_BONUS_LIMITER")
 						{
 						{