def applyMap(self): "after reading setup the map" self.gameDesc.apply() # recreate map worldSizeType = CvUtil.findInfoTypeNum(self.mapDesc.worldSize) climateType = CvUtil.findInfoTypeNum(self.mapDesc.climate) seaLevelType = CvUtil.findInfoTypeNum(self.mapDesc.seaLevel) CyMap().rebuild(self.mapDesc.iGridW, self.mapDesc.iGridH, self.mapDesc.iTopLatitude, self.mapDesc.iBottomLatitude, self.mapDesc.bWrapX, self.mapDesc.bWrapY, WorldSizeTypes(worldSizeType), ClimateTypes(climateType), SeaLevelTypes(seaLevelType), 0, None) for pDesc in self.plotDesc: pDesc.preApply() # set plot type / terrain type CyMap().recalculateAreas() for pDesc in self.plotDesc: pDesc.apply() for pDesc in self.signDesc: pDesc.apply() if (self.mapDesc.bRandomizeResources != "false"): for iPlotLoop in range(CyMap().numPlots()): pPlot = CyMap().plotByIndex(iPlotLoop) pPlot.setBonusType(BonusTypes.NO_BONUS) CyMapGenerator().addBonuses() if (self.mapDesc.bRandomizeGoodies != "false"): CyMapGenerator().eraseGoodies() CyMapGenerator().addGoodies() return 0 # ok
def getPlayerData(): "after reading a save file, return player data as a tuple, terminated by -1" t = () for i in range(gc.getMAX_CIV_PLAYERS()): leaderType = CvUtil.findInfoTypeNum(gc.getLeaderHeadInfo, gc.getNumLeaderHeadInfos(), WBDesc.playersDesc[i].leaderType) civType = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), WBDesc.playersDesc[i].civType) handicapType = CvUtil.findInfoTypeNum(gc.getHandicapInfo, gc.getNumHandicapInfos(), WBDesc.playersDesc[i].handicap) color = CvUtil.findInfoTypeNum(gc.getPlayerColorInfo, gc.getNumPlayerColorInfos(), WBDesc.playersDesc[i].color) artStyle = gc.getTypesEnum(WBDesc.playersDesc[i].artStyle) t = t + (civType, ) t = t + (WBDesc.playersDesc[i].isPlayableCiv, ) t = t + (leaderType, ) t = t + (handicapType, ) t = t + (WBDesc.playersDesc[i].team, ) t = t + (color, ) t = t + (artStyle, ) t = t + (WBDesc.playersDesc[i].isMinorNationCiv, ) t = t + (WBDesc.playersDesc[i].isWhiteFlag, ) return t
def init(): BugUtil.debug("Caveman2Cosmos INIT.") ## MILITIA PROMOTIONS CODE ## #~ global gaiSettlerWorkerList, giMilInstCivic, giVolArmyCivic global giMilInstCivic, giVolArmyCivic, gaiSettlerWorkerCombatList #~ gaiSettlerWorkerList = [gc.getInfoTypeForString("UNITCLASS_GATHERER"), gc.getInfoTypeForString("UNITCLASS_TRIBE"), #~ gc.getInfoTypeForString("UNITCLASS_WORKER"), gc.getInfoTypeForString("UNITCLASS_SETTLER"), #~ gc.getInfoTypeForString("UNIT_INDIAN_FAST_WORKER"), gc.getInfoTypeForString("UNITCLASS_WORKBUFFALO"), #~ gc.getInfoTypeForString("UNITCLASS_WORKMULE"), gc.getInfoTypeForString("UNITCLASS_WORKELEPHANT"), #~ gc.getInfoTypeForString("UNIT_WORKER_INDUSTRIAL"), gc.getInfoTypeForString("UNIT_WORKER_MODERN"), #~ gc.getInfoTypeForString("UNIT_CLONES"), gc.getInfoTypeForString("UNIT_WORKER_ANDROID"), #~ gc.getInfoTypeForString("UNIT_WORKBOAT"), gc.getInfoTypeForString("UNIT_CLASSIC_WORKBOAT"), #~ gc.getInfoTypeForString("UNIT_MIDDLE_WORKBOAT"), gc.getInfoTypeForString("UNIT_MODERN_WORKBOAT"), #~ gc.getInfoTypeForString("UNIT_CONSTRUCT_SHIP") #~ ] gaiSettlerWorkerCombatList = [ gc.getInfoTypeForString("UNITCOMBAT_SETTLER"), gc.getInfoTypeForString("UNITCOMBAT_WORKER"), gc.getInfoTypeForString("UNITCOMBAT_SEA_WORKER") ] giMilInstCivic = CvUtil.findInfoTypeNum(gc.getCivicInfo, gc.getNumCivicInfos(), 'CIVIC_MILITARY_TRADITION') giVolArmyCivic = CvUtil.findInfoTypeNum(gc.getCivicInfo, gc.getNumCivicInfos(), 'CIVIC_VOLUNTEER_ARMY')
def apply(self): "after reading, this will actually apply the data" plot = CyMap().plot(self.iX, self.iY) plot.setNOfRiver(self.isNOfRiver, self.riverWEDirection) plot.setWOfRiver(self.isWOfRiver, self.riverNSDirection) plot.setStartingPlot(self.isStartingPlot) if (self.europeType): plot.setEurope(CvUtil.findInfoTypeNum(self.europeType)) if (self.bonusType): bonusTypeNum = CvUtil.findInfoTypeNum(self.bonusType) plot.setBonusType(bonusTypeNum) if (self.improvementType): improvementTypeNum = CvUtil.findInfoTypeNum(self.improvementType) plot.setImprovementType(improvementTypeNum) if (self.featureType): featureTypeNum = CvUtil.findInfoTypeNum(self.featureType) plot.setFeatureType(featureTypeNum, self.featureVariety) if (self.routeType): routeTypeNum = CvUtil.findInfoTypeNum(self.routeType) plot.setRouteType(routeTypeNum) if (self.szLandmark != ""): CyEngine().addLandmark(CyMap().plot(self.iX, self.iY), "%s" %(self.szLandmark)) if (self.szScriptData != "NONE"): plot.setScriptData(self.szScriptData)
def getGameData(): "after reading a save file, return game/player data as a tuple" t=() gameTurn = WBDesc.gameDesc.gameTurn maxTurns = WBDesc.gameDesc.maxTurns maxCityElimination = WBDesc.gameDesc.maxCityElimination numAdvancedStartPoints = WBDesc.gameDesc.numAdvancedStartPoints targetScore = WBDesc.gameDesc.targetScore #print "### %r" % (gc.getWorldInfo) #print "### %r" % (gc.getNumWorldInfos()) #print "### %r" % (WBDesc.mapDesc.worldSize) worldSizeType = CvUtil.findInfoTypeNum(gc.getWorldInfo, gc.getNumWorldInfos(), WBDesc.mapDesc.worldSize) climateType = CvUtil.findInfoTypeNum(gc.getClimateInfo, gc.getNumClimateInfos(), WBDesc.mapDesc.climate) seaLevelType = CvUtil.findInfoTypeNum(gc.getSeaLevelInfo, gc.getNumSeaLevelInfos(), WBDesc.mapDesc.seaLevel) eraType = CvUtil.findInfoTypeNum(gc.getEraInfo, gc.getNumEraInfos(), WBDesc.gameDesc.eraType) gameSpeedType = CvUtil.findInfoTypeNum(gc.getGameSpeedInfo, gc.getNumGameSpeedInfos(), WBDesc.gameDesc.speedType) calendarType = CvUtil.findInfoTypeNum(gc.getCalendarInfo, gc.getNumCalendarInfos(), WBDesc.gameDesc.calendarType) t=t+(worldSizeType,) t=t+(climateType,) t=t+(seaLevelType,) t=t+(eraType,) t=t+(gameSpeedType,) t=t+(calendarType,) t=t+(len(WBDesc.gameDesc.options),) for i in range(len(WBDesc.gameDesc.options)): option = CvUtil.findInfoTypeNum(gc.getGameOptionInfo, gc.getNumGameOptionInfos(), WBDesc.gameDesc.options[i]) t=t+(option,) t=t+(len(WBDesc.gameDesc.mpOptions),) for i in range(len(WBDesc.gameDesc.mpOptions)): mpOption = CvUtil.findInfoTypeNum(gc.getMPOptionInfo, gc.getNumMPOptionInfos(), WBDesc.gameDesc.mpOptions[i]) t=t+(mpOption,) t=t+(len(WBDesc.gameDesc.forceControls),) for i in range(len(WBDesc.gameDesc.forceControls)): forceControl = CvUtil.findInfoTypeNum(gc.getForceControlInfo, gc.getNumForceControlInfos(), WBDesc.gameDesc.forceControls[i]) t=t+(forceControl,) t=t+(len(WBDesc.gameDesc.victories),) for i in range(len(WBDesc.gameDesc.victories)): victory = CvUtil.findInfoTypeNum(gc.getVictoryInfo, gc.getNumVictoryInfos(), WBDesc.gameDesc.victories[i]) t=t+(victory,) t=t+(gameTurn,) t=t+(maxTurns,) t=t+(maxCityElimination,) t=t+(numAdvancedStartPoints,) t=t+(targetScore,) return t
def doNewHuman(self, iNewPlayerID, iOldPlayerID): # This still not working properly. Boo.... Close though. CyInterface().addImmediateMessage("doNewHuman", "") self.bLaunchedChangeHumanPopup = False gc.getPlayer(iOldPlayerID).setNewPlayerAlive(True) iSettler = CvUtil.findInfoTypeNum(gc.getUnitInfo, gc.getNumUnitInfos(), 'UNIT_SETTLER') gc.getPlayer(iOldPlayerID).initUnit(iSettler, 0, 0, UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_SOUTH) gc.getPlayer(iOldPlayerID).setFoundedFirstCity(False) gc.getPlayer(iOldPlayerID).setIsHuman(True) toKillPlayer = gc.getPlayer(iOldPlayerID) CyInterface().addImmediateMessage("calling changeHuman", "") RevUtils.changeHuman(iNewPlayerID, iOldPlayerID) if (toKillPlayer.getNumCities() == 0): # Kills off the lion in the ice field CvUtil.pyPrint("Killing off player %d" % (toKillPlayer.getID())) toKillPlayer.killUnits() toKillPlayer.setIsHuman(False) #success = game.changePlayer( toKillPlayer.getID(), toKillPlayer.getCivilizationType(), toKillPlayer.getLeaderType(), -1, False, False ) toKillPlayer.setNewPlayerAlive(False) toKillPlayer.setFoundedFirstCity(True)
def onCityRazed(self, argsList): 'City Razed' city, iPlayer = argsList iOwner = city.findHighestCulture() #Rhye - start bugfix #owner = PyPlayer(city.getOwner()) owner = PyPlayer(city.getPreviousOwner()) #Rhye - end bugfix razor = PyPlayer(iPlayer) CvUtil.pyPrint('Player %d Civilization %s City %s was razed by Player %d' %(owner.getID(), owner.getCivilizationName(), city.getName(), razor.getID())) # Partisans! if city.getPopulation > 1 and iOwner != -1 and iPlayer != -1: owner = gc.getPlayer(iOwner) if not owner.isBarbarian() and owner.getNumCities() > 0: if gc.getTeam(owner.getTeam()).isAtWar(gc.getPlayer(iPlayer).getTeam()): if gc.getNumEventTriggerInfos() > 0: # prevents mods that don't have events from getting an error iEvent = CvUtil.findInfoTypeNum(gc.getEventTriggerInfo, gc.getNumEventTriggerInfos(),'EVENTTRIGGER_PARTISANS') if iEvent != -1 and gc.getGame().isEventActive(iEvent) and owner.getEventTriggerWeight(iEvent) < 0: triggerData = owner.initTriggeredData(iEvent, true, -1, city.getX(), city.getY(), iPlayer, city.getID(), -1, -1, -1, -1) CvUtil.pyPrint("City Razed Event: %s" %(city.getName(),))
def addRiverFeature(pPlot, riverDesc=RiverDesc(), bSetTerrain=True): iTerrainRiver = CvUtil.findInfoTypeNum( gc.getFeatureInfo, gc.getNumFeatureInfos(), 'TERRAIN_RIVER') iFeatureRiver = CvUtil.findInfoTypeNum( gc.getFeatureInfo, gc.getNumFeatureInfos(), 'FEATURE_RIVER') if bSetTerrain: pPlot.setTerrainType(iTerrainRiver, True, True) iVariety = riverDesc.getVariety() # Variant 0 is empty.nif, pPlot.setFeatureType(-1, 0) pPlot.setFeatureType(iFeatureRiver, iVariety) updateRiverFeature(pPlot, riverDesc, False)
def preApply(self): "apply plot and terrain type" plot = CyMap().plot(self.iX, self.iY) if (self.plotType != PlotTypes.NO_PLOT): plot.setPlotType(self.plotType, False, False) if (self.terrainType): terrainTypeNum = CvUtil.findInfoTypeNum(self.terrainType) plot.setTerrainType(terrainTypeNum, False, False)
def checkPlayer(self): pPlayer = gc.getActivePlayer() # advc.127: Unit check added to avoid multiple popups. Note however: Normally, CvPlayer::verifyAlive automatically transfers human control to a different player when the active player is defeated. The popup here remains only as a fallback. Also added not-human check - should obviously only affect AI Auto Play. Don't know if and how that was working previously. if not pPlayer.isAlive( ) and pPlayer.getNumUnits() <= 0 and not pPlayer.isHuman(): popup = PyPopup.PyPopup( 7052, contextType=EventContextTypes.EVENTCONTEXT_ALL) popup.setHeaderString( localText.getText("TXT_KEY_AIAUTOPLAY_PICK_CIV", ())) popup.setBodyString( localText.getText("TXT_KEY_AIAUTOPLAY_CIV_DIED", ())) popup.addSeparator() popup.createPythonPullDown( localText.getText("TXT_KEY_AIAUTOPLAY_TAKE_CONTROL_CIV", ()), 1) for i in range(0, gc.getMAX_CIV_PLAYERS()): player = PyPlayer(i) if (not player.isNone() and not i == pPlayer.getID()): if (player.isAlive()): popup.addPullDownString( localText.getText("TXT_KEY_AIAUTOPLAY_OF_THE", ()) % (player.getName(), player.getCivilizationName()), i, 1) activePlayerIdx = gc.getActivePlayer().getID() popup.popup.setSelectedPulldownID(activePlayerIdx, 1) popup.addSeparator() popup.addButton(localText.getText("TXT_KEY_AIAUTOPLAY_NONE", ())) CvUtil.pyPrint('Launching pick human popup') popup.launch() #gc.getActivePlayer().setNewPlayerAlive( True ) iSettler = CvUtil.findInfoTypeNum(gc.getUnitInfo, gc.getNumUnitInfos(), 'UNIT_SETTLER') gc.getActivePlayer().initUnit(iSettler, 0, 0, UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_SOUTH) #gc.getActivePlayer().setFoundedFirstCity( False ) gc.getActivePlayer().setIsHuman(True) CvUtil.pyPrint('CDP: Setting autoplay to 0') # advc.127 (comment): Re-enables humans game.setAIAutoPlay(0) if (not pPlayer.isHuman()): CvUtil.pyPrint('Returning human player to control of %s' % (pPlayer.getCivilizationDescription(0))) game.setActivePlayer(pPlayer.getID(), False) pPlayer.setIsHuman(True)
def AI_unitUpdate(argsList): pUnit = argsList[0] iOwner = pUnit.getOwner() iInquisitor = CvUtil.findInfoTypeNum(gc.getUnitInfo, gc.getNumUnitInfos(), "UNIT_INQUISITOR") if not gc.getPlayer(iOwner).isHuman(): if pUnit.getUnitType() == iInquisitor: doInquisitorCore_AI(pUnit) return True return False
def apply(self): "after reading, this will actually apply the data" player = getPlayer(self.owner) if (player): CvUtil.pyAssert(self.plotX>=0 and self.plotY>=0, "invalid plot coords") unitTypeNum = CvUtil.findInfoTypeNum(self.unitType) if (unitTypeNum < 0): unit = None else: if (self.szUnitAIType != "NO_UNITAI"): eUnitAI = CvUtil.findInfoTypeNum(self.szUnitAIType) else: eUnitAI = UnitAITypes.NO_UNITAI unit = player.initUnit(unitTypeNum, ProfessionTypes.NO_PROFESSION, self.plotX, self.plotY, UnitAITypes(eUnitAI), self.facingDirection, self.iYieldStored) if (unit): #profession if(self.profession != None): unit.setProfession(CvUtil.findInfoTypeNum(self.profession)) #leader unit type if(self.leaderUnitType != None): leaderUnitTypeNum = CvUtil.findInfoTypeNum(self.leaderUnitType) if leaderUnitTypeNum >= 0: unit.setLeaderUnitType(leaderUnitTypeNum); #other properties if self.damage != 0: unit.setDamage(self.damage) if self.level != -1: unit.setLevel(self.level) if self.experience != -1: unit.setExperience(self.experience, -1) for promo in self.promotionType: promotionTypeNum = CvUtil.findInfoTypeNum(promo) unit.setHasRealPromotion(promotionTypeNum, true) if self.isSleep: unit.getGroup().setActivityType(ActivityTypes.ACTIVITY_SLEEP) if self.szScriptData != "NONE": unit.setScriptData(self.szScriptData)
def checkPlayer(self): pPlayer = gc.getActivePlayer() if (not pPlayer.isAlive()): popup = PyPopup.PyPopup( 7052, contextType=EventContextTypes.EVENTCONTEXT_ALL) popup.setHeaderString( localText.getText("TXT_KEY_AIAUTOPLAY_PICK_CIV", ())) popup.setBodyString( localText.getText("TXT_KEY_AIAUTOPLAY_CIV_DIED", ())) popup.addSeparator() popup.createPythonPullDown( localText.getText("TXT_KEY_AIAUTOPLAY_TAKE_CONTROL_CIV", ()), 1) for i in range(0, gc.getMAX_CIV_PLAYERS()): player = PyPlayer(i) if (not player.isNone() and not i == pPlayer.getID()): if (player.isAlive()): popup.addPullDownString( localText.getText("TXT_KEY_AIAUTOPLAY_OF_THE", ()) % (player.getName(), player.getCivilizationName()), i, 1) activePlayerIdx = gc.getActivePlayer().getID() popup.popup.setSelectedPulldownID(activePlayerIdx, 1) popup.addSeparator() popup.addButton(localText.getText("TXT_KEY_AIAUTOPLAY_NONE", ())) CvUtil.pyPrint('Launching pick human popup') popup.launch() #gc.getActivePlayer().setNewPlayerAlive( True ) iSettler = CvUtil.findInfoTypeNum(gc.getUnitInfo, gc.getNumUnitInfos(), 'UNIT_SETTLER') gc.getActivePlayer().initUnit(iSettler, 0, 0, UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_SOUTH) #gc.getActivePlayer().setFoundedFirstCity( False ) gc.getActivePlayer().setIsHuman(True) CvUtil.pyPrint('CDP: Setting autoplay to 0') game.setAIAutoPlay(0) if (not pPlayer.isHuman()): CvUtil.pyPrint('Returning human player to control of %s' % (pPlayer.getCivilizationDescription(0))) game.setActivePlayer(pPlayer.getID(), False) pPlayer.setIsHuman(True)
def apply(self): "after reading, this will actually apply the data" player = getPlayer(self.owner) if (player): self.city = player.initCity(self.plotX, self.plotY) if (self.name != None): self.city.setName(self.name, False) if (self.culture): self.city.setCulture(self.city.getOwner(), self.culture, True) for bldg in (self.bldgType): bldgTypeNum = CvUtil.findInfoTypeNum(bldg) self.city.setHasRealBuilding(bldgTypeNum, true) for unit in (self.citizenList): unitTypeNum = CvUtil.findInfoTypeNum(unit) pUnit = player.initUnit(unitTypeNum, ProfessionTypes.NO_PROFESSION, self.plotX, self.plotY, UnitAITypes.NO_UNITAI, DirectionTypes.NO_DIRECTION, 0) self.city.addPopulationUnit(pUnit, ProfessionTypes.NO_PROFESSION) if (self.population): self.city.setPopulation(self.population) for iPlayerLoop in range(gc.getMAX_CIV_PLAYERS()): iPlayerCulture = self.aiPlayerCulture[iPlayerLoop] if (iPlayerCulture > 0): self.city.setCulture(iPlayerLoop, iPlayerCulture, true) unitTypeNum = CvUtil.findInfoTypeNum(self.productionUnit) buildingTypeNum = CvUtil.findInfoTypeNum(self.productionBuilding) if (unitTypeNum != UnitTypes.NO_UNIT): self.city.pushOrder(OrderTypes.ORDER_TRAIN, unitTypeNum, -1, False, False, False, True) elif (buildingTypeNum != BuildingTypes.NO_BUILDING): self.city.pushOrder(OrderTypes.ORDER_CONSTRUCT, buildingTypeNum, -1, False, False, False, True) if (self.szScriptData != "NONE"): self.city.setScriptData(self.szScriptData)
def onSetPlayerAlive(argsList): iPlayerID = argsList[0] bNewValue = argsList[1] pPlayer = gc.getPlayer(iPlayerID) pTeam = gc.getTeam(pPlayer.getTeam()) if (bNewValue): # Extra check required for exiting to main menu, starting new game if (gc.getGame().isOption(GameOptionTypes.GAMEOPTION_START_AS_MINORS)): if (not pPlayer.isMinorCiv() and not gc.getTeam(pPlayer.getTeam()).isOpenBordersTrading()): if (LOG_DEBUG): CvUtil.pyPrint( "SAM - forcing new civ to minor before writing") pTeam.setIsMinorCiv(True, False) if (game.isFinalInitialized() and game.getGameTurn() < 1 and pPlayer.isMinorCiv()): if (pPlayer.isAlive() and not pPlayer.isBarbarian()): if (pPlayer.getNumUnits() > 0 and pPlayer.getNumMilitaryUnits() < 2 and not game.isInAdvancedStart()): warriorClass = CvUtil.findInfoTypeNum( gc.getUnitClassInfo, gc.getNumUnitClassInfos(), RevDefs.sXMLWarrior) iWarrior = gc.getCivilizationInfo( pPlayer.getCivilizationType( )).getCivilizationUnits(warriorClass) startPlot = pPlayer.getStartingPlot() if (LOG_DEBUG): CvUtil.pyPrint("SAM - Civ has %d units" % (pPlayer.getNumUnits())) if (not startPlot is None and not startPlot.isNone()): pPlayer.initUnit(iWarrior, startPlot.getX(), startPlot.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_SOUTH) if (LOG_DEBUG): CvUtil.pyPrint( "SAM - Giving new civ extra warrior for defense" )
def AI_chooseProduction(argsList): pCity = argsList[0] ## Inquisitor Production AI ## iOwner = pCity.getOwner() pPlayer = gc.getPlayer(pCity.getOwner()) iInquisitor = CvUtil.findInfoTypeNum(gc.getUnitInfo, gc.getNumUnitInfos(), "UNIT_INQUISITOR") iStateReligion = gc.getPlayer(iOwner).getStateReligion() #Checks religion percents lReligions = [] bestReligionPercent = 0 iStateLevel = 0 for iReligionLoop in range(gc.getNumReligionInfos()): if (gc.getGame().getReligionGameTurnFounded(iReligionLoop) > 0): iReligionLevel = gc.getGame().calculateReligionPercent( iReligionLoop) if iStateReligion >= 0: iStateLevel = gc.getGame().calculateReligionPercent( iStateReligion) if iReligionLevel > iStateLevel: lReligions.append(iReligionLoop) if (iReligionLoop != iStateReligion): religionPercent = gc.getGame().calculateReligionPercent( iReligionLoop) if (religionPercent > bestReligionPercent): bestReligionPercent = religionPercent if iStateReligion >= 0 or bestReligionPercent >= 60: if pCity.canTrain(iInquisitor, 0, 0): lUnits = PyPlayer(pPlayer.getID()).getUnitList() for iUnit in range(len(lUnits)): # if there are any Inquisitors, don't Build one if pPlayer.getUnit( lUnits[iUnit].getID()).getUnitType() == iInquisitor: return False if getRandomNumber(2) == 0: gc.getMap().plot(pCity.getX(), pCity.getY()).getPlotCity().pushOrder( OrderTypes.ORDER_TRAIN, iInquisitor, -1, False, False, False, True) #BugUtil.alert("AI deciding to produce inquisitor by player %s", iOwner) return True return False
def onCityRazed(self, argsList): 'City Razed' city, iPlayer = argsList iOwner = city.findHighestCulture() # Partisans! # f1rpo (bugfix by SmokeyTheBear): Missing parentheses after getPopulation if city.getPopulation() > 1 and iOwner != -1 and iPlayer != -1: owner = gc.getPlayer(iOwner) if not owner.isBarbarian() and owner.getNumCities() > 0: if gc.getTeam(owner.getTeam()).isAtWar(gc.getPlayer(iPlayer).getTeam()): if gc.getNumEventTriggerInfos() > 0: # prevents mods that don't have events from getting an error iEvent = CvUtil.findInfoTypeNum(gc.getEventTriggerInfo, gc.getNumEventTriggerInfos(),'EVENTTRIGGER_PARTISANS') if iEvent != -1 and gc.getGame().isEventActive(iEvent) and owner.getEventTriggerWeight(iEvent) < 0: triggerData = owner.initTriggeredData(iEvent, true, -1, city.getX(), city.getY(), iPlayer, city.getID(), -1, -1, -1, -1) CvUtil.pyPrint("City Razed Event: %s" %(city.getName(),))
def showUnits(): for iPlayer in range(0, int(gc.getMAX_PLAYERS())): pPlayer = gc.getPlayer(iPlayer) if (pPlayer.isAlive() and not pPlayer.isBarbarian()): kCivilization = gc.getCivilizationInfo( pPlayer.getCivilizationType()) for iUnitClass in range(gc.getNumUnitClassInfos()): eLoopUnit = kCivilization.getCivilizationUnits(iUnitClass) if (eLoopUnit != -1): x = iUnitClass % 10 + 1 + iPlayer * 12 y = (iUnitClass / 10) + 5 gc.getMap().plot(x, y).setTerrainType( CvUtil.findInfoTypeNum(gc.getTerrainInfo, gc.getNumTerrainInfos(), "TERRAIN_OCEAN"), 1, 1) pPlayer.initUnit(eLoopUnit, x, y, UnitAITypes.UNITAI_UNKNOWN, DirectionTypes.NO_DIRECTION)
def showUnitClass(UnitClass): iUnitClass = gc.getInfoTypeForString(UnitClass) for iPlayer in range(0, int(gc.getMAX_PLAYERS())): if (gc.getPlayer(iPlayer).isAlive() and not gc.getPlayer(iPlayer).isBarbarian()): eUnit = gc.getCivilizationInfo( gc.getPlayer(iPlayer).getCivilizationType() ).getCivilizationUnits(iUnitClass) if (eUnit != -1): x = eUnit % 10 + 1 + iPlayer y = (eUnit / 10) + 5 gc.getMap().plot(x, y).setTerrainType( CvUtil.findInfoTypeNum(gc.getTerrainInfo, gc.getNumTerrainInfos(), "TERRAIN_OCEAN"), 1, 1) gc.getPlayer(iPlayer).initUnit(eUnit, x, y, UnitAITypes.UNITAI_UNKNOWN, DirectionTypes.NO_DIRECTION)
def onChangeWar(self, argsList): 'War Status Changes' bIsWar = argsList[0] iTeam = argsList[1] iRivalTeam = argsList[2] if not (bIsWar): # TAC Baby Boom Event Start pPlayer = gc.getPlayer(gc.getTeam(iTeam).getLeaderID()) pRivalPlayer = gc.getPlayer(gc.getTeam(iRivalTeam).getLeaderID()) if gc.getNumEventTriggerInfos() > 0: # prevents mods that don't have events from getting an error iEvent = CvUtil.findInfoTypeNum('EVENTTRIGGER_BABY_BOOM') if iEvent != -1 and gc.getGame().isEventActive(iEvent): pPlayer.trigger(iEvent) pRivalPlayer.trigger(iEvent) # TAC Baby Boom Event Ende if (not self.__LOG_WARPEACE): return if (bIsWar): strStatus = "declared war" else: strStatus = "declared peace" CvUtil.pyPrint('Team %d has %s on Team %d' %(iTeam, strStatus, iRivalTeam))
def isCathedral(info, iReligion): """ Returns True if <info> is the Cathedral for <iReligion>. """ iNum = GC.getNumSpecialBuildingInfos() if not isWorldWonderClass(info.getBuildingClassType()) and (info.getSpecialBuildingType() == CvUtil.findInfoTypeNum(GC.getSpecialBuildingInfo, iNum, 'SPECIALBUILDING_CATHEDRAL') or info.getSpecialBuildingType() == CvUtil.findInfoTypeNum(GC.getSpecialBuildingInfo, iNum, 'SPECIALBUILDING_PANTHEON')): return info.getCommerceModifier(CommerceTypes.COMMERCE_CULTURE) > 0 return False
def addPlanetCustomization(self, pSystem, pPlanet, szWidgetName, bShowSelection = true): screen = CyGInterfaceScreen( "CvPlanetInfoScreen", CvScreenEnums.PLANET_INFO_SCREEN ) # Disabled by Doomsday Missile? if (pPlanet.isDisabled()): szFilename = ArtFileMgr.getFeatureArtInfo("ART_DEF_FEATURE_SOLAR_SYSTEM").getFeatureDummyNodeName(0, "FEATURE_MODEL_TAG_SUN_ORANGE") screen.addToModelGraphicGFC(szWidgetName, szFilename) else: iType = pPlanet.getPlanetType() # Atmospheric effect if (iType == iPlanetTypeGreen or iType == iPlanetTypeOrange or iType == iPlanetTypeWhite): szPlanetArt = aszPlanetGlowSizes[pPlanet.getPlanetSize()] szFilename = ArtFileMgr.getFeatureArtInfo("ART_DEF_FEATURE_SOLAR_SYSTEM").getFeatureDummyNodeName(0, szPlanetArt) screen.addToModelGraphicGFC(szWidgetName, szFilename) # Clouds effect if (iType == iPlanetTypeGreen): szPlanetArt = aszPlanetCloudsSizes[pPlanet.getPlanetSize()] szFilename = ArtFileMgr.getFeatureArtInfo("ART_DEF_FEATURE_SOLAR_SYSTEM").getFeatureDummyNodeName(0, szPlanetArt) screen.addToModelGraphicGFC(szWidgetName, szFilename) # Rings effect if (pPlanet.isRings()): szPlanetArt = aszPlanetRingsSizes[pPlanet.getPlanetSize()] szFilename = ArtFileMgr.getFeatureArtInfo("ART_DEF_FEATURE_SOLAR_SYSTEM").getFeatureDummyNodeName(0, szPlanetArt) screen.addToModelGraphicGFC(szWidgetName, szFilename) # Moon if (pPlanet.isMoon()): szPlanetArt = aszPlanetMoonSizes[pPlanet.getPlanetSize()] szFilename = ArtFileMgr.getFeatureArtInfo("ART_DEF_FEATURE_SOLAR_SYSTEM").getFeatureDummyNodeName(0, szPlanetArt) screen.addToModelGraphicGFC(szWidgetName, szFilename) # Population Lights effect if (pPlanet.getPopulation() == 1): szPlanetArt = aszPlanetPopulation1Sizes[pPlanet.getPlanetSize()] szFilename = ArtFileMgr.getFeatureArtInfo("ART_DEF_FEATURE_SOLAR_SYSTEM").getFeatureDummyNodeName(0, szPlanetArt) screen.addToModelGraphicGFC(szWidgetName, szFilename) elif (pPlanet.getPopulation() == 2): szPlanetArt = aszPlanetPopulation2Sizes[pPlanet.getPlanetSize()] szFilename = ArtFileMgr.getFeatureArtInfo("ART_DEF_FEATURE_SOLAR_SYSTEM").getFeatureDummyNodeName(0, szPlanetArt) screen.addToModelGraphicGFC(szWidgetName, szFilename) elif (pPlanet.getPopulation() >= 3): szPlanetArt = aszPlanetPopulation3Sizes[pPlanet.getPlanetSize()] szFilename = ArtFileMgr.getFeatureArtInfo("ART_DEF_FEATURE_SOLAR_SYSTEM").getFeatureDummyNodeName(0, szPlanetArt) screen.addToModelGraphicGFC(szWidgetName, szFilename) # Mag-Lev Network iMagLevNetwork = CvUtil.findInfoTypeNum(gc.getBuildingInfo,gc.getNumBuildingInfos(),'BUILDING_MAG_LEV_NETWORK') if (pPlanet.isHasBuilding(iMagLevNetwork)): szPlanetArt = aszPlanetMagLevNetworkSizes[pPlanet.getPlanetSize()] szFilename = ArtFileMgr.getFeatureArtInfo("ART_DEF_FEATURE_SOLAR_SYSTEM").getFeatureDummyNodeName(0, szPlanetArt) screen.addToModelGraphicGFC(szWidgetName, szFilename) # Commercial Satellites or PBS (UB for Brotherhood) iCommercialSatellites = CvUtil.findInfoTypeNum(gc.getBuildingInfo,gc.getNumBuildingInfos(),'BUILDING_COMMERCIAL_SATELLITES') iPBS = CvUtil.findInfoTypeNum(gc.getBuildingInfo,gc.getNumBuildingInfos(),'BUILDING_PBS') if (pPlanet.isHasBuilding(iCommercialSatellites) or pPlanet.isHasBuilding(iPBS)): szPlanetArt = aszPlanetCommercialSatellitesSizes[pPlanet.getPlanetSize()] szFilename = ArtFileMgr.getFeatureArtInfo("ART_DEF_FEATURE_SOLAR_SYSTEM").getFeatureDummyNodeName(0, szPlanetArt) screen.addToModelGraphicGFC(szWidgetName, szFilename)
def setup(): global RebelTypeList RebelTypeList = list() for idx in range(0, gc.getNumCivilizationInfos()): RebelTypeList.append(list()) try: iArabia = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_ARABIA') iAssyria = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_ASSYRIA') iAztec = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_AZTEC') iBabylon = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_BABYLON') iByzantium = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_BYZANTIUM') iCarthage = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_CARTHAGE') iCelt = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_CELT') iChina = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_CHINA') iEgypt = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_EGYPT') iEngland = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_ENGLAND') iEthiopia = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_ETHIOPIA') iFrance = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_FRANCE') iGermany = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_GERMANY') iGreece = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_GREECE') iHittites = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_HITTITES') iHolyRoman = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_HOLY_ROMAN') iInca = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_INCA') iIndia = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_INDIA') iIroquois = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_IROQUOIS') iJapan = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_JAPAN') iKhmer = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_KHMER') iKorea = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_KOREA') iMali = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_MALI') iMaya = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_MAYA') iMongol = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_MONGOL') iNativeAmerica = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_NATIVE_AMERICA') iNetherlands = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_NETHERLANDS') iOttoman = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_OTTOMAN') iPersia = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_PERSIA') iPortugal = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_PORTUGAL') iRome = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_ROME') iRussia = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_RUSSIA') iSiam = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_SIAM') iSpain = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_SPAIN') iSumeria = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_SUMERIA') iUnitedStates = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_UNITED_STATES') iViking = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_VIKING') iZulu = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_ZULU') except: print "Error! Civ not found. -RebelTypes.py" # Format is: # RebelTypeList[iHomeland] = [iRebel1, iRebel2, iRebel3] try: RebelTypeList[iArabia] = [ iEgypt, iPersia, iOttoman, iBabylon, iSumeria, iAssyria ] RebelTypeList[iAssyria] = [ iPersia, iBabylon, iSumeria, iHittites, iEgypt, iArabia ] RebelTypeList[iAztec] = [ iInca, iSpain, iNativeAmerica, iMaya, iIroquois ] RebelTypeList[iBabylon] = [ iSumeria, iPersia, iGreece, iEgypt, iArabia, iAssyria, iHittites ] RebelTypeList[iByzantium] = [ iGreece, iRome, iOttoman, iHolyRoman, iHittites ] RebelTypeList[iCarthage] = [iRome, iGreece, iMali, iSpain] RebelTypeList[iCelt] = [iFrance, iEngland, iGermany, iSpain] RebelTypeList[iChina] = [ iKorea, iMongol, iIndia, iJapan, iKhmer, iSiam ] RebelTypeList[iEgypt] = [ iBabylon, iArabia, iPersia, iGreece, iEthiopia, iAssyria, iHittites ] RebelTypeList[iEngland] = [ iUnitedStates, iIndia, iZulu, iNetherlands, iCelt ] RebelTypeList[iEthiopia] = [iEgypt, iMali, iZulu, iArabia] RebelTypeList[iFrance] = [iGermany, iCelt, iEngland, iMali, iHolyRoman] RebelTypeList[iGermany] = [ iFrance, iRussia, iViking, iHolyRoman, iNetherlands ] RebelTypeList[iGreece] = [ iRome, iPersia, iCarthage, iOttoman, iHittites ] RebelTypeList[iHittites] = [ iAssyria, iEgypt, iPersia, iOttoman, iByzantium, iGreece, iBabylon ] RebelTypeList[iHolyRoman] = [iGermany, iFrance, iSpain, iByzantium] RebelTypeList[iInca] = [ iAztec, iSpain, iMaya, iNativeAmerica, iIroquois ] RebelTypeList[iIndia] = [iPersia, iSiam, iChina, iEngland, iKhmer] RebelTypeList[iIroquois] = [ iNativeAmerica, iAztec, iMaya, iInca, iUnitedStates ] RebelTypeList[iJapan] = [iKorea, iChina, iMongol, iKhmer, iSiam] RebelTypeList[iKhmer] = [iSiam, iIndia, iChina, iMongol, iJapan] RebelTypeList[iKorea] = [iJapan, iChina, iMongol, iKhmer] RebelTypeList[iMali] = [iCarthage, iEgypt, iFrance, iZulu, iEthiopia] RebelTypeList[iMaya] = [ iAztec, iInca, iSpain, iNativeAmerica, iIroquois ] RebelTypeList[iMongol] = [iChina, iRussia, iPersia, iKorea, iSiam] RebelTypeList[iNativeAmerica] = [ iIroquois, iAztec, iMaya, iUnitedStates, iInca ] RebelTypeList[iNetherlands] = [ iPortugal, iGermany, iEngland, iUnitedStates ] RebelTypeList[iOttoman] = [ iPersia, iGreece, iGermany, iArabia, iByzantium, iHittites ] RebelTypeList[iPersia] = [ iOttoman, iIndia, iMongol, iGreece, iSumeria, iBabylon, iAssyria, iHittites ] RebelTypeList[iPortugal] = [iSpain, iFrance, iNetherlands] RebelTypeList[iRome] = [iGreece, iCarthage, iCelt, iEgypt, iByzantium] RebelTypeList[iRussia] = [iViking, iGermany, iMongol, iPersia] RebelTypeList[iSiam] = [iKhmer, iIndia, iChina, iMongol, iJapan] RebelTypeList[iSpain] = [iPortugal, iArabia, iAztec, iInca, iHolyRoman] RebelTypeList[iSumeria] = [ iBabylon, iOttoman, iGreece, iPersia, iAssyria ] RebelTypeList[iUnitedStates] = [ iEngland, iAztec, iNativeAmerica, iIroquois ] RebelTypeList[iViking] = [iRussia, iGermany, iEngland, iUnitedStates] RebelTypeList[iZulu] = [iMali, iArabia, iEgypt, iEthiopia] except: print "Error! Rebel types not found, no short lists available"
def onProjectBuilt(self, argsList): 'Project Completed' pCity, iProjectType = argsList game = gc.getGame() ## Spanish Inquisition Start ## iPlayer = pCity.getOwner() pPlayer = gc.getPlayer(iPlayer) pPID = pPlayer.getID() pTID = pPlayer.getTeam() iX = pCity.getX() iY = pCity.getY() if iProjectType == gc.getInfoTypeForString( 'PROJECT_SPANISH_INQUISITION'): for pyCity in PyPlayer(iPlayer).getCityList(): pCity2 = pyCity.GetCy() StateBelief = pPlayer.getStateReligion() for iTarget in range(gc.getNumReligionInfos()): ## NOTE: To allow it to remove Holy Cities remove "and pCity2.isHolyCityByType(iTarget) == False)" from the following line: ## if (StateBelief != iTarget and pCity2.isHasReligion(iTarget) and pCity2.isHolyCityByType(iTarget) == False): pCity2.setHasReligion(iTarget, False, True, True) ## NOTE: To prevent it from removing buildings comment out or delete the following lines: ## for i in range(gc.getNumBuildingInfos()): if gc.getBuildingInfo( i).getPrereqReligion() == iTarget: pCity2.setNumRealBuilding(i, 0) CyInterface().addMessage( pPID, false, 15, CyTranslator().getText("TXT_KEY_SPANISH_INQUISITION_PYTHON", ()), '', 0, 'Art/Inquisition.dds', ColorTypes(44), iX, iY, True, True) if iProjectType == gc.getInfoTypeForString( 'PROJECT_SPANISH_INQUISITION'): pPlayer = gc.getPlayer(pCity.plot().getOwner()) for iLoopPlayer in range(gc.getMAX_CIV_PLAYERS()): loopPlayer = gc.getPlayer(iLoopPlayer) if loopPlayer.isAlive() and loopPlayer.getStateReligion( ) == pPlayer.getStateReligion(): loopPlayer.AI_changeAttitudeExtra(iPlayer, +3) pPlayer.AI_changeAttitudeExtra(iLoopPlayer, +3) if loopPlayer.isAlive() and loopPlayer.getStateReligion( ) != pPlayer.getStateReligion(): loopPlayer.AI_changeAttitudeExtra(iPlayer, -1) pPlayer.AI_changeAttitudeExtra(iLoopPlayer, -1) DeathEffect = CvUtil.findInfoTypeNum(gc.getEffectInfo, gc.getNumEffectInfos(), "EFFECT_GODS_PLAGUE") CyEngine().triggerEffect( DeathEffect, gc.getMap().plot(pCity.getX() + 0, pCity.getY() + 0).getPoint()) ## Spanish Inquisition End ## if ((not gc.getGame().isNetworkMultiPlayer()) and (pCity.getOwner() == gc.getGame().getActivePlayer())): popupInfo = CyPopupInfo() popupInfo.setButtonPopupType( ButtonPopupTypes.BUTTONPOPUP_PYTHON_SCREEN) popupInfo.setData1(iProjectType) popupInfo.setData2(pCity.getID()) popupInfo.setData3(2) popupInfo.setText(u"showWonderMovie") popupInfo.addPopup(pCity.getOwner())
def setup(): #print "Setting up rebel type list" global RebelTypeList RebelTypeList = list() for idx in range(0, gc.getNumCivilizationInfos()): RebelTypeList.append(list()) try: iAmurite = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_AMURITES') iBalseraph = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_BALSERAPHS') iBannor = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_BANNOR') iClan = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_CLAN_OF_EMBERS') iDoviello = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_DOVIELLO') iElohim = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_ELOHIM') iGrigori = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_GRIGORI') iHippus = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_HIPPUS') iIllians = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_ILLIANS') iInfernal = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_INFERNAL') iKhazad = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_KHAZAD') iKuriotates = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_KURIOTATES') iLanun = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_LANUN') iLjosalfar = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_LJOSALFAR') iLuchuirp = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_LUCHUIRP') iMalakim = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_MALAKIM') iMercurians = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_MERCURIANS') iSheaim = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_SHEAIM') iSidar = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_SIDAR') iSvartalfar = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_SVARTALFAR') iCalabim = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'CIVILIZATION_CALABIM') # Format is: # RebelTypeList[iHomeland] = [iRebel1, iRebel2, iRebel3] # No limit on length of rebel list, can be zero RebelTypeList[iAmurite] = [iAmurite] RebelTypeList[iBalseraph] = [iBalseraph] RebelTypeList[iBannor] = [iBannor] RebelTypeList[iClan] = [iClan] RebelTypeList[iDoviello] = [iDoviello] RebelTypeList[iElohim] = [iElohim] RebelTypeList[iGrigori] = [iGrigori] RebelTypeList[iHippus] = [iHippus] RebelTypeList[iIllians] = [iIllians] RebelTypeList[iInfernal] = [iInfernal] RebelTypeList[iKhazad] = [iKhazad] RebelTypeList[iKuriotates] = [iKuriotates] RebelTypeList[iLanun] = [iLanun] RebelTypeList[iLjosalfar] = [iLjosalfar] RebelTypeList[iLuchuirp] = [iLuchuirp] RebelTypeList[iMalakim] = [iMalakim] RebelTypeList[iMercurians] = [iMercurians] RebelTypeList[iSheaim] = [iSheaim] RebelTypeList[iSidar] = [iSidar] RebelTypeList[iSvartalfar] = [iSvartalfar] #print "Completed rebel type list" # lfgr # minor rebel leaders global MinorLeaders MinorLeaders = list() for idx in range(0, gc.getNumCivilizationInfos()): MinorLeaders.append(list()) try: iAnaganios = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'LEADER_ANAGANTIOS') iAverax = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'LEADER_AVERAX') iBraeden = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'LEADER_BRAEDEN') iDumannios = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'LEADER_DUMANNIOS') iGosea = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'LEADER_GOSEA') iHafgan = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'LEADER_HAFGAN') iKane = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'LEADER_KANE') iKoun = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'LEADER_KOUN') iMahon = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'LEADER_MAHON') iMalchavic = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'LEADER_MALCHAVIC') iOstanes = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'LEADER_OSTANES') iRiuros = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'LEADER_RIUROS') iShekinah = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'LEADER_SHEKINAH') iUldanor = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'LEADER_ULDANOR') iTethira = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'LEADER_TETHIRA') iThessalonica = CvUtil.findInfoTypeNum( gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'LEADER_THESSALONICA') iVolanna = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'LEADER_VOLANNA') iMelisandre = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'LEADER_MELISANDRE') iFuria = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'LEADER_FURIA') iWeevil = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'LEADER_WEEVIL') iTya = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'LEADER_TYA') iSallos = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'LEADER_SALLOS') iVolanna = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'LEADER_VOLANNA') iRivanna = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'LEADER_RIVANNA') iDuin = CvUtil.findInfoTypeNum(gc.getCivilizationInfo, gc.getNumCivilizationInfos(), 'LEADER_DUIN') MinorLeaders[iAmurite] = [iTya] MinorLeaders[iBannor] = [iTethira] MinorLeaders[iBalseraph] = [iMelisandre, iFuria, iWeevil] MinorLeaders[iClan] = [iHafgan] MinorLeaders[iCalabim] = [iMahon] MinorLeaders[iDoviello] = [iVolanna, iDuin] MinorLeaders[iElohim] = [iThessalonica] MinorLeaders[iGrigori] = [iKoun] MinorLeaders[iHippus] = [iOstanes, iUldanor] MinorLeaders[iIllians] = [ iDumannios, iRiuros, iAnaganios, iBraeden ] MinorLeaders[iInfernal] = [iSallos] MinorLeaders[iMalakim] = [iKane] MinorLeaders[iSheaim] = [iAverax, iGosea, iMalchavic] MinorLeaders[iSidar] = [iShekinah] MinorLeaders[iSvartalfar] = [iVolanna, iRivanna] except: print "Error! Minor leaders not found, no short lists available" # religious rebels global ReligiousRebels ReligiousRebels = list() for idx in range(0, gc.getNumReligionInfos()): ReligiousRebels.append(list()) global BlockedReligiousRebels BlockedReligiousRebels = list() for idx in range(0, gc.getNumReligionInfos()): BlockedReligiousRebels.append(list()) try: iFellowship = CvUtil.findInfoTypeNum( gc.getReligionInfo, gc.getNumReligionInfos(), 'RELIGION_FELLOWSHIP_OF_LEAVES') iOrder = CvUtil.findInfoTypeNum(gc.getReligionInfo, gc.getNumReligionInfos(), 'RELIGION_THE_ORDER') iOverlords = CvUtil.findInfoTypeNum(gc.getReligionInfo, gc.getNumReligionInfos(), 'RELIGION_OCTOPUS_OVERLORDS') iKilmorph = CvUtil.findInfoTypeNum(gc.getReligionInfo, gc.getNumReligionInfos(), 'RELIGION_RUNES_OF_KILMORPH') iVeil = CvUtil.findInfoTypeNum(gc.getReligionInfo, gc.getNumReligionInfos(), 'RELIGION_THE_ASHEN_VEIL') iEmpyrean = CvUtil.findInfoTypeNum(gc.getReligionInfo, gc.getNumReligionInfos(), 'RELIGION_THE_EMPYREAN') iEsus = CvUtil.findInfoTypeNum(gc.getReligionInfo, gc.getNumReligionInfos(), 'RELIGION_COUNCIL_OF_ESUS') ReligiousRebels[iFellowship] = [iLjosalfar, iSvartalfar] ReligiousRebels[iOrder] = [iBannor, iElohim] ReligiousRebels[iOverlords] = [iLanun] ReligiousRebels[iKilmorph] = [iKhazad, iLuchuirp] ReligiousRebels[iVeil] = [iSheaim] ReligiousRebels[iEmpyrean] = [iMalakim, iElohim] ReligiousRebels[iEsus] = [iSidar, iSvartalfar] BlockedReligiousRebels[iFellowship] = [iGrigori, iIllians] BlockedReligiousRebels[iOrder] = [iGrigori, iIllians] BlockedReligiousRebels[iOverlords] = [iGrigori, iIllians] BlockedReligiousRebels[iKilmorph] = [iGrigori, iIllians] BlockedReligiousRebels[iVeil] = [iGrigori, iIllians] BlockedReligiousRebels[iEmpyrean] = [iGrigori, iIllians] BlockedReligiousRebels[iEsus] = [iGrigori, iIllians] except: print "Error! Religions not found, no short lists available" # end lfgr except: print "Error! Rebel types not found, no short lists available"
def isTemple(info, iReligion): """ Returns True if <info> is the Temple for <iReligion>. """ if not isWorldWonderClass(info.getBuildingClassType()) and info.getSpecialBuildingType() == CvUtil.findInfoTypeNum(GC.getSpecialBuildingInfo,GC.getNumSpecialBuildingInfos(),'SPECIALBUILDING_TEMPLE'): return info.getStateReligionHappiness() > 0 return False
def getSpawnablePlots(iPlotX, iPlotY, pSpawnPlayer, bLand=True, bIncludePlot=True, bIncludeCities=False, bIncludeForts=False, bSameArea=True, iRange=2, iSpawnPlotOwner=-1, bCheckForEnemy=True, bAtWarPlots=True, bOpenBordersPlots=True): spawnablePlots = list() gameMap = GC.getMap() basePlot = gameMap.plot(iPlotX, iPlotY) iFort = CvUtil.findInfoTypeNum(GC.getImprovementInfo, GC.getNumImprovementInfos(), RevDefs.sXMLFort) try: iBaseArea = basePlot.area().getID() except AttributeError: if (bSameArea): print "WARNING: Passed an arealess plot!" iBaseArea = -1 bSameArea = False iBasePlotOwner = basePlot.getOwner() iNumPlotsChecked = 0 for [radius, pPlot] in plotGenerator(basePlot, iRange): if (not bIncludePlot and pPlot.getX() == iPlotX and pPlot.getY() == iPlotY): continue if (pPlot.isImpassable()): continue iNumPlotsChecked += 1 if (bLand and pPlot.isWater()): continue if (not bLand and not pPlot.isWater()): continue if (not bIncludeCities and pPlot.isCity()): continue if (bSameArea and not iBaseArea == pPlot.area().getID()): continue if (bCheckForEnemy): if (len( getEnemyUnits(pPlot.getX(), pPlot.getY(), pSpawnPlayer.getID())) > 0): continue if (not bIncludeForts and pPlot.getImprovementType() == iFort): continue # When iSpawnPlotOwner >= 0, plot owner must be either iSpawnPlotOwner, iBasePlotOwner, or no one if (iSpawnPlotOwner < 0 or pPlot.getOwner() == iSpawnPlotOwner or pPlot.getOwner() == iBasePlotOwner or pPlot.getOwner() == PlayerTypes.NO_PLAYER): spawnablePlots.append([pPlot.getX(), pPlot.getY()]) elif (bAtWarPlots and GC.getTeam(pSpawnPlayer.getTeam()).isAtWar( GC.getPlayer(pPlot.getOwner()).getTeam())): spawnablePlots.append([pPlot.getX(), pPlot.getY()]) elif (bOpenBordersPlots and GC.getTeam(pSpawnPlayer.getTeam()).isOpenBorders( GC.getPlayer(pPlot.getOwner()).getTeam())): spawnablePlots.append([pPlot.getX(), pPlot.getY()]) return spawnablePlots
def updateRevolutionIndices( argsList ) : owner,playerType,pCity,bConquest,bTrade = argsList newOwnerID = pCity.getOwner() newOwner = GC.getPlayer(newOwnerID) newOwnerCiv = newOwner.getCivilizationType() oldOwnerID = pCity.getPreviousOwner() orgOwnerID = pCity.getOriginalOwner() if( newOwner.isNPC() ) : return newRevIdx = 400 changeRevIdx = -40 if( bConquest ) : # Occupied cities also rack up rev points each turn newRevIdx += pCity.getRevolutionIndex()/4 newRevIdx = min( [newRevIdx, 600] ) if( pCity.plot().calculateCulturePercent( newOwnerID ) > 90 ) : changeRevIdx -= 75 newRevIdx -= 100 elif( pCity.plot().calculateCulturePercent( newOwnerID ) > 40 ) : changeRevIdx -= 35 newRevIdx -= 60 elif( pCity.plot().calculateCulturePercent( newOwnerID ) > 20 ) : changeRevIdx -= 30 elif( bTrade ) : newRevIdx += pCity.getRevolutionIndex()/3 newRevIdx = min( [newRevIdx, 650] ) if( pCity.plot().calculateCulturePercent( newOwnerID ) > 90 ) : newRevIdx -= 50 else : # Probably cultural conversion newRevIdx -= 100 if( pCity.plot().calculateCulturePercent( newOwnerID ) > 50 ) : changeRevIdx -= 25 if( newOwner.isRebel() and newOwnerCiv == RevData.getCityVal(pCity, 'RevolutionCiv') ) : changeRevIdx -= 50 newRevIdx -= 200 elif( newOwnerID == pCity.getOriginalOwner() ) : changeRevIdx -= 25 newRevIdx -= 100 if( pCity.getHighestPopulation() < 6 ) : changeRevIdx += 20 newRevIdx -= 50 changeRevIdx = int(math.floor( cityAcquiredModifier*changeRevIdx + .5 )) print " Revolt - Acquisition of %s by %s reduces rev indices by %d" %(pCity.getName(), newOwner.getCivilizationDescription(0), changeRevIdx) for listCity in PyPlayer( newOwnerID ).getCityList() : pListCity = listCity.GetCy() if not pListCity.getID() == pCity.getID(): pListCity.changeRevolutionIndex( changeRevIdx ) revIdxHist = RevData.getCityVal(pListCity,'RevIdxHistory') revIdxHist['Events'][0] += changeRevIdx RevData.updateCityVal( pListCity, 'RevIdxHistory', revIdxHist ) print " Revolt - New rev idx for %s is %d" %(pCity.getName(), newRevIdx) pCity.setRevolutionIndex( newRevIdx ) pCity.setRevIndexAverage( newRevIdx ) pCity.setRevolutionCounter( acquiredTurns ) pCity.setReinforcementCounter( 0 ) RevData.updateCityVal( pCity, 'RevIdxHistory', RevDefs.initRevIdxHistory() ) if( newOwner.isRebel() ) : if( newOwner.getNumCities() > 1 and RevData.revObjectGetVal( newOwner, 'CapitalName' ) == CvUtil.convertToStr(pCity.getName()) ) : # Rebel has captured their instigator city, make this their capital print " Revolt - Rebel %s have captured their instigator city, %s! Moving capital." %(newOwner.getCivilizationDescription(0), pCity.getName()) if newOwner.isHuman(): # TODO: support this with a popup question pass else: capitalClass = CvUtil.findInfoTypeNum(GC.getBuildingClassInfo,GC.getNumBuildingClassInfos(),RevDefs.sXMLPalace) eCapitalBuilding = GC.getCivilizationInfo(newOwner.getCivilizationType()).getCivilizationBuildings(capitalClass) oldCapital = newOwner.getCapitalCity() oldCapital.setNumRealBuilding(eCapitalBuilding, 0) pCity.setNumRealBuilding(eCapitalBuilding, 1) # Ripple effects through other rebellious cities for listCity in PyPlayer( oldOwnerID ).getCityList() : pListCity = listCity.GetCy() reinfCount = pListCity.getReinforcementCounter() if reinfCount > 2 and RevData.getCityVal(pListCity, 'RevolutionCiv') == newOwner.getCivilizationType(): if reinfCount < 5: reinfCount = 2 else: reinfCount = reinfCount-2 print " Revolt - Accelerating reinforcement in " + pListCity.getName() # Setting below two will turn off reinforcement if reinfCount < 2: reinfCount = 2 pListCity.setReinforcementCounter(reinfCount)
def getHandoverUnitTypes(city, pPlayer, compPlayer=None): warriorClass = CvUtil.findInfoTypeNum(GC.getUnitClassInfo, GC.getNumUnitClassInfos(), RevDefs.sXMLWarrior) iWarrior = GC.getCivilizationInfo( pPlayer.getCivilizationType()).getCivilizationUnits(warriorClass) workerClass = CvUtil.findInfoTypeNum(GC.getUnitClassInfo, GC.getNumUnitClassInfos(), RevDefs.sXMLWorker) iWorker = GC.getCivilizationInfo( pPlayer.getCivilizationType()).getCivilizationUnits(workerClass) iBestDefender = UnitTypes.NO_UNIT iCounter = UnitTypes.NO_UNIT iAttack = UnitTypes.NO_UNIT if compPlayer: compPy = PyPlayer(compPlayer.getID()) for unitClass in xrange(GC.getNumUnitClassInfos()): cityUnitType = GC.getCivilizationInfo( city.getCivilizationType()).getCivilizationUnits(unitClass) if GC.getUnitClassInfo(unitClass).getMaxGlobalInstances( ) > 0 or GC.getUnitClassInfo(unitClass).getMaxPlayerInstances( ) > 0 or GC.getUnitClassInfo(unitClass).getMaxTeamInstances() > 0: continue if pPlayer.isNPC(): playerUnitType = cityUnitType else: playerUnitType = GC.getCivilizationInfo( pPlayer.getCivilizationType()).getCivilizationUnits(unitClass) if (playerUnitType < 0 and cityUnitType < 0): print "WARNING: Civ types %d and %d have no unit of class type %d" % ( city.getCivilizationType(), pPlayer.getCivilizationType(), unitClass) continue if (playerUnitType < 0): playerUnitType = cityUnitType elif (cityUnitType < 0): cityUnitType = playerUnitType if (GC.getUnitInfo(cityUnitType).getDomainType() == DomainTypes.DOMAIN_LAND and city.canTrain(cityUnitType, False, False, False, False)): unitInfo = GC.getUnitInfo(playerUnitType) if (not unitInfo.getPrereqAndTech() == TechTypes.NO_TECH): unitTechInfo = GC.getTechInfo(unitInfo.getPrereqAndTech()) # Defender (Archer,Longbow) if unitInfo.getDefaultUnitAIType( ) == UnitAITypes.UNITAI_CITY_DEFENSE: if iBestDefender == UnitTypes.NO_UNIT or unitInfo.getCombat( ) >= GC.getUnitInfo(iBestDefender).getCombat(): if compPlayer == None: iBestDefender = playerUnitType else: compUnitType = GC.getCivilizationInfo( compPlayer.getCivilizationType( )).getCivilizationUnits(unitClass) if compPy.getUnitsOfType(compUnitType): iBestDefender = playerUnitType elif unitTechInfo.getEra( ) < compPlayer.getCurrentEra(): iBestDefender = playerUnitType # Counter (Axemen,Phalanx) if (unitInfo.getUnitAIType(UnitAITypes.UNITAI_COUNTER)): if ((iCounter == UnitTypes.NO_UNIT) or unitInfo.getCombat() >= GC.getUnitInfo(iCounter).getCombat()): if (compPlayer == None): iCounter = playerUnitType else: compUnitType = GC.getCivilizationInfo( compPlayer.getCivilizationType( )).getCivilizationUnits(unitClass) if len(compPy.getUnitsOfType(compUnitType)) > 1: iCounter = playerUnitType # Assault units if (unitInfo.getUnitAIType(UnitAITypes.UNITAI_ATTACK)): if ((iAttack == UnitTypes.NO_UNIT) or unitInfo.getCombat() > GC.getUnitInfo(iAttack).getCombat()): if (compPlayer == None): iAttack = playerUnitType else: compUnitID = GC.getCivilizationInfo( compPlayer.getCivilizationType( )).getCivilizationUnits(unitClass) if (len(compPy.getUnitsOfType(compUnitID)) > 1): iAttack = playerUnitType if (iBestDefender == UnitTypes.NO_UNIT): if (not iCounter == UnitTypes.NO_UNIT): iBestDefender = iCounter else: iBestDefender = iWarrior if (iCounter == UnitTypes.NO_UNIT): iCounter = iBestDefender if (iAttack == UnitTypes.NO_UNIT): iAttack = iCounter return [iWorker, iBestDefender, iCounter, iAttack]
def isMonastery(info, iReligion): """ Returns True if <info> is the Monastery for <iReligion>. """ if not isWorldWonderClass(info.getBuildingClassType()) and info.getSpecialBuildingType() == CvUtil.findInfoTypeNum(GC.getSpecialBuildingInfo, GC.getNumSpecialBuildingInfos(), 'SPECIALBUILDING_MONASTERY'): return info.getCommerceModifier(CommerceTypes.COMMERCE_RESEARCH) > 0 return False