def startVoteCityEvent(self, iClaimant, tPlot): x, y = tPlot plot = gc.getMap().plot(x, y) if plot.isRevealed(utils.getHumanID(), False): plot.cameraLookAt() popup = CyPopupInfo() popup.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_PYTHON) popup.setOnClickedPythonCallback("applyVoteCityEvent") popup.setData1(iClaimant) popup.setData2(plot.getOwner()) sClaimant = gc.getPlayer(iClaimant).getCivilizationShortDescription(0) if plot.isCity(): popup.setText(localText.getText("TXT_KEY_CONGRESS_REQUEST_CITY", (sClaimant, gc.getPlayer(plot.getOwner()).getCivilizationAdjective(0), plot.getPlotCity().getName()))) elif plot.isOwned(): popup.setText(localText.getText("TXT_KEY_CONGRESS_REQUEST_SETTLE_OWNED", (sClaimant, gc.getPlayer(plot.getOwner()).getCivilizationAdjective(0), cnm.getFoundName(iClaimant, tPlot)))) else: popup.setText(localText.getText("TXT_KEY_CONGRESS_REQUEST_SETTLE", (sClaimant, cnm.getFoundName(iClaimant, tPlot)))) popup.addPythonButton(localText.getText("TXT_KEY_POPUP_VOTE_YES", ()), gc.getInterfaceArtInfo(gc.getInfoTypeForString("INTERFACE_EVENT_BULLET")).getPath()) popup.addPythonButton(localText.getText("TXT_KEY_POPUP_ABSTAIN", ()), gc.getInterfaceArtInfo(gc.getInfoTypeForString("INTERFACE_EVENT_BULLET")).getPath()) popup.addPythonButton(localText.getText("TXT_KEY_POPUP_VOTE_NO", ()), gc.getInterfaceArtInfo(gc.getInfoTypeForString("INTERFACE_EVENT_BULLET")).getPath()) popup.addPopup(utils.getHumanID())
def getCityName(argsList): iPlayer, x, y = argsList result = cnm.getFoundName(iPlayer, (x, y)) if result == -1: return "" else: return result
def getCityName(argsList): iPlayer, x, y = argsList result = cnm.getFoundName(iPlayer, (x,y)) if result == -1: return "" else: return result
def getCityName(argsList): iPlayer, x, y = argsList result = cnm.getFoundName(iPlayer, (x, y)) if result: #result=result.decode('utf-8').encode("utf-8") #utils.log2(result,'test.log') pass if result == -1: return "" else: return result
def startClaimCityEvent(self): popup = CyPopupInfo() popup.setText(localText.getText("TXT_KEY_CONGRESS_CLAIM_CITY", (self.sHostCityName,))) popup.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_PYTHON) popup.setOnClickedPythonCallback("applyClaimCityEvent") for tCity in self.dPossibleClaims[utils.getHumanID()]: x, y, iValue = tCity plot = gc.getMap().plot(x, y) if plot.isCity(): popup.addPythonButton(plot.getPlotCity().getName(), gc.getCivilizationInfo(gc.getPlayer(plot.getPlotCity().getOwner()).getCivilizationType()).getButton()) else: popup.addPythonButton(cnm.getFoundName(utils.getHumanID(), (x, y)), 'Art/Interface/Buttons/Actions/FoundCity.dds') popup.addPythonButton(localText.getText("TXT_KEY_CONGRESS_NO_REQUEST", ()), 'Art/Interface/Buttons/Actions/Cancel.dds') popup.addPopup(utils.getHumanID())
def applyVotes(self): dResults = {} for iClaimant in self.dCityClaims: x, y, iValue = self.dCityClaims[iClaimant] if self.dVotes[iClaimant] > 0: # only one player may receive a plot/city in case multiple civs claimed it (most votes) if (x, y) not in dResults: dResults[(x, y)] = (iClaimant, self.dVotes[iClaimant]) else: iOtherClaimant, iVotes = dResults[(x, y)] if self.dVotes[iClaimant] > iVotes: dResults[(x, y)] = (iClaimant, self.dVotes[iClaimant]) for tAssignedPlot in dResults: x, y = tAssignedPlot iClaimant, iVotes = dResults[tAssignedPlot] plot = gc.getMap().plot(x, y) bCanRefuse = (plot.getOwner() == utils.getHumanID() and utils.getHumanID() not in self.dVotedFor[iClaimant] and not (self.bPostWar and utils.getHumanID() in self.lLosers)) if plot.isCity(): self.lAssignments.append((plot.getPlotCity().getName(), plot.getOwner(), iClaimant)) if bCanRefuse: self.lHumanAssignments.append((iClaimant, (x, y))) else: self.assignCity(iClaimant, plot.getOwner(), (x, y)) else: self.lColonies.append((cnm.getFoundName(iClaimant, (x, y)), plot.getOwner(), iClaimant)) if bCanRefuse: self.lHumanAssignments.append((iClaimant, (x, y))) else: self.foundColony(iClaimant, (x, y)) # allow human player to refuse in case his cities were claimed -> last decision leads to result event if len(self.lHumanAssignments) > 0: iClaimant, tPlot = self.lHumanAssignments[0] self.startRefusalEvent(iClaimant, tPlot) else: # without human cities affected, finish the congress immediately self.finishCongress()
def selectClaims(self, iPlayer): pPlayer = gc.getPlayer(iPlayer) iGameTurn = gc.getGame().getGameTurn() iNumPlayersAlive = gc.getGame().countCivPlayersAlive() lPlots = [] for iLoopPlayer in range(iNumTotalPlayers+1): if iLoopPlayer == iPlayer: continue if not gc.getPlayer(iLoopPlayer).isAlive(): continue # after a war: winners can only claim from losers and vice versa if self.bPostWar: if iPlayer in self.lWinners and iLoopPlayer not in self.lLosers: continue if iPlayer in self.lLosers and iLoopPlayer not in self.lWinners: continue # AI civs: cannot claim cities from friends if utils.getHumanID() != iPlayer and pPlayer.AI_getAttitude(iLoopPlayer) >= AttitudeTypes.ATTITUDE_FRIENDLY: continue # recently born if iGameTurn < getTurnForYear(tBirth[iLoopPlayer]) + utils.getTurns(20): continue # recently resurrected if iGameTurn < pPlayer.getLatestRebellionTurn() + utils.getTurns(20): continue # recently reborn if utils.isReborn(iLoopPlayer) and tRebirth != -1 and iGameTurn < getTurnForYear(tRebirth[iLoopPlayer]) + utils.getTurns(20): continue # exclude master/vassal relationships if gc.getTeam(iPlayer).isVassal(iLoopPlayer): continue if gc.getTeam(iLoopPlayer).isVassal(iPlayer): continue # cannot demand cities while at war if gc.getTeam(iPlayer).isAtWar(iLoopPlayer): continue for city in utils.getCityList(iLoopPlayer): x, y = city.getX(), city.getY() plot = gc.getMap().plot(x, y) iSettlerMapValue = plot.getSettlerValue(iPlayer) iValue = 0 if not plot.isRevealed(iPlayer, False): continue if city.isCapital(): continue # after a war: losers can only claim previously owned cities if self.bPostWar and iPlayer in self.lLosers: if city.getGameTurnPlayerLost(iPlayer) < gc.getGame().getGameTurn() - utils.getTurns(25): continue # city culture iTotalCulture = city.countTotalCultureTimes100() if iTotalCulture > 0: iCultureRatio = city.getCultureTimes100(iPlayer) * 100 / iTotalCulture if iCultureRatio > 20: if iLoopPlayer != iAmerica: iValue += iCultureRatio / 20 # ever owned if city.isEverOwned(iPlayer): iValue += 3 # own core if plot.isCore(iPlayer): iValue += 5 # colonies if iPlayer in lCivGroups[0]: if iLoopPlayer >= iNumPlayers or (iLoopPlayer not in lCivGroups[0] and utils.getStabilityLevel(iLoopPlayer) < iStabilityShaky) or (iLoopPlayer in lCivGroups[0] and utils.getHumanID() != iLoopPlayer and pPlayer.AI_getAttitude(iLoopPlayer) < AttitudeTypes.ATTITUDE_PLEASED): if plot.getRegionID() not in lEurope and plot.getRegionID() not in lMiddleEast: if iSettlerMapValue > 90: iValue += max(1, iSettlerMapValue / 100) # weaker and collapsing empires if iLoopPlayer < iNumPlayers: if gc.getGame().getPlayerRank(iLoopPlayer) > iNumPlayersAlive / 2 and gc.getGame().getPlayerRank(iLoopPlayer) < iNumPlayersAlive / 2: if data.players[iLoopPlayer].iStabilityLevel == iStabilityCollapsing: if iSettlerMapValue >= 90: iValue += max(1, iSettlerMapValue / 100) # close to own empire closestCity = gc.getMap().findCity(x, y, iPlayer, TeamTypes.NO_TEAM, False, False, TeamTypes.NO_TEAM, DirectionTypes.NO_DIRECTION, city) iDistance = stepDistance(x, y, closestCity.getX(), closestCity.getY()) if iDistance < 5: iValue += 5-iDistance # after war: war targets if self.bPostWar: iValue += plot.getWarValue(iPlayer) / 2 # AI America receives extra value for claims in the west if iPlayer == iAmerica and utils.getHumanID() != iPlayer: if utils.isPlotInArea((x, y), tAmericanClaimsTL, tAmericanClaimsBR): iValue += 5 # help AI Australia gain Australia if iPlayer == iAustralia and utils.getHumanID() != iPlayer: if utils.isPlotInArea((x, y), tAustraliaTL, tAustraliaBR): iValue += 5 # help Canada gain Labrador and Newfoundland if iPlayer == iCanada: if utils.isPlotInArea((x, y), tNewfoundlandTL, tNewfoundlandBR): iValue += 5 if iValue > 0: lPlots.append((x, y, iValue)) # extra spots for colonial civs -> will be settled # not available after wars because these congresses are supposed to reassign cities if iPlayer in lCivGroups[0] and not self.bPostWar: for (x, y) in utils.getWorldPlotsList(): if utils.getHumanID() == iPlayer and not plot.isRevealed(iPlayer, False): continue plot = gc.getMap().plot(x, y) if not plot.isCity() and not plot.isPeak() and not plot.isWater() and pPlayer.canFound(x, y): if plot.getRegionID() in [rWestAfrica, rSouthAfrica, rEthiopia] or (plot.getRegionID() == [rAustralia, rOceania] and gc.getGame().getGameTurn() < tBirth[iAustralia]) or (plot.getRegionID() == rSouthAfrica and gc.getGame().getGameTurn() < tBirth[iBoers]): iSettlerMapValue = plot.getSettlerValue(iPlayer) if iSettlerMapValue >= 90 and cnm.getFoundName(iPlayer, (x, y)): closestCity = gc.getMap().findCity(x, y, PlayerTypes.NO_PLAYER, TeamTypes.NO_TEAM, False, False, TeamTypes.NO_TEAM, DirectionTypes.NO_DIRECTION, CyCity()) if stepDistance(x, y, closestCity.getX(), closestCity.getY()) > 2: lPlots.append((x, y, max(1, iSettlerMapValue / 100 - 1))) lPlots = utils.getSortedList(lPlots, lambda x: x[2] + gc.getGame().getSorenRandNum(3, 'Randomize city value'), True) return lPlots[:10]
def selectClaims(self, iPlayer): pPlayer = gc.getPlayer(iPlayer) iGameTurn = gc.getGame().getGameTurn() iNumPlayersAlive = gc.getGame().countCivPlayersAlive() lPlots = [] for iLoopPlayer in range(iNumTotalPlayers+1): if iLoopPlayer == iPlayer: continue if not gc.getPlayer(iLoopPlayer).isAlive(): continue # after a war: winners can only claim from losers and vice versa if self.bPostWar: if iPlayer in self.lWinners and iLoopPlayer not in self.lLosers: continue if iPlayer in self.lLosers and iLoopPlayer not in self.lWinners: continue # AI civs: cannot claim cities from friends if utils.getHumanID() != iPlayer and pPlayer.AI_getAttitude(iLoopPlayer) >= AttitudeTypes.ATTITUDE_FRIENDLY: continue # recently born if iGameTurn < getTurnForYear(tBirth[iLoopPlayer]) + utils.getTurns(20): continue # recently resurrected if iGameTurn < pPlayer.getLatestRebellionTurn() + utils.getTurns(20): continue # recently reborn if utils.isReborn(iLoopPlayer) and tRebirth != -1 and iGameTurn < getTurnForYear(tRebirth[iLoopPlayer]) + utils.getTurns(20): continue # exclude master/vassal relationships if gc.getTeam(iPlayer).isVassal(iLoopPlayer): continue if gc.getTeam(iLoopPlayer).isVassal(iPlayer): continue # cannot demand cities while at war if gc.getTeam(iPlayer).isAtWar(iLoopPlayer): continue for city in utils.getCityList(iLoopPlayer): x, y = city.getX(), city.getY() plot = gc.getMap().plot(x, y) iSettlerMapValue = plot.getSettlerValue(iPlayer) iValue = 0 if not plot.isRevealed(iPlayer, False): continue if city.isCapital(): continue # after a war: losers can only claim previously owned cities if self.bPostWar and iPlayer in self.lLosers: if city.getGameTurnPlayerLost(iPlayer) < gc.getGame().getGameTurn() - utils.getTurns(25): continue # city culture iTotalCulture = city.countTotalCultureTimes100() if iTotalCulture > 0: iCultureRatio = city.getCultureTimes100(iPlayer) * 100 / iTotalCulture if iCultureRatio > 20: if iLoopPlayer != iAmerica: iValue += iCultureRatio / 20 # ever owned if city.isEverOwned(iPlayer): iValue += 3 # own core if plot.isCore(iPlayer): iValue += 5 # colonies if iPlayer in lCivGroups[0]: if iLoopPlayer >= iNumPlayers or (iLoopPlayer not in lCivGroups[0] and utils.getStabilityLevel(iLoopPlayer) < iStabilityShaky) or (iLoopPlayer in lCivGroups[0] and utils.getHumanID() != iLoopPlayer and pPlayer.AI_getAttitude(iLoopPlayer) < AttitudeTypes.ATTITUDE_PLEASED): if plot.getRegionID() not in lEurope and plot.getRegionID() not in lMiddleEast: if iSettlerMapValue > 90: iValue += max(1, iSettlerMapValue / 100) # weaker and collapsing empires if iLoopPlayer < iNumPlayers: if gc.getGame().getPlayerRank(iLoopPlayer) > iNumPlayersAlive / 2 and gc.getGame().getPlayerRank(iLoopPlayer) < iNumPlayersAlive / 2: if data.players[iLoopPlayer].iStabilityLevel == iStabilityCollapsing: if iSettlerMapValue >= 90: iValue += max(1, iSettlerMapValue / 100) # close to own empire closestCity = gc.getMap().findCity(x, y, iPlayer, TeamTypes.NO_TEAM, False, False, TeamTypes.NO_TEAM, DirectionTypes.NO_DIRECTION, city) iDistance = stepDistance(x, y, closestCity.getX(), closestCity.getY()) if iDistance < 5: iValue += 5-iDistance # after war: war targets if self.bPostWar: iValue += plot.getWarValue(iPlayer) / 2 # AI America receives extra value for claims in the west if iPlayer == iAmerica and utils.getHumanID() != iPlayer: if utils.isPlotInArea((x, y), tAmericanClaimsTL, tAmericanClaimsBR): iValue += 5 # help Canada gain Labrador and Newfoundland if iPlayer == iCanada: if utils.isPlotInArea((x, y), tNewfoundlandTL, tNewfoundlandBR): iValue += 5 if iValue > 0: lPlots.append((x, y, iValue)) # extra spots for colonial civs -> will be settled # not available after wars because these congresses are supposed to reassign cities if iPlayer in lCivGroups[0] and not self.bPostWar: for (x, y) in utils.getWorldPlotsList(): if utils.getHumanID() == iPlayer and not plot.isRevealed(iPlayer, False): continue plot = gc.getMap().plot(x, y) if not plot.isCity() and not plot.isPeak() and not plot.isWater() and pPlayer.canFound(x, y): if plot.getRegionID() in [rWestAfrica, rSouthAfrica, rEthiopia, rAustralia, rOceania]: iSettlerMapValue = plot.getSettlerValue(iPlayer) if iSettlerMapValue >= 90 and cnm.getFoundName(iPlayer, (x, y)): closestCity = gc.getMap().findCity(x, y, PlayerTypes.NO_PLAYER, TeamTypes.NO_TEAM, False, False, TeamTypes.NO_TEAM, DirectionTypes.NO_DIRECTION, CyCity()) if stepDistance(x, y, closestCity.getX(), closestCity.getY()) > 2: lPlots.append((x, y, max(1, iSettlerMapValue / 100 - 1))) lPlots = utils.getSortedList(lPlots, lambda x: x[2] + gc.getGame().getSorenRandNum(3, 'Randomize city value'), True) return lPlots[:10]