mirror of
https://github.com/vcmi/vcmi.git
synced 2025-03-25 21:38:59 +02:00
Adding logging and error handling
This commit is contained in:
parent
7c13246851
commit
23e411cacd
@ -130,8 +130,8 @@ std::unique_ptr<CCampaign> CCampaignHandler::getCampaign( const std::string & na
|
||||
if(sc.isNotVoid())
|
||||
{
|
||||
CMapService mapService;
|
||||
auto hdr = mapService.loadMapHeader(ResourceID(sc.mapName, EResType::MAP));
|
||||
sc.scenarioName = hdr->name;
|
||||
if(auto hdr = mapService.loadMapHeader(ResourceID(sc.mapName, EResType::MAP)))
|
||||
sc.scenarioName = hdr->name;
|
||||
}
|
||||
ret->scenarios.push_back(sc);
|
||||
}
|
||||
@ -187,7 +187,7 @@ CCampaignHeader CCampaignHandler::readHeaderFromJson(JsonNode & reader, std::str
|
||||
ret.version = reader["version"].Integer();
|
||||
if(ret.version < CampaignVersion::VCMI_MIN || ret.version > CampaignVersion::VCMI_MAX)
|
||||
{
|
||||
logGlobal->info("Unsupported campaign %s version %d", filename, ret.version);
|
||||
logGlobal->info("VCMP Loading: Unsupported campaign %s version %d", filename, ret.version);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -299,17 +299,26 @@ CScenarioTravel CCampaignHandler::readScenarioTravelFromJson(JsonNode & reader,
|
||||
|
||||
for(auto & k : reader["keepCreatures"].Vector())
|
||||
{
|
||||
int creId = VLC->modh->identifiers.getIdentifier(CModHandler::scopeMap(), "creature", k.String()).get();
|
||||
ret.monstersKeptByHero[creId / 8] |= (1 << creId % 8);
|
||||
if(auto identifier = VLC->modh->identifiers.getIdentifier(CModHandler::scopeMap(), "creature", k.String()))
|
||||
{
|
||||
int creId = identifier.get();
|
||||
ret.monstersKeptByHero[creId / 8] |= (1 << creId % 8);
|
||||
}
|
||||
else
|
||||
logGlobal->warn("VCMP Loading: keepCreatures contains unresolved identifier %s", k.String());
|
||||
}
|
||||
for(auto & k : reader["keepArtifacts"].Vector())
|
||||
{
|
||||
int artId = VLC->modh->identifiers.getIdentifier(CModHandler::scopeMap(), "artifact", k.String()).get();
|
||||
ret.artifsKeptByHero[artId / 8] |= (1 << artId % 8);
|
||||
if(auto identifier = VLC->modh->identifiers.getIdentifier(CModHandler::scopeMap(), "artifact", k.String()))
|
||||
{
|
||||
int artId = identifier.get();
|
||||
ret.artifsKeptByHero[artId / 8] |= (1 << artId % 8);
|
||||
}
|
||||
else
|
||||
logGlobal->warn("VCMP Loading: keepArtifacts contains unresolved identifier %s", k.String());
|
||||
}
|
||||
|
||||
ret.startOptions = startOptionsMap[reader["startOptions"].String()];
|
||||
|
||||
switch(ret.startOptions)
|
||||
{
|
||||
case 0:
|
||||
@ -322,36 +331,58 @@ CScenarioTravel CCampaignHandler::readScenarioTravelFromJson(JsonNode & reader,
|
||||
{
|
||||
CScenarioTravel::STravelBonus bonus;
|
||||
bonus.type = bonusTypeMap[bjson["what"].String()];
|
||||
if(bonus.type == CScenarioTravel::STravelBonus::EBonusType::RESOURCE)
|
||||
switch (bonus.type)
|
||||
{
|
||||
bonus.info1 = resourceTypeMap[bjson["type"].String()];
|
||||
bonus.info2 = bjson["amount"].Integer();
|
||||
}
|
||||
else if(bonus.type == CScenarioTravel::STravelBonus::EBonusType::BUILDING)
|
||||
bonus.info1 = vstd::find_pos(EBuildingType::names, bjson["type"].String());
|
||||
else
|
||||
{
|
||||
if(int heroId = heroSpecialMap[bjson["hero"].String()])
|
||||
bonus.info1 = heroId;
|
||||
else
|
||||
bonus.info1 = VLC->modh->identifiers.getIdentifier(CModHandler::scopeMap(), "hero", bjson["hero"].String()).get();
|
||||
|
||||
if(bonus.type == CScenarioTravel::STravelBonus::EBonusType::SPELL
|
||||
|| bonus.type == CScenarioTravel::STravelBonus::EBonusType::MONSTER
|
||||
|| bonus.type == CScenarioTravel::STravelBonus::EBonusType::SECONDARY_SKILL
|
||||
|| bonus.type == CScenarioTravel::STravelBonus::EBonusType::ARTIFACT)
|
||||
bonus.info2 = VLC->modh->identifiers.getIdentifier(CModHandler::scopeMap(), bjson["what"].String(), bjson["type"].String()).get();
|
||||
else if(bonus.type == CScenarioTravel::STravelBonus::EBonusType::SPELL_SCROLL)
|
||||
bonus.info2 = VLC->modh->identifiers.getIdentifier(CModHandler::scopeMap(), "spell", bjson["type"].String()).get();
|
||||
else if(bonus.type == CScenarioTravel::STravelBonus::EBonusType::PRIMARY_SKILL)
|
||||
{
|
||||
for(auto & ps : primarySkillsMap)
|
||||
bonus.info2 |= bjson[ps.first].Integer() << ps.second;
|
||||
}
|
||||
else
|
||||
bonus.info2 = bjson["type"].Integer();
|
||||
|
||||
bonus.info3 = bjson["amount"].Integer();
|
||||
case CScenarioTravel::STravelBonus::EBonusType::RESOURCE:
|
||||
bonus.info1 = resourceTypeMap[bjson["type"].String()];
|
||||
bonus.info2 = bjson["amount"].Integer();
|
||||
break;
|
||||
|
||||
case CScenarioTravel::STravelBonus::EBonusType::BUILDING:
|
||||
bonus.info1 = vstd::find_pos(EBuildingType::names, bjson["type"].String());
|
||||
if(bonus.info1 == -1)
|
||||
logGlobal->warn("VCMP Loading: unresolved building identifier %s", bjson["type"].String());
|
||||
break;
|
||||
|
||||
default:
|
||||
if(int heroId = heroSpecialMap[bjson["hero"].String()])
|
||||
bonus.info1 = heroId;
|
||||
else
|
||||
if(auto identifier = VLC->modh->identifiers.getIdentifier(CModHandler::scopeMap(), "hero", bjson["hero"].String()))
|
||||
bonus.info1 = identifier.get();
|
||||
else
|
||||
logGlobal->warn("VCMP Loading: unresolved hero identifier %s", bjson["hero"].String());
|
||||
|
||||
bonus.info3 = bjson["amount"].Integer();
|
||||
|
||||
switch(bonus.type)
|
||||
{
|
||||
case CScenarioTravel::STravelBonus::EBonusType::SPELL:
|
||||
case CScenarioTravel::STravelBonus::EBonusType::MONSTER:
|
||||
case CScenarioTravel::STravelBonus::EBonusType::SECONDARY_SKILL:
|
||||
case CScenarioTravel::STravelBonus::EBonusType::ARTIFACT:
|
||||
if(auto identifier = VLC->modh->identifiers.getIdentifier(CModHandler::scopeMap(), bjson["what"].String(), bjson["type"].String()))
|
||||
bonus.info2 = identifier.get();
|
||||
else
|
||||
logGlobal->warn("VCMP Loading: unresolved %s identifier %s", bjson["what"].String(), bjson["type"].String());
|
||||
break;
|
||||
|
||||
case CScenarioTravel::STravelBonus::EBonusType::SPELL_SCROLL:
|
||||
if(auto Identifier = VLC->modh->identifiers.getIdentifier(CModHandler::scopeMap(), "spell", bjson["type"].String()))
|
||||
bonus.info2 = Identifier.get();
|
||||
else
|
||||
logGlobal->warn("VCMP Loading: unresolved spell scroll identifier %s", bjson["type"].String());
|
||||
break;
|
||||
|
||||
case CScenarioTravel::STravelBonus::EBonusType::PRIMARY_SKILL:
|
||||
for(auto & ps : primarySkillsMap)
|
||||
bonus.info2 |= bjson[ps.first].Integer() << ps.second;
|
||||
break;
|
||||
|
||||
default:
|
||||
bonus.info2 = bjson["type"].Integer();
|
||||
}
|
||||
break;
|
||||
}
|
||||
ret.bonusesToChoose.push_back(bonus);
|
||||
}
|
||||
@ -380,7 +411,10 @@ CScenarioTravel CCampaignHandler::readScenarioTravelFromJson(JsonNode & reader,
|
||||
if(int heroId = heroSpecialMap[bjson["hero"].String()])
|
||||
bonus.info2 = heroId;
|
||||
else
|
||||
bonus.info2 = VLC->modh->identifiers.getIdentifier(CModHandler::scopeMap(), "hero", bjson["hero"].String()).get();
|
||||
if (auto identifier = VLC->modh->identifiers.getIdentifier(CModHandler::scopeMap(), "hero", bjson["hero"].String()))
|
||||
bonus.info2 = identifier.get();
|
||||
else
|
||||
logGlobal->warn("VCMP Loading: unresolved hero identifier %s", bjson["hero"].String());
|
||||
|
||||
ret.bonusesToChoose.push_back(bonus);
|
||||
}
|
||||
@ -388,7 +422,7 @@ CScenarioTravel CCampaignHandler::readScenarioTravelFromJson(JsonNode & reader,
|
||||
}
|
||||
default:
|
||||
{
|
||||
logGlobal->warn("Corrupted h3c file");
|
||||
logGlobal->warn("VCMP Loading: Unsupported start options value");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user