Ejemplo n.º 1
0
    def tamilConquestUP(self, iEnemy, iNumTargets=1):  # Unused
        lEnemyCities = []

        print "Getting closest city."
        for pCity in utils.getCityList(iEnemy):
            iDist = utils.calculateDistance(pCity.getX(), pCity.getY(),
                                            pTamils.getCapitalCity().getX(),
                                            pTamils.getCapitalCity().getY())
            lEnemyCities.append((iDist, pCity))

        lEnemyCities.sort()

        for i in range(iNumTargets):
            if lEnemyCities:
                pTargetCity = lEnemyCities.pop(0)[1]
                tPlot = utils.findNearestLandPlot(
                    (pTargetCity.getX(), pTargetCity.getY()), iTamils)

                utils.makeUnitAI(iSwordsman, iTamils, tPlot,
                                 UnitAITypes.UNITAI_ATTACK_CITY, 2)
                utils.makeUnitAI(iWarElephant, iTamils, tPlot,
                                 UnitAITypes.UNITAI_ATTACK_CITY, 1)
                utils.makeUnitAI(iCatapult, iTamils, tPlot,
                                 UnitAITypes.UNITAI_ATTACK_CITY, 1)

        CyInterface().addMessage(
            iEnemy, False, iDuration,
            CyTranslator().getText("TXT_KEY_UP_TAMIL_CONQUESTS_TARGET", ()),
            "", 0, "", ColorTypes(iWhite), -1, -1, True, True)
Ejemplo n.º 2
0
    def greekConquestUP(self, iEnemy, iNumTargets=1):  # Unused
        lEnemyCities = []

        print "Getting closest city."
        for city in utils.getCityList(iEnemy):
            iDist = utils.calculateDistance(pCity.getX(), pCity.getY(),
                                            pGreece.getCapitalCity().getX(),
                                            pGreece.getCapitalCity().getY())
            lEnemyCities.append((iDist, pCity))

        lEnemyCities.sort()

        for i in range(iNumTargets):
            if len(lEnemyCities) > 0:
                pTargetCity = lEnemyCities.pop(0)[1]
                tPlot = utils.findNearestLandPlot(
                    (pTargetCity.getX(), pTargetCity.getY()), iGreece)

                iExtra = 0
                if utils.getHumanID() not in [iGreece, iEnemy]:
                    iExtra = 1
                    if iEnemy == iPersia: iExtra = 2

                utils.makeUnitAI(iHoplite, iGreece, tPlot,
                                 UnitAITypes.UNITAI_ATTACK_CITY,
                                 20 + iExtra * 2)
                utils.makeUnitAI(iCatapult, iGreece, tPlot,
                                 UnitAITypes.UNITAI_ATTACK_CITY,
                                 10 + iExtra * 2)

        CyInterface().addMessage(
            iEnemy, False, iDuration,
            CyTranslator().getText("TXT_KEY_UP_GREEK_CONQUESTS_TARGET", ()),
            "", 0, "", ColorTypes(iWhite), -1, -1, True, True)
	def greekConquestUP(self, iEnemy, iNumTargets=1): # Unused
		lEnemyCities = []
		
		print "Getting closest city."
		for city in utils.getCityList(iEnemy):
			iDist = utils.calculateDistance(pCity.getX(), pCity.getY(), pGreece.getCapitalCity().getX(), pGreece.getCapitalCity().getY())
			lEnemyCities.append((iDist, pCity))
			
		lEnemyCities.sort()
		
		for i in range(iNumTargets):
			if len(lEnemyCities) > 0:
				pTargetCity = lEnemyCities.pop(0)[1]
				tPlot = utils.findNearestLandPlot((pTargetCity.getX(), pTargetCity.getY()), iGreece)
				
				iExtra = 0
				if utils.getHumanID() not in [iGreece, iEnemy]: 
					iExtra = 1
					if iEnemy == iPersia: iExtra = 2
				
				utils.makeUnitAI(iGreekHoplite, iGreece, tPlot, UnitAITypes.UNITAI_ATTACK_CITY, 2+iExtra*2)
				utils.makeUnitAI(iCatapult, iGreece, tPlot, UnitAITypes.UNITAI_ATTACK_CITY, 1+iExtra*2)
				utils.makeUnitAI(iGreekHetairoi, iGreece, tPlot, UnitAITypes.UNITAI_ATTACK_CITY, 1+iExtra*2)
				
		CyInterface().addMessage(iEnemy, False, iDuration, CyTranslator().getText("TXT_KEY_UP_GREEK_CONQUESTS_TARGET", ()), "", 0, "", ColorTypes(iWhite), -1, -1, True, True)
	def romanConquestUP(self, iEnemy, iNumTargets=1, lPreferredTargetRegions=[]): # Unused
		lEnemyCities = []
		lPreferredCities = []
		
		print "Getting closest city."
		for city in utils.getCityList(iEnemy):
			iDist = utils.calculateDistance(pCity.getX(), pCity.getY(), pRome.getCapitalCity().getX(), pRome.getCapitalCity().getY())
			lEnemyCities.append((iDist, pCity))
			if pCity.getRegionID() in lPreferredTargetRegions:
				lPreferredCities.append((iDist, pCity))
				
		if lPreferredCities:
			lEnemyCities = lPreferredCities
			
		lEnemyCities.sort()
		
		for i in range(iNumTargets):
			if lEnemyCities:
				pTargetCity = lEnemyCities.pop(0)[1]
				tPlot = utils.findNearestLandPlot((pTargetCity.getX(), pTargetCity.getY()), iRome)
				
				iExtra = 0
				if utils.getHumanID() != iRome and utils.getHumanID() != iEnemy: iExtra = 1
				
				utils.makeUnitAI(iRomanLegion, iRome, tPlot, UnitAITypes.UNITAI_ATTACK_CITY, 2+iExtra)
				utils.makeUnitAI(iCatapult, iRome, tPlot, UnitAITypes.UNITAI_ATTACK_CITY, 1+iExtra*2)
				
		#utils.debugTextPopup("Roman conquerors against "+CyTranslator().getText(str(gc.getPlayer(iEnemy).getCivilizationShortDescriptionKey()), ()))

		CyInterface().addMessage(iRome, False, iDuration, CyTranslator().getText("TXT_KEY_UP_ROMAN_CONQUESTS",(gc.getPlayer(iEnemy).getCivilizationShortDescriptionKey(),)), "", 0, "", ColorTypes(iWhite), -1, -1, True, True)
		CyInterface().addMessage(iEnemy, False, iDuration, CyTranslator().getText("TXT_KEY_UP_ROMAN_CONQUESTS_TARGET", ()), "", 0, "", ColorTypes(iWhite), -1, -1, True, True)
		print ("Message displayed.")
Ejemplo n.º 5
0
	def romanConquestUP(self, iEnemy, iNumTargets=1, lPreferredTargetRegions=[]): # Unused
		lEnemyCities = []
		lPreferredCities = []
		
		print "Getting closest city."
		for city in utils.getCityList(iEnemy):
			iDist = utils.calculateDistance(pCity.getX(), pCity.getY(), pRome.getCapitalCity().getX(), pRome.getCapitalCity().getY())
			lEnemyCities.append((iDist, pCity))
			if pCity.getRegionID() in lPreferredTargetRegions:
				lPreferredCities.append((iDist, pCity))
				
		if lPreferredCities:
			lEnemyCities = lPreferredCities
			
		lEnemyCities.sort()
		
		for i in range(iNumTargets):
			if lEnemyCities:
				pTargetCity = lEnemyCities.pop(0)[1]
				tPlot = utils.findNearestLandPlot((pTargetCity.getX(), pTargetCity.getY()), iRome)
				
				iExtra = 0
				if utils.getHumanID() != iRome and utils.getHumanID() != iEnemy: iExtra = 1
				
				utils.makeUnitAI(iLegion, iRome, tPlot, UnitAITypes.UNITAI_ATTACK_CITY, 2+iExtra)
				utils.makeUnitAI(iCatapult, iRome, tPlot, UnitAITypes.UNITAI_ATTACK_CITY, 1+iExtra*2)
				
		#utils.debugTextPopup("Roman conquerors against "+CyTranslator().getText(str(gc.getPlayer(iEnemy).getCivilizationShortDescriptionKey()), ()))

		CyInterface().addMessage(iRome, False, iDuration, CyTranslator().getText("TXT_KEY_UP_ROMAN_CONQUESTS",(gc.getPlayer(iEnemy).getCivilizationShortDescriptionKey(),)), "", 0, "", ColorTypes(iWhite), -1, -1, True, True)
		CyInterface().addMessage(iEnemy, False, iDuration, CyTranslator().getText("TXT_KEY_UP_ROMAN_CONQUESTS_TARGET", ()), "", 0, "", ColorTypes(iWhite), -1, -1, True, True)
		print ("Message displayed.")
 def infectCitiesNear(self, iPlayer, startingX, startingY):
     for city in utils.getCityList(iPlayer):
         if utils.calculateDistance(city.getX(), city.getY(), startingX,
                                    startingY) <= 3:
             self.infectCity(city)
             if (gc.getDefineINT("PYTHON_LOG_ON_MAIN_PLAGUE") == 1):
                 utils.logwithid(iPlayer, ' is infecting near city')
             self.announceForeignPlagueSpread(city)
	def spreadBetweenCities(self, iPlayer, lSourceCities, lTargetCities):
		if data.players[iPlayer].iPlagueCountdown <= 2: return
		
		random.shuffle(lTargetCities)
		for targetCity in lTargetCities:
			if [city for city in lSourceCities if targetCity.isConnectedTo(city) and utils.calculateDistance(targetCity.getX(), targetCity.getY(), city.getX(), city.getY()) <= 6]:
				self.infectCity(targetCity)
				return
Ejemplo n.º 8
0
    def spreadBetweenCities(self, iPlayer, lSourceCities, lTargetCities):
        if data.players[iPlayer].iPlagueCountdown <= 2: return

        random.shuffle(lTargetCities)
        for targetCity in lTargetCities:
            if [
                    city for city in lSourceCities
                    if targetCity.isConnectedTo(city)
                    and utils.calculateDistance(targetCity.getX(
                    ), targetCity.getY(), city.getX(), city.getY()) <= 6
            ]:
                self.infectCity(targetCity)
                return
	def tradingCompanyCulture(self, city, iCiv, iPreviousOwner):
		tCity = (city.getX(), city.getY())
		x, y = tCity
		for (i, j) in utils.surroundingPlots(tCity):
			pPlot = gc.getMap().plot(i, j)
			if (i, j) == tCity:
				utils.convertPlotCulture(pPlot, iCiv, 51, False)
			elif pPlot.isCity():
				pass
			elif utils.calculateDistance(i, j, x ,y) == 1:
				utils.convertPlotCulture(pPlot, iCiv, 65, True)
			else:
				if pPlot.getOwner() == iPreviousOwner:
					utils.convertPlotCulture(pPlot, iCiv, 15, False)
	def turkishUP(self, city, iCiv, iPreviousOwner):
		tPlot = (city.getX(), city.getY())
		x, y = tPlot
		for (i, j) in utils.surroundingPlots(tPlot, 2):
			pPlot = gc.getMap().plot(i, j)
			if (i, j) == tPlot:
				utils.convertPlotCulture(pPlot, iCiv, 51, False)
			elif pPlot.isCity():
				pass
			elif utils.calculateDistance(i, j, x ,y) == 1:
				utils.convertPlotCulture(pPlot, iCiv, 80, True)
			else:
				if pPlot.getOwner() == iPreviousOwner:
					utils.convertPlotCulture(pPlot, iCiv, 20, False)
Ejemplo n.º 11
0
 def ottomanUP(self, city, iCiv, iPreviousOwner):
     tPlot = (city.getX(), city.getY())
     x, y = tPlot
     for (i, j) in utils.surroundingPlots(tPlot, 2):
         pPlot = gc.getMap().plot(i, j)
         if (i, j) == tPlot:
             utils.convertPlotCulture(pPlot, iCiv, 51, False)
         elif pPlot.isCity():
             pass
         elif utils.calculateDistance(i, j, x, y) == 1:
             utils.convertPlotCulture(pPlot, iCiv, 80, True)
         else:
             if pPlot.getOwner() == iPreviousOwner:
                 utils.convertPlotCulture(pPlot, iCiv, 20, False)
Ejemplo n.º 12
0
 def tradingCompanyCulture(self, city, iCiv, iPreviousOwner):
     tCity = (city.getX(), city.getY())
     x, y = tCity
     for (i, j) in utils.surroundingPlots(tCity):
         pPlot = gc.getMap().plot(i, j)
         if (i, j) == tCity:
             utils.convertPlotCulture(pPlot, iCiv, 51, False)
         elif pPlot.isCity():
             pass
         elif utils.calculateDistance(i, j, x, y) == 1:
             utils.convertPlotCulture(pPlot, iCiv, 65, True)
         else:
             if pPlot.getOwner() == iPreviousOwner:
                 utils.convertPlotCulture(pPlot, iCiv, 15, False)
Ejemplo n.º 13
0
	def spawnConquerors(self, iPlayer, iPreferredTarget, tTL, tBR, iNumTargets, iYear, iIntervalTurns, iWarPlan = WarPlanTypes.WARPLAN_TOTAL):
		lCities = []
		for city in utils.getAreaCities(utils.getPlotList(tTL, tBR)):
			if city.getOwner() != iPlayer and not gc.getTeam(city.getOwner()).isVassal(iPlayer):
				lCities.append(city)
				
		capital = gc.getPlayer(iPlayer).getCapitalCity()
		
		lTargetCities = []
		for i in range(iNumTargets):
			if len(lCities) == 0: break
			
			targetCity = utils.getHighestEntry(lCities, lambda x: -utils.calculateDistance(x.getX(), x.getY(), capital.getX(), capital.getY()) + int(x.getOwner() == iPreferredTarget) * 1000)
			lTargetCities.append(targetCity)
			lCities.remove(targetCity)
			
		lOwners = []
		for city in lTargetCities:
			if city.getOwner() not in lOwners:
				lOwners.append(city.getOwner())
				
		if iPreferredTarget not in lOwners and gc.getPlayer(iPreferredTarget).isAlive():
			gc.getTeam(iPlayer).declareWar(iPreferredTarget, True, iWarPlan)
				
		for iOwner in lOwners:
			gc.getTeam(iPlayer).declareWar(iOwner, True, iWarPlan)
			CyInterface().addMessage(iOwner, False, iDuration, CyTranslator().getText("TXT_KEY_UP_CONQUESTS_TARGET", (gc.getPlayer(iPlayer).getCivilizationShortDescription(0),)), "", 0, "", ColorTypes(iWhite), -1, -1, True, True)
			
		for city in lTargetCities:
			iExtra = 0
			if utils.getHumanID() not in [iPlayer, city.getOwner()]: iExtra = 1 #max(1, gc.getPlayer(iPlayer).getCurrentEra())
			
			tPlot = utils.findNearestLandPlot((city.getX(), city.getY()), iPlayer)
			
			iBestInfantry = utils.getBestInfantry(iPlayer)
			iBestSiege = utils.getBestSiege(iPlayer)
			
			if iPlayer == iGreece:
				iBestInfantry = iHoplite
				iBestSiege = iCatapult
			
			utils.makeUnitAI(iBestInfantry, iPlayer, tPlot, UnitAITypes.UNITAI_ATTACK_CITY, 2 + iExtra)
			utils.makeUnitAI(iBestSiege, iPlayer, tPlot, UnitAITypes.UNITAI_ATTACK_CITY, 1 + 2*iExtra)
			
			if iPlayer == iTamils:
				utils.makeUnitAI(iWarElephant, iPlayer, tPlot, UnitAITypes.UNITAI_ATTACK_CITY, 1)
				
			if iPlayer == iSpain:
				utils.makeUnitAI(utils.getBestCavalry(iPlayer), iPlayer, tPlot, UnitAITypes.UNITAI_ATTACK_CITY, 2 * iExtra)
Ejemplo n.º 14
0
	def damageNearbyUnits(self, city):
		for (x, y) in utils.surroundingPlots((city.getX(), city.getY()), 3):
			plot = gc.getMap().plot(x, y)
			iDistance = utils.calculateDistance(city.getX(), city.getY(), x, y)
			
			if iDistance == 0:
				self.killUnitsByPlague(city, plot, 0, 42, 2)
			elif not plot.isCity():
				if iDistance < 3:
					if plot.isRoute():
						self.killUnitsByPlague(city, plot, 10, 35, 0)
					else:
						self.killUnitsByPlague(city, plot, 30, 35, 0)
				else:
					if plot.isRoute() or plot.isWater():
						self.killUnitsByPlague(city, plot, 30, 35, 0)
    def spreadBetweenCities(self, iPlayer, lSourceCities, lTargetCities):
        if data.players[iPlayer].iPlagueCountdown <= 2: return

        random.shuffle(lTargetCities)
        for targetCity in lTargetCities:
            if [
                    city for city in lSourceCities
                    if targetCity.isConnectedTo(city)
                    and utils.calculateDistance(targetCity.getX(
                    ), targetCity.getY(), city.getX(), city.getY()) <= 6
            ]:
                self.infectCity(targetCity)
                if (gc.getDefineINT("PYTHON_LOG_ON_MAIN_PLAGUE") == 1):
                    utils.logwithid(iPlayer,
                                    ' plague is spreading between city')
                return
Ejemplo n.º 16
0
    def damageNearbyUnits(self, city):
        for (x, y) in utils.surroundingPlots((city.getX(), city.getY()), 3):
            plot = gc.getMap().plot(x, y)
            iDistance = utils.calculateDistance(city.getX(), city.getY(), x, y)

            if iDistance == 0:
                self.killUnitsByPlague(city, plot, 0, 42, 2)
            elif not plot.isCity():
                if iDistance < 3:
                    if plot.isRoute():
                        self.killUnitsByPlague(city, plot, 10, 35, 0)
                    else:
                        self.killUnitsByPlague(city, plot, 30, 35, 0)
                else:
                    if plot.isRoute() or plot.isWater():
                        self.killUnitsByPlague(city, plot, 30, 35, 0)
Ejemplo n.º 17
0
	def spawnConquerors(self, iPlayer, iPreferredTarget, tTL, tBR, iNumTargets, iYear, iIntervalTurns, iWarPlan = WarPlanTypes.WARPLAN_TOTAL):
		lCities = []
		for city in utils.getAreaCities(utils.getPlotList(tTL, tBR)):
			if city.getOwner() != iPlayer and not gc.getTeam(city.getOwner()).isVassal(iPlayer):
				lCities.append(city)
				
		capital = gc.getPlayer(iPlayer).getCapitalCity()
		
		lTargetCities = []
		for i in range(iNumTargets):
			if len(lCities) == 0: break
			
			targetCity = utils.getHighestEntry(lCities, lambda x: -utils.calculateDistance(x.getX(), x.getY(), capital.getX(), capital.getY()) + int(x.getOwner() == iPreferredTarget) * 1000)
			lTargetCities.append(targetCity)
			lCities.remove(targetCity)
			
		lOwners = []
		for city in lTargetCities:
			if city.getOwner() not in lOwners:
				lOwners.append(city.getOwner())
				
		if iPreferredTarget not in lOwners and gc.getPlayer(iPreferredTarget).isAlive():
			gc.getTeam(iPlayer).declareWar(iPreferredTarget, True, iWarPlan)
				
		for iOwner in lOwners:
			gc.getTeam(iPlayer).declareWar(iOwner, True, iWarPlan)
			CyInterface().addMessage(iOwner, False, iDuration, CyTranslator().getText("TXT_KEY_UP_CONQUESTS_TARGET", (gc.getPlayer(iPlayer).getCivilizationShortDescription(0),)), "", 0, "", ColorTypes(iWhite), -1, -1, True, True)
			
		for city in lTargetCities:
			iExtra = 0
			if utils.getHumanID() not in [iPlayer, city.getOwner()]: iExtra = 1
			
			tPlot = utils.findNearestLandPlot((city.getX(), city.getY()), iPlayer)
			
			iBestInfantry = utils.getBestInfantry(iPlayer)
			iBestSiege = utils.getBestSiege(iPlayer)
			
			if iPlayer == iGreece:
				iBestInfantry = iGreekHoplite
				iBestSiege = iCatapult
			
			utils.makeUnitAI(iBestInfantry, iPlayer, tPlot, UnitAITypes.UNITAI_ATTACK_CITY, 2 + iExtra)
			utils.makeUnitAI(iBestSiege, iPlayer, tPlot, UnitAITypes.UNITAI_ATTACK_CITY, 1 + 2*iExtra)
			
			if iPlayer == iTamils:
				utils.makeUnitAI(iWarElephant, iPlayer, tPlot, UnitAITypes.UNITAI_ATTACK_CITY, 1)
Ejemplo n.º 18
0
    def onCityAcquired(self, iOldOwner, iNewOwner, city):

        if (city.getNumRealBuilding(iPlague) > 0):
            if (
                    sd.getPlagueCountdown(iNewOwner) <= 0
                    and gc.getGame().getGameTurn() > getTurnForYear(
                        con.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
                self.spreadPlague(iNewOwner)
                apCityList = PyPlayer(iNewOwner).getCityList()
                for pCity in apCityList:
                    cityNear = pCity.GetCy()
                    if (utils.calculateDistance(city.getX(), city.getY(),
                                                cityNear.getX(),
                                                cityNear.getY()) <= 3):
                        self.infectCity(cityNear)
                return
            city.setNumRealBuilding(iPlague, 0)
Ejemplo n.º 19
0
    def infectCitiesNear(self, iPlayer, startingX, startingY):

        apCityList = PyPlayer(iPlayer).getCityList()
        for pCity in apCityList:
            city = pCity.GetCy()
            if (utils.calculateDistance(city.getX(), city.getY(), startingX,
                                        startingY) <= 3):
                self.infectCity(city)
                iHuman = utils.getHumanID()
                if (gc.getPlayer(iHuman).canContact(iPlayer)
                        and iHuman != iPlayer):
                    CyInterface().addMessage(
                        iHuman, True, con.iDuration / 2,
                        CyTranslator().getText("TXT_KEY_PLAGUE_SPREAD_CITY",
                                               ()) + " " + city.getName() +
                        " (" +
                        gc.getPlayer(iPlayer).getCivilizationAdjective(0) +
                        ")", "AS2D_PLAGUE", 0, "", ColorTypes(con.iLime), -1,
                        -1, True, True)
	def tamilConquestUP(self, iEnemy, iNumTargets=1): # Unused
		lEnemyCities = []
		
		print "Getting closest city."
		for pCity in utils.getCityList(iEnemy):
			iDist = utils.calculateDistance(pCity.getX(), pCity.getY(), pTamils.getCapitalCity().getX(), pTamils.getCapitalCity().getY())
			lEnemyCities.append((iDist, pCity))
			
		lEnemyCities.sort()
		
		for i in range(iNumTargets):
			if lEnemyCities:
				pTargetCity = lEnemyCities.pop(0)[1]
				tPlot = utils.findNearestLandPlot((pTargetCity.getX(), pTargetCity.getY()), iTamils)
				
				utils.makeUnitAI(iSwordsman, iTamils, tPlot, UnitAITypes.UNITAI_ATTACK_CITY, 2)
				utils.makeUnitAI(iWarElephant, iTamils, tPlot, UnitAITypes.UNITAI_ATTACK_CITY, 1)
				utils.makeUnitAI(iCatapult, iTamils, tPlot, UnitAITypes.UNITAI_ATTACK_CITY, 1)
				
		CyInterface().addMessage(iEnemy, False, iDuration, CyTranslator().getText("TXT_KEY_UP_TAMIL_CONQUESTS_TARGET", ()), "", 0, "", ColorTypes(iWhite), -1, -1, True, True)
Ejemplo n.º 21
0
	def infectCitiesNear(self, iPlayer, startingX, startingY):
		for city in utils.getCityList(iPlayer):
			if utils.calculateDistance(city.getX(), city.getY(), startingX, startingY) <= 3:
				self.infectCity(city)
				self.announceForeignPlagueSpread(city)
Ejemplo n.º 22
0
    def onCombatResult(self, argsList):
        self.rnf.immuneMode(argsList)
        self.up.vikingUP(argsList)  # includes Moorish Corsairs

        pWinningUnit, pLosingUnit = argsList
        iWinningPlayer = pWinningUnit.getOwner()
        iLosingPlayer = pLosingUnit.getOwner()

        vic.onCombatResult(pWinningUnit, pLosingUnit)

        iUnitPower = 0
        pLosingUnitInfo = gc.getUnitInfo(pLosingUnit.getUnitType())

        if pLosingUnitInfo.getUnitCombatType() != gc.getInfoTypeForString(
                "UNITCOMBAT_SIEGE"):
            iUnitPower = pLosingUnitInfo.getPowerValue()

        sta.onCombatResult(iWinningPlayer, iLosingPlayer, iUnitPower)

        # capture slaves
        if iWinningPlayer == iAztecs and not pAztecs.isReborn():
            utils.captureUnit(pLosingUnit, pWinningUnit, iAztecSlave, 35)

        elif iLosingPlayer == iNative:
            if iWinningPlayer not in lCivBioNewWorld or True in data.lFirstContactConquerors:
                if gc.getPlayer(iWinningPlayer).isSlavery() or gc.getPlayer(
                        iWinningPlayer).isColonialSlavery():
                    if pWinningUnit.getUnitType() == iBandeirante:
                        utils.captureUnit(pLosingUnit, pWinningUnit, iSlave,
                                          100)
                    else:
                        utils.captureUnit(pLosingUnit, pWinningUnit, iSlave,
                                          35)

        # Maya Holkans give food to closest city on victory
        if pWinningUnit.getUnitType() == iHolkan:
            iOwner = pWinningUnit.getOwner()
            if gc.getPlayer(iOwner).getNumCities() > 0:
                city = gc.getMap().findCity(pWinningUnit.getX(),
                                            pWinningUnit.getY(), iOwner,
                                            TeamTypes.NO_TEAM, False, False,
                                            TeamTypes.NO_TEAM,
                                            DirectionTypes.NO_DIRECTION,
                                            CyCity())
                if city:
                    city.changeFood(5)
                    if utils.getHumanID() == pWinningUnit.getOwner():
                        data.iTeotlSacrifices += 1
                    sAdjective = gc.getPlayer(
                        pLosingUnit.getOwner()).getCivilizationAdjectiveKey()
                    CyInterface().addMessage(
                        iOwner, False, iDuration,
                        CyTranslator().getText(
                            "TXT_KEY_MAYA_HOLKAN_EFFECT",
                            (sAdjective, pLosingUnit.getNameKey(), 5,
                             city.getName())), "", 0, "", ColorTypes(iWhite),
                        -1, -1, True, True)

        # Brandenburg Gate effect
        if gc.getPlayer(iLosingPlayer).isHasBuildingEffect(iBrandenburgGate):
            for iPromotion in range(gc.getNumPromotionInfos()):
                if gc.getPromotionInfo(iPromotion).isLeader(
                ) and pLosingUnit.isHasPromotion(iPromotion):
                    gc.getPlayer(iLosingPlayer).restoreGeneralThreshold()

        # Motherland Calls effect
        if gc.getPlayer(iLosingPlayer).isHasBuildingEffect(iMotherlandCalls):
            if pLosingUnit.getLevel() >= 3:
                lCities = [
                    city for city in utils.getCityList(iLosingPlayer)
                    if not city.isDrafted()
                ]
                pCity = utils.getHighestEntry(
                    lCities, lambda city: -utils.calculateDistance(
                        city.getX(), city.getY(), pLosingUnit.getX(),
                        pLosingUnit.getY()))
                if pCity:
                    pCity.conscript(True)
                    gc.getPlayer(iLosingPlayer).changeConscriptCount(-1)
                    CyInterface().addMessage(
                        iLosingPlayer, False, iDuration,
                        CyTranslator().getText(
                            "TXT_KEY_BUILDING_MOTHERLAND_CALLS_EFFECT",
                            (pLosingUnit.getName(), pCity.getName())), "", 0,
                        "", ColorTypes(iWhite), -1, -1, True, True)
Ejemplo n.º 23
0
    def onCityBuilt(self, argsList):
        city = argsList[0]
        iOwner = city.getOwner()
        tCity = (city.getX(), city.getY())
        x, y = tCity

        if iOwner < iNumActivePlayers:
            cnm.onCityBuilt(city)

        # starting workers
        if city.isCapital():
            self.rnf.createStartingWorkers(iOwner, tCity)

        #Rhye - delete culture of barbs and minor civs to prevent weird unhappiness
        pPlot = gc.getMap().plot(x, y)
        for i in range(iNumTotalPlayers - iNumActivePlayers):
            iMinorCiv = i + iNumActivePlayers
            pPlot.setCulture(iMinorCiv, 0, True)
        pPlot.setCulture(iBarbarian, 0, True)

        if iOwner < iNumMajorPlayers:
            utils.spreadMajorCulture(iOwner, tCity)
            if gc.getPlayer(iOwner).getNumCities() < 2:
                gc.getPlayer(iOwner).AI_updateFoundValues(False)
                # fix for settler maps not updating after 1st city is founded

        if iOwner == iOttomans:
            self.up.ottomanUP(city, iOwner, -1)

        if iOwner == iCarthage:
            if tCity == (58, 39):
                if not gc.getPlayer(iCarthage).isHuman():
                    x = gc.getPlayer(iCarthage).getCapitalCity().getX()
                    y = gc.getPlayer(iCarthage).getCapitalCity().getY()
                    carthage = gc.getMap().plot(58, 39).getPlotCity()
                    carthage.setHasRealBuilding(iPalace, True)
                    gc.getMap().plot(x, y).getPlotCity().setHasRealBuilding(
                        iPalace, False)
                    dc.onPalaceMoved(iCarthage)

                    carthage.setPopulation(3)

                    utils.makeUnitAI(iWorkboat, iCarthage, (58, 39),
                                     UnitAITypes.UNITAI_WORKER_SEA, 1)
                    utils.makeUnitAI(iGalley, iCarthage, (57, 40),
                                     UnitAITypes.UNITAI_SETTLER_SEA, 1)
                    utils.makeUnitAI(iSettler, iCarthage, (57, 40),
                                     UnitAITypes.UNITAI_SETTLE, 1)

                    # additional defenders and walls to make human life not too easy
                    if utils.getHumanID() == iRome:
                        carthage.setHasRealBuilding(iWalls, True)
                        utils.makeUnitAI(iArcher, iCarthage, (58, 39),
                                         UnitAITypes.UNITAI_CITY_DEFENSE, 2)
                        utils.makeUnit(iNumidianCavalry, iCarthage, (58, 39),
                                       3)
                        utils.makeUnitAI(iWarElephant, iCarthage, (58, 39),
                                         UnitAITypes.UNITAI_CITY_COUNTER, 2)

                if utils.getOwnedCoreCities(iCarthage) > 0:
                    utils.setReborn(iCarthage, True)

        if iOwner == iByzantium and tCity == Areas.getCapital(
                iByzantium
        ) and gc.getGame().getGameTurn() <= getTurnForYear(330) + 3:
            if city.getPopulation() < 5:
                city.setPopulation(5)

            city.setHasRealBuilding(iBarracks, True)
            city.setHasRealBuilding(iWalls, True)
            city.setHasRealBuilding(iLibrary, True)
            city.setHasRealBuilding(iMarket, True)
            city.setHasRealBuilding(iGranary, True)
            city.setHasRealBuilding(iHarbor, True)
            city.setHasRealBuilding(iForge, True)

            city.setHasRealBuilding(
                iTemple + 4 * gc.getPlayer(iOwner).getStateReligion(), True)

        if iOwner == iPortugal and tCity == Areas.getCapital(
                iPortugal) and gc.getGame().getGameTurn() <= getTurnForYear(
                    tBirth[iPortugal]) + 3:
            city.setPopulation(5)

            for iBuilding in [
                    iLibrary, iMarket, iHarbor, iLighthouse, iForge, iWalls,
                    iTemple + 4 * gc.getPlayer(iPortugal).getStateReligion()
            ]:
                city.setHasRealBuilding(iBuilding, True)

        if iOwner == iNetherlands and tCity == Areas.getCapital(
                iNetherlands
        ) and gc.getGame().getGameTurn() <= getTurnForYear(1580) + 3:
            city.setPopulation(9)

            for iBuilding in [
                    iLibrary, iMarket, iWharf, iLighthouse, iBarracks,
                    iPharmacy, iBank, iArena, iTheatre, iTemple +
                    4 * gc.getPlayer(iNetherlands).getStateReligion()
            ]:
                city.setHasRealBuilding(iBuilding, True)

            gc.getPlayer(iNetherlands).AI_updateFoundValues(False)

        if iOwner == iItaly and tCity == Areas.getCapital(
                iItaly) and gc.getGame().getGameTurn() <= getTurnForYear(
                    tBirth[iItaly]) + 3:
            city.setPopulation(7)

            for iBuilding in [
                    iLibrary, iPharmacy,
                    iTemple + 4 * gc.getPlayer(iItaly).getStateReligion(),
                    iMarket, iArtStudio, iAqueduct, iCourthouse, iWalls
            ]:
                city.setHasRealBuilding(iBuilding, True)

            gc.getPlayer(iItaly).AI_updateFoundValues(False)

        vic.onCityBuilt(iOwner, city)

        if iOwner < iNumPlayers:
            dc.onCityBuilt(iOwner)

        if iOwner == iArabia:
            if not gc.getGame().isReligionFounded(iIslam):
                if tCity == (75, 33):
                    self.rel.foundReligion(tCity, iIslam)

        # Leoreth: free defender and worker for AI colonies
        if iOwner in lCivGroups[0]:
            if city.getRegionID() not in mercRegions[iArea_Europe]:
                if utils.getHumanID() != iOwner:
                    utils.createGarrisons(tCity, iOwner, 1)
                    utils.makeUnit(iWorker, iOwner, tCity, 1)

        # Holy Rome founds its capital
        if iOwner == iHolyRome:
            if gc.getPlayer(iHolyRome).getNumCities() == 1:
                self.rnf.holyRomanSpawn()

        # Leoreth: Escorial effect
        if gc.getPlayer(iOwner).isHasBuildingEffect(iEscorial):
            if city.isColony():
                capital = gc.getPlayer(iOwner).getCapitalCity()
                iGold = utils.getTurns(10 + utils.calculateDistance(
                    capital.getX(), capital.getY(), city.getX(), city.getY()))
                CyInterface().addMessage(
                    iOwner, False, iDuration,
                    CyTranslator().getText("TXT_KEY_BUILDING_ESCORIAL_EFFECT",
                                           (iGold, city.getName())), "", 0, "",
                    ColorTypes(iWhite), -1, -1, True, True)
                gc.getPlayer(iOwner).changeGold(iGold)

        # Leoreth: free defender and worker for cities founded by American Pioneer in North America
        if iOwner == iAmerica:
            if city.getRegionID() in [rUnitedStates, rCanada, rAlaska]:
                utils.createGarrisons(tCity, iOwner, 1)
                utils.makeUnit(iWorker, iOwner, tCity, 1)
Ejemplo n.º 24
0
    def onCityAcquired(self, argsList):
        iOwner, iPlayer, city, bConquest, bTrade = argsList
        tCity = (city.getX(), city.getY())

        cnm.onCityAcquired(city, iPlayer)

        if bConquest:
            sta.onCityAcquired(city, iOwner, iPlayer)

        if iPlayer == iArabia:
            self.up.arabianUP(city)

        if iPlayer == iMongolia and bConquest and utils.getHumanID(
        ) != iPlayer:
            self.up.mongolUP(city)

        # relocate capitals
        if utils.getHumanID() != iPlayer:
            if iPlayer == iOttomans and tCity == (68, 45):
                utils.moveCapital(iOttomans, tCity)  # Kostantiniyye
            elif iPlayer == iMongolia and tCity == (102, 47):
                utils.moveCapital(iMongolia, tCity)  # Khanbaliq
            elif iPlayer == iTurks and utils.isAreaControlled(
                    iTurks, Areas.tCoreArea[iPersia][0],
                    Areas.tCoreArea[iPersia][1]):
                capital = pTurks.getCapitalCity()
                if not utils.isPlotInArea((capital.getX(), capital.getY()),
                                          Areas.tCoreArea[iPersia][0],
                                          Areas.tCoreArea[iPersia][1]):
                    newCapital = utils.getRandomEntry(
                        utils.getAreaCitiesCiv(
                            iTurks,
                            utils.getPlotList(Areas.tCoreArea[iPersia][0],
                                              Areas.tCoreArea[iPersia][1])))
                    if newCapital:
                        utils.moveCapital(
                            iTurks, (newCapital.getX(), newCapital.getY()))

        # remove slaves if unable to practice slavery
        if not gc.getPlayer(iPlayer).canUseSlaves():
            utils.removeSlaves(city)
        else:
            utils.freeSlaves(city, iPlayer)

        if city.isCapital():
            if city.isHasRealBuilding(iAdministrativeCenter):
                city.setHasRealBuilding(iAdministrativeCenter, False)

        # Leoreth: relocate capital for AI if reacquired:
        if utils.getHumanID() != iPlayer and iPlayer < iNumPlayers:
            if data.players[iPlayer].iResurrections == 0:
                if Areas.getCapital(iPlayer) == tCity:
                    utils.relocateCapital(iPlayer, city)
            else:
                if Areas.getRespawnCapital(iPlayer) == tCity:
                    utils.relocateCapital(iPlayer, city)

        # Leoreth: conquering Constantinople adds it to the Turkish core + Rumelia
        if iPlayer == iOttomans and tCity == (68, 45):
            utils.setReborn(iOttomans, True)

        if iPlayer == iTurks:
            if utils.isAreaControlled(iPlayer, Areas.tCoreArea[iPersia][0],
                                      Areas.tCoreArea[iPersia][1]):
                utils.setReborn(iTurks, True)
            else:
                utils.setReborn(iTurks, False)

        # Leoreth: help Byzantium/Constantinople
        if iPlayer == iByzantium and tCity == Areas.getCapital(
                iByzantium
        ) and gc.getGame().getGameTurn() <= getTurnForYear(330) + 3:
            if city.getPopulation() < 5:
                city.setPopulation(5)

            city.setHasRealBuilding(iBarracks, True)
            city.setHasRealBuilding(iWalls, True)
            city.setHasRealBuilding(iLibrary, True)
            city.setHasRealBuilding(iMarket, True)
            city.setHasRealBuilding(iGranary, True)
            city.setHasRealBuilding(iHarbor, True)
            city.setHasRealBuilding(iForge, True)

            city.setName("Konstantinoupolis", False)

            city.setHasRealBuilding(
                iTemple + 4 * gc.getPlayer(iPlayer).getStateReligion(), True)

        if bConquest:

            # Colombian UP: no resistance in conquered cities in Latin America
            if iPlayer == iMaya and utils.isReborn(iMaya):
                if utils.isPlotInArea(tCity, tSouthCentralAmericaTL,
                                      tSouthCentralAmericaBR):
                    city.setOccupationTimer(0)

            # Statue of Zeus effect: no city resistance on conquest
            if gc.getPlayer(iPlayer).isHasBuildingEffect(iStatueOfZeus):
                city.setOccupationTimer(0)

            # Byzantium reduced to four cities: core shrinks to Constantinople
            if iOwner == iByzantium and gc.getPlayer(
                    iByzantium).getNumCities <= 4:
                utils.setReborn(iByzantium, True)

        if bTrade:
            for i in range(iNumBuildings):
                iNationalWonder = i
                if isNationalWonderClass(
                        gc.getBuildingInfo(iNationalWonder).
                        getBuildingClassType()) and city.hasBuilding(
                            iNationalWonder):
                    city.setHasRealBuilding(iNationalWonder, False)

        # Leoreth: Escorial effect
        if gc.getPlayer(iPlayer).isHasBuildingEffect(iEscorial):
            if city.isColony():
                capital = gc.getPlayer(iPlayer).getCapitalCity()
                iGold = utils.getTurns(10 + utils.calculateDistance(
                    capital.getX(), capital.getY(), city.getX(), city.getY()))
                CyInterface().addMessage(
                    iPlayer, False, iDuration,
                    CyTranslator().getText("TXT_KEY_BUILDING_ESCORIAL_EFFECT",
                                           (iGold, city.getName())), "", 0, "",
                    ColorTypes(iWhite), -1, -1, True, True)
                gc.getPlayer(iPlayer).changeGold(iGold)

        self.pla.onCityAcquired(iOwner, iPlayer, city)  # Plague
        self.com.onCityAcquired(city)  # Communications
        self.corp.onCityAcquired(argsList)  # Companies
        dc.onCityAcquired(iOwner, iPlayer)  # DynamicCivs

        vic.onCityAcquired(iPlayer, iOwner, city, bConquest)

        lTradingCompanyList = [
            iSpain, iFrance, iEngland, iPortugal, iNetherlands
        ]

        if bTrade and iPlayer in lTradingCompanyList and (
                city.getX(), city.getY()
        ) in tTradingCompanyPlotLists[lTradingCompanyList.index(iPlayer)]:
            self.up.tradingCompanyCulture(city, iPlayer, iOwner)

        return 0
    def spawnConquerors(self,
                        iPlayer,
                        iPreferredTarget,
                        tTL,
                        tBR,
                        iNumTargets,
                        iYear,
                        iIntervalTurns,
                        iWarPlan=WarPlanTypes.WARPLAN_TOTAL):
        if not gc.getPlayer(iPlayer).isAlive():
            for iTech in sta.getResurrectionTechs(iPlayer):
                gc.getTeam(gc.getPlayer(iPlayer).getTeam()).setHasTech(
                    iTech, True, iPlayer, False, False)

        lCities = []
        for city in utils.getAreaCities(utils.getPlotList(tTL, tBR)):
            if city.getOwner() != iPlayer and not gc.getTeam(
                    city.getOwner()).isVassal(iPlayer):
                if (gc.getDefineINT("AIWAR_PY_CANNOT_DO_AIWAR_TO_HUMAN") > 0
                        and (city.getOwner() == utils.getHumanID())):
                    pass
                else:
                    lCities.append(city)

        capital = gc.getPlayer(iPlayer).getCapitalCity()

        lTargetCities = []
        for i in range(iNumTargets):
            if len(lCities) == 0: break

            targetCity = utils.getHighestEntry(
                lCities, lambda x: -utils.calculateDistance(
                    x.getX(), x.getY(), capital.getX(), capital.getY()) + int(
                        x.getOwner() == iPreferredTarget) * 1000)
            lTargetCities.append(targetCity)
            lCities.remove(targetCity)

        lOwners = []
        for city in lTargetCities:
            if city.getOwner() not in lOwners:
                lOwners.append(city.getOwner())

        if iPreferredTarget >= 0 and iPreferredTarget not in lOwners and gc.getPlayer(
                iPreferredTarget).isAlive():
            if (gc.getDefineINT("AIWAR_PY_CANNOT_DO_AIWAR_TO_HUMAN") > 0
                    and (iPreferredTarget == utils.getHumanID())):
                pass
            else:
                self.declareWar(iPlayer, iPreferredTarget, iWarPlan)

        for iOwner in lOwners:
            self.declareWar(iPlayer, iOwner, iWarPlan)
            CyInterface().addMessage(
                iOwner, False, iDuration,
                CyTranslator().getText(
                    "TXT_KEY_UP_CONQUESTS_TARGET",
                    (gc.getPlayer(iPlayer).getCivilizationShortDescription(0),
                     )), "", 0, "", ColorTypes(iWhite), -1, -1, True, True)
#####修改开始#####
#消息传送区
        if (gc.getDefineINT("PYTHON_USE_ADVANCE_ALERT") == 1):  #参数控制
            if iPlayer == iGreece:
                tem_text = '&#19990;&#30028;&#20891;&#20107;&#36895;&#36882;&#65306;&#20122;&#21382;&#23665;&#22823;&#19996;&#24449;&#24320;&#22987;&#20102;&#65281;&#20854;&#40638;&#19979;&#30340;&#20891;&#38431;&#27491;&#22312;&#27178;&#25195;&#27431;&#20122;&#22823;&#38470;&#65281;'
                CyInterface().addMessage(gc.getGame().getActivePlayer(), False,
                                         iDuration, tem_text, "", 0, "",
                                         ColorTypes(iWhite), -1, -1, True,
                                         True)
    #			utils.show('&#20891;&#20107;&#36895;&#36882;&#65306;&#20122;&#21382;&#23665;&#22823;&#19996;&#24449;&#24320;&#22987;&#20102;&#65281;')
            if iPlayer == iRome:
                tem_text = '&#19990;&#30028;&#20891;&#20107;&#36895;&#36882;&#65306;&#32599;&#39532;&#24093;&#22269;&#27491;&#22312;&#23835;&#36215;&#65292;&#20854;&#20891;&#38431;&#25152;&#21521;&#25259;&#38753;&#65281;'
                CyInterface().addMessage(gc.getGame().getActivePlayer(), False,
                                         iDuration, tem_text, "", 0, "",
                                         ColorTypes(iWhite), -1, -1, True,
                                         True)
    #			utils.show('&#20891;&#20107;&#36895;&#36882;&#65306;&#32599;&#39532;&#24093;&#22269;&#27491;&#22312;&#23835;&#36215;&#65292;&#20854;&#20891;&#38431;&#25152;&#21521;&#25259;&#38753;&#65281;')
            if iPlayer == iMongolia:
                tem_text = '&#19990;&#30028;&#20891;&#20107;&#36895;&#36882;&#65306;&#33945;&#21476;&#24093;&#22269;&#27491;&#22312;&#23835;&#36215;&#65292;&#25104;&#21513;&#24605;&#27735;&#30340;&#20891;&#38431;&#25152;&#21521;&#25259;&#38753;&#65281;'
                CyInterface().addMessage(gc.getGame().getActivePlayer(), False,
                                         iDuration, tem_text, "", 0, "",
                                         ColorTypes(iWhite), -1, -1, True,
                                         True)
    #			utils.show('&#20891;&#20107;&#36895;&#36882;&#65306;&#33945;&#21476;&#24093;&#22269;&#27491;&#22312;&#23835;&#36215;&#65292;&#25104;&#21513;&#24605;&#27735;&#30340;&#20891;&#38431;&#25152;&#21521;&#25259;&#38753;&#65281;')
            if iPlayer == iTurks:
                tem_text = '&#19990;&#30028;&#20891;&#20107;&#36895;&#36882;&#65306;&#31361;&#21413;&#24093;&#22269;&#27491;&#22312;&#23835;&#36215;&#65292;&#20854;&#20891;&#38431;&#25152;&#21521;&#25259;&#38753;&#65281;'
                CyInterface().addMessage(gc.getGame().getActivePlayer(), False,
                                         iDuration, tem_text, "", 0, "",
                                         ColorTypes(iWhite), -1, -1, True,
                                         True)
    #			utils.show('&#20891;&#20107;&#36895;&#36882;&#65306;&#31361;&#21413;&#24093;&#22269;&#27491;&#22312;&#23835;&#36215;&#65292;&#20854;&#20891;&#38431;&#25152;&#21521;&#25259;&#38753;&#65281;')
    #百年战争
            if iPlayer == iEngland and iYear <= 1450 and iYear >= 1250:
                tem_text = '&#33521;&#27861;&#30334;&#24180;&#25112;&#20105;&#30340;&#33125;&#39118;&#34880;&#38632;&#27491;&#24335;&#25289;&#24320;&#24119;&#24149;&#65281;'
                CyInterface().addMessage(gc.getGame().getActivePlayer(), False,
                                         iDuration, tem_text, "", 0, "",
                                         ColorTypes(iWhite), -1, -1, True,
                                         True)
    #			utils.show('&#20891;&#20107;&#36895;&#36882;&#65306;&#31361;&#21413;&#24093;&#22269;&#27491;&#22312;&#23835;&#36215;&#65292;&#20854;&#20891;&#38431;&#25152;&#21521;&#25259;&#38753;&#65281;')
    #圣女贞德
            if iPlayer == iFrance and iYear <= 1550 and iYear >= 1350:
                tem_text = '&#22307;&#22899;&#36126;&#24503;&#21796;&#36215;&#20102;&#27861;&#22269;&#20154;&#27665;&#30340;&#27665;&#26063;&#24863;&#65292;&#27861;&#22269;&#20154;&#27665;&#20026;&#20102;&#25421;&#21355;&#23478;&#22253;&#32780;&#25112;&#65281;'
                CyInterface().addMessage(gc.getGame().getActivePlayer(), False,
                                         iDuration, tem_text, "", 0, "",
                                         ColorTypes(iWhite), -1, -1, True,
                                         True)
    #			utils.show('&#20891;&#20107;&#36895;&#36882;&#65306;&#31361;&#21413;&#24093;&#22269;&#27491;&#22312;&#23835;&#36215;&#65292;&#20854;&#20891;&#38431;&#25152;&#21521;&#25259;&#38753;&#65281;')
    #十字军
            if iPlayer == iEngland and iYear <= 1200 and iYear >= 1000:
                tem_text = '&#36720;&#21160;&#20013;&#19996;&#21644;&#27431;&#27954;&#30340;&#21313;&#23383;&#20891;&#19996;&#24449;&#24320;&#22987;&#20102;&#65281;'
                CyInterface().addMessage(gc.getGame().getActivePlayer(), False,
                                         iDuration, tem_text, "", 0, "",
                                         ColorTypes(iWhite), -1, -1, True,
                                         True)
    #			utils.show('&#20891;&#20107;&#36895;&#36882;&#65306;&#31361;&#21413;&#24093;&#22269;&#27491;&#22312;&#23835;&#36215;&#65292;&#20854;&#20891;&#38431;&#25152;&#21521;&#25259;&#38753;&#65281;')
    #萨拉丁
            if iPlayer == iEgypt and iYear <= 1300 and iYear >= 1100:
                tem_text = '&#24180;&#36731;&#30340;&#39046;&#34966;&#33832;&#25289;&#19969;&#29575;&#39046;&#20891;&#38431;&#21521;&#21313;&#23383;&#20891;&#21457;&#36215;&#29467;&#28872;&#30340;&#36827;&#25915;&#65281;'
                CyInterface().addMessage(gc.getGame().getActivePlayer(), False,
                                         iDuration, tem_text, "", 0, "",
                                         ColorTypes(iWhite), -1, -1, True,
                                         True)
    #			utils.show('&#20891;&#20107;&#36895;&#36882;&#65306;&#31361;&#21413;&#24093;&#22269;&#27491;&#22312;&#23835;&#36215;&#65292;&#20854;&#20891;&#38431;&#25152;&#21521;&#25259;&#38753;&#65281;')
    #拿破仑战争
            if iPlayer == iFrance and iYear <= 1900 and iYear >= 1700:
                tem_text = '&#25343;&#30772;&#20177;&#30340;&#20891;&#38431;&#27491;&#22312;&#27431;&#27954;&#25152;&#21521;&#25259;&#38753;&#65281;'
                CyInterface().addMessage(gc.getGame().getActivePlayer(), False,
                                         iDuration, tem_text, "", 0, "",
                                         ColorTypes(iWhite), -1, -1, True,
                                         True)
    #			utils.show('&#20891;&#20107;&#36895;&#36882;&#65306;&#31361;&#21413;&#24093;&#22269;&#27491;&#22312;&#23835;&#36215;&#65292;&#20854;&#20891;&#38431;&#25152;&#21521;&#25259;&#38753;&#65281;')
            if iYear <= 1930 and iYear >= 1900:
                tem_text = '&#31532;&#19968;&#27425;&#19990;&#30028;&#22823;&#25112;&#27491;&#22312;&#36827;&#34892;&#65281;'
                CyInterface().addMessage(gc.getGame().getActivePlayer(), False,
                                         iDuration, tem_text, "", 0, "",
                                         ColorTypes(iWhite), -1, -1, True,
                                         True)
    #			utils.show('&#20891;&#20107;&#36895;&#36882;&#65306;&#31361;&#21413;&#24093;&#22269;&#27491;&#22312;&#23835;&#36215;&#65292;&#20854;&#20891;&#38431;&#25152;&#21521;&#25259;&#38753;&#65281;')
            if iYear <= 1960 and iYear >= 1930:
                tem_text = '&#31532;&#20108;&#27425;&#19990;&#30028;&#22823;&#25112;&#27491;&#22312;&#36827;&#34892;&#65281;'
                CyInterface().addMessage(gc.getGame().getActivePlayer(), False,
                                         iDuration, tem_text, "", 0, "",
                                         ColorTypes(iWhite), -1, -1, True,
                                         True)

    #			utils.show('&#20891;&#20107;&#36895;&#36882;&#65306;&#31361;&#21413;&#24093;&#22269;&#27491;&#22312;&#23835;&#36215;&#65292;&#20854;&#20891;&#38431;&#25152;&#21521;&#25259;&#38753;&#65281;')

#####修改结束#####
####修改开始####
        for city in lTargetCities:
            iExtra = 0 + 2
            # 			if utils.getHumanID() not in [iPlayer, city.getOwner()]:
            # 				iExtra += 1 #max(1, gc.getPlayer(iPlayer).getCurrentEra())
            #
            # 			if iPlayer == iMongolia and utils.getHumanID() != iPlayer:
            # 				iExtra += 1

            tPlot = utils.findNearestLandPlot((city.getX(), city.getY()),
                                              iPlayer)
            if (tPlot):

                iBestInfantry = utils.getBestInfantry(iPlayer)
                iBestSiege = utils.getBestSiege(iPlayer)

                if iPlayer == iGreece:
                    iBestInfantry = iHoplite
                    iBestSiege = iCatapult
                if iPlayer == iMongolia:
                    iBestInfantry = iKeshik
                    iExtra += 2

                if iPlayer == iCarthage and iYear <= 150:
                    iExtra = 0
                    iBestInfantry = iWarElephant
                    tem_text = '&#36838;&#22826;&#22522;&#30340;&#27721;&#23612;&#25300;&#23558;&#20891;&#32763;&#36234;&#20102;&#38463;&#23572;&#21329;&#26031;&#23665;&#65292;&#20986;&#29616;&#22312;&#31859;&#20848;&#38468;&#36817;&#65281;'
                    CyInterface().addMessage(gc.getGame().getActivePlayer(),
                                             False, iDuration,
                                             tem_text, "", 0, "",
                                             ColorTypes(iWhite), -1, -1, True,
                                             True)
                if iPlayer == iBarbarian and iYear <= 150:
                    iExtra = -1
                    iBestInfantry = iMilitia
                    utils.makeUnitAI(iBestInfantry, iPlayer, tPlot,
                                     UnitAITypes.UNITAI_ATTACK_CITY, 1)
                    utils.makeUnitAI(iLightSwordsman, iPlayer, tPlot,
                                     UnitAITypes.UNITAI_ATTACK_CITY, 1)
                    tem_text = '&#26031;&#24052;&#36798;&#20811;&#26031;&#21561;&#21709;&#20102;&#21453;&#25239;&#32599;&#39532;&#30340;&#36215;&#20041;&#21495;&#35282;&#65281;'
                    CyInterface().addMessage(gc.getGame().getActivePlayer(),
                                             False, iDuration,
                                             tem_text, "", 0, "",
                                             ColorTypes(iWhite), -1, -1, True,
                                             True)
                if iPlayer == iEngland and iYear <= 1500:
                    iExtra -= 0
                    iBestInfantry = iLongbowman
    #				utils.makeUnitAI(iBestInfantry, iPlayer, tPlot, UnitAITypes.UNITAI_ATTACK_CITY, 2)
    #				iBestSiege = iCatapult
                if (iPlayer == iEngland and iYear <= 1250) or (
                        iPlayer == iHolyRome
                        and iYear <= 1250) or (iPlayer == iFrance
                                               and iYear <= 1250):
                    iExtra -= 1

    #				iBestInfantry = iLongbowman
    #				utils.makeUnitAI(iBestInfantry, iPlayer, tPlot, UnitAITypes.UNITAI_ATTACK_CITY, 2)
    #				iBestSiege = iCatapult
                if iPlayer == iTurks and iYear <= 1250:
                    iExtra -= 2

                if iYear >= 1800:
                    iExtra += 1
                if iYear >= 1900:
                    iExtra += 1
                if iYear >= 1930:
                    iExtra += 1
                if iPreferredTarget == utils.getHumanID() and iYear >= 1300:
                    iExtra = gc.getGame().getHandicapType() + 1

                utils.makeUnitAI(iBestInfantry, iPlayer, tPlot,
                                 UnitAITypes.UNITAI_ATTACK_CITY,
                                 max(2 + iExtra, 1))
                utils.makeUnitAI(iBestSiege, iPlayer, tPlot,
                                 UnitAITypes.UNITAI_ATTACK_CITY,
                                 max(1 + iExtra, 1))
                ####修改结束#####
                if iPlayer == iGreece:
                    utils.makeUnitAI(iCompanion, iPlayer, tPlot,
                                     UnitAITypes.UNITAI_ATTACK_CITY, 1)

                if iPlayer == iTamils:
                    utils.makeUnitAI(iWarElephant, iPlayer, tPlot,
                                     UnitAITypes.UNITAI_ATTACK_CITY, 1)

                if iPlayer == iSpain:
                    utils.makeUnitAI(utils.getBestCavalry(iPlayer), iPlayer,
                                     tPlot, UnitAITypes.UNITAI_ATTACK_CITY,
                                     2 * iExtra)

                if iPlayer == iTurks:
                    utils.makeUnitAI(utils.getBestCavalry(iPlayer), iPlayer,
                                     tPlot, UnitAITypes.UNITAI_ATTACK_CITY,
                                     2 + iExtra)
def getResurrectionCities_manual(iPlayer, bFromCollapse=False):
    pPlayer = gc.getPlayer(iPlayer)
    teamPlayer = gc.getTeam(iPlayer)
    lPotentialCities = []
    lFlippingCities = []

    tCapital = Areas.getRespawnCapital(iPlayer)

    for (x, y) in Areas.getRespawnArea(iPlayer):
        plot = gc.getMap().plot(x, y)
        if plot.isCity():
            city = plot.getPlotCity()
            # for humans: exclude recently conquered cities to avoid annoying reflips
            if city.getOwner() != utils.getHumanID(
            ) or city.getGameTurnAcquired(
            ) < gc.getGame().getGameTurn() - utils.getTurns(5):
                lPotentialCities.append(city)

    for city in lPotentialCities:
        iOwner = city.getOwner()
        iMinNumCitiesOwner = 3

        # barbarian and minor cities always flip
        if iOwner >= iNumPlayers:
            lFlippingCities.append(city)
            continue

        iOwnerStability = utils.getStabilityLevel(iOwner)
        bCapital = ((city.getX(), city.getY()) == tCapital)

        # flips are less likely before Nationalism
        if data.iCivsWithNationalism == 0:
            iOwnerStability += 1

        if utils.getHumanID() != iOwner:
            iMinNumCitiesOwner = 2
            iOwnerStability -= 1

        if gc.getPlayer(iOwner).getNumCities() >= iMinNumCitiesOwner:

            # special case for civs returning from collapse: be more strict
            if bFromCollapse:
                if iOwnerStability < iStabilityShaky:
                    lFlippingCities.append(city)
                continue

            # owner stability below shaky: city always flips
            if iOwnerStability < iStabilityShaky:
                lFlippingCities.append(city)

            # owner stability below stable: city flips if far away from their capital, or is capital spot of the dead civ
            elif iOwnerStability < iStabilityStable:
                ownerCapital = gc.getPlayer(iOwner).getCapitalCity()
                iDistance = utils.calculateDistance(city.getX(), city.getY(),
                                                    ownerCapital.getX(),
                                                    ownerCapital.getY())
                if bCapital or iDistance >= 8:
                    lFlippingCities.append(city)

            # owner stability below solid: only capital spot flips
            elif iOwnerStability < iStabilitySolid:
                if bCapital:
                    lFlippingCities.append(city)

    # if capital exists and does not flip, the respawn fails
    capitalX, capitalY = tCapital
    if gc.getMap().plot(capitalX, capitalY).isCity():
        if tCapital not in [(city.getX(), city.getY())
                            for city in lFlippingCities]:
            return []

    # if only up to two cities wouldn't flip, they flip as well (but at least one city has to flip already, else the respawn fails)
    if len(lFlippingCities) + 2 >= len(lPotentialCities) and len(
            lFlippingCities) > 0 and len(lFlippingCities) * 2 >= len(
                lPotentialCities) and not bFromCollapse:
        # cities in core are not affected by this
        for city in lPotentialCities:
            if not city.plot().isCore(
                    city.getOwner()) and city not in lFlippingCities:
                lFlippingCities.append(city)

    return lFlippingCities
Ejemplo n.º 27
0
 def infectCitiesNear(self, iPlayer, startingX, startingY):
     for city in utils.getCityList(iPlayer):
         if utils.calculateDistance(city.getX(), city.getY(), startingX,
                                    startingY) <= 3:
             self.infectCity(city)
             self.announceForeignPlagueSpread(city)
Ejemplo n.º 28
0
    def processPlague(self, iPlayer):

        pPlayer = gc.getPlayer(iPlayer)
        #first spread to close locations
        cityList = []  #see below
        apCityList = PyPlayer(iPlayer).getCityList()
        for pCity in apCityList:
            city = pCity.GetCy()
            cityList.append(city)  #see below
            if (city.getNumRealBuilding(iPlague) > 0):
                #print ("plague in city", city.getName())
                if (city.getPopulation() > 1):
                    #print("healthRate in city", 35 + 5*city.healthRate(False, 0))
                    if utils.getYear() < 1250:
                        iMin = 80
                    elif city.plot().getRegionID() in con.lBlackDeathRegions:
                        if city.getOwner() in con.lBlackDeathSurvivors:
                            iMin = 80
                        else:
                            iMin = 50
                    else:
                        iMin = 90
                    if (gc.getGame().getSorenRandNum(100, 'roll') >
                            iMin + 5 * city.healthRate(False, 0)):
                        city.changePopulation(-1)
                if (city.isCapital()):  #delete in vanilla
                    for iLoopCiv in range(iNumPlayers):
                        if (gc.getTeam(pPlayer.getTeam()).isVassal(iLoopCiv) or \
                        gc.getTeam(gc.getPlayer(iLoopCiv).getTeam()).isVassal(iPlayer)):
                            if (
                                    gc.getPlayer(iLoopCiv).getNumCities() > 0
                            ):  #this check is needed, otherwise game crashes
                                capital = gc.getPlayer(
                                    iLoopCiv).getCapitalCity()
                                if (self.isVulnerable(iLoopCiv) == True):
                                    if (sd.getPlagueCountdown(iPlayer) >
                                            2):  #don't spread the last turns
                                        self.spreadPlague(iLoopCiv)
                                        self.infectCity(capital)
                                        #print ("infect master/vassal", city.getName(), "to", capital.getName())
                for x in range(city.getX() - 2, city.getX() + 3):
                    for y in range(city.getY() - 2, city.getY() + 3):
                        ##print ("plagueXY", x, y)
                        pCurrent = gc.getMap().plot(x, y)
                        if (pCurrent.getOwner() != iPlayer
                                and pCurrent.getOwner() >= 0):
                            if (sd.getPlagueCountdown(iPlayer) >
                                    2):  #don't spread the last turns
                                if (self.isVulnerable(
                                        pCurrent.getOwner()) == True):
                                    self.spreadPlague(pCurrent.getOwner())
                                    self.infectCitiesNear(
                                        pCurrent.getOwner(), x, y)
                                    #print ("infect foreign near", city.getName())
                        else:
                            if (pCurrent.isCity()
                                    and not (x == city.getX()
                                             and y == city.getY())):
                                #print ("is city", x, y)
                                cityNear = pCurrent.getPlotCity()
                                if (not cityNear.getNumRealBuilding(iPlague) >
                                        0):
                                    if (sd.getPlagueCountdown(iPlayer) >
                                            2):  #don't spread the last turns
                                        self.infectCity(cityNear)
                                        #print ("infect near", city.getName(), "to", cityNear.getName())
                            else:
                                if (x == city.getX() and y == city.getY()):
                                    self.killUnitsByPlague(
                                        city, pCurrent, 0, 42, 2)
                                else:
                                    if (pCurrent.isRoute()):
                                        self.killUnitsByPlague(
                                            city, pCurrent, 10, 35, 0)
                                    elif (pCurrent.isWater()):
                                        self.killUnitsByPlague(
                                            city, pCurrent, 30, 35, 0)
                                    else:
                                        self.killUnitsByPlague(
                                            city, pCurrent, 30, 35, 0)
                for x in range(city.getX() - 3, city.getX() + 4):
                    pCurrent = gc.getMap().plot(x, city.getY() - 3)
                    if (pCurrent.getOwner() == iPlayer
                            or not pCurrent.isOwned()):
                        if (not pCurrent.isCity()):
                            if (pCurrent.isRoute() or pCurrent.isWater()):
                                self.killUnitsByPlague(city, pCurrent, 30, 35,
                                                       0)
                    pCurrent = gc.getMap().plot(x, city.getY() + 4)
                    if (pCurrent.getOwner() == iPlayer
                            or not pCurrent.isOwned()):
                        if (not pCurrent.isCity()):
                            if (pCurrent.isRoute() or pCurrent.isWater()):
                                self.killUnitsByPlague(city, pCurrent, 30, 35,
                                                       0)
                for y in range(city.getY() - 2, city.getY() + 3):
                    pCurrent = gc.getMap().plot(city.getX() - 3, y)
                    if (pCurrent.getOwner() == iPlayer
                            or not pCurrent.isOwned()):
                        if (not pCurrent.isCity()):
                            if (pCurrent.isRoute() or pCurrent.isWater()):
                                self.killUnitsByPlague(city, pCurrent, 30, 35,
                                                       0)
                    pCurrent = gc.getMap().plot(city.getX() + 4, y)
                    if (pCurrent.getOwner() == iPlayer
                            or not pCurrent.isOwned()):
                        if (not pCurrent.isCity()):
                            if (pCurrent.isRoute() or pCurrent.isWater()):
                                self.killUnitsByPlague(city, pCurrent, 30, 35,
                                                       0)

                #spread to trade route cities
                if (sd.getPlagueCountdown(iPlayer) >
                        2):  #don't spread the last turns
                    for i in range(city.getTradeRoutes()):
                        #for i in range(gc.getDefineINT("MAX_TRADE_ROUTES")):
                        loopCity = city.getTradeCity(i)
                        if (not loopCity.isNone()):
                            if (not loopCity.getNumRealBuilding(iPlague) > 0):
                                #utils.echo("Plagued caravan arrives at %s" %(loopCity.getName()))
                                iOwner = loopCity.getOwner()
                                if (iPlayer == iOwner or gc.getTeam(pPlayer.getTeam()).isOpenBorders(iOwner) or \
                                 gc.getTeam(pPlayer.getTeam()).isVassal(iOwner) or \
                                 gc.getTeam(gc.getPlayer(iOwner).getTeam()).isVassal(iPlayer)): #own city, or open borders, or vassal
                                    if (iPlayer != iOwner):
                                        if (self.isVulnerable(iOwner) == True):
                                            self.spreadPlague(iOwner)
                                            self.infectCity(loopCity)
                                            #utils.echo("infect by trade route: %s to %s" %(city.getName(), loopCity.getName()))
                                            iHuman = utils.getHumanID()
                                            if (gc.getPlayer(
                                                    iHuman).canContact(iOwner)
                                                    and iHuman != iOwner):
                                                CyInterface().addMessage(
                                                    iHuman, True,
                                                    con.iDuration / 2,
                                                    CyTranslator().getText(
                                                        "TXT_KEY_PLAGUE_SPREAD_CITY",
                                                        ()) + " " +
                                                    loopCity.getName() + " (" +
                                                    gc.getPlayer(iOwner).
                                                    getCivilizationAdjective(0)
                                                    + ")",
                                                    "AS2D_PLAGUE", 0, "",
                                                    ColorTypes(con.iLime), -1,
                                                    -1, True, True)
                                    else:
                                        self.infectCity(loopCity)
                                        #utils.echo("infect by trade route: %s to %s" %(city.getName(), loopCity.getName()))

        #spread to other cities of the empire
        if (len(cityList)):
            if (sd.getPlagueCountdown(iPlayer) >
                    2):  #don't spread the last turns
                for city1 in cityList:
                    ##print ("citylist", city1.getName())
                    if (not city1.getNumRealBuilding(iPlague) > 0):
                        for city2 in cityList:
                            if (city1 != city2):
                                if (city2.getNumRealBuilding(iPlague) > 0):
                                    if (city1.isConnectedTo(city2)):
                                        ##print ("infect distant", city1.getName(), "to", city2.getName(), utils.calculateDistance(city1.getX(), city1.getY(), city2.getX(), city2.getY()))
                                        if (utils.calculateDistance(
                                                city1.getX(), city1.getY(),
                                                city2.getX(), city2.getY()) <=
                                                6):
                                            #print ("infect distant", city2.getName(), "to", city1.getName())
                                            self.infectCity(city1)
                                            return