1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-08-08 22:26:51 +02:00

Merge pull request #5174 from MichalZr6/fix_third_upgrades

Fix upgrades in Fort and town's dwellings
This commit is contained in:
Ivan Savenko
2024-12-30 14:51:48 +02:00
committed by GitHub
2 changed files with 12 additions and 14 deletions

View File

@ -17,13 +17,9 @@ namespace NKAI
void BuildAnalyzer::updateTownDwellings(TownDevelopmentInfo & developmentInfo) void BuildAnalyzer::updateTownDwellings(TownDevelopmentInfo & developmentInfo)
{ {
auto townInfo = developmentInfo.town->getTown();
auto creatures = townInfo->creatures;
auto buildings = townInfo->getAllBuildings();
std::map<BuildingID, BuildingID> parentMap; std::map<BuildingID, BuildingID> parentMap;
for(auto &pair : townInfo->buildings) for(auto &pair : developmentInfo.town->getTown()->buildings)
{ {
if(pair.second->upgrade != BuildingID::NONE) if(pair.second->upgrade != BuildingID::NONE)
{ {
@ -36,13 +32,14 @@ void BuildAnalyzer::updateTownDwellings(TownDevelopmentInfo & developmentInfo)
logAi->trace("Checking dwelling level %d", level); logAi->trace("Checking dwelling level %d", level);
BuildingInfo nextToBuild = BuildingInfo(); BuildingInfo nextToBuild = BuildingInfo();
for(int upgradeIndex : {2, 1, 0}) BuildingID buildID = BuildingID(BuildingID::getDwellingFromLevel(level, 0));
for(; developmentInfo.town->getBuildings().count(buildID); BuildingID::advanceDwelling(buildID))
{ {
BuildingID building = BuildingID(BuildingID::getDwellingFromLevel(level, upgradeIndex)); if(!developmentInfo.town->hasBuilt(buildID))
if(!vstd::contains(buildings, building))
continue; // no such building in town continue; // no such building in town
auto info = getBuildingOrPrerequisite(developmentInfo.town, building); auto info = getBuildingOrPrerequisite(developmentInfo.town, buildID);
if(info.exists) if(info.exists)
{ {

View File

@ -1813,12 +1813,13 @@ CFortScreen::CFortScreen(const CGTownInstance * town):
BuildingID buildingID; BuildingID buildingID;
if(fortSize == town->getTown()->creatures.size()) if(fortSize == town->getTown()->creatures.size())
{ {
BuildingID dwelling = BuildingID::getDwellingFromLevel(i, 1); BuildingID buildID = BuildingID(BuildingID::getDwellingFromLevel(i, 0));
if(town->hasBuilt(dwelling)) for(; town->getBuildings().count(buildID); BuildingID::advanceDwelling(buildID))
buildingID = BuildingID(BuildingID::getDwellingFromLevel(i, 1)); {
else if(town->hasBuilt(buildID))
buildingID = BuildingID(BuildingID::getDwellingFromLevel(i, 0)); buildingID = buildID;
}
} }
else else
{ {