2
0
Эх сурвалжийг харах

Parsing for CREATURE_TYPE_LIMITER

DjWarmonger 12 жил өмнө
parent
commit
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;
 }
 
+void CCreatureTypeLimiter::setCreature (TCreature id)
+{
+	creature = VLC->creh->creatures[id];
+}
+
 HasAnotherBonusLimiter::HasAnotherBonusLimiter( TBonusType bonus )
 	: type(bonus), subtype(0), isSubtypeRelevant(false)
 {

+ 1 - 0
lib/HeroBonus.h

@@ -785,6 +785,7 @@ public:
 
 	CCreatureTypeLimiter();
 	CCreatureTypeLimiter(const CCreature &Creature, ui8 IncludeUpgrades = true);
+	void setCreature (TCreature id);
 
 	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;
 						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")
 						{