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

Fix creature upgrades in Fort and town's dwellings

This commit is contained in:
MichalZr6
2024-12-30 00:06:10 +01:00
parent 60435a70e2
commit 4e9f052e98
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
{