瀏覽代碼

String building id

nordsoft 2 年之前
父節點
當前提交
08809f1cdc
共有 3 個文件被更改,包括 14 次插入4 次删除
  1. 5 1
      client/lobby/CBonusSelection.cpp
  2. 7 2
      lib/CGameState.cpp
  3. 2 1
      lib/mapping/CCampaignHandler.cpp

+ 5 - 1
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>());
+			BuildingID buildID;
+			if(getCampaign()->camp->header.version == CampaignVersion::VCMI)
+				buildID = BuildingID(bonDescs[i].info1);
+			else
+				buildID = CBuildingHandler::campToERMU(bonDescs[i].info1, faction, std::set<BuildingID>());
 			picName = graphics->ERMUtoPicture[faction][buildID];
 			picNumber = -1;
 

+ 7 - 2
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;
 					}
 				}

+ 2 - 1
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()])