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:
@ -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)
|
||||
{
|
||||
|
@ -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
|
||||
{
|
||||
|
Reference in New Issue
Block a user