Example #1
0
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
Example #2
0
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
Example #3
0
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
Example #4
0
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
Example #5
0
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
Example #6
0
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