コード例 #1
0
def endGlobalWar(iAttacker, iDefender):
	data.iGlobalWarAttacker = -1
	data.iGlobalWarDefender = -1
	
	if not gc.getPlayer(iAttacker).isAlive() or not gc.getPlayer(iDefender).isAlive():
		return
	
	lAttackers = [iAttacker]
	lDefenders = [iDefender]
	
	lAttackers, lDefenders = determineAlliances(iAttacker, iDefender)
	
	# force peace for all allies of the belligerents
	for iLoopPlayer in lAttackers:
		if utils.isAVassal(iLoopPlayer): continue
		if iLoopPlayer == iAttacker: continue
		gc.getTeam(iLoopPlayer).makePeace(iDefender)
		
	for iLoopPlayer in lDefenders:
		if utils.isAVassal(iLoopPlayer): continue
		if iLoopPlayer == iDefender: continue
		gc.getTeam(iLoopPlayer).makePeace(iAttacker)
		
	if gc.getGame().determineWinner(iAttacker, iDefender) == iAttacker:
		lWinners = lAttackers
		lLosers = lDefenders
	else:
		lWinners = lDefenders
		lLosers = lAttackers
	
	currentCongress = Congress(lWinners, lLosers)
	data.currentCongress = currentCongress
	currentCongress.startCongress()
コード例 #2
0
def endGlobalWar(iAttacker, iDefender):
	data.iGlobalWarAttacker = -1
	data.iGlobalWarDefender = -1
	
	if not gc.getPlayer(iAttacker).isAlive() or not gc.getPlayer(iDefender).isAlive():
		return
	
	lAttackers = [iAttacker]
	lDefenders = [iDefender]
	
	lAttackers, lDefenders = determineAlliances(iAttacker, iDefender)
	
	# force peace for all allies of the belligerents
	for iLoopPlayer in lAttackers:
		if utils.isAVassal(iLoopPlayer): continue
		if iLoopPlayer == iAttacker: continue
		gc.getTeam(iLoopPlayer).makePeace(iDefender)
		
	for iLoopPlayer in lDefenders:
		if utils.isAVassal(iLoopPlayer): continue
		if iLoopPlayer == iDefender: continue
		gc.getTeam(iLoopPlayer).makePeace(iAttacker)
		
	if gc.getGame().determineWinner(iAttacker, iDefender) == iAttacker:
		lWinners = lAttackers
		lLosers = lDefenders
	else:
		lWinners = lDefenders
		lLosers = lAttackers
	
	currentCongress = Congress(lWinners, lLosers)
	data.currentCongress = currentCongress
	currentCongress.startCongress()
コード例 #3
0
def endGlobalWar(iAttacker, iDefender):
	if not gc.getPlayer(iAttacker).isAlive() or not gc.getPlayer(iDefender).isAlive():
		return
		
	if data.currentCongress:
		return
	
	lAttackers = [iAttacker]
	lDefenders = [iDefender]
	
	lAttackerAllies, lDefenderAllies = determineAlliances(iAttacker, iDefender)
	
	lAttackers += lAttackerAllies
	lDefenders += lDefenderAllies
	
	# force peace for all allies of the belligerents
	for iLoopPlayer in lAttackers:
		if not gc.getPlayer(iLoopPlayer).isAlive(): continue
		if utils.isAVassal(iLoopPlayer): continue
		if iLoopPlayer == iAttacker: continue
		gc.getTeam(iLoopPlayer).makePeace(iDefender)
		
	for iLoopPlayer in lDefenders:
		if not gc.getPlayer(iLoopPlayer).isAlive(): continue
		if utils.isAVassal(iLoopPlayer): continue
		if iLoopPlayer == iDefender: continue
		gc.getTeam(iLoopPlayer).makePeace(iAttacker)
		
	if gc.getGame().determineWinner(iAttacker, iDefender) == iAttacker:
		lWinners = lAttackers
		lLosers = lDefenders
	else:
		lWinners = lDefenders
		lLosers = lAttackers
	
	# Hungarian UHV3: Win and attend the congress for two world wars.
	if pHungary.isAlive() and not utils.isAVassal(iHungary) and iHungary in lWinners:
		data.iHungaryGlobalWars += 1
	
	currentCongress = Congress(lWinners, lLosers)
	data.iCongressTurns = getCongressInterval()
	data.currentCongress = currentCongress
	currentCongress.startCongress()
コード例 #4
0
    def checkName(self, iPlayer):

        return

        #print "checkName"

        if iPlayer >= iNumPlayers:
            return
        if not gc.getPlayer(iPlayer).isAlive:
            return

        bVassal = utils.isAVassal(iPlayer)
        pPlayer = gc.getPlayer(iPlayer)
        iReligion = pPlayer.getStateReligion()
        capital = gc.getPlayer(iPlayer).getCapitalCity()
        iGameTurn = gc.getGame().getGameTurn()

        iCivilization = sd.getCivilization(iPlayer)

        # 3 kingdoms > respawn > capital > religion > empire > vassal

        if iPlayer == con.iJin:
            if gc.getPlayer(con.iQin).isAlive() and gc.getPlayer(
                    con.iHan).isAlive():
                self.setCivDesc(iPlayer, self.SpecialNames[iPlayer])
                return
        if iPlayer in [con.iRome, con.iByzantines]:
            if utils.getYear() >= con.tBirth[con.iByzantines] and gc.getPlayer(
                    con.iByzantines).isAlive():
                self.setCivDesc(iPlayer, self.SpecialNames[iPlayer])
                self.setCivDesc(con.iByzantines,
                                self.SpecialNames[con.iByzantines])
                return
        #if iPlayer == con.iByzantines and utils.isActive(con.iRome) and sd.getCivilization(con.iByzantines) == con.iByzantines:
        #self.setCivDesc(iPlayer, self.SpecialNames[iPlayer])
        #self.setCivDesc(con.iRome, self.SpecialNames[con.iRome])
        #return

        # by vassalage
        if bVassal and iCivilization in self.vassalNames:
            szName = self.vassalNames[iCivilization]
        else:
            szName = self.defaultNames[iCivilization]

        # by status (empires)
        if not bVassal:
            iCivic = pPlayer.getCivics(0)
            if iCivilization in self.empireNames:
                minCities = 5
                if iCivic == con.iEmpireCivic or pPlayer.getNumCities(
                ) >= minCities:
                    if pPlayer.getNumCities() >= (minCities):
                        szName = self.empireNames[iCivilization]

        self.setCivDesc(iPlayer, szName)
コード例 #5
0
	def refuseDemand(self, iClaimant):
		iVotes = self.dVotes[iClaimant]
		
		if iClaimant not in self.dPossibleBelligerents:
			self.dPossibleBelligerents[iClaimant] = 2 * iVotes
		else:
			self.dPossibleBelligerents[iClaimant] += 2 * iVotes
		
		for iVoter in self.dVotedFor[iClaimant]:
			if utils.isAVassal(iVoter): continue
			if iVoter not in self.dPossibleBelligerents:
				self.dPossibleBelligerents[iVoter] = iVotes
			else:
				self.dPossibleBelligerents[iVoter] += iVotes
コード例 #6
0
ファイル: Religions.py プロジェクト: Imperator-Knoedel/Sunset
	def reformationChoice(self, iPlayer):
		pPlayer = gc.getPlayer(iPlayer)
		
		if utils.getHumanID() == iPlayer: return
	
		if pPlayer.getStateReligion() == iCatholicism:
			if self.chooseProtestantism(iPlayer):
				self.embraceReformation(iPlayer)
			elif self.isProtestantAnyway(iPlayer) or utils.isAVassal(iPlayer):
				self.tolerateReformation(iPlayer)
			else:
				self.counterReformation(iPlayer)
		else:
			self.tolerateReformation(iPlayer)
コード例 #7
0
	def reformationChoice(self, iPlayer):
		pPlayer = gc.getPlayer(iPlayer)
		
		if utils.getHumanID() == iPlayer: return
	
		if pPlayer.getStateReligion() == iCatholicism:
			if self.chooseProtestantism(iPlayer):
				self.embraceReformation(iPlayer)
			elif self.isProtestantAnyway(iPlayer) or utils.isAVassal(iPlayer):
				self.tolerateReformation(iPlayer)
			else:
				self.counterReformation(iPlayer)
		else:
			self.tolerateReformation(iPlayer)
コード例 #8
0
	def refuseDemand(self, iClaimant):
		iVotes = self.dVotes[iClaimant]
		
		if iClaimant not in self.dPossibleBelligerents:
			self.dPossibleBelligerents[iClaimant] = 2 * iVotes
		else:
			self.dPossibleBelligerents[iClaimant] += 2 * iVotes
		
		for iVoter in self.dVotedFor[iClaimant]:
			if utils.isAVassal(iVoter): continue
			if iVoter not in self.dPossibleBelligerents:
				self.dPossibleBelligerents[iVoter] = iVotes
			else:
				self.dPossibleBelligerents[iVoter] += iVotes
コード例 #9
0
    def reformation(self):
        for iPlayer in range(iNumPlayers):
            if [
                    city for city in utils.getCityList(iPlayer)
                    if city.getOwner() == iPlayer
            ]:
                self.reformationChoice(iPlayer)

        for iPlayer in range(iNumPlayers):
            if data.players[iPlayer].iReformationDecision == 2:
                for iTargetPlayer in range(iNumPlayers):
                    if data.players[iTargetPlayer].iReformationDecision == 0 and utils.getHumanID(
                    ) != iTargetPlayer and iTargetPlayer != iNetherlands and not utils.isAVassal(
                            iTargetPlayer):
                        gc.getTeam(iPlayer).declareWar(
                            iTargetPlayer, True, WarPlanTypes.WARPLAN_DOGPILE)

        pHolyCity = gc.getGame().getHolyCity(iProtestantism)
        if data.players[pHolyCity.getOwner()].iReformationDecision == 0:
            pHolyCity.setNumRealBuilding(iProtestantShrine, 1)
コード例 #10
0
    def checkName(self, iPlayer):

        return

        if iPlayer >= iNumPlayers: return

        bVassal = utils.isAVassal(iPlayer)
        pPlayer = gc.getPlayer(iPlayer)
        bRespawned = sd.getCivStatus(iPlayer)
        iReligion = pPlayer.getStateReligion()
        capital = gc.getPlayer(iPlayer).getCapitalCity()

        # respawn > capital > religion > empire > vassal

        # by respawns
        if bRespawned and iPlayer in self.respawnedNames:

            return

        # by vassalage
        if bVassal and iPlayer in self.vassalNames:
            szName = self.vassalNames[iPlayer]
        else:
            szName = self.defaultNames[iPlayer]

        # by status (empires)
        if not bVassal:
            iCivic = pPlayer.getCivics(0)
            if iPlayer in self.empireNames:
                minCities = 8  # 8/6
                if iPlayer in []: minCities = 4  # 4/3
                elif iPlayer in []: minCities = 16  # 16/12
                if pPlayer.getNumCities() >= minCities:
                    if pPlayer.getNumCities() >= (minCities * 3 / 4):
                        szName = self.empireNames[iPlayer]

        self.setCivDesc(iPlayer, szName)
コード例 #11
0
def startsGlobalWar(lAttackers, lDefenders):
	if len(lAttackers) < 2: return False
	if len(lDefenders) < 2: return False
	
	lWorldPowers = utils.getSortedList([i for i in range(iNumPlayers) if gc.getPlayer(i).isAlive() and not utils.isAVassal(i)], lambda iPlayer: gc.getTeam(iPlayer).getPower(True), True)
	
	iCount = len(lWorldPowers)/4
	lWorldPowers = lWorldPowers[:iCount]
	
	lParticipatingPowers = [iPlayer for iPlayer in lWorldPowers if iPlayer in lAttackers or iPlayer in lDefenders]
	
	return 2 * len(lParticipatingPowers) >= len(lWorldPowers)
コード例 #12
0
	def reformation(self):				
		for iPlayer in range(iNumPlayers):
			if [city for city in utils.getCityList(iPlayer) if city.getOwner() == iPlayer]:
				self.reformationChoice(iPlayer)
				
		for iPlayer in range(iNumPlayers):
			if data.players[iPlayer].iReformationDecision == 2:
				for iTargetPlayer in range(iNumPlayers):
					if data.players[iTargetPlayer].iReformationDecision == 0 and utils.getHumanID() != iTargetPlayer and iTargetPlayer != iNetherlands and not utils.isAVassal(iTargetPlayer):
						gc.getTeam(iPlayer).declareWar(iTargetPlayer, True, WarPlanTypes.WARPLAN_DOGPILE)
						
		pHolyCity = gc.getGame().getHolyCity(iProtestantism)
		if data.players[pHolyCity.getOwner()].iReformationDecision == 0:
			pHolyCity.setNumRealBuilding(iProtestantShrine, 1)
コード例 #13
0
def startsGlobalWar(lAttackers, lDefenders):
	if len(lAttackers) < 2: return False
	if len(lDefenders) < 2: return False
	
	lWorldPowers = utils.getSortedList([i for i in range(iNumPlayers) if gc.getPlayer(i).isAlive() and not utils.isAVassal(i)], lambda iPlayer: gc.getTeam(iPlayer).getPower(True), True)
	
	iCount = len(lWorldPowers)/4
	lWorldPowers = lWorldPowers[:iCount]
	
	lParticipatingPowers = [iPlayer for iPlayer in lWorldPowers if iPlayer in lAttackers or iPlayer in lDefenders]
	
	return 2 * len(lParticipatingPowers) >= len(lWorldPowers)
コード例 #14
0
    def checkAIWars(self, iPlayer, iGameTurn):

        print("checkAIWars, iPlayer", iPlayer, "iGameTurn", iGameTurn)

        #if gc.getGame().getSorenRandNum(100, 'random number') > 50:
        #return
        pPlayer = gc.getPlayer(iPlayer)
        tTeam = gc.getTeam(pPlayer.getTeam())
        iCiv = sd.getCivilization(iPlayer)
        iPower = pPlayer.getPower()
        #print ("iCiv=", iCiv)
        iWarTargetPlayer = -1

        # foreigners in the core
        lEnemyCities = []
        plotList = utils.getRegionPlotList(con.lCoreRegions[iCiv])
        for tPlot in plotList:
            pCurrent = gc.getMap().plot(tPlot[0], tPlot[1])
            if pCurrent.isCity():
                print("city in core regions", pCurrent.getPlotCity().getName())
                if pCurrent.getPlotCity().getOwner() != iPlayer:
                    print("foreign city in core regions",
                          pCurrent.getPlotCity().getName())
                    lEnemyCities.append(pCurrent.getPlotCity())

        if len(lEnemyCities):
            print "foreigners in core"
            iEnemyDistance = 200
            capital = gc.getPlayer(iPlayer).getCapitalCity()
            iCapitalX = capital.getX()
            iCapitalY = capital.getY()
            for pLoopCity in lEnemyCities:
                if gc.getPlayer(iPlayer).canContact(pLoopCity.getOwner()):
                    if abs(pLoopCity.getX() -
                           iCapitalX) < iEnemyDistance or abs(
                               pLoopCity.getY() - iCapitalY) < iEnemyDistance:
                        iEnemyDistance = max((pLoopCity.getX() - iCapitalX),
                                             (pLoopCity.getY() - iCapitalY))
                        iWarTargetPlayer = pLoopCity.getOwner()
                        print("iWarTargetPlayer=", iWarTargetPlayer)

            if iWarTargetPlayer != -1:
                if utils.canDeclareWar(iPlayer, iWarTargetPlayer):
                    if utils.isAVassal(iWarTargetPlayer):
                        iMaster = utils.getMaster(iWarTargetPlayer)
                        iTotalRivalPower = gc.getPlayer(iMaster).getPower(
                        ) + gc.getPlayer(iWarTargetPlayer).getPower()
                        if iPower > iTotalRivalPower * 2 / 3:
                            if pPlayer.AI_getAttitude(
                                    iWarTargetPlayer
                            ) < con.iFriendly and pPlayer.AI_getAttitude(
                                    iMaster) < con.iFriendly:
                                self.initWar(iPlayer, iWarTargetPlayer,
                                             iGameTurn)
                                print("initWar", iPlayer, iWarTargetPlayer)
                                return
                    else:
                        if iPower > gc.getPlayer(
                                iWarTargetPlayer).getPower() * 2 / 3:
                            if pPlayer.AI_getAttitude(
                                    iWarTargetPlayer) < con.iFriendly:
                                self.initWar(iPlayer, iWarTargetPlayer,
                                             iGameTurn)
                                print("initWar", iPlayer, iWarTargetPlayer)
                                return

        if iWarTargetPlayer == -1:

            # passive civs will not declare war unless their core is invaded
            if con.tAggression[iCiv] == 0:
                return

            # aggressive civs
            if con.tAggression[iCiv] == 2:
                print "Aggressive"
                #if con.tAggression[iCiv] >= 0:
                # preferred targets in target regions
                lEnemyCities = []
                plotList = utils.getRegionPlotList(con.lTargetRegions[iCiv])
                for tPlot in plotList:
                    pCurrent = gc.getMap().plot(tPlot[0], tPlot[1])
                    if pCurrent.isCity():
                        print("city in target regions",
                              pCurrent.getPlotCity().getName())
                        if pCurrent.getPlotCity().getOwner(
                        ) in con.lWarTargets[iCiv]:
                            lEnemyCities.append(pCurrent.getPlotCity())
                            print("target civ city in target regions",
                                  pCurrent.getPlotCity().getName())

                if len(lEnemyCities):
                    print "war targets in target regions"
                    iEnemyDistance = 200
                    capital = gc.getPlayer(iPlayer).getCapitalCity()
                    iCapitalX = capital.getX()
                    iCapitalY = capital.getY()
                    for pLoopCity in lEnemyCities:
                        if gc.getPlayer(iPlayer).canContact(
                                pLoopCity.getOwner()):
                            if abs(pLoopCity.getX() -
                                   iCapitalX) < iEnemyDistance or abs(
                                       pLoopCity.getY() -
                                       iCapitalY) < iEnemyDistance:
                                iEnemyDistance = max(
                                    (pLoopCity.getX() - iCapitalX),
                                    (pLoopCity.getY() - iCapitalY))
                                iWarTargetPlayer = pLoopCity.getOwner()
                                print("iWarTargetPlayer=", iWarTargetPlayer)

                    if iWarTargetPlayer != -1:
                        if utils.canDeclareWar(iPlayer, iWarTargetPlayer):
                            if utils.isAVassal(iWarTargetPlayer):
                                iMaster = utils.getMaster(iWarTargetPlayer)
                                iTotalRivalPower = gc.getPlayer(
                                    iMaster).getPower() + gc.getPlayer(
                                        iWarTargetPlayer).getPower()
                                if iPower > iTotalRivalPower * 2 / 3:
                                    if pPlayer.AI_getAttitude(
                                            iWarTargetPlayer
                                    ) < con.iFriendly and pPlayer.AI_getAttitude(
                                            iMaster) < con.iFriendly:
                                        self.initWar(iPlayer, iWarTargetPlayer,
                                                     iGameTurn)
                                        print("initWar", iPlayer,
                                              iWarTargetPlayer)
                                        return
                            else:
                                if iPower > gc.getPlayer(
                                        iWarTargetPlayer).getPower() * 2 / 3:
                                    if pPlayer.AI_getAttitude(
                                            iWarTargetPlayer) < con.iFriendly:
                                        self.initWar(iPlayer, iWarTargetPlayer,
                                                     iGameTurn)
                                        print("initWar", iPlayer,
                                              iWarTargetPlayer)
                                        return

                if iWarTargetPlayer == -1:

                    # other civs in target regions
                    lEnemyCities = []
                    plotList = utils.getRegionPlotList(
                        con.lTargetRegions[iCiv])
                    for tPlot in plotList:
                        pCurrent = gc.getMap().plot(tPlot[0], tPlot[1])
                        if pCurrent.isCity():
                            print("city in target regions",
                                  pCurrent.getPlotCity().getName())
                            if pCurrent.getPlotCity().getOwner() != iPlayer:
                                lEnemyCities.append(pCurrent.getPlotCity())
                                print("other civcity in target regions",
                                      pCurrent.getPlotCity().getName())

                    if len(lEnemyCities):
                        print "other civs in target regions"
                        iEnemyDistance = 200
                        capital = gc.getPlayer(iPlayer).getCapitalCity()
                        iCapitalX = capital.getX()
                        iCapitalY = capital.getY()
                        for pLoopCity in lEnemyCities:
                            if gc.getPlayer(iPlayer).canContact(
                                    pLoopCity.getOwner()):
                                if abs(pLoopCity.getX() -
                                       iCapitalX) < iEnemyDistance or abs(
                                           pLoopCity.getY() -
                                           iCapitalY) < iEnemyDistance:
                                    iEnemyDistance = max(
                                        (pLoopCity.getX() - iCapitalX),
                                        (pLoopCity.getY() - iCapitalY))
                                    iWarTargetPlayer = pLoopCity.getOwner()
                                    print("iWarTargetPlayer=",
                                          iWarTargetPlayer)

                        if iWarTargetPlayer != -1:
                            if utils.canDeclareWar(iPlayer, iWarTargetPlayer):
                                if utils.isAVassal(iWarTargetPlayer):
                                    iMaster = utils.getMaster(iWarTargetPlayer)
                                    iTotalRivalPower = gc.getPlayer(
                                        iMaster).getPower() + gc.getPlayer(
                                            iWarTargetPlayer).getPower()
                                    if iPower > iTotalRivalPower * 2 / 3:
                                        if pPlayer.AI_getAttitude(
                                                iWarTargetPlayer
                                        ) < con.iFriendly and pPlayer.AI_getAttitude(
                                                iMaster) < con.iFriendly:
                                            self.initWar(
                                                iPlayer, iWarTargetPlayer,
                                                iGameTurn)
                                            print("initWar", iPlayer,
                                                  iWarTargetPlayer)
                                            return
                                else:
                                    if iPower > gc.getPlayer(
                                            iWarTargetPlayer).getPower(
                                            ) * 2 / 3:
                                        if pPlayer.AI_getAttitude(
                                                iWarTargetPlayer
                                        ) < con.iFriendly:
                                            self.initWar(
                                                iPlayer, iWarTargetPlayer,
                                                iGameTurn)
                                            print("initWar", iPlayer,
                                                  iWarTargetPlayer)
                                            return

                    if iWarTargetPlayer == -1:
                        # other civs in normal regions
                        lEnemyCities = []
                        plotList = utils.getRegionPlotList(
                            con.lNormalRegions[iCiv])
                        for tPlot in plotList:
                            pCurrent = gc.getMap().plot(tPlot[0], tPlot[1])
                            if pCurrent.isCity():
                                print("city in normal regions",
                                      pCurrent.getPlotCity().getName())
                                if pCurrent.getPlotCity().getOwner(
                                ) != iPlayer:
                                    lEnemyCities.append(pCurrent.getPlotCity())
                                    print("foreign city in normal regions",
                                          pCurrent.getPlotCity().getName())

                        if len(lEnemyCities):
                            print "other civs in normal regions"
                            iEnemyDistance = 200
                            capital = gc.getPlayer(iPlayer).getCapitalCity()
                            iCapitalX = capital.getX()
                            iCapitalY = capital.getY()
                            for pLoopCity in lEnemyCities:
                                if gc.getPlayer(iPlayer).canContact(
                                        pLoopCity.getOwner()):
                                    if abs(pLoopCity.getX() -
                                           iCapitalX) < iEnemyDistance or abs(
                                               pLoopCity.getY() -
                                               iCapitalY) < iEnemyDistance:
                                        iEnemyDistance = max(
                                            (pLoopCity.getX() - iCapitalX),
                                            (pLoopCity.getY() - iCapitalY))
                                        iWarTargetPlayer = pLoopCity.getOwner()
                                        print("iWarTargetPlayer=",
                                              iWarTargetPlayer)

                            if iWarTargetPlayer != -1:
                                if utils.canDeclareWar(iPlayer,
                                                       iWarTargetPlayer):
                                    if utils.isAVassal(iWarTargetPlayer):
                                        iMaster = utils.getMaster(
                                            iWarTargetPlayer)
                                        iTotalRivalPower = gc.getPlayer(
                                            iMaster).getPower() + gc.getPlayer(
                                                iWarTargetPlayer).getPower()
                                        if iPower > iTotalRivalPower:
                                            if pPlayer.AI_getAttitude(
                                                    iWarTargetPlayer
                                            ) < con.iPleased and pPlayer.AI_getAttitude(
                                                    iMaster) < con.iPleased:
                                                self.initWar(
                                                    iPlayer, iWarTargetPlayer,
                                                    iGameTurn)
                                                print("initWar", iPlayer,
                                                      iWarTargetPlayer)
                                                return
                                    else:
                                        if iPower > gc.getPlayer(
                                                iWarTargetPlayer).getPower():
                                            if pPlayer.AI_getAttitude(
                                                    iWarTargetPlayer
                                            ) < con.iPleased:
                                                self.initWar(
                                                    iPlayer, iWarTargetPlayer,
                                                    iGameTurn)
                                                print("initWar", iPlayer,
                                                      iWarTargetPlayer)
                                                return

            # normal civs
            elif con.tAggression[iCiv] == 1:
                print "Normal"
                # other civs in normal regions
                lEnemyCities = []
                plotList = utils.getRegionPlotList(con.lNormalRegions[iCiv])
                for tPlot in plotList:
                    pCurrent = gc.getMap().plot(tPlot[0], tPlot[1])
                    if pCurrent.isCity():
                        print("city in normal regions",
                              pCurrent.getPlotCity().getName())
                        if pCurrent.getPlotCity().getOwner() != iPlayer:
                            print("foreign city in normal regions",
                                  pCurrent.getPlotCity().getName())
                            lEnemyCities.append(pCurrent.getPlotCity())

                if len(lEnemyCities):
                    print "other civs in normal regions"
                    iEnemyDistance = 200
                    capital = gc.getPlayer(iPlayer).getCapitalCity()
                    iCapitalX = capital.getX()
                    iCapitalY = capital.getY()
                    for pLoopCity in lEnemyCities:
                        if gc.getPlayer(iPlayer).canContact(
                                pLoopCity.getOwner()):
                            if abs(pLoopCity.getX() -
                                   iCapitalX) < iEnemyDistance or abs(
                                       pLoopCity.getY() -
                                       iCapitalY) < iEnemyDistance:
                                iEnemyDistance = max(
                                    (pLoopCity.getX() - iCapitalX),
                                    (pLoopCity.getY() - iCapitalY))
                                iWarTargetPlayer = pLoopCity.getOwner()
                                print("iWarTargetPlayer=", iWarTargetPlayer)

                        if iWarTargetPlayer != -1:
                            if utils.canDeclareWar(iPlayer, iWarTargetPlayer):
                                if utils.isAVassal(iWarTargetPlayer):
                                    iMaster = utils.getMaster(iWarTargetPlayer)
                                    iTotalRivalPower = gc.getPlayer(
                                        iMaster).getPower() + gc.getPlayer(
                                            iWarTargetPlayer).getPower()
                                    if iPower > iTotalRivalPower * 3 / 2:
                                        if pPlayer.AI_getAttitude(
                                                iWarTargetPlayer
                                        ) < con.iCautious and pPlayer.AI_getAttitude(
                                                iMaster) < con.iCautious:
                                            self.initWar(
                                                iPlayer, iWarTargetPlayer,
                                                iGameTurn)
                                            print("initWar", iPlayer,
                                                  iWarTargetPlayer)
                                            return
                                else:
                                    if iPower > gc.getPlayer(
                                            iWarTargetPlayer).getPower(
                                            ) * 3 / 2:
                                        if pPlayer.AI_getAttitude(
                                                iWarTargetPlayer
                                        ) < con.iCautious:
                                            self.initWar(
                                                iPlayer, iWarTargetPlayer,
                                                iGameTurn)
                                            print("initWar", iPlayer,
                                                  iWarTargetPlayer)
                                            return
コード例 #15
0
ファイル: Victory.py プロジェクト: srpt/RFC-Classical-World
	def checkPlayerTurn(self, iGameTurn, iPlayer):
		
		iHuman = utils.getHumanID()
		pPlayer = gc.getPlayer(iPlayer)
		
		# CARTHAGE
		if iPlayer == con.iCarthage:
				
			# Carthaginian UHV1: Obtain 6 luxury resources and 6 strategic resources by 350BC
			if sd.getGoal(iPlayer, 0) == -1:
				if iGameTurn <= getTurnForYear(-350):
					if self.getNumLuxuries(iPlayer) >= 6 and self.getNumStrategicResources(iPlayer) >= 6:
						sd.setGoal(iPlayer, 0, 1)
				else:
					sd.setGoal(iPlayer, 0, 0)
						
			# Carthaginian UHV2: Make Carthage the most prosperous trading city in the world in 300BC
			if iGameTurn <= getTurnForYear(-300):
				iCarthageTrade = gc.getMap().plot(23, 33).getPlotCity().getTradeYield(YieldTypes.YIELD_COMMERCE)
				iBestTrade = 0
				for city in utils.getAllCities():
					if city.getX() != 23 and city.getY() != 33:
						iCityTrade = city.getTradeYield(YieldTypes.YIELD_COMMERCE)
						if iCityTrade > iBestTrade:
							iBestTrade = iCityTrade
				if iCarthageTrade > iBestTrade:
					sd.setGoal(iPlayer, 1, 1)
				else:
					sd.setGoal(iPlayer, 1, 0)
		
		# ATHENS
		if iPlayer == con.iAthens:
		
			# Control five Aegean ports by 350BC
			if sd.getGoal(iPlayer, 0) == -1:
				if iGameTurn <= getTurnForYear(-350):
					iPorts = 0
					for city in utils.getCityList(iPlayer):
						if (city.getX(), city.getY()) in con.lAegeanPortTiles:
							iPorts += 1
					if iPorts >= 5:
						sd.setGoal(iPlayer, 0, 1)
				else:
					sd.setGoal(iPlayer, 0, 0)
					
			# Build the Parthenon, the Theatre of Dionysis and the Academy see onBuildingBuilt
			
			# Settle five Great People in your capital by 300BC
			if sd.getGoal(iPlayer, 2) == -1:
				if iGameTurn <= getTurnForYear(300):
					iCount = 0
					if pPlayer.getNumCities() > 0:
						capital = pPlayer.getCapitalCity()
						if self.countGreatPeople((capital.getX(), capital.getY())) >= 5:
							sd.setGoal(iPlayer, 2, 1)
				else:
					sd.setGoal(iPlayer, 2, 0)
					
		# NANDAS
		if iPlayer == con.iNandas:
			
			# Control northern India by 330BC
			if sd.getGoal(iPlayer, 0) == -1:
				if iGameTurn <= getTurnForYear(-330):
					bControl = true
					regionList = [con.rMagadha, con.rAnga, con.rAvanti, con.rPunjab]
					for regionID in regionList:
						if not utils.checkRegionControl(iPlayer, regionID, True):
							bControl = false
					if bControl:
						sd.setGoal(iPlayer, 0, 1)
				else:
					sd.setGoal(iPlayer, 0, 0)
						
			# Control the world's largest army by 330BC
			if sd.getGoal(iPlayer, 1) == -1:
				if iGameTurn <= getTurnForYear(-330):
					iBestArmy = 0
					iNandaArmy = gc.getPlayer(iPlayer).getNumUnits()
					for iLoopPlayer in range(con.iNumPlayers):
						iLoopArmy = gc.getPlayer(iLoopPlayer).getNumUnits()
						if iLoopArmy > iBestArmy:
							iBestArmy = iLoopArmy
					if iBestArmy > iNandaArmy:
						sd.setGoal(iPlayer, 1, 1)
				else:
					sd.setGoal(iPlayer, 1, 0)
					
			# Be the world's richest civilization in 330BC
			if iGameTurn == getTurnForYear(-330):
				iBestGold = 0
				iNandaGold = gc.getPlayer(iPlayer).getGold()
				for iLoopPlayer in range(con.iNumPlayers):
					iLoopGold = gc.getPlayer(iPlayer).getGold()
					if iLoopGold > iBestGold:
						iBestGold = iLoopGold
				if iNandaGold > iBestGold:
					sd.setGoal(iPlayer, 2, 1)
				else:
					sd.setGoal(iPlayer, 2, 0)
					
		# QIN
		if iPlayer == con.iQin:
		# Qin UHV1: Build the Great Wall and the Terracotta Army by 215BC see onBuildingBuilt
			if sd.getGoal(iPlayer, 0) == -1:
				if iGameTurn >= getTurnForYear(-215):
					sd.setGoal(iPlayer, 0, 0)
			
			# Qin UHV2: control central and north China by 210BC
			if sd.getGoal(iPlayer, 1) == -1:
				if iGameTurn <= getTurnForYear(-210):
					bControl = True
					regionList = [con.rQin, con.rHan, con.rYan, con.rZhao, con.rChu, con.rNanYue, con.rQi, con.rWu, con.rShu]
					for regionID in regionList:
						if not utils.checkRegionControl(iPlayer, regionID):
							bControl = False
					if bControl:
						sd.setGoal(iPlayer, 1, 1)
				else:
					sd.setGoal(iPlayer, 1, 0)
			
			# Qin UHV3: control at least 9 provinces in 100BC
			if sd.getGoal(iPlayer, 2) == -1:
				if iGameTurn == getTurnForYear(-100):
					if self.getNumProvinces(iPlayer) >= 9:
						sd.setGoal(iPlayer, 2, 1)
					else:
						sd.setGoal(iPlayer, 2, 0)
						
			
			
		
		# HISTORICAL VICTORY
		if gc.getGame().isVictoryValid(iHistoricalVictory):
		
			
			
			#generic checks
			if pPlayer.isAlive() and iPlayer < con.iNumPlayers:
				if sd.get2OutOf3(iPlayer) == False:
					if utils.countAchievedGoals(iPlayer) == 2:
						#intermediate bonus
						sd.set2OutOf3(iPlayer, True)
						if pPlayer.getNumCities() > 0: #this check is needed, otherwise game crashes
							pPlayer.changeGoldenAgeTurns(pPlayer.getGoldenAgeLength()) # edead
							iWarCounter = 0
							iRndnum = gc.getGame().getSorenRandNum(con.iNumPlayers, 'civs')
							iHandicap = gc.getGame().getHandicapType()
							for i in range(iRndnum, con.iNumPlayers + iRndnum):
								iCiv = i % con.iNumPlayers
								pCiv = gc.getPlayer(iCiv)
								if pCiv.isAlive() and pCiv.canContact(iPlayer):                                                                
									if pCiv.AI_getAttitude(iPlayer) <= 0:
										teamCiv = gc.getTeam(pCiv.getTeam())
										if not teamCiv.isAtWar(iPlayer) and not teamCiv.isDefensivePact(iPlayer) and not utils.isAVassal(iCiv):
											teamCiv.AI_setWarPlan(iPlayer, WarPlanTypes.WARPLAN_PREPARING_TOTAL) # edead: prepare for total war
											iWarCounter += 1
											if iWarCounter == 1 + max(1, iHandicap):
												break
			if gc.getGame().getWinner() == -1:
				if sd.getGoal(iPlayer, 0) == 1 and sd.getGoal(iPlayer, 1) == 1 and sd.getGoal(iPlayer, 2) == 1:
					gc.getGame().setWinner(iPlayer, iHistoricalVictory)
				
		# RELIGIOUS VICTORY
		if gc.getGame().isVictoryValid(iReligiousVictory) and iPlayer == iHuman:
			if iGameTurn >= getTurnForYear(con.tBirth[iPlayer]) and gc.getPlayer(iPlayer).getStateReligion() != -1:
				for i in range(3):
					if sd.getReligiousGoal(iPlayer, i) == -1:
						if self.getURV(iPlayer, i):
							sd.setReligiousGoal(iPlayer, i, 1)
				if gc.getGame().getWinner() == -1:
					if sd.getReligiousGoal(iPlayer, 0) == 1 and sd.getReligiousGoal(iPlayer, 1) == 1 and sd.getReligiousGoal(iPlayer, 2) == 1:
						gc.getGame().setWinner(iPlayer, iReligiousVictory)
コード例 #16
0
ファイル: AIWars.py プロジェクト: srpt/RFC-Classical-World
    def chooseAttackingPlayer(self):
        #finding max teams ever alive (countCivTeamsEverAlive() doesn't work as late human starting civ gets killed every turn)
        iMaxCivs = iNumPlayers
        for i in range(iNumPlayers):
            j = iNumPlayers - 1 - i
            if (gc.getPlayer(j).isAlive()):
                iMaxCivs = j
                break
        #print ("iMaxCivs", iMaxCivs)

        if (gc.getGame().countCivPlayersAlive() <= 3):
            return -1
        else:
            iRndnum = gc.getGame().getSorenRandNum(iMaxCivs,
                                                   'attacking civ index')

            # Important war: Carthage vs. Rome
            if utils.getYear() >= -250 and utils.getYear() < -150:
                if gc.getPlayer(con.iRome).isAlive() and gc.getPlayer(
                        con.iCarthage).isAlive():
                    if not gc.getTeam(gc.getPlayer(
                            con.iRome).getTeam()).isAtWar(con.iCarthage):
                        if gc.getPlayer(con.iRome) != utils.getHumanID():
                            iRndnum = con.iRome
                        elif gc.getPlayer(con.iCarthage) != utils.getHumanID():
                            iRndnum = con.iCarthage

            # Important war: Macedon vs. Athens
            if utils.getYear() >= -400 and utils.getYear() < -300:
                if gc.getPlayer(con.iMacedon).isAlive() and gc.getPlayer(
                        con.iAthens).isAlive():
                    if not gc.getTeam(gc.getPlayer(
                            con.iMacedon).getTeam()).isAtWar(con.iAthens):
                        if gc.getPlayer(con.iMacedon) != utils.getHumanID():
                            iRndnum = con.iMacedon
                        elif gc.getPlayer(con.iAthens) != utils.getHumanID():
                            iRndnum = con.iAthens
                            iRndnum = con.iCarthage

            # Important war: Qin vs. Jin
            if utils.getYear() >= -350 and utils.getYear() < -300:
                if gc.getPlayer(con.iQin).isAlive() and gc.getPlayer(
                        con.iJinState).isAlive():
                    if not gc.getTeam(gc.getPlayer(
                            con.iQin).getTeam()).isAtWar(con.iJinState):
                        if gc.getPlayer(con.iQin) != utils.getHumanID():
                            iRndnum = con.iQin
                        elif gc.getPlayer(con.iJinState) != utils.getHumanID():
                            iRndnum = con.iJinState

            #print ("iRndnum", iRndnum)
            iAlreadyAttacked = -100
            iMin = 100
            iCiv = -1
            for i in range(iRndnum, iRndnum + iMaxCivs):
                iLoopCiv = i % iMaxCivs
                pLoopPlayer = gc.getPlayer(iLoopCiv)
                if (pLoopPlayer.isAlive() and not pLoopPlayer.isHuman()):
                    if (sd.getPlagueCountdown(iLoopCiv) >= -10
                            and sd.getPlagueCountdown(iLoopCiv) <= 0
                        ):  #civ is not under plague or quit recently from it
                        iAlreadyAttacked = sd.getAttackingCivsArray(iLoopCiv)
                        if (utils.isAVassal(iLoopCiv)):
                            iAlreadyAttacked += 1  #less likely to attack
                        #check if a world war is already in place
                        iNumAlreadyWar = 0
                        tLoopCiv = gc.getTeam(pLoopPlayer.getTeam())
                        for kLoopCiv in range(iNumPlayers):
                            if (tLoopCiv.isAtWar(kLoopCiv)):
                                if gc.getPlayer(kLoopCiv).isAlive():
                                    iNumAlreadyWar += 1
                        if (iNumAlreadyWar >= 4):
                            iAlreadyAttacked += 2  #much less likely to attack
                        elif (iNumAlreadyWar >= 2):
                            iAlreadyAttacked += 1  #less likely to attack

                        if (iAlreadyAttacked < iMin):
                            iMin = iAlreadyAttacked
                            iCiv = iLoopCiv
                #print ("attacking civ", iCiv)
                if (iAlreadyAttacked != -100):
                    sd.setAttackingCivsArray(iCiv, iAlreadyAttacked + 1)
                    return iCiv
                else:
                    return -1
        return -1