Selaa lähdekoodia

CGScholar serialization

AlexVinS 9 vuotta sitten
vanhempi
sitoutus
401ba48257
1 muutettua tiedostoa jossa 42 lisäystä ja 2 poistoa
  1. 42 2
      lib/mapObjects/MiscObjects.cpp

+ 42 - 2
lib/mapObjects/MiscObjects.cpp

@@ -1780,12 +1780,52 @@ void CGScholar::initObj()
 
 void CGScholar::writeJsonOptions(JsonNode& json) const
 {
-
+	switch(bonusType)
+	{
+	case PRIM_SKILL:
+		json["rewardPrimSkill"].String() = PrimarySkill::names[bonusID];
+		break;
+	case SECONDARY_SKILL:
+		json["rewardSkill"].String() = NSecondarySkill::names[bonusID];
+		break;
+	case SPELL:
+		json["rewardSpell"].String() = VLC->spellh->objects.at(bonusID)->identifier;
+		break;
+	case RANDOM:
+		break;
+	}
 }
 
 void CGScholar::readJsonOptions(const JsonNode& json)
 {
-
+	bonusType = RANDOM;
+	if(json["rewardPrimSkill"].String() != "")
+	{
+		auto raw = VLC->modh->identifiers.getIdentifier("core", "primSkill", json["rewardPrimSkill"].String());
+		if(raw)
+		{
+			bonusType = PRIM_SKILL;
+			bonusID = raw.get();
+		}
+	}
+	else if(json["rewardSkill"].String() != "")
+	{
+		auto raw = VLC->modh->identifiers.getIdentifier("core", "skill", json["rewardSkill"].String());
+		if(raw)
+		{
+			bonusType = SECONDARY_SKILL;
+			bonusID = raw.get();
+		}
+	}
+	else if(json["rewardSpell"].String() != "")
+	{
+		auto raw = VLC->modh->identifiers.getIdentifier("core", "spell", json["rewardSpell"].String());
+		if(raw)
+		{
+			bonusType = SPELL;
+			bonusID = raw.get();
+		}
+	}
 }
 
 void CGGarrison::onHeroVisit (const CGHeroInstance *h) const