Example #1
0
def calculateTradeRoutes(playerOrID, withPlayerOrID=None):
    """
	Returns the domestic and foreign trade route yields and counts for <playerOrID>:
	domestic yield, domestic count, foreign yield, and foreign count.
	
	If <withPlayerOrID> is given, only counts trade routes to their cities.
	If Fractional Trade Routes is active, the value returned is fractional (times 100).
	"""
    domesticTrade = domesticCount = foreignTrade = foreignCount = 0
    eTeam = PlayerUtil.getPlayerTeam(playerOrID)
    eWithPlayer = PlayerUtil.getPlayerID(withPlayerOrID)
    for city in PlayerUtil.playerCities(playerOrID):
        for i in range(city.getTradeRoutes()):
            tradeCity = city.getTradeCity(i)
            if tradeCity and tradeCity.getOwner() >= 0 and (
                    eWithPlayer == -1 or eWithPlayer == tradeCity.getOwner()):
                trade = city.calculateTradeYield(
                    YieldTypes.YIELD_COMMERCE,
                    TRADE_PROFIT_FUNC(city, tradeCity))
                if tradeCity.getTeam() == eTeam:
                    domesticTrade += trade
                    domesticCount += 1
                else:
                    foreignTrade += trade
                    foreignCount += 1
    return domesticTrade, domesticCount, foreignTrade, foreignCount
Example #2
0
def isWillingToTalk(playerOrID, toPlayerOrID):
	"""
	Returns True if <player> is willing to talk to <toPlayer>.
	
	- Every player is willing to talk to themselves
	- All human players are willing to talk
	- Uses BUG DLL if present, otherwise scans attitude hover text
	  for "Refuses to Talk!!!" in the current language
	
	Note: This function does not check if the two players can make contact.
	"""
	playerID, player = PlayerUtil.getPlayerAndID(playerOrID)
	toPlayerID = PlayerUtil.getPlayerID(toPlayerOrID)
	# if playerID == toPlayerID or player.isHuman():
		# # all players talk to themselves, and all humans talk
		# return True
	# if BugDll.isPresent():
		# return player.AI_isWillingToTalk(toPlayerID)
	# else:
		# hover = AttitudeUtil.getAttitudeString(playerID, toPlayerID)
		# if hover:
			# return (hover.find(BugUtil.getPlainText("TXT_KEY_MISC_REFUSES_TO_TALK")) == -1)
		# else:
			# # haven't met yet
			# return False
	# K-Mod
	return playerID == toPlayerID or player.AI_isWillingToTalk(toPlayerID)
def getTradeableBonuses(fromPlayerOrID, toPlayerOrID):
	"""
	Returns two sets of bonus IDs that <fromPlayer> will and won't trade to <toPlayer>.
	
	Assumes that the two players can trade bonuses.
	"""
	fromPlayer = PlayerUtil.getPlayer(fromPlayerOrID)
	eToPlayer = PlayerUtil.getPlayerID(toPlayerOrID)
	fromPlayerIsHuman = fromPlayer.isHuman()
	will = set()
	wont = set()
	tradeData = TradeData()
	tradeData.ItemType = TradeableItems.TRADE_RESOURCES
	for eBonus in range(gc.getNumBonusInfos()):
		tradeData.iData = eBonus
		if fromPlayer.canTradeItem(eToPlayer, tradeData, False):
			if fromPlayerIsHuman or fromPlayer.canTradeItem(eToPlayer, tradeData, True):
				will.add(eBonus)
			else:
				wont.add(eBonus)
	return will, wont
Example #4
0
def getTradeableBonuses(fromPlayerOrID, toPlayerOrID):
    """
    Returns two sets of bonus IDs that <fromPlayer> will and won't trade to <toPlayer>.
    
    Assumes that the two players can trade bonuses.
    """
    fromPlayer = PlayerUtil.getPlayer(fromPlayerOrID)
    eToPlayer = PlayerUtil.getPlayerID(toPlayerOrID)
    fromPlayerIsHuman = fromPlayer.isHuman()
    will = set()
    wont = set()
    tradeData = TradeData()
    tradeData.ItemType = TradeableItems.TRADE_RESOURCES
    for eBonus in range(gc.getNumBonusInfos()):
        tradeData.iData = eBonus
        if fromPlayer.canTradeItem(eToPlayer, tradeData, False):
            if fromPlayerIsHuman or fromPlayer.canTradeItem(eToPlayer, tradeData, True):
                will.add(eBonus)
            else:
                wont.add(eBonus)
    return will, wont
Example #5
0
def calculateTradeRoutes(playerOrID, withPlayerOrID=None):
    """
	Returns the domestic and foreign trade route yields and counts for <playerOrID>:
	domestic yield, domestic count, foreign yield, and foreign count.
	
	If <withPlayerOrID> is given, only counts trade routes to their cities.
	If Fractional Trade Routes is active, the value returned is fractional (times 100).
	"""
    domesticTrade = domesticCount = foreignTrade = foreignCount = 0
    # advc.001: Bugfixes merged from Dawn of Civilization
    eTeam = PlayerUtil.getPlayerTeamID(playerOrID)  # (was getPlayerTeam)
    eWithPlayer = PlayerUtil.getPlayerID(withPlayerOrID)
    for city in PlayerUtil.playerCities(playerOrID):
        # advc.001: (Only relevant for FractionalTrade)
        cityDomesticTrade = cityForeignTrade = 0
        for i in range(city.getTradeRoutes()):
            tradeCity = city.getTradeCity(i)
            if tradeCity and tradeCity.getOwner() >= 0 and (
                    eWithPlayer == -1 or eWithPlayer == tradeCity.getOwner()):
                trade = city.calculateTradeYield(
                    YieldTypes.YIELD_COMMERCE,
                    TRADE_PROFIT_FUNC(city, tradeCity))
                if tradeCity.getTeam() == eTeam:
                    cityDomesticTrade += trade  # advc.001: was domesticTrade+=...
                    domesticCount += 1
                else:
                    cityForeignTrade += trade  # advc.001: was foreignTrade+=...
                    foreignCount += 1
        # <advc.001>
        if isFractionalTrade() and not withPlayerOrID:
            cityDomesticTrade //= 100
            cityForeignTrade //= 100
        domesticTrade += cityDomesticTrade
        foreignTrade += cityForeignTrade
    if isFractionalTrade() and withPlayerOrID:
        domesticTrade //= 100
        foreignTrade //= 100
    # </advc.001>
    return domesticTrade, domesticCount, foreignTrade, foreignCount
Example #6
0
def getTradeableBonuses(fromPlayerOrID, toPlayerOrID):
    """
	Returns two sets of bonus IDs that <fromPlayer> will and won't trade to <toPlayer>.
	
	Assumes that the two players can trade bonuses.
	"""
    fromPlayer = PlayerUtil.getPlayer(fromPlayerOrID)
    eToPlayer = PlayerUtil.getPlayerID(toPlayerOrID)
    #fromPlayerIsHuman = fromPlayer.isHuman() # advc.306: Now unused
    will = set()
    wont = set()
    tradeData = TradeData()
    tradeData.ItemType = TradeableItems.TRADE_RESOURCES
    for eBonus in range(gc.getNumBonusInfos()):
        tradeData.iData = eBonus
        if fromPlayer.canTradeItem(eToPlayer, tradeData, False):
            # adcv.036: Removed 'fromPlayerIsHuman or'. Human trade denial checks whether eToPlayer needs eBonus.
            if fromPlayer.canTradeItem(eToPlayer, tradeData, True):
                will.add(eBonus)
            else:
                wont.add(eBonus)
    return will, wont
def calculateTradeRoutes(playerOrID, withPlayerOrID=None):
	"""
	Returns the domestic and foreign trade route yields and counts for <playerOrID>:
	domestic yield, domestic count, foreign yield, and foreign count.
	
	If <withPlayerOrID> is given, only counts trade routes to their cities.
	If Fractional Trade Routes is active, the value returned is fractional (times 100).
	"""
	domesticTrade = domesticCount = foreignTrade = foreignCount = 0
	eTeam = PlayerUtil.getPlayerTeam(playerOrID)
	eWithPlayer = PlayerUtil.getPlayerID(withPlayerOrID)
	for city in PlayerUtil.playerCities(playerOrID):
		for i in range(city.getTradeRoutes()):
			tradeCity = city.getTradeCity(i)
			if tradeCity and tradeCity.getOwner() >= 0 and (eWithPlayer == -1 or eWithPlayer == tradeCity.getOwner()):
				trade = city.calculateTradeYield(YieldTypes.YIELD_COMMERCE, TRADE_PROFIT_FUNC(city, tradeCity))
				if tradeCity.getTeam() == eTeam:
					domesticTrade += trade
					domesticCount += 1
				else:
					foreignTrade += trade
					foreignCount += 1
	return domesticTrade, domesticCount, foreignTrade, foreignCount