def canCityBuildUnit(unitInfo, city, eAskingTeam, checkBonuses=True): # religion if unitInfo.isPrereqReligion(): if not city or city.getReligionCount() > 0: # EF: Seems odd to enforce NO religions in the city, # but this is how CvPlot.canTrain() does it. # The function should actually be called isPrereqNoReligion(). return False eReligion = unitInfo.getPrereqReligion() if eReligion != -1 and not (city and city.isHasReligion(eReligion)): return False # corporation eCorp = unitInfo.getPrereqCorporation() if eCorp != -1 and not (city and city.isActiveCorporation(eCorp)): return False # skipping isPrereqBonuses as the land part looks broken # and we don't want to limit work boats if all resources are covered # domain if unitInfo.getDomainType() == DomainTypes.DOMAIN_SEA: if not (city and PlayerUtil.isSaltWaterPort(city, eAskingTeam)): return False # EF: this is how CyPlot does it #plot = city.plot() #if not plot.isWater() or not plot.isCoastalLand(unitInfo.getMinAreaSize()): # continue else: minArea = unitInfo.getMinAreaSize() if minArea != -1: if eAskingTeam != -1 or not city or city.plot().area().getNumTiles( ) < minArea: return False # holy city eReligion = unitInfo.getHolyCity() if eReligion != -1 and not (city and city.isHolyCity(eReligion)): return False # building eBuilding = unitInfo.getPrereqBuilding() if eBuilding != -1: if eAskingTeam != -1 or not city: return False if city.getNumBuilding(eBuilding) == 0: eSpecialBuilding = gc.getBuildingInfo( eBuilding).getSpecialBuildingType() if eSpecialBuilding == -1 or not gc.getPlayer(city.getOwner( )).isSpecialBuildingNotRequired(eSpecialBuilding): return False # resources if checkBonuses and not cityHasBonusesForUnit(unitInfo, city): return False # passes all tests for this city return True
def canCityBuildUnit(unitInfo, city, eAskingTeam, checkBonuses=True): # religion if unitInfo.isPrereqReligion(): if not city or city.getReligionCount() > 0: # EF: Seems odd to enforce NO religions in the city, # but this is how CvPlot.canTrain() does it. # The function should actually be called isPrereqNoReligion(). return False eReligion = unitInfo.getPrereqReligion() if eReligion != -1 and not (city and city.isHasReligion(eReligion)): return False # corporation eCorp = unitInfo.getPrereqCorporation() if eCorp != -1 and not (city and city.isActiveCorporation(eCorp)): return False # skipping isPrereqBonuses as the land part looks broken # and we don't want to limit work boats if all resources are covered # domain if unitInfo.getDomainType() == DomainTypes.DOMAIN_SEA: if not (city and PlayerUtil.isSaltWaterPort(city, eAskingTeam)): return False # EF: this is how CyPlot does it # plot = city.plot() # if not plot.isWater() or not plot.isCoastalLand(unitInfo.getMinAreaSize()): # continue else: minArea = unitInfo.getMinAreaSize() if minArea != -1: if eAskingTeam != -1 or not city or city.plot().area().getNumTiles() < minArea: return False # holy city eReligion = unitInfo.getHolyCity() if eReligion != -1 and not (city and city.isHolyCity(eReligion)): return False # building eBuilding = unitInfo.getPrereqBuilding() if eBuilding != -1: if eAskingTeam != -1 or not city: return False if city.getNumBuilding(eBuilding) == 0: eSpecialBuilding = gc.getBuildingInfo(eBuilding).getSpecialBuildingType() if eSpecialBuilding == -1 or not gc.getPlayer(city.getOwner()).isSpecialBuildingNotRequired( eSpecialBuilding ): return False # resources if checkBonuses and not cityHasBonusesForUnit(unitInfo, city): return False # passes all tests for this city return True