def spreadIslamIndonesia(self, iGameTurn): if not gc.getGame().isReligionFounded(iIslam): return if not pIndonesia.isAlive(): return if not (getTurnForYear(1300) <= iGameTurn <= getTurnForYear(1600)): return if iGameTurn % utils.getTurns(15) != utils.getTurns(4): return lIndonesianContacts = [ iPlayer for iPlayer in range(iNumPlayers) if pIndonesia.canContact(iPlayer) and gc.getPlayer(iPlayer).getStateReligion() == iIslam ] if not lIndonesianContacts: return lIndonesianCities = utils.getRegionCities([rIndonesia]) lPotentialCities = [ city for city in lIndonesianCities if not city.isHasReligion(iIslam) ] iMaxCitiesMultiplier = 2 if pIndonesia.getStateReligion() == iIslam: iMaxCitiesMultiplier = 5 if len(lPotentialCities) * iMaxCitiesMultiplier >= len( lIndonesianCities): pSpreadCity = utils.getRandomEntry(lPotentialCities) if pSpreadCity: pSpreadCity.spreadReligion(iIslam)
def stopPlague(self, iPlayer): data.players[iPlayer].iPlagueCountdown = -utils.getTurns(iImmunity) if data.players[iPlayer].bFirstContactPlague: data.players[iPlayer].iPlagueCountdown = -utils.getTurns(iImmunity-30) data.players[iPlayer].bFirstContactPlague = False for city in utils.getCityList(iPlayer): city.setHasRealBuilding(iPlague, False)
def checkTurn(self, iGameTurn): #turn automatically peace on between independent cities and all the major civs if iGameTurn % 20 == 7: utils.restorePeaceHuman(iIndependent2, False) elif iGameTurn % 20 == 14: utils.restorePeaceHuman(iIndependent, False) if iGameTurn % 60 == 55 and iGameTurn > utils.getTurns(50): utils.restorePeaceAI(iIndependent, False) elif iGameTurn % 60 == 30 and iGameTurn > utils.getTurns(50): utils.restorePeaceAI(iIndependent2, False) #turn automatically war on between independent cities and some AI major civs if iGameTurn % 13 == 6 and iGameTurn > utils.getTurns( 50): #1 turn after restorePeace() utils.minorWars(iIndependent) elif iGameTurn % 13 == 11 and iGameTurn > utils.getTurns( 50): #1 turn after restorePeace() utils.minorWars(iIndependent2) if iGameTurn % 50 == 24 and iGameTurn > utils.getTurns(50): utils.minorWars(iCeltia) for tConquest in lConquests: self.checkConquest(tConquest) if iGameTurn == data.iNextTurnAIWar: self.planWars(iGameTurn) for iLoopPlayer in range(iNumPlayers): data.players[iLoopPlayer].iAggressionLevel = tAggressionLevel[ iLoopPlayer] + gc.getGame().getSorenRandNum( 2, "Random aggression")
def checkImplosion(self, iGameTurn): if iGameTurn % utils.getTurns(10) == 5: for iPlayer in range(iNumPlayers): pPlayer = gc.getPlayer(iPlayer) if pPlayer.isAlive() and iGameTurn >= getTurnForYear( tBirth[iPlayer]) + utils.getTurns( 25) and not pPlayer.isGoldenAge(): if self.getStability(iPlayer) < -40: #civil war iHuman = utils.getHumanID() # normal collapse if iPlayer != iHuman: if gc.getPlayer(iHuman).canContact(iPlayer): CyInterface().addMessage(iHuman, False, con.iDuration, pPlayer.getCivilizationDescription(0) + " " + \ localText.getText("TXT_KEY_STABILITY_CIVILWAR", ()), "", 0, "", ColorTypes(con.iRed), -1, -1, True, True) utils.killAndFragmentCiv(iPlayer, False) else: if gc.getPlayer(iPlayer).getNumCities() > 1: CyInterface().addMessage( iPlayer, True, con.iDuration, localText.getText( "TXT_KEY_STABILITY_CIVILWAR_HUMAN", ()), "", 0, "", ColorTypes(con.iRed), -1, -1, True, True) utils.killAndFragmentCiv(iPlayer, True) utils.setStartingStabilityParameters(iPlayer) self.setGNPold(iPlayer, 0) self.setGNPnew(iPlayer, 0) return
def stopPlague(self, iPlayer): data.players[iPlayer].iPlagueCountdown = -utils.getTurns(iImmunity) if data.players[iPlayer].bFirstContactPlague: data.players[iPlayer].iPlagueCountdown = -utils.getTurns( iImmunity - 30) data.players[iPlayer].bFirstContactPlague = False for city in utils.getCityList(iPlayer): city.setHasRealBuilding(iPlague, False)
def getNextInterval(self, iGameTurn): if iGameTurn > getTurnForYear(1600): iMinInterval = iMinIntervalLate iMaxInterval = iMaxIntervalLate else: iMinInterval = iMinIntervalEarly iMaxInterval = iMaxIntervalEarly iMinInterval = utils.getTurns(iMinInterval) iMaxInterval = utils.getTurns(iMaxInterval) return iMinInterval + gc.getGame().getSorenRandNum(iMaxInterval-iMinInterval, 'random turn')
def getNextInterval(self, iGameTurn): if iGameTurn > getTurnForYear(1600): iMinInterval = iMinIntervalLate iMaxInterval = iMaxIntervalLate else: iMinInterval = iMinIntervalEarly iMaxInterval = iMaxIntervalEarly iMinInterval = utils.getTurns(iMinInterval) iMaxInterval = utils.getTurns(iMaxInterval) return iMinInterval + gc.getGame().getSorenRandNum(iMaxInterval-iMinInterval, 'random turn')
def spreadJudaismMiddleEast(self, iGameTurn): if not gc.getGame().isReligionFounded(iJudaism): return if iGameTurn < getTurnForYear(600): return if iGameTurn % utils.getTurns(20) != utils.getTurns(5): return lMiddleEastCities = utils.getRegionCities([rMesopotamia, rAnatolia, rEgypt]) lJewishCities = [city for city in lMiddleEastCities if city.isHasReligion(iJudaism)] if 2 * len(lJewishCities) < len(lMiddleEastCities): pSpreadCity = utils.getRandomEntry(self.getTargetCities(lMiddleEastCities, iJudaism)) if pSpreadCity: pSpreadCity.spreadReligion(iJudaism)
def checkTurn(self, iGameTurn): #checkturn入口 #a=PlayerTypes.NO_PLAYER #a=gc.AI_considerOfferThreshold(4,13) #utils.show(str(a)) #a=gc.CvPlayerAI().AI_considerOffer_Threshold() #gc = CyGlobalContext() #a=gc.getPlayer(0).AI_considerOffer_Threshold() #utils.show(str(gc.getMAX_PLAYERS())) #import TradeUtil #a=TradeUtil.getTradeableBonuses111(14,3)#3是中国,14是拜占庭,在AD1700剧本中均存活 #utils.show(str(a)) #utils.show(str(TradeUtil.canTrade(13,3))) #BugUtil.logToScreen('aa')#可以使用 #DiplomacyUtil.onTributeDemanded(1,12,0)#回调函数,失败了 #a=CvTeamAI().AI_isWarPossible() #utils.show(str(gc.getPlayer(3).getDemandTributeAttitudeThreshold())) ###import MapDrawer ###MapDrawer.createMaps() #事实证明这个函数没什么用,生成一堆数组 #入口结束 #turn automatically peace on between independent cities and all the major civs if iGameTurn % 20 == 7: utils.restorePeaceHuman(iIndependent2, False) elif iGameTurn % 20 == 14: utils.restorePeaceHuman(iIndependent, False) if iGameTurn % 60 == 55 and iGameTurn > utils.getTurns(50): utils.restorePeaceAI(iIndependent, False) elif iGameTurn % 60 == 30 and iGameTurn > utils.getTurns(50): utils.restorePeaceAI(iIndependent2, False) #turn automatically war on between independent cities and some AI major civs if iGameTurn % 13 == 6 and iGameTurn > utils.getTurns( 50): #1 turn after restorePeace() utils.minorWars(iIndependent) elif iGameTurn % 13 == 11 and iGameTurn > utils.getTurns( 50): #1 turn after restorePeace() utils.minorWars(iIndependent2) if iGameTurn % 50 == 24 and iGameTurn > utils.getTurns(50): utils.minorWars(iCeltia) for tConquest in lConquests: self.checkConquest(tConquest) if iGameTurn == data.iNextTurnAIWar: self.planWars(iGameTurn) for iLoopPlayer in range(iNumPlayers): data.players[iLoopPlayer].iAggressionLevel = tAggressionLevel[ iLoopPlayer] + gc.getGame().getSorenRandNum( 2, "Random aggression")
def isHasLegendaryCity(self, iPlayer): """Checks whether iPlayer has a city with Legendary culture.""" apCityList = PyPlayer(iPlayer).getCityList() for pCity in apCityList: if pCity.GetCy().countTotalCultureTimes100() >= utils.getTurns(2500000): return True return False
def checkJudaism(self, iGameTurn): if gc.getGame().isReligionFounded(iJudaism): return if iGameTurn == getTurnForYear(-1500) - utils.getTurns(data.iSeed % 5): self.foundReligion( self.selectHolyCity(tJewishTL, tJewishBR, tJerusalem), iJudaism)
def vikingUP(self, argsList): pWinningUnit, pLosingUnit = argsList cLosingUnit = PyHelpers.PyInfo.UnitInfo(pLosingUnit.getUnitType()) iOwner = pWinningUnit.getOwner() if (iOwner == iVikings and gc.getGame().getGameTurn() <= getTurnForYear(1500) ) or pWinningUnit.getUnitType() == iCorsair: if cLosingUnit.getDomainType() == DomainTypes.DOMAIN_SEA: iGold = cLosingUnit.getProductionCost() / 2 iGold = utils.getTurns(iGold) gc.getPlayer(iOwner).changeGold(iGold) sAdjective = gc.getPlayer( pLosingUnit.getOwner()).getCivilizationAdjectiveKey() CyInterface().addMessage( iOwner, False, iDuration, CyTranslator().getText( "TXT_KEY_VIKING_NAVAL_UP", (iGold, sAdjective, pLosingUnit.getNameKey())), "", 0, "", ColorTypes(iWhite), -1, -1, True, True) if iOwner == iVikings: data.iVikingGold += iGold elif iOwner == iMoors: data.iMoorishGold += iGold
def setup(self): for iPlayer in range(iNumMajorPlayers): data.players[iPlayer].iPlagueCountdown = -utils.getTurns(iImmunity) data.lGenericPlagueDates[0] = 80 data.lGenericPlagueDates[ 2] = 300 # safe value to prevent plague at start of 1700 AD scenario if utils.getScenario() == i3000BC: data.lGenericPlagueDates[0] = getTurnForYear( 400) + utils.variation(20) data.lGenericPlagueDates[1] = getTurnForYear(1300) + utils.variation( 20) # Avoid interfering with the Indian UHV if utils.getHumanID( ) == iIndia and data.lGenericPlagueDates[1] <= getTurnForYear(1200): data.lGenericPlagueDates[1] = getTurnForYear(1200) + 1 if utils.getScenario != i1700AD: data.lGenericPlagueDates[2] = getTurnForYear( 1650) + utils.variation(20) data.lGenericPlagueDates[3] = getTurnForYear(1850) + utils.variation( 20) undoPlague = gc.getGame().getSorenRandNum(8, 'undo') if undoPlague <= 3: data.lGenericPlagueDates[undoPlague] = -1
def canDecay(self, iGameTurn, iCiv): if 0 <= iCiv < iNumMajorPlayers: if gc.getPlayer(iCiv).isAlive() and iGameTurn >= getTurnForYear( tBirth[iCiv] + utils.getTurns(15)): # edead: RFCM if not gc.getTeam( gc.getPlayer(iCiv).getTeam()).isHasTech(iElectricity): self.decay(iCiv)
def checkTurn(self, iGameTurn): if iGameTurn >= getTurnForYear(tBirth[iRussia]) and pRussia.isAlive(): self.russianUP() if iGameTurn >= getTurnForYear(tBirth[iAmerica]) + utils.getTurns(5): self.checkImmigration() if iGameTurn >= getTurnForYear( tBirth[iKhazars]) and pKhazars.isAlive(): self.doJewishKingdom() #if iGameTurn >= getTurnForYear(tBirth[iIndonesia]) and pIndonesia.isAlive(): # self.indonesianUP() if iGameTurn >= getTurnForYear( tBirth[iPhilippines]) and pPhilippines.isAlive(): utils.doPhilippineEmbassy() if iGameTurn >= getTurnForYear( tBirth[iSwahili]) and pSwahili.isAlive(): self.swahiliDhow() if iGameTurn >= getTurnForYear( tBirth[iTeotihuacan]) and pTeotihuacan.isAlive(): self.teotihuacanArtisan() data.bBabyloniaTechReceived = False
def update(self, fDelta): ##Rhye - begin iActivePlayer = CyGame().getActivePlayer() if tBirth[iActivePlayer] <= utils.getScenarioStartYear(): screen = CyGInterfaceScreen( "CvLoadingScreen", self.iScreenID ) screen.setBarPercentage("ProgressBar", InfoBarTypes.INFOBAR_STORED, 1) screen.setLabel("Text", "", CyTranslator().getText("TXT_KEY_AUTOPLAY_TURNS_REMAINING", (0,)), CvUtil.FONT_CENTER_JUSTIFY, 530, 445, 0, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1) screen.show( "Exit" ) #Rhye else: iGameTurn = CyGame().getGameTurn() iNumAutoPlayTurns = getTurnForYear(tBirth[CyGame().getActiveTeam()]) iNumTurnsRemaining = iNumAutoPlayTurns - iGameTurn #if (iNumTurnsRemaining != self.iTurnsRemaining): # self.iTurnsRemaining = iNumTurnsRemaining screen = CyGInterfaceScreen( "CvLoadingScreen", self.iScreenID ) exponent = 1 + iNumAutoPlayTurns/utils.getTurns(190) screen.setBarPercentage("ProgressBar", InfoBarTypes.INFOBAR_STORED, float(math.pow(iGameTurn-utils.getScenarioStartTurn(), exponent)) / float(math.pow(iNumAutoPlayTurns-utils.getScenarioStartTurn(), exponent))) screen.setLabel("Text", "", CyTranslator().getText("TXT_KEY_AUTOPLAY_TURNS_REMAINING", (max(0,iNumTurnsRemaining),)), CvUtil.FONT_CENTER_JUSTIFY, 530, 445, 0, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1) if (iNumTurnsRemaining <= 0): #Rhye screen.show( "Exit" ) #Rhye ##Rhye - end return
def checkChristianity(self, iGameTurn): if not gc.getGame().isReligionFounded(iJudaism): return if gc.getGame().isReligionFounded(iOrthodoxy): return iOffset = utils.getTurns(data.iSeed % 15) if iGameTurn == getTurnForYear(0) + iOffset: pHolyCity = gc.getGame().getHolyCity(iJudaism) if pHolyCity.getOwner() != utils.getHumanID() and gc.getGame( ).getSorenRandNum(2, "Holy city?") == 0: pChristianCity = pHolyCity self.foundReligion( (pChristianCity.getX(), pChristianCity.getY()), iOrthodoxy) return lJewishCities = [] for iPlayer in range(iNumTotalPlayersB): lJewishCities.extend([ city for city in utils.getCityList(iPlayer) if city.isHasReligion(iJudaism) and city.getOwner() != utils.getHumanID() ]) if lJewishCities: pChristianCity = utils.getRandomEntry(lJewishCities) self.foundReligion( (pChristianCity.getX(), pChristianCity.getY()), iOrthodoxy)
def checkBuddhism(self, iGameTurn): if gc.getGame().isReligionFounded(iBuddhism): return if iGameTurn == getTurnForYear(-300) - 5 + utils.getTurns( data.iSeed % 10): self.foundReligion(self.selectHolyCity(tBuddhistTL, tBuddhistBR), iBuddhism)
def doIndonesianUP(self, iNumCorporations=1): iGold = utils.getTurns(20 * iNumCorporations) gc.getPlayer(iIndonesia).changeGold(iGold) if utils.getHumanID() == iIndonesia and iGold > 0: CyInterface().addMessage( iIndonesia, False, iDuration, CyTranslator().getText("TXT_KEY_INDONESIAN_UP", (iGold, )), "", 0, "", ColorTypes(iWhite), -1, -1, True, True)
def spreadJudaismMiddleEast(self, iGameTurn): if not gc.getGame().isReligionFounded(iJudaism): return if iGameTurn < getTurnForYear(600): return if iGameTurn % utils.getTurns(20) != utils.getTurns(5): return lMiddleEastCities = utils.getRegionCities( [rMesopotamia, rAnatolia, rEgypt]) lJewishCities = [ city for city in lMiddleEastCities if city.isHasReligion(iJudaism) ] if 2 * len(lJewishCities) < len(lMiddleEastCities): pSpreadCity = utils.getRandomEntry( self.getTargetCities(lMiddleEastCities, iJudaism)) if pSpreadCity: pSpreadCity.spreadReligion(iJudaism)
def checkSpawn(self, iPlayer, iUnitType, iNumUnits, tTL, tBR, spawnFunction, iTurn, iPeriod, iRest, lAdj=[]): if len(lAdj) == 0: sAdj = "" else: sAdj = utils.getRandomEntry(lAdj) if iTurn % utils.getTurns(iPeriod) == iRest: spawnFunction(iPlayer, iUnitType, iNumUnits, tTL, tBR, sAdj)
def decay(self, iPlayer): pPlayer = gc.getPlayer(iPlayer) pTeam = gc.getTeam(gc.getPlayer(iPlayer).getTeam()) iGameTurn = gc.getGame().getGameTurn() cutList = [] for i in range(con.iNumPlayers): if i != iPlayer and gc.getPlayer(i).isAlive() and pTeam.canContact(i) and pPlayer.getBorders(i) > 3: if iGameTurn >= getTurnForYear(con.tBirth[i]) + utils.getTurns(15): cutList.append(i) if not cutList: return shuffle(cutList) #first browse our cities - if other civs can see our borders for pyCity in PyPlayer(iPlayer).getCityList(): city = pyCity.GetCy() for iOtherCiv in cutList: if city.plot().isVisible(iOtherCiv, False) and iOtherCiv in cutList: cutList.remove(iOtherCiv) for x in range(city.getX()-4, city.getX()+5): for y in range(city.getY()-4, city.getY()+5): plot = gc.getMap().plot(x, y) if plot.isVisible(iPlayer, False): for iOtherCiv in cutList: if plot.getOwner() == iOtherCiv and iOtherCiv in cutList: cutList.remove(iOtherCiv) #then browse their cities - if we can see their borders (view distance is asymmetrical) for iOtherCiv in cutList: bNear = False for pyCity in PyPlayer(iOtherCiv).getCityList(): city = pyCity.GetCy() for x in range(city.getX()-4, city.getX()+5): for y in range(city.getY()-4, city.getY()+5): plot = gc.getMap().plot(x, y) if plot.isVisible(iOtherCiv, False): if plot.getOwner() == iPlayer: bNear = True break break if not bNear: iChance = 50 #nRFCCW #if pPlayer.getBorders(iOtherCiv) == 5: #iChance = 100 for iTech in []: if pTeam.isHasTech(iTech): iChance -= 10 otherPlayer = gc.getPlayer(iOtherCiv) if gc.getGame().getSorenRandNum(100, 'Cut contact') < iChance: pTeam.cutContact(iOtherCiv) #utils.echo("Cutting contact between %s and %s." %(pPlayer.getCivilizationShortDescription(0),otherPlayer.getCivilizationShortDescription(0))) print ("Cutting contacts between", pPlayer.getCivilizationShortDescription(0), "and", otherPlayer.getCivilizationShortDescription(0)) return
def canDecay(self, iGameTurn, iCiv): if 0 <= iCiv < iNumMajorPlayers: if gc.getPlayer(iCiv).isAlive() and iGameTurn >= getTurnForYear( tBirth[iCiv] + utils.getTurns(15)): # edead: RFCM if not gc.getTeam(gc.getPlayer(iCiv).getTeam()).isHasTech( iElectricity): #mediv01 外交关系遗忘 if not (gc.getDefineINT("PYTHON_DIPO_NO_DECAY") == 1): #mediv01 外交关系遗忘 self.decay(iCiv)
def checkTurn(iGameTurn): if isCongressEnabled(): if not isGlobalWar(): data.iCongressTurns -= 1 if data.iCongressTurns == 0: data.iCongressTurns = utils.getTurns(iCongressInterval) currentCongress = Congress() data.currentCongress = currentCongress currentCongress.startCongress()
def checkTurn(iGameTurn): if isCongressEnabled(): if not isGlobalWar(): data.iCongressTurns -= 1 if data.iCongressTurns == 0: data.iCongressTurns = utils.getTurns(iCongressInterval) currentCongress = Congress() data.currentCongress = currentCongress currentCongress.startCongress()
def stopPlague(self, iPlayer): sd.setPlagueCountdown(iPlayer, -utils.getTurns(iImmunity)) apCityList = PyPlayer(iPlayer).getCityList() for pCity in apCityList: city = pCity.GetCy() if city.getNumRealBuilding(iPlague) > 0: city.setNumRealBuilding(iPlague, 0) city.changeEspionageHealthCounter( -city.getEspionageHealthCounter() / 2)
def checkTurn(self, iGameTurn): if iGameTurn >= getTurnForYear(tBirth[iRussia]) and pRussia.isAlive(): self.russianUP() if iGameTurn >= getTurnForYear(tBirth[iAmerica])+utils.getTurns(5): self.checkImmigration() if iGameTurn >= getTurnForYear(tBirth[iIndonesia]) and pIndonesia.isAlive(): self.indonesianUP() data.bBabyloniaTechReceived = False
def checkTurn(self, iGameTurn): print("UniquePowers.checkTurn()") if iGameTurn >= getTurnForYear(tBirth[iRussia]) and pRussia.isAlive(): self.russianUP() if iGameTurn >= getTurnForYear(tBirth[iAmerica])+utils.getTurns(5): self.checkImmigration() if iGameTurn >= getTurnForYear(tBirth[iIndonesia]) and pIndonesia.isAlive(): self.indonesianUP()
def onCityBuilt(self, iPlayer, x, y): iTempExpansionThreshold = self.getStability(iPlayer) iGameTurn = gc.getGame().getGameTurn() if (iGameTurn <= getTurnForYear(tBirth[iPlayer]) + utils.getTurns(20)): self.setStability(iPlayer, self.getStability(iPlayer) + 3) else: self.setStability(iPlayer, self.getStability(iPlayer) + 1) if (gc.getPlayer(iPlayer).getNumCities() == 1): self.setStability(iPlayer, self.getStability(iPlayer) + 1) self.setParameter(iPlayer, iParExpansionE, True, self.getStability(iPlayer) - iTempExpansionThreshold)
def spreadPlague(self, iPlayer): #utils.echo("Spreading plague to %s" %(gc.getPlayer(iPlayer).getCivilizationShortDescription(0))) # DEBUG pPlayer = gc.getPlayer(iPlayer) iHealth = -30 if (pPlayer.calculateTotalCityHealthiness() > 0): iHealth = int((1.0 * pPlayer.calculateTotalCityHealthiness()) / (pPlayer.calculateTotalCityHealthiness() + \ pPlayer.calculateTotalCityUnhealthiness()) * 100) - 60 iHealth /= 7 #duration range will be -4 to +4 for 30 to 90 sd.setPlagueCountdown( iPlayer, min(9, utils.getTurns(iPlagueDuration) - iHealth))
def spreadJudaismEurope(self, iGameTurn): if not gc.getGame().isReligionFounded(iJudaism): return if iGameTurn < getTurnForYear(1000): return if iGameTurn % utils.getTurns(10) != 0: return lEuropeanCities = utils.getRegionCities([rIberia, rEurope, rItaly, rBritain, rRussia, rBalkans]) lJewishCities = [city for city in lEuropeanCities if city.isHasReligion(iJudaism)] if 2 * len(lJewishCities) < len(lEuropeanCities): pSpreadCity = utils.getRandomEntry(self.getTargetCities(lEuropeanCities, iJudaism)) if pSpreadCity: pSpreadCity.spreadReligion(iJudaism)
def spreadReligionToRegion(self, iReligion, lRegions, iGameTurn, iStartDate, iInterval, iOffset): if not gc.getGame().isReligionFounded(iReligion): return if iGameTurn < getTurnForYear(iStartDate): return if iGameTurn % utils.getTurns(iInterval) != iOffset: return lRegionCities = utils.getRegionCities(lRegions) lReligionCities = [city for city in lRegionCities if city.isHasReligion(iReligion)] if 2 * len(lReligionCities) < len(lRegionCities): pSpreadCity = utils.getRandomEntry(self.getTargetCities(lRegionCities, iReligion)) if pSpreadCity: pSpreadCity.spreadReligion(iReligion)
def checkTurn(self, iGameTurn): print "Check AI wars" #turn automatically peace on between independent cities and all the major civs if iGameTurn % 20 == 7: utils.restorePeaceHuman(iIndependent2, False) elif iGameTurn % 20 == 14: utils.restorePeaceHuman(iIndependent, False) if iGameTurn % 60 == 55 and iGameTurn > utils.getTurns(50): utils.restorePeaceAI(iIndependent, False) elif iGameTurn % 60 == 30 and iGameTurn > utils.getTurns(50): utils.restorePeaceAI(iIndependent2, False) #turn automatically war on between independent cities and some AI major civs if iGameTurn % 13 == 6 and iGameTurn > utils.getTurns(50): #1 turn after restorePeace() utils.minorWars(iIndependent) elif iGameTurn % 13 == 11 and iGameTurn > utils.getTurns(50): #1 turn after restorePeace() utils.minorWars(iIndependent2) if iGameTurn % 50 == 24 and iGameTurn > utils.getTurns(50): utils.minorWars(iCeltia) utils.minorWars(iSeljuks) self.checkConquest(tConquestGreeceMesopotamia) self.checkConquest(tConquestGreeceEgypt) self.checkConquest(tConquestGreecePersia, tConquestGreeceMesopotamia) self.checkConquest(tConquestRomeCarthage) self.checkConquest(tConquestRomeGreece) self.checkConquest(tConquestRomeAnatolia, tConquestRomeGreece) self.checkConquest(tConquestRomeCelts) self.checkConquest(tConquestRomeEgypt) self.checkConquest(tConquestSpainMoors) if iGameTurn == data.iNextTurnAIWar: self.planWars(iGameTurn) for iLoopPlayer in range(iNumPlayers): data.players[iLoopPlayer].iAggressionLevel = tAggressionLevel[iLoopPlayer] + gc.getGame().getSorenRandNum(2, "Random aggression")
def checkTurn(self, iGameTurn): print "Check AI wars" #turn automatically peace on between independent cities and all the major civs if iGameTurn % 20 == 7: utils.restorePeaceHuman(iIndependent2, False) elif iGameTurn % 20 == 14: utils.restorePeaceHuman(iIndependent, False) if iGameTurn % 60 == 55 and iGameTurn > utils.getTurns(50): utils.restorePeaceAI(iIndependent, False) elif iGameTurn % 60 == 30 and iGameTurn > utils.getTurns(50): utils.restorePeaceAI(iIndependent2, False) #turn automatically war on between independent cities and some AI major civs if iGameTurn % 13 == 6 and iGameTurn > utils.getTurns(50): #1 turn after restorePeace() utils.minorWars(iIndependent) elif iGameTurn % 13 == 11 and iGameTurn > utils.getTurns(50): #1 turn after restorePeace() utils.minorWars(iIndependent2) if iGameTurn % 50 == 24 and iGameTurn > utils.getTurns(50): utils.minorWars(iCeltia) utils.minorWars(iSeljuks) self.checkConquest(tConquestGreeceMesopotamia) self.checkConquest(tConquestGreeceEgypt) self.checkConquest(tConquestGreecePersia, tConquestGreeceMesopotamia) self.checkConquest(tConquestRomeCarthage) self.checkConquest(tConquestRomeGreece) self.checkConquest(tConquestRomeAnatolia, tConquestRomeGreece) self.checkConquest(tConquestRomeCelts) self.checkConquest(tConquestRomeEgypt) self.checkConquest(tConquestSpainMoors) if iGameTurn == data.iNextTurnAIWar: self.planWars(iGameTurn) for iLoopPlayer in range(iNumPlayers): data.players[iLoopPlayer].iAggressionLevel = tAggressionLevel[iLoopPlayer] + gc.getGame().getSorenRandNum(2, "Random aggression")
def checkChristianity(self, iGameTurn): if not gc.getGame().isReligionFounded(iJudaism): return if gc.getGame().isReligionFounded(iOrthodoxy): return iEthiopiaOffset = 0 if utils.getHumanID() == iEthiopia: iEthiopiaOffset = utils.getTurns(10 + data.iSeed % 5) iOffset = utils.getTurns(data.iSeed % 15) if iGameTurn == getTurnForYear(0) + iOffset + iEthiopiaOffset: pHolyCity = gc.getGame().getHolyCity(iJudaism) if pHolyCity.getOwner() != utils.getHumanID() and gc.getGame().getSorenRandNum(2, "Holy city?") == 0: pChristianCity = pHolyCity self.foundReligion((pChristianCity.getX(), pChristianCity.getY()), iOrthodoxy) return lJewishCities = [] for iPlayer in range(iNumTotalPlayersB): lJewishCities.extend([city for city in utils.getCityList(iPlayer) if city.isHasReligion(iJudaism) and city.getOwner() != utils.getHumanID()]) if lJewishCities: pChristianCity = utils.getRandomEntry(lJewishCities) self.foundReligion((pChristianCity.getX(), pChristianCity.getY()), iOrthodoxy)
def spawnUnits(self, iCiv, tTopLeft, tBottomRight, iUnitType, iNumUnits, iTurn, iPeriod, iRest, function, eUnitAIType = UnitAITypes.UNITAI_ATTACK, prefix = 0, art = "", promotionList = [], argsList = []): print "spawnUnits called" if iNumUnits <= 0: # edead return None pUnit = None # edead if (iTurn % utils.getTurns(iPeriod) == iRest): dummy, plotList = utils.squareSearch( tTopLeft, tBottomRight, function, argsList ) if (len(plotList)): rndNum = gc.getGame().getSorenRandNum(len(plotList), 'Spawn units') result = plotList[rndNum] if (result): pUnit = utils.makeUnit(iUnitType, iCiv, result, iNumUnits, eUnitAIType, promotionList, prefix, art) # edead: pass the object return pUnit # edead: pass the object
def checkLimitedSpawn(self, iPlayer, iUnitType, iNumUnits, iMaxUnits, tTL, tBR, spawnFunction, iTurn, iPeriod, iRest, lAdj=[]): if iTurn % utils.getTurns(iPeriod) == iRest: lAreaUnits = utils.getAreaUnits(iPlayer, tTL, tBR) if len(lAreaUnits) < iMaxUnits: self.checkSpawn(iPlayer, iUnitType, iNumUnits, tTL, tBR, spawnFunction, iTurn, iPeriod, iRest, lAdj)
def onCityAcquired(self, iOldOwner, iNewOwner, city): if city.hasBuilding(iPlague): if not data.players[ iOldOwner].bFirstContactPlague: #don't infect if first contact plague if data.players[iNewOwner].iPlagueCountdown <= 0 and gc.getGame( ).getGameTurn( ) > getTurnForYear(tBirth[iNewOwner]) + utils.getTurns( iImmunity ): #skip immunity in this case (to prevent expoiting of being immune to conquer weak civs), but not for the new born civs if not gc.getTeam(gc.getPlayer(iNewOwner).getTeam( )).isHasTech(iMicrobiology): #but not permanent immunity print("acquiring plague") self.spreadPlague(iNewOwner) self.infectCitiesNear(iNewOwner, city.getX(), city.getY()) return city.setHasRealBuilding(iPlague, False)
def setup(self): for iPlayer in range(iNumMajorPlayers): data.players[iPlayer].iPlagueCountdown = -utils.getTurns(iImmunity) if utils.getScenario() == i3000BC: #early start condition data.lGenericPlagueDates[0] = getTurnForYear(400) + gc.getGame().getSorenRandNum(40, 'Variation') - 20 else: data.lGenericPlagueDates[0] = 80 data.lGenericPlagueDates[1] = getTurnForYear(1300) + gc.getGame().getSorenRandNum(40, 'Variation') - 20 if utils.getScenario != i1700AD: data.lGenericPlagueDates[2] = getTurnForYear(1650) + gc.getGame().getSorenRandNum(40, 'Variation') - 20 else: data.lGenericPlagueDates[2] = 300 # Safe value to prevent plague at start of 1700 scenario data.lGenericPlagueDates[3] = getTurnForYear(1850) + gc.getGame().getSorenRandNum(40, 'Variation') - 20 undoPlague = gc.getGame().getSorenRandNum(8, 'undo') if undoPlague <= 3: data.lGenericPlagueDates[undoPlague] = -1
def setup(): data.iCongressTurns = utils.getTurns(iCongressInterval)
def selectClaims(self, iPlayer): pPlayer = gc.getPlayer(iPlayer) iGameTurn = gc.getGame().getGameTurn() iNumPlayersAlive = gc.getGame().countCivPlayersAlive() lPlots = [] for iLoopPlayer in range(iNumTotalPlayers+1): if iLoopPlayer == iPlayer: continue if not gc.getPlayer(iLoopPlayer).isAlive(): continue # after a war: winners can only claim from losers and vice versa if self.bPostWar: if iPlayer in self.lWinners and iLoopPlayer not in self.lLosers: continue if iPlayer in self.lLosers and iLoopPlayer not in self.lWinners: continue # AI civs: cannot claim cities from friends if utils.getHumanID() != iPlayer and pPlayer.AI_getAttitude(iLoopPlayer) >= AttitudeTypes.ATTITUDE_FRIENDLY: continue # recently born if iGameTurn < getTurnForYear(tBirth[iLoopPlayer]) + utils.getTurns(20): continue # recently resurrected if iGameTurn < pPlayer.getLatestRebellionTurn() + utils.getTurns(20): continue # recently reborn if utils.isReborn(iLoopPlayer) and tRebirth != -1 and iGameTurn < getTurnForYear(tRebirth[iLoopPlayer]) + utils.getTurns(20): continue # exclude master/vassal relationships if gc.getTeam(iPlayer).isVassal(iLoopPlayer): continue if gc.getTeam(iLoopPlayer).isVassal(iPlayer): continue # cannot demand cities while at war if gc.getTeam(iPlayer).isAtWar(iLoopPlayer): continue for city in utils.getCityList(iLoopPlayer): x, y = city.getX(), city.getY() plot = gc.getMap().plot(x, y) iSettlerMapValue = plot.getSettlerValue(iPlayer) iValue = 0 if not plot.isRevealed(iPlayer, False): continue if city.isCapital(): continue # after a war: losers can only claim previously owned cities if self.bPostWar and iPlayer in self.lLosers: if city.getGameTurnPlayerLost(iPlayer) < gc.getGame().getGameTurn() - utils.getTurns(25): continue # city culture iTotalCulture = city.countTotalCultureTimes100() if iTotalCulture > 0: iCultureRatio = city.getCultureTimes100(iPlayer) * 100 / iTotalCulture if iCultureRatio > 20: if iLoopPlayer != iAmerica: iValue += iCultureRatio / 20 # ever owned if city.isEverOwned(iPlayer): iValue += 3 # own core if plot.isCore(iPlayer): iValue += 5 # colonies if iPlayer in lCivGroups[0]: if iLoopPlayer >= iNumPlayers or (iLoopPlayer not in lCivGroups[0] and utils.getStabilityLevel(iLoopPlayer) < iStabilityShaky) or (iLoopPlayer in lCivGroups[0] and utils.getHumanID() != iLoopPlayer and pPlayer.AI_getAttitude(iLoopPlayer) < AttitudeTypes.ATTITUDE_PLEASED): if plot.getRegionID() not in lEurope and plot.getRegionID() not in lMiddleEast: if iSettlerMapValue > 90: iValue += max(1, iSettlerMapValue / 100) # weaker and collapsing empires if iLoopPlayer < iNumPlayers: if gc.getGame().getPlayerRank(iLoopPlayer) > iNumPlayersAlive / 2 and gc.getGame().getPlayerRank(iLoopPlayer) < iNumPlayersAlive / 2: if data.players[iLoopPlayer].iStabilityLevel == iStabilityCollapsing: if iSettlerMapValue >= 90: iValue += max(1, iSettlerMapValue / 100) # close to own empire closestCity = gc.getMap().findCity(x, y, iPlayer, TeamTypes.NO_TEAM, False, False, TeamTypes.NO_TEAM, DirectionTypes.NO_DIRECTION, city) iDistance = stepDistance(x, y, closestCity.getX(), closestCity.getY()) if iDistance < 5: iValue += 5-iDistance # after war: war targets if self.bPostWar: iValue += plot.getWarValue(iPlayer) / 2 # AI America receives extra value for claims in the west if iPlayer == iAmerica and utils.getHumanID() != iPlayer: if utils.isPlotInArea((x, y), tAmericanClaimsTL, tAmericanClaimsBR): iValue += 5 # help Canada gain Labrador and Newfoundland if iPlayer == iCanada: if utils.isPlotInArea((x, y), tNewfoundlandTL, tNewfoundlandBR): iValue += 5 if iValue > 0: lPlots.append((x, y, iValue)) # extra spots for colonial civs -> will be settled # not available after wars because these congresses are supposed to reassign cities if iPlayer in lCivGroups[0] and not self.bPostWar: for (x, y) in utils.getWorldPlotsList(): if utils.getHumanID() == iPlayer and not plot.isRevealed(iPlayer, False): continue plot = gc.getMap().plot(x, y) if not plot.isCity() and not plot.isPeak() and not plot.isWater() and pPlayer.canFound(x, y): if plot.getRegionID() in [rWestAfrica, rSouthAfrica, rEthiopia, rAustralia, rOceania]: iSettlerMapValue = plot.getSettlerValue(iPlayer) if iSettlerMapValue >= 90 and cnm.getFoundName(iPlayer, (x, y)): closestCity = gc.getMap().findCity(x, y, PlayerTypes.NO_PLAYER, TeamTypes.NO_TEAM, False, False, TeamTypes.NO_TEAM, DirectionTypes.NO_DIRECTION, CyCity()) if stepDistance(x, y, closestCity.getX(), closestCity.getY()) > 2: lPlots.append((x, y, max(1, iSettlerMapValue / 100 - 1))) lPlots = utils.getSortedList(lPlots, lambda x: x[2] + gc.getGame().getSorenRandNum(3, 'Randomize city value'), True) return lPlots[:10]
def onCityAcquired(self, iOldOwner, iNewOwner, city): if city.hasBuilding(iPlague): if not data.players[iOldOwner].bFirstContactPlague: #don't infect if first contact plague if data.players[iNewOwner].iPlagueCountdown <= 0 and gc.getGame().getGameTurn() > getTurnForYear(tBirth[iNewOwner]) + utils.getTurns(iImmunity): #skip immunity in this case (to prevent expoiting of being immune to conquer weak civs), but not for the new born civs if not gc.getTeam(gc.getPlayer(iNewOwner).getTeam()).isHasTech(iMedicine): #but not permanent immunity print("acquiring plague") self.spreadPlague(iNewOwner) self.infectCitiesNear(iNewOwner, city.getX(), city.getY()) return city.setHasRealBuilding(iPlague, False)
def canDecay(self, iGameTurn, iCiv): if 0 <= iCiv < iNumMajorPlayers: if gc.getPlayer(iCiv).isAlive() and iGameTurn >= getTurnForYear(tBirth[iCiv]+utils.getTurns(15)): # edead: RFCM if not gc.getTeam(gc.getPlayer(iCiv).getTeam()).isHasTech(iElectricity): self.decay(iCiv)
def killUnitsByPlague(self, city, pPlot, baseValue, iDamage, iPreserveDefenders): iOwner = city.getOwner() pOwner = gc.getPlayer(iOwner) teamOwner = gc.getTeam(gc.getPlayer(city.getOwner()).getTeam()) #deadly plague when human player isn't born yet, will speed up the loading if gc.getGame().getGameTurn() < getTurnForYear(tBirth[utils.getHumanID()]) + utils.getTurns(20): iDamage += 10 baseValue -= 5 #print (city.getX(), city.getY()) iNumUnitsInAPlot = pPlot.getNumUnits() #iPreserveHumanDefenders = iPreserveDefenders -1 #human handicap iPreserveHumanDefenders = iPreserveDefenders iHuman = utils.getHumanID() if iPreserveDefenders > 0: #cities only #handicap for civs distant from human player too if not pOwner.isHuman(): #if not human and close or at war #iPreserveDefenders -= 1 if teamOwner.isAtWar(iHuman): iPreserveDefenders += 2 else: for iCivGroups in range(len(lCivGroups)): if iOwner in lCivGroups[iCivGroups] and utils.getHumanID() in lCivGroups[iCivGroups]: iPreserveDefenders += 1 break if iNumUnitsInAPlot > 0: for iUnit in range(iNumUnitsInAPlot): i = iNumUnitsInAPlot - iUnit - 1 unit = pPlot.getUnit(i) if gc.getPlayer(unit.getOwner()).isHuman(): #print ("iPreserveHumanDefenders", iPreserveHumanDefenders) if iPreserveHumanDefenders > 0: if utils.isDefenderUnit(unit): iPreserveHumanDefenders -= 1 if pPlot.getNumUnits() > iPreserveDefenders: pass else: # Leoreth: keep units at 50% minimum unit.setDamage(min(50, unit.getDamage() + iDamage - 20), iBarbarian) #print ("preserve") continue else: if iPreserveDefenders > 0: if utils.isDefenderUnit(unit): iPreserveDefenders -= 1 if pPlot.getNumUnits() > iPreserveDefenders or gc.getTeam(gc.getPlayer(unit.getOwner()).getTeam()).isAtWar(iHuman): pass else: # Leoreth: keep units at 50% minimum unit.setDamage(min(50, unit.getDamage() + iDamage - 20), iBarbarian) #print ("preserve") continue if utils.isMortalUnit(unit): #another human handicap inside iThreshold = baseValue + 5*city.healthRate(False, 0) #print ("iThreshold", iThreshold) if teamOwner.isAtWar(iHuman) and iOwner < iNumMajorPlayers: if unit.getOwner() == iOwner: iDamage *= 3 iDamage /= 4 if data.players[city.getOwner()].bFirstContactPlague: if unit.getOwner() in lCivBioOldWorld: iDamage /= 2 if gc.getGame().getSorenRandNum(100, 'roll') > iThreshold: if iDamage - unit.getExperience()/10 - unit.baseCombatStr()*3/7 >= 100 - unit.getDamage(): if unit.getOwner() != iOwner and gc.getPlayer(unit.getOwner()).isHuman(): CyInterface().addMessage(unit.getOwner(), False, iDuration/2, CyTranslator().getText("TXT_KEY_PLAGUE_PROCESS_UNIT", ()) + " " + city.getName(), "AS2D_PLAGUE", 0, "", ColorTypes(iLime), -1, -1, True, True) #Leoreth: keep units at 50% minimum unit.setDamage(min(50, unit.getDamage() + iDamage - unit.getExperience()/10 - unit.baseCombatStr()/2), iBarbarian) #print ("process") break
def determineTargetPlayer(self, iPlayer): pPlayer = gc.getPlayer(iPlayer) tPlayer = gc.getTeam(pPlayer.getTeam()) lPotentialTargets = [] lTargetValues = [0 for i in range(iNumPlayers)] # determine potential targets for iLoopPlayer in range(iNumPlayers): pLoopPlayer = gc.getPlayer(iLoopPlayer) tLoopPlayer = gc.getTeam(pLoopPlayer.getTeam()) # requires live civ and past contact if not pLoopPlayer.isAlive(): continue if not tPlayer.isHasMet(iLoopPlayer): continue # no masters or vassals if tPlayer.isVassal(iLoopPlayer): continue if tLoopPlayer.isVassal(iPlayer): continue # not already at war if tPlayer.isAtWar(iLoopPlayer): continue lPotentialTargets.append(iLoopPlayer) if not lPotentialTargets: return -1 # iterate the map for all potential targets for i in range(124): for j in range(68): iOwner = gc.getMap().plot(i,j).getOwner() if iOwner in lPotentialTargets: lTargetValues[iOwner] += pPlayer.getWarValue(i, j) # hard to attack with lost contact for iLoopPlayer in lPotentialTargets: lTargetValues[iLoopPlayer] /= 8 # normalization iMaxValue = utils.getHighestEntry(lTargetValues) if iMaxValue == 0: return -1 for iLoopPlayer in lPotentialTargets: lTargetValues[iLoopPlayer] *= 500 lTargetValues[iLoopPlayer] /= iMaxValue for iLoopPlayer in lPotentialTargets: # randomization if lTargetValues[iLoopPlayer] <= iThreshold: lTargetValues[iLoopPlayer] += gc.getGame().getSorenRandNum(100, 'random modifier') else: lTargetValues[iLoopPlayer] += gc.getGame().getSorenRandNum(300, 'random modifier') # balanced by attitude iAttitude = pPlayer.AI_getAttitude(iLoopPlayer) - 2 if iAttitude > 0: lTargetValues[iLoopPlayer] /= 2 * iAttitude # exploit plague if data.players[iLoopPlayer].iPlagueCountdown > 0 or data.players[iLoopPlayer].iPlagueCountdown < -10: if gc.getGame().getGameTurn() > getTurnForYear(tBirth[iLoopPlayer]) + utils.getTurns(20): lTargetValues[iLoopPlayer] *= 3 lTargetValues[iLoopPlayer] /= 2 # determine master iMaster = -1 for iLoopMaster in range(iNumPlayers): if tLoopPlayer.isVassal(iLoopMaster): iMaster = iLoopMaster break # master attitudes if iMaster >= 0: iAttitude = gc.getPlayer(iMaster).AI_getAttitude(iLoopPlayer) if iAttitude > 0: lTargetValues[iLoopPlayer] /= 2 * iAttitude # peace counter if not tPlayer.isAtWar(iLoopPlayer): iCounter = min(7, max(1, tPlayer.AI_getAtPeaceCounter(iLoopPlayer))) if iCounter <= 7: lTargetValues[iLoopPlayer] *= 20 + 10 * iCounter lTargetValues[iLoopPlayer] /= 100 # defensive pact if tPlayer.isDefensivePact(iLoopPlayer): lTargetValues[iLoopPlayer] /= 4 # consider power iOurPower = tPlayer.getPower(True) iTheirPower = gc.getTeam(iLoopPlayer).getPower(True) if iOurPower > 2 * iTheirPower: lTargetValues[iLoopPlayer] *= 2 elif 2 * iOurPower < iTheirPower: lTargetValues[iLoopPlayer] /= 2 # spare smallish civs if iLoopPlayer in [iNetherlands, iPortugal, iItaly]: lTargetValues[iLoopPlayer] *= 4 lTargetValues[iLoopPlayer] /= 5 # no suicide if iPlayer == iNetherlands: if iLoopPlayer in [iFrance, iHolyRome, iGermany]: lTargetValues[iLoopPlayer] /= 2 elif iPlayer == iPortugal: if iLoopPlayer == iSpain: lTargetValues[iLoopPlayer] /= 2 elif iPlayer == iItaly: if iLoopPlayer in [iFrance, iHolyRome, iGermany]: lTargetValues[iLoopPlayer] /= 2 return utils.getHighestIndex(lTargetValues)
def doImmigration(self): # get available migration and immigration cities lSourceCities = [] lTargetCities = [] for iPlayer in range(iNumPlayers): if iPlayer in lCivBioNewWorld and not utils.isReborn(iPlayer): continue # no immigration to natives pPlayer = gc.getPlayer(iPlayer) lCities = [] bNewWorld = pPlayer.getCapitalCity().getRegionID() in lNewWorld for city in utils.getCityList(iPlayer): iFoodDifference = city.foodDifference(False) iHappinessDifference = city.happyLevel() - city.unhappyLevel(0) if city.getRegionID() in lNewWorld and bNewWorld: if iFoodDifference <= 0 or iHappinessDifference <= 0: continue iNorthAmericaBonus = 0 if city.getRegionID() in [rCanada, rUnitedStates]: iNorthAmericaBonus = 5 lCities.append((city, iHappinessDifference + iFoodDifference / 2 + city.getPopulation() / 2 + iNorthAmericaBonus)) elif city.getRegionID() not in lNewWorld and not bNewWorld: iValue = 0 if iFoodDifference < 0: iValue -= iFoodDifference / 2 if iHappinessDifference < 0: iValue -= iHappinessDifference if iValue > 0: lCities.append((city, iValue)) if lCities: lCities.sort(key=itemgetter(1), reverse=True) if bNewWorld: lTargetCities.append(lCities[0]) else: lSourceCities.append(lCities[0]) # sort highest to lowest for happiness/unhappiness lSourceCities.sort(key=itemgetter(1), reverse=True) lTargetCities.sort(key=itemgetter(1), reverse=True) #utils.debugTextPopup(str([(x.getName(), y) for (x,y) in lTargetCities])) #utils.debugTextPopup("Target city: "+targetCity.getName()) #utils.debugTextPopup("Source city: "+sourceCity.getName()) iNumMigrations = min(len(lSourceCities) / 4, len(lTargetCities)) for iMigration in range(iNumMigrations): sourceCity = lSourceCities[iMigration][0] targetCity = lTargetCities[iMigration][0] sourceCity.changePopulation(-1) targetCity.changePopulation(1) if sourceCity.getPopulation() >= 9: sourceCity.changePopulation(-1) targetCity.changePopulation(1) # extra cottage growth for target city's vicinity x = targetCity.getX() y = targetCity.getY() for (i, j) in utils.surroundingPlots((x, y), 2): pCurrent = gc.getMap().plot(i, j) if pCurrent.getWorkingCity() == targetCity: pCurrent.changeUpgradeProgress(utils.getTurns(10)) # migration brings culture targetPlot = gc.getMap().plot(x, y) iTargetPlayer = targetCity.getOwner() iSourcePlayer = sourceCity.getOwner() iCultureChange = targetPlot.getCulture(iTargetPlayer) / targetCity.getPopulation() targetPlot.setCulture(iSourcePlayer, iCultureChange, False) # chance to spread state religion if in source city if gc.getPlayer(iSourcePlayer).isStateReligion(): iReligion = gc.getPlayer(iSourcePlayer).getStateReligion() if sourceCity.isHasReligion(iReligion) and not targetCity.isHasReligion(iReligion): iRandom = gc.getGame().getSorenRandNum(3, 'random religion spread') if iRandom == 0: targetCity.setHasReligion(iReligion, True, True, True) # notify affected players if utils.getHumanID() == iSourcePlayer: CyInterface().addMessage(iSourcePlayer, False, iDuration, CyTranslator().getText("TXT_KEY_UP_EMIGRATION", (sourceCity.getName(),)), "", InterfaceMessageTypes.MESSAGE_TYPE_MINOR_EVENT, gc.getUnitInfo(iSettler).getButton(), ColorTypes(iYellow), sourceCity.getX(), sourceCity.getY(), True, True) elif utils.getHumanID() == iTargetPlayer: CyInterface().addMessage(iTargetPlayer, False, iDuration, CyTranslator().getText("TXT_KEY_UP_IMMIGRATION", (targetCity.getName(),)), "", InterfaceMessageTypes.MESSAGE_TYPE_MINOR_EVENT, gc.getUnitInfo(iSettler).getButton(), ColorTypes(iYellow), x, y, True, True) if iTargetPlayer == iCanada: self.canadianUP(targetCity)
def getWidgetHelp(self, argsList): eWidgetType, iData1, iData2, bOption = argsList # Espionage Advisor if eWidgetType == WidgetTypes.WIDGET_ESPIONAGE_SELECT_PLAYER: pPlayer = gc.getPlayer(iData1) szHelp = CyTranslator().changeTextColor(pPlayer.getName(), gc.getInfoTypeForString('COLOR_HIGHLIGHT_TEXT')) szHelp += "\n" szHelp += pPlayer.getCivilizationDescription(0) szHelp += "\n\n" szHelp += CyGameTextMgr().getAttitudeString(iData1, iData2) return szHelp elif eWidgetType == WidgetTypes.WIDGET_ESPIONAGE_SELECT_CITY: return " " elif eWidgetType == WidgetTypes.WIDGET_ESPIONAGE_SELECT_MISSION: MissionInfo = gc.getEspionageMissionInfo(iData1) szHelp = CyTranslator().changeTextColor(MissionInfo.getDescription(), gc.getInfoTypeForString('COLOR_HIGHLIGHT_TEXT')) szHelp += "\n" szHelp += MissionInfo.getHelp() return szHelp # Go to City elif eWidgetType == WidgetTypes.WIDGET_GO_TO_CITY: szHelp = "Locate this city in the world" return szHelp # Leoreth: Aztec UP: sacrifice slaves if iData1 == 10000: return CyTranslator().getText("TXT_KEY_BUTTON_SACRIFICE", (utils.getTurns(5), utils.getTurns(5))) # Leoreth: Byzantine UP: bribe button if iData1 == 10001: return CyTranslator().getText("TXT_KEY_ACTION_BYZANTINE_UP", ()) ## Religion Screen ## # if eWidgetType == WidgetTypes.WIDGET_HELP_RELIGION: # if iData1 == -1: # return CyTranslator().getText("TXT_KEY_CULTURELEVEL_NONE", ()) ## Platy WorldBuilder ## if eWidgetType == WidgetTypes.WIDGET_PYTHON: if iData1 == 1027: return CyTranslator().getText("TXT_KEY_WB_PLOT_DATA",()) elif iData1 == 1028: return gc.getGameOptionInfo(iData2).getHelp() elif iData1 == 1029: if iData2 == 0: sText = CyTranslator().getText("TXT_KEY_WB_PYTHON", ()) sText += "\n" + CyTranslator().getText("[ICON_BULLET]", ()) + "onFirstContact" sText += "\n" + CyTranslator().getText("[ICON_BULLET]", ()) + "onChangeWar" sText += "\n" + CyTranslator().getText("[ICON_BULLET]", ()) + "onVassalState" sText += "\n" + CyTranslator().getText("[ICON_BULLET]", ()) + "onCityAcquired" sText += "\n" + CyTranslator().getText("[ICON_BULLET]", ()) + "onCityBuilt" sText += "\n" + CyTranslator().getText("[ICON_BULLET]", ()) + "onCultureExpansion" sText += "\n" + CyTranslator().getText("[ICON_BULLET]", ()) + "onGoldenAge" sText += "\n" + CyTranslator().getText("[ICON_BULLET]", ()) + "onEndGoldenAge" sText += "\n" + CyTranslator().getText("[ICON_BULLET]", ()) + "onGreatPersonBorn" sText += "\n" + CyTranslator().getText("[ICON_BULLET]", ()) + "onPlayerChangeStateReligion" sText += "\n" + CyTranslator().getText("[ICON_BULLET]", ()) + "onReligionFounded" sText += "\n" + CyTranslator().getText("[ICON_BULLET]", ()) + "onReligionSpread" sText += "\n" + CyTranslator().getText("[ICON_BULLET]", ()) + "onReligionRemove" sText += "\n" + CyTranslator().getText("[ICON_BULLET]", ()) + "onCorporationFounded" sText += "\n" + CyTranslator().getText("[ICON_BULLET]", ()) + "onCorporationSpread" sText += "\n" + CyTranslator().getText("[ICON_BULLET]", ()) + "onCorporationRemove" sText += "\n" + CyTranslator().getText("[ICON_BULLET]", ()) + "onUnitCreated" sText += "\n" + CyTranslator().getText("[ICON_BULLET]", ()) + "onUnitLost" sText += "\n" + CyTranslator().getText("[ICON_BULLET]", ()) + "onUnitPromoted" sText += "\n" + CyTranslator().getText("[ICON_BULLET]", ()) + "onBuildingBuilt" sText += "\n" + CyTranslator().getText("[ICON_BULLET]", ()) + "onProjectBuilt" sText += "\n" + CyTranslator().getText("[ICON_BULLET]", ()) + "onTechAcquired" sText += "\n" + CyTranslator().getText("[ICON_BULLET]", ()) + "onImprovementBuilt" sText += "\n" + CyTranslator().getText("[ICON_BULLET]", ()) + "onImprovementDestroyed" sText += "\n" + CyTranslator().getText("[ICON_BULLET]", ()) + "onRouteBuilt" sText += "\n" + CyTranslator().getText("[ICON_BULLET]", ()) + "onPlotRevealed" return sText elif iData2 == 1: return CyTranslator().getText("TXT_KEY_WB_PLAYER_DATA",()) elif iData2 == 2: return CyTranslator().getText("TXT_KEY_WB_TEAM_DATA",()) elif iData2 == 3: return CyTranslator().getText("TXT_KEY_PEDIA_CATEGORY_TECH",()) elif iData2 == 4: return CyTranslator().getText("TXT_KEY_PEDIA_CATEGORY_PROJECT",()) elif iData2 == 5: return CyTranslator().getText("TXT_KEY_PEDIA_CATEGORY_UNIT", ()) + " + " + CyTranslator().getText("TXT_KEY_CONCEPT_CITIES", ()) elif iData2 == 6: return CyTranslator().getText("TXT_KEY_PEDIA_CATEGORY_PROMOTION",()) elif iData2 == 7: return CyTranslator().getText("TXT_KEY_WB_CITY_DATA2",()) elif iData2 == 8: return CyTranslator().getText("TXT_KEY_PEDIA_CATEGORY_BUILDING",()) elif iData2 == 9: return "Platy Builder\nVersion: 4.17" elif iData2 == 10: return CyTranslator().getText("TXT_KEY_CONCEPT_EVENTS",()) elif iData2 == 11: return CyTranslator().getText("TXT_KEY_WB_RIVER_PLACEMENT",()) elif iData2 == 12: return CyTranslator().getText("TXT_KEY_PEDIA_CATEGORY_IMPROVEMENT",()) elif iData2 == 13: return CyTranslator().getText("TXT_KEY_PEDIA_CATEGORY_BONUS",()) elif iData2 == 14: return CyTranslator().getText("TXT_KEY_WB_PLOT_TYPE",()) elif iData2 == 15: return CyTranslator().getText("TXT_KEY_CONCEPT_TERRAIN",()) elif iData2 == 16: return CyTranslator().getText("TXT_KEY_PEDIA_CATEGORY_ROUTE",()) elif iData2 == 17: return CyTranslator().getText("TXT_KEY_PEDIA_CATEGORY_FEATURE",()) elif iData2 == 18: return CyTranslator().getText("TXT_KEY_MISSION_BUILD_CITY",()) elif iData2 == 19: return CyTranslator().getText("TXT_KEY_WB_ADD_BUILDINGS",()) elif iData2 == 20: return CyTranslator().getText("TXT_KEY_PEDIA_CATEGORY_RELIGION",()) elif iData2 == 21: return CyTranslator().getText("TXT_KEY_CONCEPT_CORPORATIONS",()) elif iData2 == 22: return CyTranslator().getText("TXT_KEY_ESPIONAGE_CULTURE",()) elif iData2 == 23: return CyTranslator().getText("TXT_KEY_PITBOSS_GAME_OPTIONS",()) elif iData2 == 24: return CyTranslator().getText("TXT_KEY_WB_SENSIBILITY",()) elif iData2 == 27: return CyTranslator().getText("TXT_KEY_WB_ADD_UNITS",()) elif iData2 == 28: return CyTranslator().getText("TXT_KEY_WB_TERRITORY",()) elif iData2 == 29: return CyTranslator().getText("TXT_KEY_WB_ERASE_ALL_PLOTS",()) elif iData2 == 30: return CyTranslator().getText("TXT_KEY_WB_REPEATABLE",()) elif iData2 == 31: return CyTranslator().getText("TXT_KEY_PEDIA_HIDE_INACTIVE", ()) elif iData2 == 32: return CyTranslator().getText("TXT_KEY_WB_STARTING_PLOT", ()) elif iData2 == 33: return CyTranslator().getText("TXT_KEY_INFO_SCREEN", ()) elif iData2 == 34: return CyTranslator().getText("TXT_KEY_CONCEPT_TRADE", ()) elif iData1 > 1029 and iData1 < 1040: if iData1 %2: return "-" return "+" elif iData1 == 1041: return CyTranslator().getText("TXT_KEY_WB_KILL",()) elif iData1 == 1042: return CyTranslator().getText("TXT_KEY_MISSION_SKIP",()) elif iData1 == 1043: if iData2 == 0: return CyTranslator().getText("TXT_KEY_WB_DONE",()) elif iData2 == 1: return CyTranslator().getText("TXT_KEY_WB_FORTIFY",()) elif iData2 == 2: return CyTranslator().getText("TXT_KEY_WB_WAIT",()) elif iData1 == 6782: return CyGameTextMgr().parseCorporationInfo(iData2, False) elif iData1 == 6785: return CyGameTextMgr().getProjectHelp(iData2, False, CyCity()) elif iData1 == 6787: return gc.getProcessInfo(iData2).getDescription() elif iData1 == 6788: if iData2 == -1: return CyTranslator().getText("TXT_KEY_CULTURELEVEL_NONE", ()) return gc.getRouteInfo(iData2).getDescription() ## City Hover Text ## elif iData1 > 7199 and iData1 < 7300: iPlayer = iData1 - 7200 pPlayer = gc.getPlayer(iPlayer) pCity = pPlayer.getCity(iData2) if CyGame().GetWorldBuilderMode(): sText = "<font=3>" if pCity.isCapital(): sText += CyTranslator().getText("[ICON_STAR]", ()) elif pCity.isGovernmentCenter(): sText += CyTranslator().getText("[ICON_SILVER_STAR]", ()) sText += u"%s: %d<font=2>" %(pCity.getName(), pCity.getPopulation()) sTemp = "" if pCity.isConnectedToCapital(iPlayer): sTemp += CyTranslator().getText("[ICON_TRADE]", ()) for i in xrange(gc.getNumReligionInfos()): if pCity.isHolyCityByType(i): sTemp += u"%c" %(gc.getReligionInfo(i).getHolyCityChar()) elif pCity.isHasReligion(i): sTemp += u"%c" %(gc.getReligionInfo(i).getChar()) for i in xrange(gc.getNumCorporationInfos()): if pCity.isHeadquartersByType(i): sTemp += u"%c" %(gc.getCorporationInfo(i).getHeadquarterChar()) elif pCity.isHasCorporation(i): sTemp += u"%c" %(gc.getCorporationInfo(i).getChar()) if len(sTemp) > 0: sText += "\n" + sTemp iMaxDefense = pCity.getTotalDefense(False) if iMaxDefense > 0: sText += u"\n%s: " %(CyTranslator().getText("[ICON_DEFENSE]", ())) iCurrent = pCity.getDefenseModifier(False) if iCurrent != iMaxDefense: sText += u"%d/" %(iCurrent) sText += u"%d%%" %(iMaxDefense) sText += u"\n%s: %d/%d" %(CyTranslator().getText("[ICON_FOOD]", ()), pCity.getFood(), pCity.growthThreshold()) iFoodGrowth = pCity.foodDifference(True) if iFoodGrowth != 0: sText += u" %+d" %(iFoodGrowth) if pCity.isProduction(): sText += u"\n%s:" %(CyTranslator().getText("[ICON_PRODUCTION]", ())) if not pCity.isProductionProcess(): sText += u" %d/%d" %(pCity.getProduction(), pCity.getProductionNeeded()) iProduction = pCity.getCurrentProductionDifference(False, True) if iProduction != 0: sText += u" %+d" %(iProduction) sText += u" (%s)" %(pCity.getProductionName()) iGPRate = pCity.getGreatPeopleRate() iProgress = pCity.getGreatPeopleProgress() if iGPRate > 0 or iProgress > 0: sText += u"\n%s: %d/%d %+d" %(CyTranslator().getText("[ICON_GREATPEOPLE]", ()), iProgress, pPlayer.greatPeopleThreshold(False), iGPRate) sText += u"\n%s: %d/%d (%s)" %(CyTranslator().getText("[ICON_CULTURE]", ()), pCity.getCulture(iPlayer), pCity.getCultureThreshold(), gc.getCultureLevelInfo(pCity.getCultureLevel()).getDescription()) lTemp = [] for i in xrange(CommerceTypes.NUM_COMMERCE_TYPES): iAmount = pCity.getCommerceRateTimes100(i) if iAmount <= 0: continue sTemp = u"%d.%02d%c" %(pCity.getCommerceRate(i), pCity.getCommerceRateTimes100(i)%100, gc.getCommerceInfo(i).getChar()) lTemp.append(sTemp) if len(lTemp) > 0: sText += "\n" for i in xrange(len(lTemp)): sText += lTemp[i] if i < len(lTemp) - 1: sText += ", " iMaintenance = pCity.getMaintenanceTimes100() if iMaintenance != 0: sText += "\n" + CyTranslator().getText("[COLOR_WARNING_TEXT]", ()) + CyTranslator().getText("INTERFACE_CITY_MAINTENANCE", ()) + " </color>" sText += u"-%d.%02d%c" %(iMaintenance/100, iMaintenance%100, gc.getCommerceInfo(CommerceTypes.COMMERCE_GOLD).getChar()) lBuildings = [] lWonders = [] for i in xrange(gc.getNumBuildingInfos()): if pCity.isHasBuilding(i): Info = gc.getBuildingInfo(i) if isLimitedWonderClass(Info.getBuildingClassType()): lWonders.append(Info.getDescription()) else: lBuildings.append(Info.getDescription()) if len(lBuildings) > 0: lBuildings.sort() sText += "\n" + CyTranslator().getText("[COLOR_BUILDING_TEXT]", ()) + CyTranslator().getText("TXT_KEY_PEDIA_CATEGORY_BUILDING", ()) + ": </color>" for i in xrange(len(lBuildings)): sText += lBuildings[i] if i < len(lBuildings) - 1: sText += ", " if len(lWonders) > 0: lWonders.sort() sText += "\n" + CyTranslator().getText("[COLOR_SELECTED_TEXT]", ()) + CyTranslator().getText("TXT_KEY_CONCEPT_WONDERS", ()) + ": </color>" for i in xrange(len(lWonders)): sText += lWonders[i] if i < len(lWonders) - 1: sText += ", " sText += "</font>" return sText ## Religion Widget Text## elif iData1 == 7869: return CyGameTextMgr().parseReligionInfo(iData2, False) ## Building Widget Text## elif iData1 == 7870: return CyGameTextMgr().getBuildingHelp(iData2, False, False, False, None) ## Tech Widget Text## elif iData1 == 7871: if iData2 == -1: return CyTranslator().getText("TXT_KEY_CULTURELEVEL_NONE", ()) return CyGameTextMgr().getTechHelp(iData2, False, False, False, False, -1) ## Civilization Widget Text## elif iData1 == 7872: iCiv = iData2 % 10000 return CyGameTextMgr().parseCivInfos(iCiv, False) ## Promotion Widget Text## elif iData1 == 7873: return CyGameTextMgr().getPromotionHelp(iData2, False) ## Feature Widget Text## elif iData1 == 7874: if iData2 == -1: return CyTranslator().getText("TXT_KEY_CULTURELEVEL_NONE", ()) iFeature = iData2 % 10000 return CyGameTextMgr().getFeatureHelp(iFeature, False) ## Terrain Widget Text## elif iData1 == 7875: return CyGameTextMgr().getTerrainHelp(iData2, False) ## Leader Widget Text## elif iData1 == 7876: iLeader = iData2 % 10000 return CyGameTextMgr().parseLeaderTraits(iLeader, -1, False, False) ## Improvement Widget Text## elif iData1 == 7877: if iData2 == -1: return CyTranslator().getText("TXT_KEY_CULTURELEVEL_NONE", ()) return CyGameTextMgr().getImprovementHelp(iData2, False) ## Bonus Widget Text## elif iData1 == 7878: if iData2 == -1: return CyTranslator().getText("TXT_KEY_CULTURELEVEL_NONE", ()) return CyGameTextMgr().getBonusHelp(iData2, False) ## Specialist Widget Text## elif iData1 == 7879: return CyGameTextMgr().getSpecialistHelp(iData2, False) ## Yield Text## elif iData1 == 7880: return gc.getYieldInfo(iData2).getDescription() ## Commerce Text## elif iData1 == 7881: return gc.getCommerceInfo(iData2).getDescription() ## Build Text## elif iData1 == 7882: return gc.getBuildInfo(iData2).getDescription() ## Corporation Screen ## elif iData1 == 8201: return CyGameTextMgr().parseCorporationInfo(iData2, False) ## Military Screen ## elif iData1 == 8202: if iData2 == -1: return CyTranslator().getText("TXT_KEY_PEDIA_ALL_UNITS", ()) return CyGameTextMgr().getUnitHelp(iData2, False, False, False, None) elif iData1 > 8299 and iData1 < 8400: iPlayer = iData1 - 8300 pUnit = gc.getPlayer(iPlayer).getUnit(iData2) sText = CyGameTextMgr().getSpecificUnitHelp(pUnit, True, False) if CyGame().GetWorldBuilderMode(): sText += "\n" + CyTranslator().getText("TXT_KEY_WB_UNIT", ()) + " ID: " + str(iData2) sText += "\n" + CyTranslator().getText("TXT_KEY_WB_GROUP", ()) + " ID: " + str(pUnit.getGroupID()) sText += "\n" + "X: " + str(pUnit.getX()) + ", Y: " + str(pUnit.getY()) sText += "\n" + CyTranslator().getText("TXT_KEY_WB_AREA_ID", ()) + ": " + str(pUnit.plot().getArea()) return sText ## Civics Screen ## elif iData1 == 8205 or iData1 == 8206: sText = CyGameTextMgr().parseCivicInfo(iData2, False, True, False) if gc.getCivicInfo(iData2).getUpkeep() > -1: sText += "\n" + gc.getUpkeepInfo(gc.getCivicInfo(iData2).getUpkeep()).getDescription() else: sText += "\n" + CyTranslator().getText("TXT_KEY_CIVICS_SCREEN_NO_UPKEEP", ()) return sText ## Ultrapack ## return u""
def checkJudaism(self, iGameTurn): if gc.getGame().isReligionFounded(iJudaism): return if iGameTurn == getTurnForYear(-1500) - utils.getTurns(data.iSeed % 5): self.foundReligion(self.selectHolyCity(tJewishTL, tJewishBR, tJerusalem), iJudaism)
def checkBuddhism(self, iGameTurn): if gc.getGame().isReligionFounded(iBuddhism): return if iGameTurn == getTurnForYear(-300) - 5 + utils.getTurns(data.iSeed % 10): self.foundReligion(self.selectHolyCity(tBuddhistTL, tBuddhistBR), iBuddhism)