def isWHEOOH(playerOrID, askingPlayerOrID): """ Returns True if askingPlayerOrID can see that playerOrID is WHEOOH. In game terms, this is the case if the player gives the TOO_MANY_WARS denial type for a request to go to war against a rival. """ askedPlayer, askedTeam = getPlayerAndTeam(playerOrID) askingPlayer, askingTeam = getPlayerAndTeam(askingPlayerOrID) if not TradeUtil.canTrade(askingPlayer, askedPlayer): return False tradeData = TradeData() tradeData.ItemType = TradeableItems.TRADE_WAR for player in players(alive=True, barbarian=False, minor=False): eTeam = player.getTeam() if eTeam == askingPlayer.getTeam() or eTeam == askedPlayer.getTeam( ) or askedTeam.isAtWar(eTeam): # won't DoW your team, their team, or a team they are fighting continue if not ((askingTeam.isHasMet(eTeam) and askedTeam.isHasMet(eTeam)) or gc.getGame().isDebugMode()): # won't DoW someone you or they haven't met continue tradeData.iData = eTeam if askedPlayer.canTradeItem(askingPlayer.getID(), tradeData, False): denial = askedPlayer.getTradeDenial(askingPlayer.getID(), tradeData) if denial == DenialTypes.DENIAL_TOO_MANY_WARS: return True return False
def getPossibleEmbargos(playerOrID, askingPlayerOrID): """ Returns a list of all CyPlayers with which playerOrID will stop trading. The askingPlayerOrID is used to limit the list to players they have met. """ askedPlayer, askedTeam = getPlayerAndTeam(playerOrID) askingPlayer, askingTeam = getPlayerAndTeam(askingPlayerOrID) if not TradeUtil.canTrade(askingPlayer, askedPlayer): return () embargos = [] tradeData = TradeData() tradeData.ItemType = TradeableItems.TRADE_EMBARGO for player in players(alive=True, barbarian=False, minor=False): eTeam = player.getTeam() if eTeam == askingPlayer.getTeam() or eTeam == askedPlayer.getTeam( ) or askedTeam.isAtWar(eTeam): # won't embargo your team, their team, or a team they are fighting continue if not ((askingTeam.isHasMet(eTeam) and askedTeam.isHasMet(eTeam)) or gc.getGame().isDebugMode()): # won't embargo someone you or they haven't met continue tradeData.iData = eTeam if askedPlayer.canTradeItem(askingPlayer.getID(), tradeData, True): embargos.append(player) return embargos
def getPossibleWars(playerOrID, askingPlayerOrID): """ Returns a tuple containing the WHEOOH status of the given player and a list of all CyPlayers on which playerOrID will declare war in a trade. The askingPlayerOrID is used to limit the list to players they have met. """ askedPlayer, askedTeam = getPlayerAndTeam(playerOrID) askingPlayer, askingTeam = getPlayerAndTeam(askingPlayerOrID) if not TradeUtil.canTrade(askingPlayer, askedPlayer): return (False, ()) wheooh = False wars = [] tradeData = TradeData() tradeData.ItemType = TradeableItems.TRADE_WAR for player in players(alive=True, barbarian=False, minor=False): eTeam = player.getTeam() if eTeam == askingPlayer.getTeam() or eTeam == askedPlayer.getTeam( ) or askedTeam.isAtWar(eTeam): # won't DoW your team, their team, or a team they are fighting continue if not ((askingTeam.isHasMet(eTeam) and askedTeam.isHasMet(eTeam)) or gc.getGame().isDebugMode()): # won't DoW someone you or they haven't met continue tradeData.iData = eTeam if askedPlayer.canTradeItem(askingPlayer.getID(), tradeData, False): denial = askedPlayer.getTradeDenial(askingPlayer.getID(), tradeData) if denial == DenialTypes.NO_DENIAL: wars.append(player) elif denial == DenialTypes.DENIAL_TOO_MANY_WARS: wheooh = True return (wheooh, wars)
def isWHEOOH(playerOrID, askingPlayerOrID): """ Returns True if askingPlayerOrID can see that playerOrID is WHEOOH. In game terms, this is the case if the player gives the TOO_MANY_WARS denial type for a request to go to war against a rival. """ askedPlayer, askedTeam = getPlayerAndTeam(playerOrID) askingPlayer, askingTeam = getPlayerAndTeam(askingPlayerOrID) if not TradeUtil.canTrade(askingPlayer, askedPlayer): return False tradeData = TradeData() tradeData.ItemType = TradeableItems.TRADE_WAR for player in players(alive=True, barbarian=False, minor=False): eTeam = player.getTeam() if eTeam == askingPlayer.getTeam() or eTeam == askedPlayer.getTeam() or askedTeam.isAtWar(eTeam): # won't DoW your team, their team, or a team they are fighting continue if not ((askingTeam.isHasMet(eTeam) and askedTeam.isHasMet(eTeam)) or gc.getGame().isDebugMode()): # won't DoW someone you or they haven't met continue tradeData.iData = eTeam if askedPlayer.canTradeItem(askingPlayer.getID(), tradeData, False): denial = askedPlayer.getTradeDenial(askingPlayer.getID(), tradeData) if denial == DenialTypes.DENIAL_TOO_MANY_WARS: return True return False
def getPossibleEmbargos(playerOrID, askingPlayerOrID): """ Returns a list of all CyPlayers with which playerOrID will stop trading. The askingPlayerOrID is used to limit the list to players they have met. """ askedPlayer, askedTeam = getPlayerAndTeam(playerOrID) askingPlayer, askingTeam = getPlayerAndTeam(askingPlayerOrID) if not TradeUtil.canTrade(askingPlayer, askedPlayer): return () embargos = [] tradeData = TradeData() tradeData.ItemType = TradeableItems.TRADE_EMBARGO for player in players(alive=True, barbarian=False, minor=False): eTeam = player.getTeam() if eTeam == askingPlayer.getTeam() or eTeam == askedPlayer.getTeam() or askedTeam.isAtWar(eTeam): # won't embargo your team, their team, or a team they are fighting continue if not ((askingTeam.isHasMet(eTeam) and askedTeam.isHasMet(eTeam)) or gc.getGame().isDebugMode()): # won't embargo someone you or they haven't met continue tradeData.iData = eTeam if askedPlayer.canTradeItem(askingPlayer.getID(), tradeData, True): embargos.append(player) return embargos
def getPossibleWars(playerOrID, askingPlayerOrID): """ Returns a tuple containing the WHEOOH status of the given player and a list of all CyPlayers on which playerOrID will declare war in a trade. The askingPlayerOrID is used to limit the list to players they have met. """ askedPlayer, askedTeam = getPlayerAndTeam(playerOrID) askingPlayer, askingTeam = getPlayerAndTeam(askingPlayerOrID) if not TradeUtil.canTrade(askingPlayer, askedPlayer): return (False, ()) wheooh = False wars = [] tradeData = TradeData() tradeData.ItemType = TradeableItems.TRADE_WAR for player in players(alive=True, barbarian=False, minor=False): eTeam = player.getTeam() if eTeam == askingPlayer.getTeam() or eTeam == askedPlayer.getTeam() or askedTeam.isAtWar(eTeam): # won't DoW your team, their team, or a team they are fighting continue if not ((askingTeam.isHasMet(eTeam) and askedTeam.isHasMet(eTeam)) or gc.getGame().isDebugMode()): # won't DoW someone you or they haven't met continue tradeData.iData = eTeam if askedPlayer.canTradeItem(askingPlayer.getID(), tradeData, False): denial = askedPlayer.getTradeDenial(askingPlayer.getID(), tradeData) if denial == DenialTypes.NO_DENIAL: wars.append(player) elif denial == DenialTypes.DENIAL_TOO_MANY_WARS: wheooh = True return (wheooh, wars)
def canSeeCityList(playerOrID): """ Returns True if the active player can see the list of <player>'s cities. In the unmodified game, this is possible if the players have met and <player> is not a vassal of a rival. They must be able to contact (trade with) <player>, and OCC must be disabled. You can always see a teammate's cities. """ if GameUtil.isOCC(): return False askedPlayer, askedTeam = getPlayerAndTeam(playerOrID) askingPlayer, askingTeam = getActivePlayerAndTeam() iDemographicsMission = -1 if (GameUtil.isEspionage()): for iMissionLoop in range(gc.getNumEspionageMissionInfos()): if (gc.getEspionageMissionInfo(iMissionLoop).isSeeDemographics()): iDemographicsMission = iMissionLoop if gc.getGame().isOption( GameOptionTypes.GAMEOPTION_CITYCOUNT_TIED_TO_ESPIONAGE): if (askedTeam.isEverAlive()): if (askingTeam.isHasMet(playerOrID) or CyGame().isDebugMode()): if (iDemographicsMission != -1 and not askingPlayer.canDoEspionageMission( iDemographicsMission, playerOrID, None, -1)): return False if askingPlayer.getTeam() == askedPlayer.getTeam(): return True if askedTeam.isAVassal() and not askedTeam.isVassal(askingTeam.getID()): return False return TradeUtil.canTrade(askingPlayer, askedPlayer)
def canSeeCityList(playerOrID): """ Returns True if the active player can see the list of <player>'s cities. In the unmodified game, this is possible if the players have met and <player> is not a vassal of a rival. They must be able to contact (trade with) <player>, and OCC must be disabled. You can always see a teammate's cities. """ if gc.getGame().isOption(GameOptionTypes.GAMEOPTION_ONE_CITY_CHALLENGE): return False askedPlayer, askedTeam = getPlayerAndTeam(playerOrID) askingPlayer, askingTeam = getActivePlayerAndTeam() if askingPlayer.getTeam() == askedPlayer.getTeam(): return True if askedTeam.isAVassal() and not askedTeam.isVassal(askingTeam.getID()): return False return TradeUtil.canTrade(askingPlayer, askedPlayer)
def canSeeCityList(playerOrID): """ Returns True if the active player can see the list of <player>'s cities. In the unmodified game, this is possible if the players have met and <player> is not a vassal of a rival. They must be able to contact (trade with) <player>, and OCC must be disabled. You can always see a teammate's cities. """ if GameUtil.isOCC(): return False askedPlayer, askedTeam = getPlayerAndTeam(playerOrID) askingPlayer, askingTeam = getActivePlayerAndTeam() if askingPlayer.getTeam() == askedPlayer.getTeam(): return True if askedTeam.isAVassal() and not askedTeam.isVassal(askingTeam.getID()): return False return TradeUtil.canTrade(askingPlayer, askedPlayer)
def checkturn_main(): #s="" if not gc.getPlayer(utils.getHumanID()).isAlive(): return if gc.getDefineINT("PLAYER_AI_ALLOW_TO_USE_CONSIDEROFFER_THRESHOLD") == 0: return for iPlayer in range(iNumPlayers): human=utils.getHumanID() if gc.getPlayer(iPlayer).isAlive() and human!=iPlayer : cantrade=TradeUtil.canTrade(human,iPlayer) if 1==1: a=gc.AI_considerOfferThreshold(human,iPlayer)#3是中国 b=gc.getPlayer(iPlayer).AI_maxGoldTrade(human) c=min(a,b) if Stability.isImmune_War(iPlayer): c=0 if cantrade and c>0: #civname1=gc.getPlayer(human).getCivilizationAdjectiveKey() tem_civname1='我们'#我们 #civname2=gc.getPlayer(iPlayer).getCivilizationAdjectiveKey() #tem_civname2=handle_civname(civname2) tem_civname2=gc.getPlayer(iPlayer).getCivilizationAdjective(0) s1=str(tem_civname1)+" 可以勒索 "+str(c)+" 金币来自 "+tem_civname2+" 潜在最大可勒索金币量为 "+str(a)+" ; \r" CyInterface().addMessage(gc.getGame().getActivePlayer(), False, iDuration, s1, "", 0, "", ColorTypes(iYellow), -1, -1, True, True) if cantrade==0 and c>0: #civname1=gc.getPlayer(human).getCivilizationAdjectiveKey() #tem_civname1=handle_civname(civname1)# #tem_civname1=human tem_civname1=''#我们 #civname2=gc.getPlayer(iPlayer).getCivilizationAdjectiveKey() #tem_civname2=iPlayer #tem_civname2=handle_civname(civname2) tem_civname2 = gc.getPlayer(iPlayer).getCivilizationAdjective(0) s1=str(tem_civname1)+" 如果我们遇见他们,可以勒索 "+str(c)+" 金币来自 "+str(tem_civname2)+" 潜在最大可勒索金币量为 "+str(a)+" ; \r" CyInterface().addMessage(gc.getGame().getActivePlayer(), False, iDuration, s1, "", 0, "", ColorTypes(iWhite), -1, -1, True, True) #s=s+s1 #utils.show(str(s)) pass
def getWarTrades(self, player, team): iPlayerID = player.getID() tradeData = TradeData() tradeData.ItemType = TradeableItems.TRADE_WAR currentTrades = set() for loopPlayer in TradeUtil.getWarTraders(player): if player.canTradeWith(loopPlayer.getID()): ###print "LOOP PLAYER: %s %d"%(gc.getLeaderHeadInfo(loopPlayer.getLeaderType()).getDescription(), loopPlayer.getID()) canDoTrade = false for pPlayer in TradeUtil.getWarTraders(loopPlayer): if TradeUtil.canTrade(player, pPlayer): tradeData.iData = pPlayer.getID() ###print " %s DENIAL: %d"%(gc.getLeaderHeadInfo(pPlayer.getLeaderType()).getDescription(), loopPlayer.getTradeDenial(iPlayerID, tradeData)) if (loopPlayer.getTradeDenial(iPlayerID, tradeData) == DenialTypes.NO_DENIAL): canDoTrade = true if canDoTrade: currentTrades.add(loopPlayer.getID()) break return currentTrades
def canSeeCityList(askedPlayer): """ Returns True if the active player can see the list of <player>'s cities. In the unmodified game, this is possible if the players have met and <player> is not a vassal of a rival. They must be able to contact (trade with) <player>, and OCC must be disabled. You can always see a teammate's cities. """ if GAME.isOption(GameOptionTypes.GAMEOPTION_ONE_CITY_CHALLENGE): return False iAskedTeam = askedPlayer.getTeam() iAskingTeam = GAME.getActiveTeam() if iAskingTeam == iAskedTeam: return True askedTeam = GC.getTeam(iAskedTeam) if askedTeam.isAVassal() and not askedTeam.isVassal(iAskingTeam): return False return TradeUtil.canTrade(GC.getActivePlayer(), askedPlayer)
def canSeeCityList(playerOrID): """ Returns True if the active player can see the list of <player>'s cities. In the unmodified game, this is possible if the players have met and <player> is not a vassal of a rival. They must be able to contact (trade with) <player>, and OCC must be disabled. You can always see a teammate's cities. """ # In K-Mod, the city list is only visible when at war. - Also, human players will only show their city list if they are willing to talk! # Rather than risk getting this wrong.. return False # done. (old code follows, but does nothing.) if GameUtil.isOCC(): return False askedPlayer, askedTeam = getPlayerAndTeam(playerOrID) askingPlayer, askingTeam = getActivePlayerAndTeam() if askingPlayer.getTeam() == askedPlayer.getTeam(): return True if askedTeam.isAVassal() and not askedTeam.isVassal(askingTeam.getID()): return False return TradeUtil.canTrade(askingPlayer, askedPlayer)
def getWarTrades(self, player, team): iPlayerID = player.getID() tradeData = TradeData() tradeData.ItemType = TradeableItems.TRADE_WAR currentTrades = set() for loopPlayer in TradeUtil.getWarTraders(player): if player.canTradeWith(loopPlayer.getID()): ###print "LOOP PLAYER: %s %d"%(gc.getLeaderHeadInfo(loopPlayer.getLeaderType()).getDescription(), loopPlayer.getID()) canDoTrade = false for pPlayer in TradeUtil.getWarTraders(loopPlayer): if TradeUtil.canTrade(player, pPlayer): tradeData.iData = pPlayer.getID() ###print " %s DENIAL: %d"%(gc.getLeaderHeadInfo(pPlayer.getLeaderType()).getDescription(), loopPlayer.getTradeDenial(iPlayerID, tradeData)) if (loopPlayer.getTradeDenial( iPlayerID, tradeData) == DenialTypes.NO_DENIAL): canDoTrade = true if canDoTrade: currentTrades.add(loopPlayer.getID()) break return currentTrades