Beispiel #1
0
	def getTechTrades(self, player, team):
		iPlayerID = player.getID()
		tradeData = TradeData()
		tradeData.ItemType = TradeableItems.TRADE_TECHNOLOGIES
		techsByPlayer = {}
		for loopPlayer in TradeUtil.getTechTradePartners(player):
			techsToTrade = set()
			for iLoopTech in range(gc.getNumTechInfos()):
				tradeData.iData = iLoopTech
				if (loopPlayer.canTradeItem(iPlayerID, tradeData, False)):
					if (loopPlayer.getTradeDenial(iPlayerID, tradeData) == DenialTypes.NO_DENIAL): # will trade
						techsToTrade.add(iLoopTech)
			techsByPlayer[loopPlayer.getID()] = techsToTrade
		return techsByPlayer
Beispiel #2
0
	def getTechTrades(self, player, team):
		iPlayerID = player.getID()
		tradeData = TradeData()
		tradeData.ItemType = TradeableItems.TRADE_TECHNOLOGIES
		techsByPlayer = {}
		for loopPlayer in TradeUtil.getTechTradePartners(player):
			techsToTrade = set()
			for iLoopTech in range(gc.getNumTechInfos()):
				tradeData.iData = iLoopTech
				if (loopPlayer.canTradeItem(iPlayerID, tradeData, False)):
					if (loopPlayer.getTradeDenial(iPlayerID, tradeData) == DenialTypes.NO_DENIAL): # will trade
						techsToTrade.add(iLoopTech)
			techsByPlayer[loopPlayer.getID()] = techsToTrade
		return techsByPlayer
Beispiel #3
0
	def CheckForAlerts(self, iPlayer, bBeginTurn):
		CyPlayer = GC.getPlayer(iPlayer)
		CyTeam = GC.getTeam(CyPlayer.getTeam())
		iGrowthCount = 0

		bCheck1 = self.options.isShowDomPopAlert()
		bCheck2 = bBeginTurn and self.options.isShowCityPendingExpandBorderAlert()

		if bCheck1 or bCheck2:
			# Check for cultural expansion and population growth
			icon = "Art/Interface/Buttons/General/Warning_popup.dds"
			iActiveTeam = GAME.getActiveTeam()
			for iPlayerX in xrange(GC.getMAX_PC_PLAYERS()):
				CyPlayerX = GC.getPlayer(iPlayerX)
				if not CyPlayerX.isAlive() or CyPlayerX.getTeam() != iActiveTeam:
					continue
				for cityX in CyPlayerX.cities():
					if cityX.getFoodTurnsLeft() == 1 and not cityX.isFoodProduction() and not cityX.AI_isEmphasize(5):
						iGrowthCount += 1
					if bCheck2 and cityX.getCultureLevel() != GC.getNumCultureLevelInfos() - 1:
						if cityX.getCulture(iPlayerX) + cityX.getCommerceRate(CommerceTypes.COMMERCE_CULTURE) >= cityX.getCultureThreshold():
							msg = TRNSLTR.getText("TXT_KEY_MORECIV4LERTS_CITY_TO_EXPAND",(cityX.getName(),))
							CvUtil.sendMessage(msg, iPlayer, EVENT_MESSAGE_TIME_LONG, icon, -1, cityX.getX(), cityX.getY(), True, True)

		# Check Domination Limit
		if self.getCheckForDomVictory() and GAME.isVictoryValid(3):
			# Population Limit
			if bCheck1 and iGrowthCount:
				iTotalPop = GAME.getTotalPopulation()
				if iTotalPop > 10:
					iTeamPop = CyTeam.getTotalPopulation()
					fPercent = iTeamPop * 100.0 / iTotalPop
					fPercentNext = (iTeamPop + iGrowthCount) * 100.0 / iTotalPop

					if iTeamPop + iGrowthCount != self.lastPopCount:
						fVictoryPercent = GAME.getAdjustedPopulationPercent(3) * 1.0
						iLimitPop = int(iTotalPop * fVictoryPercent / 100)

						if fPercent >= fVictoryPercent:
							msg = TRNSLTR.getText("TXT_KEY_MORECIV4LERTS_POP_EXCEEDS_LIMIT", (iTeamPop, (u"%.2f%%" % fPercent), iLimitPop, (u"%.2f%%" % fVictoryPercent)))
							self._addMessageNoIcon(iPlayer, msg)

						elif fPercentNext >= fVictoryPercent:
							msg = TRNSLTR.getText("TXT_KEY_MORECIV4LERTS_POP_GROWTH_EXCEEDS_LIMIT", (iTeamPop, iGrowthCount, (u"%.2f%%" % fPercentNext), iLimitPop, (u"%.2f%%" % fVictoryPercent)))
							self._addMessageNoIcon(iPlayer, msg)

						elif fVictoryPercent - fPercentNext < self.options.getDomPopThreshold():
							msg = TRNSLTR.getText("TXT_KEY_MORECIV4LERTS_POP_GROWTH_CLOSE_TO_LIMIT", (iTeamPop, iGrowthCount, (u"%.2f%%" % fPercentNext), iLimitPop, (u"%.2f%%" % fVictoryPercent)))
							self._addMessageNoIcon(iPlayer, msg)

						elif fVictoryPercent - fPercent < self.options.getDomPopThreshold():
							msg = TRNSLTR.getText("TXT_KEY_MORECIV4LERTS_POP_CLOSE_TO_LIMIT", (iTeamPop, (u"%.2f%%" % fPercent), iLimitPop, (u"%.2f%%" % fVictoryPercent)))
							self._addMessageNoIcon(iPlayer, msg)

						self.lastPopCount = iTeamPop + iGrowthCount
			# Land Limit
			if self.options.isShowDomLandAlert():
				iTeamLand = CyTeam.getTotalLand()
				if iTeamLand > 40 and iTeamLand != self.lastLandCount:
					iTotalLand = GC.getMap().getLandPlots()
					fVictoryPercent = GAME.getAdjustedLandPercent(3) * 1.0
					iLimitLand = int(iTotalLand * fVictoryPercent / 100)
					fPercent = (iTeamLand * 100.0) / iTotalLand

					if fPercent > fVictoryPercent:
						msg = TRNSLTR.getText("TXT_KEY_MORECIV4LERTS_LAND_EXCEEDS_LIMIT", (iTeamLand, (u"%.2f%%" % fPercent), iLimitLand, (u"%.2f%%" % fVictoryPercent)))
						self._addMessageNoIcon(iPlayer, msg)

					elif fVictoryPercent - fPercent < self.options.getDomLandThreshold():
						msg = TRNSLTR.getText("TXT_KEY_MORECIV4LERTS_LAND_CLOSE_TO_LIMIT", (iTeamLand, (u"%.2f%%" % fPercent), iLimitLand, (u"%.2f%%" % fVictoryPercent)))
						self._addMessageNoIcon(iPlayer, msg)

					self.lastLandCount = iTeamLand

		if not bBeginTurn: return
		#********#
		# Trades #
		# | || | #
		tradeData = TradeData()
		# Bonus
		if self.options.isShowBonusTradeAlert():
			desiredBonuses = TradeUtil.getDesiredBonuses(CyPlayer, CyTeam)
			tradesByPlayer = {}
			for CyPlayerX in TradeUtil.getBonusTradePartners(CyPlayer):
				will, wont = TradeUtil.getTradeableBonuses(CyPlayerX, iPlayer)
				tradesByPlayer[CyPlayerX.getID()] = will

			for iLoopPlayer, currentTrades in tradesByPlayer.iteritems():
				#Did he have trades avail last turn
				if self.PrevAvailBonusTrades.has_key(iLoopPlayer):
					previousTrades = self.PrevAvailBonusTrades[iLoopPlayer]
				else:
					previousTrades = set()
				#Determine new bonuses
				newTrades = currentTrades.difference(previousTrades).intersection(desiredBonuses)
				if newTrades:
					szNewTrades = self.buildBonusString(newTrades)
					msg = TRNSLTR.getText("TXT_KEY_MORECIV4LERTS_NEW_BONUS_AVAIL", (GC.getPlayer(iLoopPlayer).getName(), szNewTrades))
					self._addMessageNoIcon(iPlayer, msg)
				#Determine removed bonuses
				removedTrades = previousTrades.difference(currentTrades).intersection(desiredBonuses)
				if removedTrades:
					szRemovedTrades = self.buildBonusString(removedTrades)
					msg = TRNSLTR.getText("TXT_KEY_MORECIV4LERTS_BONUS_NOT_AVAIL", (GC.getPlayer(iLoopPlayer).getName(), szRemovedTrades))
					self._addMessageNoIcon(iPlayer, msg)
			#save curr trades for next time
			self.PrevAvailBonusTrades = tradesByPlayer
		# Tech
		if self.options.isShowTechTradeAlert():
			techsByPlayer = {}
			researchTechs = set()
			iTotalTechs = GC.getNumTechInfos()
			tradeData.ItemType = TradeableItems.TRADE_TECHNOLOGIES
			bCheck1 = True
			for CyPlayerX in TradeUtil.getTechTradePartners(CyPlayer):
				techsToTrade = set()
				for iTech in range(iTotalTechs):
					if bCheck1 and CyPlayer.canResearch(iTech):
						researchTechs.add(iTech)
					tradeData.iData = iTech
					if CyPlayerX.canTradeItem(iPlayer, tradeData, False):
						if CyPlayerX.getTradeDenial(iPlayer, tradeData) == DenialTypes.NO_DENIAL: # will trade
							techsToTrade.add(iTech)
				bCheck1 = False
				techsByPlayer[CyPlayerX.getID()] = techsToTrade

			for iLoopPlayer, currentTechs in techsByPlayer.iteritems():
				#Did he have trades avail last turn
				if self.PrevAvailTechTrades.has_key(iLoopPlayer):
					previousTechs = self.PrevAvailTechTrades[iLoopPlayer]
				else:
					previousTechs = set()
				#Determine new techs
				newTechs = currentTechs.difference(previousTechs).intersection(researchTechs)
				if newTechs:
					szNewTechs = self.buildTechString(newTechs)
					msg = TRNSLTR.getText("TXT_KEY_MORECIV4LERTS_NEW_TECH_AVAIL", (GC.getPlayer(iLoopPlayer).getName(), szNewTechs))
					self._addMessageNoIcon(iPlayer, msg)
				#Determine removed techs
				removedTechs = previousTechs.difference(currentTechs).intersection(researchTechs)
				if removedTechs:
					szRemovedTechs = self.buildTechString(removedTechs)
					msg = TRNSLTR.getText("TXT_KEY_MORECIV4LERTS_TECH_NOT_AVAIL", (GC.getPlayer(iLoopPlayer).getName(), szRemovedTechs))
					self._addMessageNoIcon(iPlayer, msg)
			#save curr trades for next time
			self.PrevAvailTechTrades = techsByPlayer
		# Map
		if self.options.isShowMapTradeAlert():
			tradeData.ItemType = TradeableItems.TRADE_MAPS
			oldSet = self.PrevAvailMapTrades
			TXT_KEY = "TXT_KEY_MORECIV4LERTS_MAP"
			willTrade = self.getTrades(TradeUtil.getMapTradePartners(CyPlayer), iPlayer, tradeData, oldSet, TXT_KEY)
			if willTrade != oldSet:
				self.PrevAvailMapTrades = willTrade
		# Open Borders
		if self.options.isShowOpenBordersTradeAlert():
			tradeData.ItemType = TradeableItems.TRADE_OPEN_BORDERS
			oldSet = self.PrevAvailOpenBordersTrades
			TXT_KEY = "TXT_KEY_MORECIV4LERTS_OPEN_BORDERS"
			willTrade = self.getTrades(TradeUtil.getOpenBordersTradePartners(CyPlayer), iPlayer, tradeData, oldSet, TXT_KEY)
			if willTrade != oldSet:
				self.PrevAvailOpenBordersTrades = willTrade
		# Defensive Pact
		if self.options.isShowDefensivePactTradeAlert():
			tradeData.ItemType = TradeableItems.TRADE_DEFENSIVE_PACT
			oldSet = self.PrevAvailDefensivePactTrades
			TXT_KEY = "TXT_KEY_MORECIV4LERTS_DEFENSIVE_PACT"
			willTrade = self.getTrades(TradeUtil.getDefensivePactTradePartners(CyPlayer), iPlayer, tradeData, oldSet, TXT_KEY)
			if willTrade != oldSet:
				self.PrevAvailDefensivePactTrades = willTrade
		# Alliance
		if self.options.isShowPermanentAllianceTradeAlert():
			tradeData.ItemType = TradeableItems.TRADE_PERMANENT_ALLIANCE
			oldSet = self.PrevAvailPermanentAllianceTrades
			TXT_KEY = "TXT_KEY_MORECIV4LERTS_PERMANENT_ALLIANCE"
			willTrade = self.getTrades(TradeUtil.getPermanentAllianceTradePartners(CyPlayer), iPlayer, tradeData, oldSet, TXT_KEY)
			if willTrade != oldSet:
				self.PrevAvailPermanentAllianceTrades = willTrade
		# Vassalage
		if self.options.isShowVassalTradeAlert():
			tradeData.ItemType = TradeableItems.TRADE_VASSAL
			oldSet = self.PrevAvailVassalTrades
			TXT_KEY = "TXT_KEY_MORECIV4LERTS_VASSAL"
			willTrade = self.getTrades(TradeUtil.getVassalTradePartners(CyPlayer), iPlayer, tradeData, oldSet, TXT_KEY)
			if willTrade != oldSet:
				self.PrevAvailVassalTrades = willTrade
		# Capitulate
		if self.options.isShowSurrenderTradeAlert():
			tradeData.ItemType = TradeableItems.TRADE_SURRENDER
			oldSet = self.PrevAvailSurrenderTrades
			TXT_KEY = "TXT_KEY_MORECIV4LERTS_SURRENDER"
			willTrade = self.getTrades(TradeUtil.getCapitulationTradePartners(CyPlayer), iPlayer, tradeData, oldSet, TXT_KEY)
			if willTrade != oldSet:
				self.PrevAvailSurrenderTrades = willTrade
		# Peace Treaty
		if self.options.isShowPeaceTradeAlert():
			tradeData.ItemType = TradeableItems.TRADE_PEACE_TREATY
			tradeData.iData = GC.getDefineINT("PEACE_TREATY_LENGTH")
			oldSet = self.PrevAvailPeaceTrades
			TXT_KEY = "TXT_KEY_MORECIV4LERTS_PEACE_TREATY"
			willTrade = self.getTrades(TradeUtil.getPeaceTradePartners(CyPlayer), iPlayer, tradeData, oldSet, TXT_KEY)
			if willTrade != oldSet:
				self.PrevAvailPeaceTrades = willTrade