def getKnownTrainableUnits(playerOrID, askingPlayerOrID, knowableUnits, bonuses, military=None): player, team = PlayerUtil.getPlayerAndTeam(playerOrID) askingPlayer = PlayerUtil.getPlayer(askingPlayerOrID) eAskingTeam, askingTeam = PlayerUtil.getPlayerTeamAndID(askingPlayer) #trade = player.canTradeNetworkWith(askingPlayer.getID()) cities = PlayerUtil.getPlayerCities( player, lambda city: city.isRevealed(eAskingTeam, False)) # separate units into two groups: yes and maybe units = getTrainableUnits(playerOrID, knowableUnits, False, military) yesUnits = set() maybeUnits = set() BugUtil.debug("-----------------------") for eUnit in units: if not canAnyCityBuildUnit(eUnit, cities, eAskingTeam, False): BugUtil.debug(" no %s", gc.getUnitInfo(eUnit).getDescription()) elif hasBonusesForUnit(eUnit, bonuses): BugUtil.debug(" yes %s", gc.getUnitInfo(eUnit).getDescription()) yesUnits.add(eUnit) elif bonuses is None: BugUtil.debug(" maybe %s", gc.getUnitInfo(eUnit).getDescription()) maybeUnits.add(eUnit) return yesUnits, maybeUnits
def getTrainableAndUntrainableUnits(playerOrID, knowableUnits, military=None): player, team = PlayerUtil.getPlayerAndTeam(playerOrID) cities = PlayerUtil.getPlayerCities(player) # separate units into two groups: yes and no units = getTrainableUnits(playerOrID, knowableUnits, False, military) yesUnits = set() noUnits = set() BugUtil.debug("-----------------------") for eUnit in units: if canAnyCityBuildUnit(eUnit, cities, -1, True): BugUtil.debug(" yes %s", gc.getUnitInfo(eUnit).getDescription()) yesUnits.add(eUnit) else: BugUtil.debug(" no %s", gc.getUnitInfo(eUnit).getDescription()) noUnits.add(eUnit) return yesUnits, noUnits
def getKnownTrainableUnits(playerOrID, askingPlayerOrID, knowableUnits, bonuses, military=None): player, team = PlayerUtil.getPlayerAndTeam(playerOrID) askingPlayer = PlayerUtil.getPlayer(askingPlayerOrID) eAskingTeam, askingTeam = PlayerUtil.getPlayerTeamAndID(askingPlayer) # trade = player.canTradeNetworkWith(askingPlayer.getID()) cities = PlayerUtil.getPlayerCities(player, lambda city: city.isRevealed(eAskingTeam, False)) # separate units into two groups: yes and maybe units = getTrainableUnits(playerOrID, knowableUnits, False, military) yesUnits = set() maybeUnits = set() BugUtil.debug("-----------------------") for eUnit in units: if not canAnyCityBuildUnit(eUnit, cities, eAskingTeam, False): BugUtil.debug(" no %s", gc.getUnitInfo(eUnit).getDescription()) elif hasBonusesForUnit(eUnit, bonuses): BugUtil.debug(" yes %s", gc.getUnitInfo(eUnit).getDescription()) yesUnits.add(eUnit) elif bonuses is None: BugUtil.debug(" maybe %s", gc.getUnitInfo(eUnit).getDescription()) maybeUnits.add(eUnit) return yesUnits, maybeUnits
def getTrainableUnits(playerOrID, knowableUnits, checkCities=True, military=None): """ Returns the set of all units the player can train, including obsolete ones. """ game = CyGame() player, team = PlayerUtil.getPlayerAndTeam(playerOrID) civInfo = gc.getCivilizationInfo(player.getCivilizationType()) if checkCities: cities = PlayerUtil.getPlayerCities(player) else: cities = None units = set() BugUtil.debug("%s =========", player.getCivilizationShortDescription(0)) for eClass in range(NUM_CLASSES): eUnit = civInfo.getCivilizationUnits(eClass) if eUnit == -1 or eUnit not in knowableUnits: #BugUtil.debug(" %s -> unknowable", gc.getUnitClassInfo(eClass).getDescription()) continue unitInfo = gc.getUnitInfo(eUnit) # military if military is not None: combat = (unitInfo.getUnitCombatType() > 0 or unitInfo.getNukeRange() != -1 or unitInfo.getAirCombat() > 0) if military != combat: #BugUtil.debug(" %s -> combat is %s", unitInfo.getDescription(), combat) continue # OCC and Settlers if game.isOption(GameOptionTypes.GAMEOPTION_ONE_CITY_CHALLENGE ) and unitInfo.isFound(): BugUtil.debug(" %s -> no founding units in OCC", unitInfo.getDescription()) continue # techs for eTech in unitTechs[eUnit]: if not team.isHasTech(eTech): BugUtil.debug(" %s -> doesn't know %s", unitInfo.getDescription(), gc.getTechInfo(eTech).getDescription()) missing = True break else: missing = False if missing: continue # state religion eReligion = unitInfo.getStateReligion() if eReligion != -1 and player.getStateReligion() != eReligion: BugUtil.debug(" %s -> wrong state religion", unitInfo.getDescription()) continue # nukes if (game.isNoNukes() or not game.isNukesValid()) and unitInfo.getNukeRange() != -1: BugUtil.debug(" %s -> no nukes", unitInfo.getDescription()) continue # getSpecialUnitType, game.isSpecialUnitValid eSpecialType = unitInfo.getSpecialUnitType() if eSpecialType != -1 and not game.isSpecialUnitValid(eSpecialType): BugUtil.debug(" %s -> special unit type %s invalid", unitInfo.getDescription(), gc.getSpecialUnitInfo(eSpecialType).getDescription()) continue # cities if cities and not canAnyCityBuildUnit(eUnit, cities, -1, True): BugUtil.debug(" %s -> no city can train unit", unitInfo.getDescription()) continue BugUtil.debug(" %s", unitInfo.getDescription()) units.add(eUnit) return units
def getTrainableUnits(playerOrID, knowableUnits, checkCities=True, military=None): """ Returns the set of all units the player can train, including obsolete ones. """ game = CyGame() player, team = PlayerUtil.getPlayerAndTeam(playerOrID) civInfo = gc.getCivilizationInfo(player.getCivilizationType()) if checkCities: cities = PlayerUtil.getPlayerCities(player) else: cities = None units = set() BugUtil.debug("%s =========", player.getName()) for eClass in range(NUM_CLASSES): eUnit = civInfo.getCivilizationUnits(eClass) if eUnit == -1 or eUnit not in knowableUnits: #BugUtil.debug(" %s -> unknowable", gc.getUnitClassInfo(eClass).getDescription()) continue unitInfo = gc.getUnitInfo(eUnit) # not buildable eCost = unitInfo.getProductionCost() if (eCost == -1): BugUtil.debug(" %s -> not a buildable unit", unitInfo.getDescription()) continue # military if military is not None: combat = (unitInfo.getUnitCombatType() > 0 or unitInfo.getNukeRange() != -1 or unitInfo.getAirCombat() > 0) if military != combat: #BugUtil.debug(" %s -> combat is %s", unitInfo.getDescription(), combat) continue # OCC and Settlers if game.isOption(GameOptionTypes.GAMEOPTION_ONE_CITY_CHALLENGE) and unitInfo.isFound(): BugUtil.debug(" %s -> no founding units in OCC", unitInfo.getDescription()) continue # techs for eTech in unitTechs[eUnit]: if not team.isHasTech(eTech): BugUtil.debug(" %s -> doesn't know %s", unitInfo.getDescription(), gc.getTechInfo(eTech).getDescription()) missing = True break else: missing = False if missing: continue # civ specific ePrereqCiv = unitInfo.getPrereqCiv() if ePrereqCiv != -1 and player.getCivilizationType() != ePrereqCiv: BugUtil.debug(" %s -> wrong civilization", unitInfo.getDescription()) continue # state religion eReligion = unitInfo.getStateReligion() if eReligion != -1 and player.getStateReligion() != eReligion: BugUtil.debug(" %s -> wrong state religion", unitInfo.getDescription()) continue # nukes if (game.isNoNukes() or not game.isNukesValid()) and unitInfo.getNukeRange() != -1: BugUtil.debug(" %s -> no nukes", unitInfo.getDescription()) continue # getSpecialUnitType, game.isSpecialUnitValid eSpecialType = unitInfo.getSpecialUnitType() if eSpecialType != -1 and not game.isSpecialUnitValid(eSpecialType): BugUtil.debug(" %s -> special unit type %s invalid", unitInfo.getDescription(), gc.getSpecialUnitInfo(eSpecialType).getDescription()) continue # cities if cities and not canAnyCityBuildUnit(eUnit, cities, -1, True): BugUtil.debug(" %s -> no city can train unit", unitInfo.getDescription()) continue BugUtil.debug(" %s", unitInfo.getDescription()) units.add(eUnit) return units