def endGlobalWar(iAttacker, iDefender): data.iGlobalWarAttacker = -1 data.iGlobalWarDefender = -1 if not gc.getPlayer(iAttacker).isAlive() or not gc.getPlayer(iDefender).isAlive(): return lAttackers = [iAttacker] lDefenders = [iDefender] lAttackers, lDefenders = determineAlliances(iAttacker, iDefender) # force peace for all allies of the belligerents for iLoopPlayer in lAttackers: if utils.isAVassal(iLoopPlayer): continue if iLoopPlayer == iAttacker: continue gc.getTeam(iLoopPlayer).makePeace(iDefender) for iLoopPlayer in lDefenders: if utils.isAVassal(iLoopPlayer): continue if iLoopPlayer == iDefender: continue gc.getTeam(iLoopPlayer).makePeace(iAttacker) if gc.getGame().determineWinner(iAttacker, iDefender) == iAttacker: lWinners = lAttackers lLosers = lDefenders else: lWinners = lDefenders lLosers = lAttackers currentCongress = Congress(lWinners, lLosers) data.currentCongress = currentCongress currentCongress.startCongress()
def endGlobalWar(iAttacker, iDefender): if not gc.getPlayer(iAttacker).isAlive() or not gc.getPlayer(iDefender).isAlive(): return if data.currentCongress: return lAttackers = [iAttacker] lDefenders = [iDefender] lAttackerAllies, lDefenderAllies = determineAlliances(iAttacker, iDefender) lAttackers += lAttackerAllies lDefenders += lDefenderAllies # force peace for all allies of the belligerents for iLoopPlayer in lAttackers: if not gc.getPlayer(iLoopPlayer).isAlive(): continue if utils.isAVassal(iLoopPlayer): continue if iLoopPlayer == iAttacker: continue gc.getTeam(iLoopPlayer).makePeace(iDefender) for iLoopPlayer in lDefenders: if not gc.getPlayer(iLoopPlayer).isAlive(): continue if utils.isAVassal(iLoopPlayer): continue if iLoopPlayer == iDefender: continue gc.getTeam(iLoopPlayer).makePeace(iAttacker) if gc.getGame().determineWinner(iAttacker, iDefender) == iAttacker: lWinners = lAttackers lLosers = lDefenders else: lWinners = lDefenders lLosers = lAttackers # Hungarian UHV3: Win and attend the congress for two world wars. if pHungary.isAlive() and not utils.isAVassal(iHungary) and iHungary in lWinners: data.iHungaryGlobalWars += 1 currentCongress = Congress(lWinners, lLosers) data.iCongressTurns = getCongressInterval() data.currentCongress = currentCongress currentCongress.startCongress()
def checkName(self, iPlayer): return #print "checkName" if iPlayer >= iNumPlayers: return if not gc.getPlayer(iPlayer).isAlive: return bVassal = utils.isAVassal(iPlayer) pPlayer = gc.getPlayer(iPlayer) iReligion = pPlayer.getStateReligion() capital = gc.getPlayer(iPlayer).getCapitalCity() iGameTurn = gc.getGame().getGameTurn() iCivilization = sd.getCivilization(iPlayer) # 3 kingdoms > respawn > capital > religion > empire > vassal if iPlayer == con.iJin: if gc.getPlayer(con.iQin).isAlive() and gc.getPlayer( con.iHan).isAlive(): self.setCivDesc(iPlayer, self.SpecialNames[iPlayer]) return if iPlayer in [con.iRome, con.iByzantines]: if utils.getYear() >= con.tBirth[con.iByzantines] and gc.getPlayer( con.iByzantines).isAlive(): self.setCivDesc(iPlayer, self.SpecialNames[iPlayer]) self.setCivDesc(con.iByzantines, self.SpecialNames[con.iByzantines]) return #if iPlayer == con.iByzantines and utils.isActive(con.iRome) and sd.getCivilization(con.iByzantines) == con.iByzantines: #self.setCivDesc(iPlayer, self.SpecialNames[iPlayer]) #self.setCivDesc(con.iRome, self.SpecialNames[con.iRome]) #return # by vassalage if bVassal and iCivilization in self.vassalNames: szName = self.vassalNames[iCivilization] else: szName = self.defaultNames[iCivilization] # by status (empires) if not bVassal: iCivic = pPlayer.getCivics(0) if iCivilization in self.empireNames: minCities = 5 if iCivic == con.iEmpireCivic or pPlayer.getNumCities( ) >= minCities: if pPlayer.getNumCities() >= (minCities): szName = self.empireNames[iCivilization] self.setCivDesc(iPlayer, szName)
def refuseDemand(self, iClaimant): iVotes = self.dVotes[iClaimant] if iClaimant not in self.dPossibleBelligerents: self.dPossibleBelligerents[iClaimant] = 2 * iVotes else: self.dPossibleBelligerents[iClaimant] += 2 * iVotes for iVoter in self.dVotedFor[iClaimant]: if utils.isAVassal(iVoter): continue if iVoter not in self.dPossibleBelligerents: self.dPossibleBelligerents[iVoter] = iVotes else: self.dPossibleBelligerents[iVoter] += iVotes
def reformationChoice(self, iPlayer): pPlayer = gc.getPlayer(iPlayer) if utils.getHumanID() == iPlayer: return if pPlayer.getStateReligion() == iCatholicism: if self.chooseProtestantism(iPlayer): self.embraceReformation(iPlayer) elif self.isProtestantAnyway(iPlayer) or utils.isAVassal(iPlayer): self.tolerateReformation(iPlayer) else: self.counterReformation(iPlayer) else: self.tolerateReformation(iPlayer)
def reformation(self): for iPlayer in range(iNumPlayers): if [ city for city in utils.getCityList(iPlayer) if city.getOwner() == iPlayer ]: self.reformationChoice(iPlayer) for iPlayer in range(iNumPlayers): if data.players[iPlayer].iReformationDecision == 2: for iTargetPlayer in range(iNumPlayers): if data.players[iTargetPlayer].iReformationDecision == 0 and utils.getHumanID( ) != iTargetPlayer and iTargetPlayer != iNetherlands and not utils.isAVassal( iTargetPlayer): gc.getTeam(iPlayer).declareWar( iTargetPlayer, True, WarPlanTypes.WARPLAN_DOGPILE) pHolyCity = gc.getGame().getHolyCity(iProtestantism) if data.players[pHolyCity.getOwner()].iReformationDecision == 0: pHolyCity.setNumRealBuilding(iProtestantShrine, 1)
def checkName(self, iPlayer): return if iPlayer >= iNumPlayers: return bVassal = utils.isAVassal(iPlayer) pPlayer = gc.getPlayer(iPlayer) bRespawned = sd.getCivStatus(iPlayer) iReligion = pPlayer.getStateReligion() capital = gc.getPlayer(iPlayer).getCapitalCity() # respawn > capital > religion > empire > vassal # by respawns if bRespawned and iPlayer in self.respawnedNames: return # by vassalage if bVassal and iPlayer in self.vassalNames: szName = self.vassalNames[iPlayer] else: szName = self.defaultNames[iPlayer] # by status (empires) if not bVassal: iCivic = pPlayer.getCivics(0) if iPlayer in self.empireNames: minCities = 8 # 8/6 if iPlayer in []: minCities = 4 # 4/3 elif iPlayer in []: minCities = 16 # 16/12 if pPlayer.getNumCities() >= minCities: if pPlayer.getNumCities() >= (minCities * 3 / 4): szName = self.empireNames[iPlayer] self.setCivDesc(iPlayer, szName)
def startsGlobalWar(lAttackers, lDefenders): if len(lAttackers) < 2: return False if len(lDefenders) < 2: return False lWorldPowers = utils.getSortedList([i for i in range(iNumPlayers) if gc.getPlayer(i).isAlive() and not utils.isAVassal(i)], lambda iPlayer: gc.getTeam(iPlayer).getPower(True), True) iCount = len(lWorldPowers)/4 lWorldPowers = lWorldPowers[:iCount] lParticipatingPowers = [iPlayer for iPlayer in lWorldPowers if iPlayer in lAttackers or iPlayer in lDefenders] return 2 * len(lParticipatingPowers) >= len(lWorldPowers)
def reformation(self): for iPlayer in range(iNumPlayers): if [city for city in utils.getCityList(iPlayer) if city.getOwner() == iPlayer]: self.reformationChoice(iPlayer) for iPlayer in range(iNumPlayers): if data.players[iPlayer].iReformationDecision == 2: for iTargetPlayer in range(iNumPlayers): if data.players[iTargetPlayer].iReformationDecision == 0 and utils.getHumanID() != iTargetPlayer and iTargetPlayer != iNetherlands and not utils.isAVassal(iTargetPlayer): gc.getTeam(iPlayer).declareWar(iTargetPlayer, True, WarPlanTypes.WARPLAN_DOGPILE) pHolyCity = gc.getGame().getHolyCity(iProtestantism) if data.players[pHolyCity.getOwner()].iReformationDecision == 0: pHolyCity.setNumRealBuilding(iProtestantShrine, 1)
def checkAIWars(self, iPlayer, iGameTurn): print("checkAIWars, iPlayer", iPlayer, "iGameTurn", iGameTurn) #if gc.getGame().getSorenRandNum(100, 'random number') > 50: #return pPlayer = gc.getPlayer(iPlayer) tTeam = gc.getTeam(pPlayer.getTeam()) iCiv = sd.getCivilization(iPlayer) iPower = pPlayer.getPower() #print ("iCiv=", iCiv) iWarTargetPlayer = -1 # foreigners in the core lEnemyCities = [] plotList = utils.getRegionPlotList(con.lCoreRegions[iCiv]) for tPlot in plotList: pCurrent = gc.getMap().plot(tPlot[0], tPlot[1]) if pCurrent.isCity(): print("city in core regions", pCurrent.getPlotCity().getName()) if pCurrent.getPlotCity().getOwner() != iPlayer: print("foreign city in core regions", pCurrent.getPlotCity().getName()) lEnemyCities.append(pCurrent.getPlotCity()) if len(lEnemyCities): print "foreigners in core" iEnemyDistance = 200 capital = gc.getPlayer(iPlayer).getCapitalCity() iCapitalX = capital.getX() iCapitalY = capital.getY() for pLoopCity in lEnemyCities: if gc.getPlayer(iPlayer).canContact(pLoopCity.getOwner()): if abs(pLoopCity.getX() - iCapitalX) < iEnemyDistance or abs( pLoopCity.getY() - iCapitalY) < iEnemyDistance: iEnemyDistance = max((pLoopCity.getX() - iCapitalX), (pLoopCity.getY() - iCapitalY)) iWarTargetPlayer = pLoopCity.getOwner() print("iWarTargetPlayer=", iWarTargetPlayer) if iWarTargetPlayer != -1: if utils.canDeclareWar(iPlayer, iWarTargetPlayer): if utils.isAVassal(iWarTargetPlayer): iMaster = utils.getMaster(iWarTargetPlayer) iTotalRivalPower = gc.getPlayer(iMaster).getPower( ) + gc.getPlayer(iWarTargetPlayer).getPower() if iPower > iTotalRivalPower * 2 / 3: if pPlayer.AI_getAttitude( iWarTargetPlayer ) < con.iFriendly and pPlayer.AI_getAttitude( iMaster) < con.iFriendly: self.initWar(iPlayer, iWarTargetPlayer, iGameTurn) print("initWar", iPlayer, iWarTargetPlayer) return else: if iPower > gc.getPlayer( iWarTargetPlayer).getPower() * 2 / 3: if pPlayer.AI_getAttitude( iWarTargetPlayer) < con.iFriendly: self.initWar(iPlayer, iWarTargetPlayer, iGameTurn) print("initWar", iPlayer, iWarTargetPlayer) return if iWarTargetPlayer == -1: # passive civs will not declare war unless their core is invaded if con.tAggression[iCiv] == 0: return # aggressive civs if con.tAggression[iCiv] == 2: print "Aggressive" #if con.tAggression[iCiv] >= 0: # preferred targets in target regions lEnemyCities = [] plotList = utils.getRegionPlotList(con.lTargetRegions[iCiv]) for tPlot in plotList: pCurrent = gc.getMap().plot(tPlot[0], tPlot[1]) if pCurrent.isCity(): print("city in target regions", pCurrent.getPlotCity().getName()) if pCurrent.getPlotCity().getOwner( ) in con.lWarTargets[iCiv]: lEnemyCities.append(pCurrent.getPlotCity()) print("target civ city in target regions", pCurrent.getPlotCity().getName()) if len(lEnemyCities): print "war targets in target regions" iEnemyDistance = 200 capital = gc.getPlayer(iPlayer).getCapitalCity() iCapitalX = capital.getX() iCapitalY = capital.getY() for pLoopCity in lEnemyCities: if gc.getPlayer(iPlayer).canContact( pLoopCity.getOwner()): if abs(pLoopCity.getX() - iCapitalX) < iEnemyDistance or abs( pLoopCity.getY() - iCapitalY) < iEnemyDistance: iEnemyDistance = max( (pLoopCity.getX() - iCapitalX), (pLoopCity.getY() - iCapitalY)) iWarTargetPlayer = pLoopCity.getOwner() print("iWarTargetPlayer=", iWarTargetPlayer) if iWarTargetPlayer != -1: if utils.canDeclareWar(iPlayer, iWarTargetPlayer): if utils.isAVassal(iWarTargetPlayer): iMaster = utils.getMaster(iWarTargetPlayer) iTotalRivalPower = gc.getPlayer( iMaster).getPower() + gc.getPlayer( iWarTargetPlayer).getPower() if iPower > iTotalRivalPower * 2 / 3: if pPlayer.AI_getAttitude( iWarTargetPlayer ) < con.iFriendly and pPlayer.AI_getAttitude( iMaster) < con.iFriendly: self.initWar(iPlayer, iWarTargetPlayer, iGameTurn) print("initWar", iPlayer, iWarTargetPlayer) return else: if iPower > gc.getPlayer( iWarTargetPlayer).getPower() * 2 / 3: if pPlayer.AI_getAttitude( iWarTargetPlayer) < con.iFriendly: self.initWar(iPlayer, iWarTargetPlayer, iGameTurn) print("initWar", iPlayer, iWarTargetPlayer) return if iWarTargetPlayer == -1: # other civs in target regions lEnemyCities = [] plotList = utils.getRegionPlotList( con.lTargetRegions[iCiv]) for tPlot in plotList: pCurrent = gc.getMap().plot(tPlot[0], tPlot[1]) if pCurrent.isCity(): print("city in target regions", pCurrent.getPlotCity().getName()) if pCurrent.getPlotCity().getOwner() != iPlayer: lEnemyCities.append(pCurrent.getPlotCity()) print("other civcity in target regions", pCurrent.getPlotCity().getName()) if len(lEnemyCities): print "other civs in target regions" iEnemyDistance = 200 capital = gc.getPlayer(iPlayer).getCapitalCity() iCapitalX = capital.getX() iCapitalY = capital.getY() for pLoopCity in lEnemyCities: if gc.getPlayer(iPlayer).canContact( pLoopCity.getOwner()): if abs(pLoopCity.getX() - iCapitalX) < iEnemyDistance or abs( pLoopCity.getY() - iCapitalY) < iEnemyDistance: iEnemyDistance = max( (pLoopCity.getX() - iCapitalX), (pLoopCity.getY() - iCapitalY)) iWarTargetPlayer = pLoopCity.getOwner() print("iWarTargetPlayer=", iWarTargetPlayer) if iWarTargetPlayer != -1: if utils.canDeclareWar(iPlayer, iWarTargetPlayer): if utils.isAVassal(iWarTargetPlayer): iMaster = utils.getMaster(iWarTargetPlayer) iTotalRivalPower = gc.getPlayer( iMaster).getPower() + gc.getPlayer( iWarTargetPlayer).getPower() if iPower > iTotalRivalPower * 2 / 3: if pPlayer.AI_getAttitude( iWarTargetPlayer ) < con.iFriendly and pPlayer.AI_getAttitude( iMaster) < con.iFriendly: self.initWar( iPlayer, iWarTargetPlayer, iGameTurn) print("initWar", iPlayer, iWarTargetPlayer) return else: if iPower > gc.getPlayer( iWarTargetPlayer).getPower( ) * 2 / 3: if pPlayer.AI_getAttitude( iWarTargetPlayer ) < con.iFriendly: self.initWar( iPlayer, iWarTargetPlayer, iGameTurn) print("initWar", iPlayer, iWarTargetPlayer) return if iWarTargetPlayer == -1: # other civs in normal regions lEnemyCities = [] plotList = utils.getRegionPlotList( con.lNormalRegions[iCiv]) for tPlot in plotList: pCurrent = gc.getMap().plot(tPlot[0], tPlot[1]) if pCurrent.isCity(): print("city in normal regions", pCurrent.getPlotCity().getName()) if pCurrent.getPlotCity().getOwner( ) != iPlayer: lEnemyCities.append(pCurrent.getPlotCity()) print("foreign city in normal regions", pCurrent.getPlotCity().getName()) if len(lEnemyCities): print "other civs in normal regions" iEnemyDistance = 200 capital = gc.getPlayer(iPlayer).getCapitalCity() iCapitalX = capital.getX() iCapitalY = capital.getY() for pLoopCity in lEnemyCities: if gc.getPlayer(iPlayer).canContact( pLoopCity.getOwner()): if abs(pLoopCity.getX() - iCapitalX) < iEnemyDistance or abs( pLoopCity.getY() - iCapitalY) < iEnemyDistance: iEnemyDistance = max( (pLoopCity.getX() - iCapitalX), (pLoopCity.getY() - iCapitalY)) iWarTargetPlayer = pLoopCity.getOwner() print("iWarTargetPlayer=", iWarTargetPlayer) if iWarTargetPlayer != -1: if utils.canDeclareWar(iPlayer, iWarTargetPlayer): if utils.isAVassal(iWarTargetPlayer): iMaster = utils.getMaster( iWarTargetPlayer) iTotalRivalPower = gc.getPlayer( iMaster).getPower() + gc.getPlayer( iWarTargetPlayer).getPower() if iPower > iTotalRivalPower: if pPlayer.AI_getAttitude( iWarTargetPlayer ) < con.iPleased and pPlayer.AI_getAttitude( iMaster) < con.iPleased: self.initWar( iPlayer, iWarTargetPlayer, iGameTurn) print("initWar", iPlayer, iWarTargetPlayer) return else: if iPower > gc.getPlayer( iWarTargetPlayer).getPower(): if pPlayer.AI_getAttitude( iWarTargetPlayer ) < con.iPleased: self.initWar( iPlayer, iWarTargetPlayer, iGameTurn) print("initWar", iPlayer, iWarTargetPlayer) return # normal civs elif con.tAggression[iCiv] == 1: print "Normal" # other civs in normal regions lEnemyCities = [] plotList = utils.getRegionPlotList(con.lNormalRegions[iCiv]) for tPlot in plotList: pCurrent = gc.getMap().plot(tPlot[0], tPlot[1]) if pCurrent.isCity(): print("city in normal regions", pCurrent.getPlotCity().getName()) if pCurrent.getPlotCity().getOwner() != iPlayer: print("foreign city in normal regions", pCurrent.getPlotCity().getName()) lEnemyCities.append(pCurrent.getPlotCity()) if len(lEnemyCities): print "other civs in normal regions" iEnemyDistance = 200 capital = gc.getPlayer(iPlayer).getCapitalCity() iCapitalX = capital.getX() iCapitalY = capital.getY() for pLoopCity in lEnemyCities: if gc.getPlayer(iPlayer).canContact( pLoopCity.getOwner()): if abs(pLoopCity.getX() - iCapitalX) < iEnemyDistance or abs( pLoopCity.getY() - iCapitalY) < iEnemyDistance: iEnemyDistance = max( (pLoopCity.getX() - iCapitalX), (pLoopCity.getY() - iCapitalY)) iWarTargetPlayer = pLoopCity.getOwner() print("iWarTargetPlayer=", iWarTargetPlayer) if iWarTargetPlayer != -1: if utils.canDeclareWar(iPlayer, iWarTargetPlayer): if utils.isAVassal(iWarTargetPlayer): iMaster = utils.getMaster(iWarTargetPlayer) iTotalRivalPower = gc.getPlayer( iMaster).getPower() + gc.getPlayer( iWarTargetPlayer).getPower() if iPower > iTotalRivalPower * 3 / 2: if pPlayer.AI_getAttitude( iWarTargetPlayer ) < con.iCautious and pPlayer.AI_getAttitude( iMaster) < con.iCautious: self.initWar( iPlayer, iWarTargetPlayer, iGameTurn) print("initWar", iPlayer, iWarTargetPlayer) return else: if iPower > gc.getPlayer( iWarTargetPlayer).getPower( ) * 3 / 2: if pPlayer.AI_getAttitude( iWarTargetPlayer ) < con.iCautious: self.initWar( iPlayer, iWarTargetPlayer, iGameTurn) print("initWar", iPlayer, iWarTargetPlayer) return
def checkPlayerTurn(self, iGameTurn, iPlayer): iHuman = utils.getHumanID() pPlayer = gc.getPlayer(iPlayer) # CARTHAGE if iPlayer == con.iCarthage: # Carthaginian UHV1: Obtain 6 luxury resources and 6 strategic resources by 350BC if sd.getGoal(iPlayer, 0) == -1: if iGameTurn <= getTurnForYear(-350): if self.getNumLuxuries(iPlayer) >= 6 and self.getNumStrategicResources(iPlayer) >= 6: sd.setGoal(iPlayer, 0, 1) else: sd.setGoal(iPlayer, 0, 0) # Carthaginian UHV2: Make Carthage the most prosperous trading city in the world in 300BC if iGameTurn <= getTurnForYear(-300): iCarthageTrade = gc.getMap().plot(23, 33).getPlotCity().getTradeYield(YieldTypes.YIELD_COMMERCE) iBestTrade = 0 for city in utils.getAllCities(): if city.getX() != 23 and city.getY() != 33: iCityTrade = city.getTradeYield(YieldTypes.YIELD_COMMERCE) if iCityTrade > iBestTrade: iBestTrade = iCityTrade if iCarthageTrade > iBestTrade: sd.setGoal(iPlayer, 1, 1) else: sd.setGoal(iPlayer, 1, 0) # ATHENS if iPlayer == con.iAthens: # Control five Aegean ports by 350BC if sd.getGoal(iPlayer, 0) == -1: if iGameTurn <= getTurnForYear(-350): iPorts = 0 for city in utils.getCityList(iPlayer): if (city.getX(), city.getY()) in con.lAegeanPortTiles: iPorts += 1 if iPorts >= 5: sd.setGoal(iPlayer, 0, 1) else: sd.setGoal(iPlayer, 0, 0) # Build the Parthenon, the Theatre of Dionysis and the Academy see onBuildingBuilt # Settle five Great People in your capital by 300BC if sd.getGoal(iPlayer, 2) == -1: if iGameTurn <= getTurnForYear(300): iCount = 0 if pPlayer.getNumCities() > 0: capital = pPlayer.getCapitalCity() if self.countGreatPeople((capital.getX(), capital.getY())) >= 5: sd.setGoal(iPlayer, 2, 1) else: sd.setGoal(iPlayer, 2, 0) # NANDAS if iPlayer == con.iNandas: # Control northern India by 330BC if sd.getGoal(iPlayer, 0) == -1: if iGameTurn <= getTurnForYear(-330): bControl = true regionList = [con.rMagadha, con.rAnga, con.rAvanti, con.rPunjab] for regionID in regionList: if not utils.checkRegionControl(iPlayer, regionID, True): bControl = false if bControl: sd.setGoal(iPlayer, 0, 1) else: sd.setGoal(iPlayer, 0, 0) # Control the world's largest army by 330BC if sd.getGoal(iPlayer, 1) == -1: if iGameTurn <= getTurnForYear(-330): iBestArmy = 0 iNandaArmy = gc.getPlayer(iPlayer).getNumUnits() for iLoopPlayer in range(con.iNumPlayers): iLoopArmy = gc.getPlayer(iLoopPlayer).getNumUnits() if iLoopArmy > iBestArmy: iBestArmy = iLoopArmy if iBestArmy > iNandaArmy: sd.setGoal(iPlayer, 1, 1) else: sd.setGoal(iPlayer, 1, 0) # Be the world's richest civilization in 330BC if iGameTurn == getTurnForYear(-330): iBestGold = 0 iNandaGold = gc.getPlayer(iPlayer).getGold() for iLoopPlayer in range(con.iNumPlayers): iLoopGold = gc.getPlayer(iPlayer).getGold() if iLoopGold > iBestGold: iBestGold = iLoopGold if iNandaGold > iBestGold: sd.setGoal(iPlayer, 2, 1) else: sd.setGoal(iPlayer, 2, 0) # QIN if iPlayer == con.iQin: # Qin UHV1: Build the Great Wall and the Terracotta Army by 215BC see onBuildingBuilt if sd.getGoal(iPlayer, 0) == -1: if iGameTurn >= getTurnForYear(-215): sd.setGoal(iPlayer, 0, 0) # Qin UHV2: control central and north China by 210BC if sd.getGoal(iPlayer, 1) == -1: if iGameTurn <= getTurnForYear(-210): bControl = True regionList = [con.rQin, con.rHan, con.rYan, con.rZhao, con.rChu, con.rNanYue, con.rQi, con.rWu, con.rShu] for regionID in regionList: if not utils.checkRegionControl(iPlayer, regionID): bControl = False if bControl: sd.setGoal(iPlayer, 1, 1) else: sd.setGoal(iPlayer, 1, 0) # Qin UHV3: control at least 9 provinces in 100BC if sd.getGoal(iPlayer, 2) == -1: if iGameTurn == getTurnForYear(-100): if self.getNumProvinces(iPlayer) >= 9: sd.setGoal(iPlayer, 2, 1) else: sd.setGoal(iPlayer, 2, 0) # HISTORICAL VICTORY if gc.getGame().isVictoryValid(iHistoricalVictory): #generic checks if pPlayer.isAlive() and iPlayer < con.iNumPlayers: if sd.get2OutOf3(iPlayer) == False: if utils.countAchievedGoals(iPlayer) == 2: #intermediate bonus sd.set2OutOf3(iPlayer, True) if pPlayer.getNumCities() > 0: #this check is needed, otherwise game crashes pPlayer.changeGoldenAgeTurns(pPlayer.getGoldenAgeLength()) # edead iWarCounter = 0 iRndnum = gc.getGame().getSorenRandNum(con.iNumPlayers, 'civs') iHandicap = gc.getGame().getHandicapType() for i in range(iRndnum, con.iNumPlayers + iRndnum): iCiv = i % con.iNumPlayers pCiv = gc.getPlayer(iCiv) if pCiv.isAlive() and pCiv.canContact(iPlayer): if pCiv.AI_getAttitude(iPlayer) <= 0: teamCiv = gc.getTeam(pCiv.getTeam()) if not teamCiv.isAtWar(iPlayer) and not teamCiv.isDefensivePact(iPlayer) and not utils.isAVassal(iCiv): teamCiv.AI_setWarPlan(iPlayer, WarPlanTypes.WARPLAN_PREPARING_TOTAL) # edead: prepare for total war iWarCounter += 1 if iWarCounter == 1 + max(1, iHandicap): break if gc.getGame().getWinner() == -1: if sd.getGoal(iPlayer, 0) == 1 and sd.getGoal(iPlayer, 1) == 1 and sd.getGoal(iPlayer, 2) == 1: gc.getGame().setWinner(iPlayer, iHistoricalVictory) # RELIGIOUS VICTORY if gc.getGame().isVictoryValid(iReligiousVictory) and iPlayer == iHuman: if iGameTurn >= getTurnForYear(con.tBirth[iPlayer]) and gc.getPlayer(iPlayer).getStateReligion() != -1: for i in range(3): if sd.getReligiousGoal(iPlayer, i) == -1: if self.getURV(iPlayer, i): sd.setReligiousGoal(iPlayer, i, 1) if gc.getGame().getWinner() == -1: if sd.getReligiousGoal(iPlayer, 0) == 1 and sd.getReligiousGoal(iPlayer, 1) == 1 and sd.getReligiousGoal(iPlayer, 2) == 1: gc.getGame().setWinner(iPlayer, iReligiousVictory)
def chooseAttackingPlayer(self): #finding max teams ever alive (countCivTeamsEverAlive() doesn't work as late human starting civ gets killed every turn) iMaxCivs = iNumPlayers for i in range(iNumPlayers): j = iNumPlayers - 1 - i if (gc.getPlayer(j).isAlive()): iMaxCivs = j break #print ("iMaxCivs", iMaxCivs) if (gc.getGame().countCivPlayersAlive() <= 3): return -1 else: iRndnum = gc.getGame().getSorenRandNum(iMaxCivs, 'attacking civ index') # Important war: Carthage vs. Rome if utils.getYear() >= -250 and utils.getYear() < -150: if gc.getPlayer(con.iRome).isAlive() and gc.getPlayer( con.iCarthage).isAlive(): if not gc.getTeam(gc.getPlayer( con.iRome).getTeam()).isAtWar(con.iCarthage): if gc.getPlayer(con.iRome) != utils.getHumanID(): iRndnum = con.iRome elif gc.getPlayer(con.iCarthage) != utils.getHumanID(): iRndnum = con.iCarthage # Important war: Macedon vs. Athens if utils.getYear() >= -400 and utils.getYear() < -300: if gc.getPlayer(con.iMacedon).isAlive() and gc.getPlayer( con.iAthens).isAlive(): if not gc.getTeam(gc.getPlayer( con.iMacedon).getTeam()).isAtWar(con.iAthens): if gc.getPlayer(con.iMacedon) != utils.getHumanID(): iRndnum = con.iMacedon elif gc.getPlayer(con.iAthens) != utils.getHumanID(): iRndnum = con.iAthens iRndnum = con.iCarthage # Important war: Qin vs. Jin if utils.getYear() >= -350 and utils.getYear() < -300: if gc.getPlayer(con.iQin).isAlive() and gc.getPlayer( con.iJinState).isAlive(): if not gc.getTeam(gc.getPlayer( con.iQin).getTeam()).isAtWar(con.iJinState): if gc.getPlayer(con.iQin) != utils.getHumanID(): iRndnum = con.iQin elif gc.getPlayer(con.iJinState) != utils.getHumanID(): iRndnum = con.iJinState #print ("iRndnum", iRndnum) iAlreadyAttacked = -100 iMin = 100 iCiv = -1 for i in range(iRndnum, iRndnum + iMaxCivs): iLoopCiv = i % iMaxCivs pLoopPlayer = gc.getPlayer(iLoopCiv) if (pLoopPlayer.isAlive() and not pLoopPlayer.isHuman()): if (sd.getPlagueCountdown(iLoopCiv) >= -10 and sd.getPlagueCountdown(iLoopCiv) <= 0 ): #civ is not under plague or quit recently from it iAlreadyAttacked = sd.getAttackingCivsArray(iLoopCiv) if (utils.isAVassal(iLoopCiv)): iAlreadyAttacked += 1 #less likely to attack #check if a world war is already in place iNumAlreadyWar = 0 tLoopCiv = gc.getTeam(pLoopPlayer.getTeam()) for kLoopCiv in range(iNumPlayers): if (tLoopCiv.isAtWar(kLoopCiv)): if gc.getPlayer(kLoopCiv).isAlive(): iNumAlreadyWar += 1 if (iNumAlreadyWar >= 4): iAlreadyAttacked += 2 #much less likely to attack elif (iNumAlreadyWar >= 2): iAlreadyAttacked += 1 #less likely to attack if (iAlreadyAttacked < iMin): iMin = iAlreadyAttacked iCiv = iLoopCiv #print ("attacking civ", iCiv) if (iAlreadyAttacked != -100): sd.setAttackingCivsArray(iCiv, iAlreadyAttacked + 1) return iCiv else: return -1 return -1