mirror of
https://github.com/vcmi/vcmi.git
synced 2025-08-15 20:03:15 +02:00
Use string ids for most of bonuses
This commit is contained in:
@@ -259,13 +259,20 @@ CScenarioTravel CCampaignHandler::readScenarioTravelFromJson(JsonNode & reader,
|
|||||||
{"building", CScenarioTravel::STravelBonus::EBonusType::BUILDING},
|
{"building", CScenarioTravel::STravelBonus::EBonusType::BUILDING},
|
||||||
{"artifact", CScenarioTravel::STravelBonus::EBonusType::ARTIFACT},
|
{"artifact", CScenarioTravel::STravelBonus::EBonusType::ARTIFACT},
|
||||||
{"scroll", CScenarioTravel::STravelBonus::EBonusType::SPELL_SCROLL},
|
{"scroll", CScenarioTravel::STravelBonus::EBonusType::SPELL_SCROLL},
|
||||||
{"primary", CScenarioTravel::STravelBonus::EBonusType::PRIMARY_SKILL},
|
{"primarySkill", CScenarioTravel::STravelBonus::EBonusType::PRIMARY_SKILL},
|
||||||
{"skill", CScenarioTravel::STravelBonus::EBonusType::SECONDARY_SKILL},
|
{"secondarySkill", CScenarioTravel::STravelBonus::EBonusType::SECONDARY_SKILL},
|
||||||
{"resource", CScenarioTravel::STravelBonus::EBonusType::RESOURCE},
|
{"resource", CScenarioTravel::STravelBonus::EBonusType::RESOURCE},
|
||||||
//{"prevHero", CScenarioTravel::STravelBonus::EBonusType::HEROES_FROM_PREVIOUS_SCENARIO},
|
//{"prevHero", CScenarioTravel::STravelBonus::EBonusType::HEROES_FROM_PREVIOUS_SCENARIO},
|
||||||
//{"hero", CScenarioTravel::STravelBonus::EBonusType::HERO},
|
//{"hero", CScenarioTravel::STravelBonus::EBonusType::HERO},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
std::map<std::string, ui32> primarySkillsMap = {
|
||||||
|
{"attack", 0},
|
||||||
|
{"defence", 8},
|
||||||
|
{"spellpower", 16},
|
||||||
|
{"knowledge", 24},
|
||||||
|
};
|
||||||
|
|
||||||
std::map<std::string, ui16> heroSpecialMap = {
|
std::map<std::string, ui16> heroSpecialMap = {
|
||||||
{"strongest", 0xFFFD},
|
{"strongest", 0xFFFD},
|
||||||
{"generated", 0xFFFE},
|
{"generated", 0xFFFE},
|
||||||
@@ -276,11 +283,11 @@ CScenarioTravel CCampaignHandler::readScenarioTravelFromJson(JsonNode & reader,
|
|||||||
//FD - wood+ore
|
//FD - wood+ore
|
||||||
//FE - mercury+sulfur+crystal+gem
|
//FE - mercury+sulfur+crystal+gem
|
||||||
{"wood", 0},
|
{"wood", 0},
|
||||||
{"ore", 1},
|
{"mercury", 1},
|
||||||
{"mercury", 2},
|
{"ore", 2},
|
||||||
{"sulfur", 3},
|
{"sulfur", 3},
|
||||||
{"crystal", 4},
|
{"crystal", 4},
|
||||||
{"gem", 5},
|
{"gems", 5},
|
||||||
{"gold", 6},
|
{"gold", 6},
|
||||||
{"common", 0xFD},
|
{"common", 0xFD},
|
||||||
{"rare", 0xFE}
|
{"rare", 0xFE}
|
||||||
@@ -311,6 +318,8 @@ CScenarioTravel CCampaignHandler::readScenarioTravelFromJson(JsonNode & reader,
|
|||||||
bonus.info1 = resourceTypeMap[bjson["type"].String()];
|
bonus.info1 = resourceTypeMap[bjson["type"].String()];
|
||||||
bonus.info2 = bjson["amount"].Integer();
|
bonus.info2 = bjson["amount"].Integer();
|
||||||
}
|
}
|
||||||
|
else if(bonus.type == CScenarioTravel::STravelBonus::EBonusType::BUILDING)
|
||||||
|
bonus.info1 = bjson["type"].Integer(); //VLC->modh->identifiers.getIdentifier(CModHandler::scopeMap(), "buildings", bjson["hero"].String()).get();
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(int heroId = heroSpecialMap[bjson["hero"].String()])
|
if(int heroId = heroSpecialMap[bjson["hero"].String()])
|
||||||
@@ -320,8 +329,16 @@ CScenarioTravel CCampaignHandler::readScenarioTravelFromJson(JsonNode & reader,
|
|||||||
|
|
||||||
if(bonus.type == CScenarioTravel::STravelBonus::EBonusType::SPELL
|
if(bonus.type == CScenarioTravel::STravelBonus::EBonusType::SPELL
|
||||||
|| bonus.type == CScenarioTravel::STravelBonus::EBonusType::MONSTER
|
|| bonus.type == CScenarioTravel::STravelBonus::EBonusType::MONSTER
|
||||||
|
|| bonus.type == CScenarioTravel::STravelBonus::EBonusType::SECONDARY_SKILL
|
||||||
|| bonus.type == CScenarioTravel::STravelBonus::EBonusType::ARTIFACT)
|
|| bonus.type == CScenarioTravel::STravelBonus::EBonusType::ARTIFACT)
|
||||||
bonus.info2 = VLC->modh->identifiers.getIdentifier(CModHandler::scopeMap(), bjson["what"].String(), bjson["type"].String()).get();
|
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
|
else
|
||||||
bonus.info2 = bjson["type"].Integer();
|
bonus.info2 = bjson["type"].Integer();
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user