diff --git a/client/lobby/CBonusSelection.cpp b/client/lobby/CBonusSelection.cpp index a2ae41337..1ba12e16d 100644 --- a/client/lobby/CBonusSelection.cpp +++ b/client/lobby/CBonusSelection.cpp @@ -192,7 +192,11 @@ void CBonusSelection::createBonusesIcons() } assert(faction != -1); - BuildingID buildID = CBuildingHandler::campToERMU(bonDescs[i].info1, faction, std::set()); + BuildingID buildID; + if(getCampaign()->camp->header.version == CampaignVersion::VCMI) + buildID = BuildingID(bonDescs[i].info1); + else + buildID = CBuildingHandler::campToERMU(bonDescs[i].info1, faction, std::set()); picName = graphics->ERMUtoPicture[faction][buildID]; picNumber = -1; diff --git a/lib/CGameState.cpp b/lib/CGameState.cpp index 615d23283..2a50fea7b 100644 --- a/lib/CGameState.cpp +++ b/lib/CGameState.cpp @@ -1720,8 +1720,13 @@ void CGameState::initTowns() if (owner->human && //human-owned map->towns[g]->pos == pi.posOfMainTown) { - map->towns[g]->builtBuildings.insert( - CBuildingHandler::campToERMU(chosenBonus->info1, map->towns[g]->subID, map->towns[g]->builtBuildings)); + BuildingID buildingId; + if(scenarioOps->campState->camp->header.version == CampaignVersion::VCMI) + buildingId = BuildingID(chosenBonus->info1); + else + buildingId = CBuildingHandler::campToERMU(chosenBonus->info1, map->towns[g]->subID, map->towns[g]->builtBuildings); + + map->towns[g]->builtBuildings.insert(buildingId); break; } } diff --git a/lib/mapping/CCampaignHandler.cpp b/lib/mapping/CCampaignHandler.cpp index 195a18f45..a243b70cb 100644 --- a/lib/mapping/CCampaignHandler.cpp +++ b/lib/mapping/CCampaignHandler.cpp @@ -24,6 +24,7 @@ #include "../mapObjects/CGHeroInstance.h"//for hero crossover #include "../CHeroHandler.h" #include "../Languages.h" +#include "../StringConstants.h" #include "CMapService.h" #include "CMap.h" #include "CMapInfo.h" @@ -319,7 +320,7 @@ CScenarioTravel CCampaignHandler::readScenarioTravelFromJson(JsonNode & reader, 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(); + bonus.info1 = vstd::find_pos(EBuildingType::names, bjson["type"].String()); else { if(int heroId = heroSpecialMap[bjson["hero"].String()])