Sfoglia il codice sorgente

Fix handling of invalid creature damage range (min > max)

Ivan Savenko 1 anno fa
parent
commit
4b5b99aba3
1 ha cambiato i file con 13 aggiunte e 3 eliminazioni
  1. 13 3
      lib/CCreatureHandler.cpp

+ 13 - 3
lib/CCreatureHandler.cpp

@@ -612,10 +612,20 @@ CCreature * CCreatureHandler::loadFromJson(const std::string & scope, const Json
 	cre->addBonus(node["attack"].Integer(), BonusType::PRIMARY_SKILL, BonusSubtypeID(PrimarySkill::ATTACK));
 	cre->addBonus(node["defense"].Integer(), BonusType::PRIMARY_SKILL, BonusSubtypeID(PrimarySkill::DEFENSE));
 
-	cre->addBonus(node["damage"]["min"].Integer(), BonusType::CREATURE_DAMAGE, BonusCustomSubtype::creatureDamageMin);
-	cre->addBonus(node["damage"]["max"].Integer(), BonusType::CREATURE_DAMAGE, BonusCustomSubtype::creatureDamageMax);
+	int minDamage = node["damage"]["min"].Integer();
+	int maxDamage = node["damage"]["max"].Integer();
 
-	assert(node["damage"]["min"].Integer() <= node["damage"]["max"].Integer());
+	if (minDamage <= maxDamage)
+	{
+		cre->addBonus(minDamage, BonusType::CREATURE_DAMAGE, BonusCustomSubtype::creatureDamageMin);
+		cre->addBonus(maxDamage, BonusType::CREATURE_DAMAGE, BonusCustomSubtype::creatureDamageMax);
+	}
+	else
+	{
+		logGlobal->error("Mod %s: creature %s has minimal damage (%d) greater than maximal damage (%d)!", scope, identifier, minDamage, maxDamage);
+		cre->addBonus(maxDamage, BonusType::CREATURE_DAMAGE, BonusCustomSubtype::creatureDamageMin);
+		cre->addBonus(minDamage, BonusType::CREATURE_DAMAGE, BonusCustomSubtype::creatureDamageMax);
+	}
 
 	if(!node["shots"].isNull())
 		cre->addBonus(node["shots"].Integer(), BonusType::SHOTS);