示例#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
示例#2
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
示例#3
0
def getCanTrainUnits(playerOrID, askingPlayerOrID=None, military=None):
    """
	Returns the set of all units the player can train.
	
	Searches all of the player's cities to find which units can be trained.
	
	If askingPlayerOrID is given, only cities they have seen are checked, and
	only units whose prerequisite techs they know or can research are returned.
	Also, if the two players' trade networks are not connected, units that
	require resources to train are returned in a second set.
	
	If military is provided, only military or civilian units are checked
	depending on its value, True or False, respectively.
	
	*** OBSOLETE ***
	
	"""
    player, team = PlayerUtil.getPlayerAndTeam(playerOrID)
    askingPlayer = PlayerUtil.getPlayer(askingPlayerOrID)
    if askingPlayer:
        eAskingTeam, askingTeam = PlayerUtil.getPlayerTeamAndID(askingPlayer)
        trade = player.canTradeNetworkWith(askingPlayer.getID())
    civInfo = gc.getCivilizationInfo(player.getCivilizationType())
    units = set()
    maybeUnits = set()
    for eClass in range(NUM_CLASSES):
        eUnit = civInfo.getCivilizationUnits(eClass)
        if eUnit == -1:
            classInfo = gc.getUnitClassInfo(eClass)
            BugUtil.debug("%s doesn't have %s", civInfo.getDescription(),
                          classInfo.getDescription())
            eUnit = classInfo.getDefaultUnitIndex()
        unitInfo = gc.getUnitInfo(eUnit)
        if unitInfo:
            if ((military == True and unitInfo.getUnitCombatType() <= 0) or
                (military == False and unitInfo.getUnitCombatType() > 0)):
                BugUtil.debug("skipping (non-)military %s",
                              unitInfo.getDescription())
                continue
            if askingPlayer:
                for eTech in unitTechs[eUnit]:
                    if not (askingTeam.isHasTech(eTech)
                            or askingPlayer.canResearch(eTech, False)):
                        BugUtil.debug(
                            "%s doesn't comprehend %s",
                            askingPlayer.getCivilizationShortDescription(0),
                            gc.getTechInfo(eTech).getDescription())
                        skip = True
                        break
                else:
                    skip = False
                if skip:
                    BugUtil.debug("skipping unknowable %s",
                                  unitInfo.getDescription())
                    continue
            for city in PlayerUtil.playerCities(player):
                if askingPlayer:
                    if not city.isRevealed(eAskingTeam, False):
                        continue
                    if city.canTrain(eUnit, False, not trade):
                        if eUnit in unitsWithBonuses:
                            maybeUnits.add(eUnit)
                        else:
                            units.add(eUnit)
                        break
                else:
                    if city.canTrain(eUnit, False, False):
                        units.add(eUnit)
                        break
    BugUtil.debug("%s can train:", player.getCivilizationShortDescription(0))
    for eUnit in units:
        unitInfo = gc.getUnitInfo(eUnit)
        BugUtil.debug("  %s", unitInfo.getDescription())
    if askingPlayer:
        BugUtil.debug("%s can maybe train:",
                      player.getCivilizationShortDescription(0))
        for eUnit in maybeUnits:
            unitInfo = gc.getUnitInfo(eUnit)
            BugUtil.debug("  %s", unitInfo.getDescription())
        return units, maybeUnits
    else:
        return units
示例#4
0
文件: UnitUtil.py 项目: markourm/fall
def getCanTrainUnits(playerOrID, askingPlayerOrID=None, military=None):
	"""
	Returns the set of all units the player can train.
	
	Searches all of the player's cities to find which units can be trained.
	
	If askingPlayerOrID is given, only cities they have seen are checked, and
	only units whose prerequisite techs they know or can research are returned.
	Also, if the two players' trade networks are not connected, units that
	require resources to train are returned in a second set.
	
	If military is provided, only military or civilian units are checked
	depending on its value, True or False, respectively.
	
	*** OBSOLETE ***
	
	"""
	player, team = PlayerUtil.getPlayerAndTeam(playerOrID)
	askingPlayer = PlayerUtil.getPlayer(askingPlayerOrID)
	if askingPlayer:
		eAskingTeam, askingTeam = PlayerUtil.getPlayerTeamAndID(askingPlayer)
		trade = player.canTradeNetworkWith(askingPlayer.getID())
	civInfo = gc.getCivilizationInfo(player.getCivilizationType())
	units = set()
	maybeUnits = set()
	for eClass in range(NUM_CLASSES):
		eUnit = civInfo.getCivilizationUnits(eClass)
		if eUnit == -1:
			classInfo = gc.getUnitClassInfo(eClass)
			BugUtil.debug("%s doesn't have %s", civInfo.getDescription(), classInfo.getDescription())
			eUnit = classInfo.getDefaultUnitIndex()
		unitInfo = gc.getUnitInfo(eUnit)
		if unitInfo:
			if ((military == True and unitInfo.getUnitCombatType() <= 0)
			or (military == False and unitInfo.getUnitCombatType() > 0)):
				BugUtil.debug("skipping (non-)military %s", unitInfo.getDescription())
				continue
			if askingPlayer:
				for eTech in unitTechs[eUnit]:
					if not (askingTeam.isHasTech(eTech) or askingPlayer.canResearch(eTech, False)):
						BugUtil.debug("%s doesn't comprehend %s", askingPlayer.getName(), gc.getTechInfo(eTech).getDescription())
						skip = True
						break
				else:
					skip = False
				if skip:
					BugUtil.debug("skipping unknowable %s", unitInfo.getDescription())
					continue
			for city in PlayerUtil.playerCities(player):
				if askingPlayer:
					if not city.isRevealed(eAskingTeam, False):
						continue
					if city.canTrain(eUnit, False, not trade):
						if eUnit in unitsWithBonuses:
							maybeUnits.add(eUnit)
						else:
							units.add(eUnit)
						break
				else:
					if city.canTrain(eUnit, False, False):
						units.add(eUnit)
						break
	BugUtil.debug("%s can train:", player.getName())
	for eUnit in units:
		unitInfo = gc.getUnitInfo(eUnit)
		BugUtil.debug("  %s", unitInfo.getDescription())
	if askingPlayer:
		BugUtil.debug("%s can maybe train:", player.getName())
		for eUnit in maybeUnits:
			unitInfo = gc.getUnitInfo(eUnit)
			BugUtil.debug("  %s", unitInfo.getDescription())
		return units, maybeUnits
	else:
		return units