Răsfoiți Sursa

Complete parsing for new Artifacts. iconIndex needs to be handled.

Otherwise, they are ready for test.
DjWarmonger 13 ani în urmă
părinte
comite
62a281a665
4 a modificat fișierele cu 22 adăugiri și 9 ștergeri
  1. 15 7
      lib/CArtHandler.cpp
  2. 5 1
      lib/CArtHandler.h
  3. 1 0
      lib/CModHandler.cpp
  4. 1 1
      lib/HeroBonus.h

+ 15 - 7
lib/CArtHandler.cpp

@@ -215,6 +215,14 @@ std::string CArtifact::nodeName() const
 // // 	//boost::algorithm::replace_first(description, "[spell name]", VLC->spellh->spells[spellid].name);
 // }
 
+void CArtifact::addNewBonus(Bonus *b)
+{
+	b->source = Bonus::ARTIFACT;
+	b->duration = Bonus::PERMANENT;
+	b->description = name;
+	CBonusSystemNode::addNewBonus(b);
+}
+
 void CArtifact::setName (std::string desc)
 {
 	name = desc;
@@ -462,7 +470,12 @@ CArtifact * CArtHandler::loadArtifact(const JsonNode & node)
 	art->setDescription	(text["description"].String());
 	art->setName		(text["event"].String());
 
-	art->image = node["image"].String();
+	const JsonNode & graphics = graphics["text"];
+	art->iconIndex = graphics["iconIndex"].Float();
+	art->image = graphics["image"].String();
+	value = &graphics["large"];
+	if (!value->isNull())
+		art->large = value->String();
 
 	art->price = node["value"].Float();
 	
@@ -504,8 +517,7 @@ CArtifact * CArtHandler::loadArtifact(const JsonNode & node)
 	BOOST_FOREACH (const JsonNode &bonus, node["bonuses"].Vector())
 	{
 		auto b = JsonUtils::parseBonus(bonus);
-		b->source = Bonus::ARTIFACT;
-		b->duration = Bonus::PERMANENT;
+		//TODO: bonus->sid = art->id;
 		art->addNewBonus(b);
 	}
 
@@ -715,11 +727,7 @@ void CArtHandler::addBonuses()
 		BOOST_FOREACH (auto b, artifact["bonuses"].Vector())
 		{
 			auto bonus = JsonUtils::parseBonus (b);
-			//common properties
-			bonus->source = Bonus::ARTIFACT;
 			bonus->sid = ga->id;
-			bonus->duration = Bonus::PERMANENT;
-			bonus->description = ga->Name();
 			ga->addNewBonus (bonus);
 		}
 		if(artifact["type"].String() == "Creature")

+ 5 - 1
lib/CArtHandler.h

@@ -76,6 +76,8 @@ public:
 	enum EartClass {ART_SPECIAL=1, ART_TREASURE=2, ART_MINOR=4, ART_MAJOR=8, ART_RELIC=16}; //artifact classes
 
 	std::string image;
+	std::string large; // big image for cutom artifacts, used in drag & drop
+	si32 iconIndex; //TODO: handle automatically
 
 	const std::string &Name() const; //getter
 	const std::string &Description() const; //getter
@@ -87,6 +89,7 @@ public:
 
 	int getArtClassSerial() const; //0 - treasure, 1 - minor, 2 - major, 3 - relic, 4 - spell scroll, 5 - other
 	std::string nodeName() const OVERRIDE;
+	void addNewBonus(Bonus *b) OVERRIDE;
 
 	virtual void levelUpArtifact (CArtifactInstance * art){};
 
@@ -100,7 +103,8 @@ public:
 	template <typename Handler> void serialize(Handler &h, const int version)
 	{
 		h & static_cast<CBonusSystemNode&>(*this);
-		h & name & description & eventText & image & price & possibleSlots & constituents & constituentOf & aClass & id;
+		h & name & description & eventText & image & large & iconIndex &
+			price & possibleSlots & constituents & constituentOf & aClass & id;
 	}
 
 	CArtifact();

+ 1 - 0
lib/CModHandler.cpp

@@ -141,6 +141,7 @@ void CModHandler::loadActiveMods()
 
 		VLC->townh->load(JsonUtils::assembleFromFiles(config ["factions"].convertTo<std::vector<std::string> >()));
 		VLC->creh->load( JsonUtils::assembleFromFiles(config["creatures"].convertTo<std::vector<std::string> >()));
+		VLC->arth->load( JsonUtils::assembleFromFiles(config["artifacts"].convertTo<std::vector<std::string> >()));
 	}
 
 	VLC->creh->buildBonusTreeForTiers(); //do that after all new creatures are loaded

+ 1 - 1
lib/HeroBonus.h

@@ -601,7 +601,7 @@ public:
 	void attachTo(CBonusSystemNode *parent);
 	void detachFrom(CBonusSystemNode *parent);
 	void detachFromAll();
-	void addNewBonus(Bonus *b); //b will be deleted with destruction of node
+	virtual void addNewBonus(Bonus *b); //b will be deleted with destruction of node
 	void accumulateBonus(Bonus &b); //add value of bonus with same type/subtype or create new
 
 	void newChildAttached(CBonusSystemNode *child);