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