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)
{
auto townInfo = developmentInfo.town->getTown();
auto creatures = townInfo->creatures;
auto buildings = townInfo->getAllBuildings();
std::map<BuildingID, BuildingID> parentMap;
for(auto &pair : townInfo->buildings)
for(auto &pair : developmentInfo.town->getTown()->buildings)
{
if(pair.second->upgrade != BuildingID::NONE)
{
@ -36,13 +32,14 @@ void BuildAnalyzer::updateTownDwellings(TownDevelopmentInfo & developmentInfo)
logAi->trace("Checking dwelling level %d", level);
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(!vstd::contains(buildings, building))
if(!developmentInfo.town->hasBuilt(buildID))
continue; // no such building in town
auto info = getBuildingOrPrerequisite(developmentInfo.town, building);
auto info = getBuildingOrPrerequisite(developmentInfo.town, buildID);
if(info.exists)
{

View File

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