def setAnimals(eAnimal,plots): pBarbPlayer = gc.getPlayer(gc.getBARBARIAN_PLAYER()) eUnitClass = gc.getUnitInfo(eAnimal).getUnitClassType() iBarbUnits = pBarbPlayer.getUnitClassCount(eUnitClass) # 0 = WORLDSIZE_DUEL # 1 = WORLDSIZE_TINY # 2 = WORLDSIZE_SMALL # 3 = WORLDSIZE_STANDARD # 4 = WORLDSIZE_LARGE # 5 = WORLDSIZE_HUGE iMapSize = gc.getMap().getWorldSize() iAnimals = iMapSize + 1 - iBarbUnits # Ausnahmen if eAnimal == gc.getInfoTypeForString("UNIT_UR"): iAnimals = 2 - iBarbUnits # maximal 2 if iAnimals <= 0: return # Tiere setzen i = 0 while i < iAnimals: iRand = CvUtil.myRandom(len(plots), "spawnAnimalOnPlot") CvUtil.spawnUnit(eAnimal, plots[iRand], pBarbPlayer) #plots.remove(plots[iRand]) i += 1
def doStrandgut(): iBarbPlayer = gc.getBARBARIAN_PLAYER() pBarbPlayer = gc.getPlayer(iBarbPlayer) iTreibgut = gc.getInfoTypeForString("UNIT_TREIBGUT") iStrandgut = gc.getInfoTypeForString("UNIT_STRANDGUT") iGoldkarren = gc.getInfoTypeForString("UNIT_GOLDKARREN") iDarkIce = gc.getInfoTypeForString("FEATURE_DARK_ICE") eCoast = gc.getInfoTypeForString("TERRAIN_COAST") lUnits = PyPlayer(iBarbPlayer).getUnitsOfType(iTreibgut) # CyInterface().addMessage(gc.getGame().getActivePlayer(), True, 15, CyTranslator().getText("TXT_KEY_MESSAGE_TEST", ("Test",len(lUnits))), None, 2, None, ColorTypes(11), 0, 0, False, False) for loopUnit in lUnits: pPlot = loopUnit.plot() if pPlot.getTerrainType() == eCoast: lPlots = [] iX = pPlot.getX() iY = pPlot.getY() # iRange = 1 for iI in xrange(DirectionTypes.NUM_DIRECTION_TYPES): loopPlot = plotDirection(iX, iY, DirectionTypes(iI)) if loopPlot and not loopPlot.isNone(): if not loopPlot.isWater(): if not loopPlot.isPeak() and not loopPlot.isUnit() and loopPlot.getFeatureType() != iDarkIce: lPlots.append(loopPlot) if lPlots: pPlot = lPlots[CvUtil.myRandom(len(lPlots), "strandgut")] # Create Strandgut CvUtil.spawnUnit(iStrandgut, pPlot, pBarbPlayer) iPlotOwner = pPlot.getOwner() if iPlotOwner != -1 and gc.getPlayer(iPlotOwner).isHuman(): CyInterface().addMessage(iPlotOwner, True, 15, CyTranslator().getText("TXT_KEY_TREIB2STRANDGUT", ()), None, 2, "Art/Interface/Buttons/Units/button_unit_strandgut.dds", ColorTypes(11), pPlot.getX(), pPlot.getY(), True, True) # Disband Treibgut # loopUnit.doCommand(CommandTypes.COMMAND_DELETE, -1, -1) loopUnit.kill(True, -1) # RAMK_CTD elif pPlot.isCity(): # Create Goldkarren CvUtil.spawnUnit(iGoldkarren, pPlot, pBarbPlayer) # Disband Treibgut # CyInterface().addMessage(gc.getGame().getActivePlayer(), True, 15, CyTranslator().getText("disbandTreibgutCity", ()), None, 2, None, ColorTypes(11), pPlot.getX(), pPlot.getY(), False, False) # loopUnit.doCommand(CommandTypes.COMMAND_DELETE, -1, -1) loopUnit.kill(True, -1) # RAMK_CTD
def setUnitIntoCave(pPlot): lUnits = [] if pPlot.getFeatureType() == gc.getInfoTypeForString("FEATURE_FOREST"): lUnits.append(gc.getInfoTypeForString("UNIT_BEAR")) lUnits.append(gc.getInfoTypeForString("UNIT_WOLF")) elif pPlot.getFeatureType() == gc.getInfoTypeForString("FEATURE_DICHTERWALD"): lUnits.append(gc.getInfoTypeForString("UNIT_BEAR")) lUnits.append(gc.getInfoTypeForString("UNIT_WOLF")) lUnits.append(gc.getInfoTypeForString("UNIT_UR")) elif pPlot.getFeatureType() == gc.getInfoTypeForString("FEATURE_JUNGLE"): lUnits.append(gc.getInfoTypeForString("UNIT_PANTHER")) lUnits.append(gc.getInfoTypeForString("UNIT_LEOPARD")) lUnits.append(gc.getInfoTypeForString("UNIT_TIGER")) elif pPlot.getTerrainType() == gc.getInfoTypeForString("TERRAIN_DESERT"): lUnits.append(gc.getInfoTypeForString("UNIT_LION")) lUnits.append(gc.getInfoTypeForString("UNIT_HYENA")) elif pPlot.getTerrainType() == gc.getInfoTypeForString("TERRAIN_TUNDRA"): lUnits.append(gc.getInfoTypeForString("UNIT_WOLF")) if lUnits: iRand = CvUtil.myRandom(len(lUnits), "setUnitIntoCave") CvUtil.spawnUnit(lUnits[iRand], pPlot, gc.getPlayer(gc.getBARBARIAN_PLAYER()))
def doVikings(): iBarbPlayer = gc.getBARBARIAN_PLAYER() pBarbPlayer = gc.getPlayer(iBarbPlayer) iUnitTypeShip = gc.getInfoTypeForString("UNIT_VIKING_1") iUnitTypeUnit = gc.getInfoTypeForString("UNIT_VIKING_2") iDarkIce = gc.getInfoTypeForString("FEATURE_DARK_ICE") iMapW = gc.getMap().getGridWidth() iMapH = gc.getMap().getGridHeight() bMeldung = False for _ in xrange(4): iRandX = CvUtil.myRandom(iMapW, "W") iRandY = iMapH - CvUtil.myRandom(5, "H") loopPlot = gc.getMap().plot(iRandX, iRandY) if loopPlot is not None and not loopPlot.isNone(): if loopPlot.getFeatureType() == iDarkIce: continue if not loopPlot.isUnit() and loopPlot.isWater( ) and not loopPlot.isLake() and not loopPlot.isOwned(): # Wikinger erstellen bMeldung = True CvUtil.spawnUnit(iUnitTypeShip, loopPlot, pBarbPlayer) for _ in xrange(4): CvUtil.spawnUnit(iUnitTypeUnit, loopPlot, pBarbPlayer) if bMeldung: if gc.getGame().getGameTurnYear() == 400: for iPlayer in xrange(gc.getMAX_PLAYERS()): pPlayer = gc.getPlayer(iPlayer) if pPlayer.isAlive() and pPlayer.isHuman(): popupInfo = CyPopupInfo() popupInfo.setButtonPopupType( ButtonPopupTypes.BUTTONPOPUP_TEXT) popupInfo.setText(CyTranslator().getText( "TXT_KEY_MESSAGE_VIKINGS", ("", ))) popupInfo.addPopup(pPlayer.getID()) CyAudioGame().Play2DSound("AS2D_THEIRDECLAREWAR")
def doHuns(): iHuns = 0 iGameTurn = gc.getGame().getGameTurnYear() if iGameTurn == 250: iHuns = 20 elif iGameTurn == 255: iHuns = 24 elif iGameTurn == 260: iHuns = 28 elif iGameTurn >= 270 and iGameTurn <= 400 and iGameTurn % 10 == 0: iHuns = 28 # Diesen Wert auch unten bei der Meldung angeben! if iHuns == 0: return CivHuns = gc.getInfoTypeForString("CIVILIZATION_HUNNEN") bHunsAlive = False iMaxPlayers = gc.getMAX_PLAYERS() for iPlayer in xrange(iMaxPlayers): pPlayer = gc.getPlayer(iPlayer) # Hunnen sollen nur auftauchen, wenn es nicht bereits Hunnen gibt if pPlayer.getCivilizationType() == CivHuns and pPlayer.isAlive(): bHunsAlive = True break if not bHunsAlive: for iPlayer in xrange(iMaxPlayers): pPlayer = gc.getPlayer(iPlayer) # Message PopUps if iHuns < 28 and pPlayer.isAlive() and pPlayer.isHuman(): popupInfo = CyPopupInfo() popupInfo.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_TEXT) if iHuns == 20: popupInfo.setText(CyTranslator().getText( "TXT_KEY_MESSAGE_HUNNEN_1", ("", ))) elif iHuns == 24: CyAudioGame().Play2DSound("AS2D_THEIRDECLAREWAR") popupInfo.setText(CyTranslator().getText( "TXT_KEY_MESSAGE_HUNNEN_2", ("", ))) else: popupInfo.setText(CyTranslator().getText( "TXT_KEY_MESSAGE_HUNNEN_3", ("", ))) popupInfo.addPopup(pPlayer.getID()) iMapW = gc.getMap().getGridWidth() iMapH = gc.getMap().getGridHeight() iDarkIce = gc.getInfoTypeForString("FEATURE_DARK_ICE") # 15 Versuche einen Plot zu finden bPlot = False for _ in xrange(15): # Diese Koordinaten entsprechen Nord-Osten iRandX = iMapW - 15 + CvUtil.myRandom(15, "W2") iRandY = iMapH - 15 + CvUtil.myRandom(15, "H2") loopPlot = gc.getMap().plot(iRandX, iRandY) if loopPlot is not None and not loopPlot.isNone(): if loopPlot.getFeatureType( ) != iDarkIce and not loopPlot.isUnit( ) and not loopPlot.isWater() and not loopPlot.isOwned( ) and not loopPlot.isPeak(): bPlot = True break if not bPlot: return # Hunnen versuchen zu erstellen False: Ausgeschaltet! if iGameTurn >= 250 and gc.getGame().countCivPlayersAlive( ) < iMaxPlayers and False: # freie PlayerID herausfinden iHunsID = 0 for i in xrange(iMaxPlayers): j = iMaxPlayers - i - 1 pPlayer = gc.getPlayer(j) if not pPlayer.isAlive(): iHunsID = j break if iHunsID == 0: return # Hunnen erstellen LeaderHuns = gc.getInfoTypeForString("LEADER_ATTILA") gc.getGame().addPlayer(iHunsID, LeaderHuns, CivHuns) pPlayer = gc.getPlayer(iHunsID) iUnitSettler = gc.getInfoTypeForString("UNIT_SETTLER") iUnitSpearman = gc.getInfoTypeForString("UNIT_SPEARMAN") iUnitWorker = gc.getInfoTypeForString("UNIT_WORKER") iUnitKeshik = gc.getInfoTypeForString("UNIT_MONGOL_KESHIK") iUnitArcher = gc.getInfoTypeForString("UNIT_REFLEX_ARCHER") iUnitHorse = gc.getInfoTypeForString("UNIT_HORSE") for _ in xrange(3): CvUtil.spawnUnit(iUnitSettler, loopPlot, pPlayer) for _ in xrange(4): CvUtil.spawnUnit(iUnitSpearman, loopPlot, pPlayer) for _ in xrange(6): CvUtil.spawnUnit(iUnitWorker, loopPlot, pPlayer) for _ in xrange(8): CvUtil.spawnUnit(iUnitKeshik, loopPlot, pPlayer) for _ in xrange(9): CvUtil.spawnUnit(iUnitArcher, loopPlot, pPlayer) for _ in xrange(9): CvUtil.spawnUnit(iUnitHorse, loopPlot, pPlayer) pPlayer.setCurrentEra(3) pPlayer.setGold(300) # increasing Anger to all other CIVs # and looking for best tech player pTeam = gc.getTeam(pPlayer.getTeam()) iPlayerBestTechScore = -1 iTechScore = 0 for i in xrange(iMaxPlayers): pSecondPlayer = gc.getPlayer(i) # increases Anger for all AIs if pSecondPlayer.getID() != pPlayer.getID( ) and pSecondPlayer.isAlive(): # Haltung aendern pPlayer.AI_changeAttitudeExtra(i, -5) # Krieg erklaeren pTeam.declareWar(pSecondPlayer.getTeam(), 0, 6) # TechScore herausfinden if iTechScore < pSecondPlayer.getTechScore(): iTechScore = pSecondPlayer.getTechScore() iPlayerBestTechScore = i # Techs geben if iPlayerBestTechScore > -1: xTeam = gc.getTeam( gc.getPlayer(iPlayerBestTechScore).getTeam()) iTechNum = gc.getNumTechInfos() for iTech in xrange(iTechNum): if gc.getTechInfo(iTech) is not None and xTeam.isHasTech( iTech) and not pTeam.isHasTech( iTech) and gc.getTechInfo(iTech).isTrade(): pTeam.setHasTech(iTech, 1, iHunsID, 0, 0) else: iUnitType = gc.getInfoTypeForString('UNIT_MONGOL_KESHIK') pBarbPlayer = gc.getPlayer(gc.getBARBARIAN_PLAYER()) for _ in xrange(iHuns): CvUtil.spawnUnit(iUnitType, loopPlot, pBarbPlayer)
def doSeevoelker(): iBarbPlayer = gc.getBARBARIAN_PLAYER() pBarbPlayer = gc.getPlayer(iBarbPlayer) iUnitTypeShip = gc.getInfoTypeForString("UNIT_SEEVOLK") # Cargo: 3 iUnitTypeWarrior1 = gc.getInfoTypeForString("UNIT_SEEVOLK_1") iUnitTypeWarrior2 = gc.getInfoTypeForString("UNIT_SEEVOLK_2") iUnitTypeWarrior3 = gc.getInfoTypeForString("UNIT_SEEVOLK_3") # Handicap: 0 (Settler) - 8 (Deity) # Worldsize: 0 (Duell) - 5 (Huge) iRange = 1 + gc.getMap().getWorldSize() + gc.getGame().getHandicapType() #iRange = max(iRange,8) iPlots = gc.getMap().numPlots() iLandPlots = gc.getMap().getLandPlots() # Wenn es mehr Land als Wasser gibt if iLandPlots > iPlots / 2: iRange /= 2 for _ in xrange(iRange): # Wird geaendert zu einem Mittelmeerstreifen: x: 5 bis (X-5), y: 5 bis letztes Drittel von Y iMapX = gc.getMap().getGridWidth() - 5 iMapY = int(gc.getMap().getGridHeight() / 3 * 2) iRandX = 5 + CvUtil.myRandom(iMapX, "X") iRandY = 5 + CvUtil.myRandom(iMapY, "Y") loopPlot = gc.getMap().plot(iRandX, iRandY) # Plot soll ein Ozean sein terr_ocean = gc.getInfoTypeForString("TERRAIN_OCEAN") feat_ice = gc.getInfoTypeForString("FEATURE_ICE") iDarkIce = gc.getInfoTypeForString("FEATURE_DARK_ICE") if loopPlot is not None and not loopPlot.isNone(): if loopPlot.getFeatureType() == iDarkIce: continue if not loopPlot.isUnit() and not loopPlot.isOwned( ) and loopPlot.getFeatureType( ) != feat_ice and loopPlot.getTerrainType() == terr_ocean: # Schiffe erstellen iAnz = 1 if bRageBarbs and gc.getGame().getGameTurnYear() > -1000: iAnz = 2 #elif gc.getGame().getGameTurnYear() > -1200: # iAnz = 2 for _ in xrange(iAnz): CvUtil.spawnUnit(iUnitTypeShip, loopPlot, pBarbPlayer) CvUtil.spawnUnit(iUnitTypeWarrior1, loopPlot, pBarbPlayer) CvUtil.spawnUnit(iUnitTypeWarrior2, loopPlot, pBarbPlayer) CvUtil.spawnUnit(iUnitTypeWarrior3, loopPlot, pBarbPlayer) # Meldung PopUp if gc.getGame().getGameTurnYear() > -1400 and gc.getGame().getGameTurnYear( ) < -1380: for iPlayer in xrange(gc.getMAX_PLAYERS()): pPlayer = gc.getPlayer(iPlayer) if pPlayer.isAlive() and pPlayer.isHuman(): popupInfo = CyPopupInfo() popupInfo.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_TEXT) popupInfo.setText(CyTranslator().getText( "TXT_KEY_MESSAGE_SEAPEOPLES", ("", ))) popupInfo.addPopup(pPlayer.getID()) CyAudioGame().Play2DSound("AS2D_THEIRDECLAREWAR")
def createCampUnit(iPlayer, iGameTurn): pPlayer = gc.getPlayer(iPlayer) if not pPlayer.isAlive(): return iTeam = pPlayer.getTeam() pTeam = gc.getTeam(iTeam) #eCiv = gc.getCivilizationInfo(pPlayer.getCivilizationType()) if pPlayer.getUnitClassCount( gc.getInfoTypeForString("UNITCLASS_SPECIAL1")) > 0: # Terrain #eTundra = gc.getInfoTypeForString("TERRAIN_TUNDRA") #eGras = gc.getInfoTypeForString("TERRAIN_GRASS") #eEbene = gc.getInfoTypeForString("TERRAIN_PLAINS") eDesert = gc.getInfoTypeForString("TERRAIN_DESERT") # Feature #eDichterWald = gc.getInfoTypeForString("FEATURE_DICHTERWALD") eCamp = gc.getInfoTypeForString("UNIT_CAMP") lCamps = PyPlayer(pPlayer.getID()).getUnitsOfType(eCamp) for pUnit in lCamps: if pUnit is not None and not pUnit.isNone(): #pUnit.NotifyEntity(MissionTypes.MISSION_FOUND) if pUnit.getFortifyTurns() == 0: return bCreateUnit = False iFortified = CvUtil.getScriptData(pUnit, ["f"], -1) if iFortified == -1: CvUtil.addScriptData(pUnit, "f", iGameTurn) elif (iGameTurn - iFortified) % 5 == 0: bCreateUnit = True if bCreateUnit: pPlot = pUnit.plot() lUnits = [] # Not on hills (for HI) if pPlayer.isHuman() and pPlot.isHills(): CyInterface().addMessage( iPlayer, True, 10, CyTranslator().getText("TXT_KEY_HELP_NOCAMPUNIT", ("", )), None, 2, "Art/Interface/Buttons/General/button_alert_new.dds", ColorTypes(11), pPlot.getX(), pPlot.getY(), True, True) return # Desert if pPlot.getTerrainType() == eDesert: if pPlayer.canTrain( gc.getInfoTypeForString( "UNIT_ARABIA_CAMELARCHER"), 0, 0): lUnits.append( gc.getInfoTypeForString( "UNIT_ARABIA_CAMELARCHER")) if pPlayer.canTrain( gc.getInfoTypeForString( "UNIT_CAMEL_CATAPHRACT"), 0, 0): lUnits.append( gc.getInfoTypeForString( "UNIT_CAMEL_CATAPHRACT")) # Open terrain (primary Mounted only) if not lUnits and pPlot.getFeatureType() == -1: if pPlayer.canTrain( gc.getInfoTypeForString("UNIT_MONGOL_KESHIK"), 0, 0): lUnits.append( gc.getInfoTypeForString("UNIT_MONGOL_KESHIK")) if pPlayer.canTrain( gc.getInfoTypeForString("UNIT_CATAPHRACT"), 0, 0): lUnits.append( gc.getInfoTypeForString("UNIT_CATAPHRACT")) if pPlayer.canTrain( gc.getInfoTypeForString("UNIT_HORSE_ARCHER"), 0, 0): lUnits.append( gc.getInfoTypeForString("UNIT_HORSE_ARCHER")) if not lUnits and pPlayer.canTrain( gc.getInfoTypeForString("UNIT_HORSEMAN"), 0, 0): lUnits.append( gc.getInfoTypeForString("UNIT_HORSEMAN")) # On forests or if no mounted units available/constructable if not lUnits: if pPlayer.canTrain( gc.getInfoTypeForString("UNIT_REFLEX_ARCHER"), 0, 0): lUnits.append( gc.getInfoTypeForString("UNIT_REFLEX_ARCHER")) else: lUnits.append( gc.getInfoTypeForString( "UNIT_COMPOSITE_ARCHER")) if pPlayer.canTrain( gc.getInfoTypeForString("UNIT_SKIRMISHER"), 0, 0): lUnits.append( gc.getInfoTypeForString("UNIT_SKIRMISHER")) if pPlayer.canTrain( gc.getInfoTypeForString("UNIT_AXEMAN2"), 0, 0): lUnits.append( gc.getInfoTypeForString("UNIT_AXEMAN2")) if pPlayer.canTrain( gc.getInfoTypeForString("UNIT_SWORDSMAN"), 0, 0): lUnits.append( gc.getInfoTypeForString("UNIT_SWORDSMAN")) elif pPlayer.canTrain( gc.getInfoTypeForString("UNIT_SCHILDTRAEGER"), 0, 0): lUnits.append( gc.getInfoTypeForString("UNIT_SCHILDTRAEGER")) else: lUnits.append( gc.getInfoTypeForString("UNIT_KURZSCHWERT")) # standard unit lUnits.append(gc.getInfoTypeForString("UNIT_SPEARMAN")) iUnit = -1 if lUnits: iUnit = lUnits[CvUtil.myRandom( len(lUnits), "createCampUnit")] # AI: Einheit autom, verkaufen (Soeldnerposten), falls Geldprobleme if not pPlayer.isHuman() and ( pPlayer.AI_isFinancialTrouble() or pTeam.getAtWarCount(True) == 0): pPlayer.changeGold(25) elif iUnit != -1: # Einheit erstellen CvUtil.spawnUnit(iUnit, pPlot, pPlayer)
def doOlympicGames(): # wurde das Projekt erstellt? if gc.getGame().getProjectCreatedCount(gc.getInfoTypeForString("PROJECT_OLYMPIC_GAMES")) == 0: return # alle 4 Runden if gc.getGame().getCalendar() == gc.getInfoTypeForString("CALENDAR_MONTHS"): iTurns = 48 elif gc.getGame().getCalendar() == gc.getInfoTypeForString("CALENDAR_SEASONS"): iTurns = 16 else: iTurns = 4 if gc.getGame().getElapsedGameTurns() % iTurns == 1: # Inits lCities4Olympiade = [] lHumans = [] lPlayers = [] iTechSchaukampf = gc.getInfoTypeForString("TECH_GLADIATOR") iTechImperialismus = gc.getInfoTypeForString("TECH_NATIONALISM") iTechPapsttum = gc.getInfoTypeForString("TECH_PAPSTTUM") iReligionGreek = gc.getInfoTypeForString("RELIGION_GREEK") iReligionRome = gc.getInfoTypeForString("RELIGION_ROME") iBuildingStadion = gc.getInfoTypeForString("BUILDING_STADION") iBuildingClassStadion = gc.getInfoTypeForString("BUILDINGCLASS_STADION") iBuildingOlympionike = gc.getInfoTypeForString("BUILDING_OLYMPIONIKE") iBuildingClassGymnasion = gc.getInfoTypeForString("BUILDINGCLASS_SPECIAL3") # Los gehts iNumPlayers = gc.getMAX_PLAYERS() for iPlayer in xrange (iNumPlayers): pPlayer = gc.getPlayer(iPlayer) if pPlayer and not pPlayer.isNone() and pPlayer.isAlive(): # and not pPlayer.isBarbarian(): # Hat der Spieler noch nicht Schaukampf erforscht, isser nicht dabei if not gc.getTeam(pPlayer.getTeam()).isHasTech(iTechSchaukampf): continue # Hat der Spieler bereits das Papsttum erforscht, is der Spass vorbei if gc.getTeam(pPlayer.getTeam()).isHasTech(iTechPapsttum): continue # Hat der Spieler Imperialismus erforscht? bAllowRomanGods = False if gc.getTeam(pPlayer.getTeam()).isHasTech(iTechImperialismus): bAllowRomanGods = True # Init des Spezialgebäudes Gymnasion, Gymnasium iBuildingGymnasion = gc.getCivilizationInfo(pPlayer.getCivilizationType()).getCivilizationBuildings(iBuildingClassGymnasion) # Cities iNumCities = pPlayer.getNumCities() for iCity in xrange (iNumCities): pCity = pPlayer.getCity(iCity) if pCity and not pCity.isNone(): # Aktuellen Olympioniken rausschmeissen pCity.setNumRealBuilding(iBuildingOlympionike,0) # Hat die Stadt die richtige Religion? if pCity.isHasReligion(iReligionGreek) or bAllowRomanGods and pCity.isHasReligion(iReligionRome): # Liste für Spielermeldungen if pPlayer.isHuman() and iPlayer not in lHumans: lHumans.append(iPlayer) # Liste verschiedener CIVs if iPlayer not in lPlayers: lPlayers.append(iPlayer) # Stadt an den Spielen zulassen lCities4Olympiade.append(pCity) # Verbesserte Chancen: if pCity.isHasBuilding(iBuildingStadion): lCities4Olympiade.append(pCity) if pCity.isHasBuilding(iBuildingGymnasion): lCities4Olympiade.append(pCity) # Choose new Olympic Winner City # erst ab 2 CIVs if len(lPlayers) <= 1: return iRand = CvUtil.myRandom(len(lCities4Olympiade), "CityOfOlympiadWinner") pCity = lCities4Olympiade[iRand] # Olympionike in die Stadt stellen pCity.setNumRealBuilding(iBuildingOlympionike,1) # Stadion verbessern +1 Kultur if pCity.isHasBuilding(iBuildingStadion): iCulture = pCity.getBuildingCommerceChange(iBuildingClassStadion, CommerceTypes.COMMERCE_CULTURE) + 1 pCity.setBuildingCommerceChange(iBuildingClassStadion, CommerceTypes.COMMERCE_CULTURE, iCulture) # Goldkarren erzeugen CvUtil.spawnUnit(gc.getInfoTypeForString("UNIT_GOLDKARREN"), pCity.plot(), gc.getPlayer(pCity.getOwner())) CvUtil.spawnUnit(gc.getInfoTypeForString("UNIT_GOLDKARREN"), pCity.plot(), gc.getPlayer(pCity.getOwner())) # einen weiteren bei Seasons if iTurns >= 16: CvUtil.spawnUnit(gc.getInfoTypeForString("UNIT_GOLDKARREN"), pCity.plot(), gc.getPlayer(pCity.getOwner())) # zwei weitere bei Months (insg. 5) if iTurns > 16: CvUtil.spawnUnit(gc.getInfoTypeForString("UNIT_GOLDKARREN"), pCity.plot(), gc.getPlayer(pCity.getOwner())) CvUtil.spawnUnit(gc.getInfoTypeForString("UNIT_GOLDKARREN"), pCity.plot(), gc.getPlayer(pCity.getOwner())) # Chance eines beladenen Fuhrwerks if CvUtil.myRandom(4, "Olympia_ChanceOfBonus") == 1: pNewUnit = CvUtil.spawnUnit(gc.getInfoTypeForString("UNIT_SUPPLY_FOOD"), pCity.plot(), gc.getPlayer(pCity.getOwner())) lBonuses = [ gc.getInfoTypeForString("BONUS_OLIVES"), gc.getInfoTypeForString("BONUS_OLIVES"), gc.getInfoTypeForString("BONUS_OLIVES"), gc.getInfoTypeForString("BONUS_OLIVES"), gc.getInfoTypeForString("BONUS_OLIVES"), gc.getInfoTypeForString("BONUS_GRAPES"), gc.getInfoTypeForString("BONUS_GRAPES"), gc.getInfoTypeForString("BONUS_GRAPES"), gc.getInfoTypeForString("BONUS_ROGGEN"), gc.getInfoTypeForString("BONUS_HAFER"), gc.getInfoTypeForString("BONUS_GERSTE"), gc.getInfoTypeForString("BONUS_WHEAT"), gc.getInfoTypeForString("BONUS_HIRSE"), gc.getInfoTypeForString("BONUS_HORSE") ] eBonus = CvUtil.myRandom(len(lBonuses), "Olympia_BonusType") eBonus = lBonuses[eBonus] CvUtil.addScriptData(pNewUnit, "b", eBonus) # Meldung an alle beteiligten Spieler for iPlayer in lHumans: xSound = None iColor = 14 # graublau bShow = False # Extra PopUp wenn HI der Gewinner ist if iPlayer == pCity.getOwner(): xSound = "AS2D_WELOVEKING" iColor = 10 # cyan bShow = True popupInfo = CyPopupInfo() popupInfo.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_TEXT) sText = CyTranslator().getText("TXT_KEY_INFO_OLYMPIC_GAMES_WINNER", (pCity.getName(),gc.getPlayer(pCity.getOwner()).getCivilizationShortDescription(0))) popupInfo.setText(sText) popupInfo.addPopup(iPlayer) # Ingame Text CyInterface().addMessage(iPlayer, True, 15, CyTranslator().getText("TXT_KEY_INFO_OLYMPIC_GAMES_WINNER", (pCity.getName(),gc.getPlayer(pCity.getOwner()).getCivilizationShortDescription(0))), xSound, 2, "Art/Interface/Buttons/Buildings/button_building_olympionike.dds", ColorTypes(iColor), pCity.plot().getX(), pCity.plot().getY(), bShow, bShow)
def doPlotFeatures(): iGameTurn = gc.getGame().getElapsedGameTurns() if iGameTurn < 5: return # Inits iBarbPlayer = gc.getBARBARIAN_PLAYER() pBarbPlayer = gc.getPlayer(iBarbPlayer) # Flotsam terrOzean = gc.getInfoTypeForString("TERRAIN_OCEAN") bFlot = gc.getTeam(pBarbPlayer.getTeam()).isHasTech(gc.getInfoTypeForString("TECH_RUDERER2")) # Barbaren improvements impBarbFort = gc.getInfoTypeForString("IMPROVEMENT_BARBARENFORT") impCave = gc.getInfoTypeForString("IMPROVEMENT_CAVE") impGoody = gc.getInfoTypeForString("IMPROVEMENT_GOODY_HUT") iBarbForts = 0 iCaves = 0 iGoodyHuts = 0 # Animals bonus_lion = gc.getInfoTypeForString("BONUS_LION") bonus_horse = gc.getInfoTypeForString("BONUS_HORSE") bonus_camel = gc.getInfoTypeForString("BONUS_CAMEL") bonus_ivory = gc.getInfoTypeForString("BONUS_IVORY") bonus_dogs = gc.getInfoTypeForString("BONUS_HUNDE") bonus_deer = gc.getInfoTypeForString("BONUS_DEER") bonus_pig = gc.getInfoTypeForString("BONUS_PIG") # features iDarkIce = gc.getInfoTypeForString("FEATURE_DARK_ICE") iFeatBurned = gc.getInfoTypeForString("FEATURE_FOREST_BURNT") iFeatSeuche = gc.getInfoTypeForString("FEATURE_SEUCHE") iTerrDesert = gc.getInfoTypeForString("TERRAIN_DESERT") iTerrPlains = gc.getInfoTypeForString("TERRAIN_PLAINS") iTerrTundra = gc.getInfoTypeForString("TERRAIN_TUNDRA") iFeatForest = gc.getInfoTypeForString("FEATURE_FOREST") iFeatDenseForest = gc.getInfoTypeForString("FEATURE_DICHTERWALD") iFeatJungle = gc.getInfoTypeForString("FEATURE_JUNGLE") # Heuschrecken/Grasshopper iFeatGrasshopper = gc.getInfoTypeForString("FEATURE_GRASSHOPPER") # Desert Storm iFeatDesertstorm = gc.getInfoTypeForString("FEATURE_FALLOUT") lDesertStorm = [] # Plots Ocean = [] Desert = [] Forest = [] DenseForest = [] Tundra = [] Plains = [] Jungle = [] Hills = [] #GoodyPlots = [] # map iMapW = gc.getMap().getGridWidth() iMapH = gc.getMap().getGridHeight() for x in xrange(iMapW): for y in xrange(iMapH): loopPlot = gc.getMap().plot(x, y) if loopPlot and not loopPlot.isNone(): iPlotFeature = loopPlot.getFeatureType() iPlotTerrain = loopPlot.getTerrainType() iPlotImprovement = loopPlot.getImprovementType() if iPlotFeature == iDarkIce: continue if iPlotFeature == iFeatGrasshopper: doMoveGrasshoppers(loopPlot) continue if iPlotFeature == iFeatDesertstorm: lDesertStorm.append(loopPlot) continue if loopPlot.getFeatureType() == iFeatBurned: if CvUtil.myRandom(50, "burntForest2Forest") == 1: loopPlot.setFeatureType(iFeatForest, 0) continue # isWater if loopPlot.isWater(): # Treibgut nur alle 10 Runden erstellen (wenn aktiv) if bFlotsam and gc.getGame().getGameTurn() % 10 == 0: if bFlot and bGoodyHuts: if loopPlot.getOwner() == -1: if iPlotTerrain == terrOzean: if loopPlot.getNumUnits() > 0: Ocean.append(loopPlot) # isLand elif not loopPlot.isPeak(): iPlotOwner = loopPlot.getOwner() # nur ausserhalb von Cities if not loopPlot.isCity(): # Forts oder Handelsposten if iPlotImprovement in L.LImprFortShort: # Init iOwner = -1 iOwner = int(CvUtil.getScriptData(loopPlot, ["p", "t"], loopPlot.getOwner())) # Handelsposten entfernen, wenn der Plot in einem fremden Kulturkreis liegt if iPlotImprovement == gc.getInfoTypeForString("IMPROVEMENT_HANDELSPOSTEN"): if iOwner != iPlotOwner and iPlotOwner != -1: loopPlot.setImprovementType(-1) if gc.getPlayer(iOwner).isHuman(): szText = CyTranslator().getText("TXT_KEY_INFO_CLOSED_TRADEPOST", ("",)) CyInterface().addMessage(iOwner, True, 15, szText, "AS2D_UNIT_BUILD_UNIT", 2, "Art/Interface/Buttons/General/button_alert_new.dds", ColorTypes(7), loopPlot.getX(), loopPlot.getY(), True, True) # Kultur setzen if iPlotOwner == -1: loopPlot.setCulture(iOwner, 1, True) loopPlot.setOwner(iOwner) # Kultur bei Forts #else: # doCheckFortCulture(loopPlot) continue # Check nur alle x Runden (Tier-Spawn) if iGameTurn % 2 == 0: # Lion - 3% Appearance if loopPlot.getBonusType(-1) == bonus_lion and iPlotImprovement == -1: if loopPlot.getNumUnits() == 0: if CvUtil.myRandom(33, "lion") == 1: iUnitType = gc.getInfoTypeForString("UNIT_LION") pBarbPlayer.initUnit(iUnitType, x, y, UnitAITypes.UNITAI_ATTACK, DirectionTypes.DIRECTION_SOUTH) # ***TEST*** #CyInterface().addMessage(gc.getGame().getActivePlayer(), True, 10, "Barb. Atlasloewe erschaffen", None, 2, None, ColorTypes(10), 0, 0, False, False) continue # Wolf - 3% Appearance elif loopPlot.getBonusType(iPlotOwner) == bonus_dogs and iPlotImprovement == -1: if loopPlot.getNumUnits() == 0: if CvUtil.myRandom(33, "wolf") == 1: iUnitType = gc.getInfoTypeForString("UNIT_WOLF") pBarbPlayer.initUnit(iUnitType, x, y, UnitAITypes.UNITAI_ATTACK, DirectionTypes.DIRECTION_SOUTH) continue # Deer - 3% Appearance elif loopPlot.getBonusType(-1) == bonus_deer and iPlotImprovement == -1: if loopPlot.getNumUnits() == 0: iRand = CvUtil.myRandom(33, "deer or bear") if iRand == 1: iUnitType = gc.getInfoTypeForString("UNIT_DEER") pBarbPlayer.initUnit(iUnitType, x, y, UnitAITypes.UNITAI_ATTACK, DirectionTypes.DIRECTION_SOUTH) continue elif iRand == 2: iUnitType = gc.getInfoTypeForString("UNIT_BEAR") pBarbPlayer.initUnit(iUnitType, x, y, UnitAITypes.UNITAI_ATTACK, DirectionTypes.DIRECTION_SOUTH) continue # Boar/Schwarzwild - 3% Appearance elif loopPlot.getBonusType(iPlotOwner) == bonus_pig and iPlotImprovement == -1: if loopPlot.getNumUnits() == 0: if CvUtil.myRandom(33, "boar") == 1: iUnitType = gc.getInfoTypeForString("UNIT_BOAR") pBarbPlayer.initUnit(iUnitType, x, y, UnitAITypes.UNITAI_ATTACK, DirectionTypes.DIRECTION_SOUTH) continue # Horse - 2% Appearance elif loopPlot.getBonusType(iPlotOwner) == bonus_horse: iUnitType = gc.getInfoTypeForString("UNIT_HORSE") #iUnitTypeDom = gc.getInfoTypeForString("UNIT_HORSE") iTechDom = gc.getInfoTypeForString("TECH_PFERDEZUCHT") sTextDom = "TXT_KEY_INFO_DOM_HORSE" if loopPlot.getNumUnits() == 0: if CvUtil.myRandom(50, "horse") == 1: # Check Owner iNewUnitOwner = iBarbPlayer if iPlotOwner != -1 and iPlotOwner != iBarbPlayer: if gc.getTeam(gc.getPlayer(iPlotOwner).getTeam()).isHasTech(iTechDom): iNewUnitOwner = iPlotOwner #iUnitType = iUnitTypeDom elif gc.getPlayer(iPlotOwner).isHuman(): CyInterface().addMessage(iPlotOwner, True, 10, CyTranslator().getText(sTextDom, ("",)), None, 2, gc.getBonusInfo(bonus_horse).getButton(), ColorTypes(13), x, y, True, True) # Add Unit gc.getPlayer(iNewUnitOwner).initUnit(iUnitType, x, y, UnitAITypes.UNITAI_EXPLORE, DirectionTypes.DIRECTION_SOUTH) continue # Camel - 2% Appearance elif loopPlot.getBonusType(iPlotOwner) == bonus_camel: iUnitType = gc.getInfoTypeForString("UNIT_CAMEL") #iUnitTypeDom = gc.getInfoTypeForString("UNIT_CAMEL") iTechDom = gc.getInfoTypeForString("TECH_KAMELZUCHT") sTextDom = "TXT_KEY_INFO_DOM_CAMEL" if loopPlot.getNumUnits() == 0: if CvUtil.myRandom(50, "camel") == 1: # Check Owner iNewUnitOwner = iBarbPlayer if iPlotOwner != -1: if gc.getTeam(gc.getPlayer(iPlotOwner).getTeam()).isHasTech(iTechDom): iNewUnitOwner = iPlotOwner #iUnitType = iUnitTypeDom elif gc.getPlayer(iPlotOwner).isHuman(): CyInterface().addMessage(iPlotOwner, True, 10, CyTranslator().getText(sTextDom, ("",)), None, 2, gc.getBonusInfo(bonus_camel).getButton(), ColorTypes(13), x, y, True, True) # Add Unit gc.getPlayer(iNewUnitOwner).initUnit(iUnitType, x, y, UnitAITypes.UNITAI_EXPLORE, DirectionTypes.DIRECTION_SOUTH) continue # Elefant - 2% Appearance (ab Eisenzeit) elif loopPlot.getBonusType(iPlotOwner) == bonus_ivory and pBarbPlayer.getCurrentEra() >= 2: iUnitType = gc.getInfoTypeForString("UNIT_ELEFANT") if loopPlot.getNumUnits() == 0: if CvUtil.myRandom(50, "ele") == 1: # Check Owner iNewUnitOwner = iBarbPlayer if iPlotOwner != -1: if gc.getTeam(gc.getPlayer(iPlotOwner).getTeam()).isHasTech(gc.getInfoTypeForString("TECH_ELEFANTENZUCHT")): iNewUnitOwner = iPlotOwner elif gc.getPlayer(iPlotOwner).isHuman(): CyInterface().addMessage(iPlotOwner, True, 10, CyTranslator().getText("TXT_KEY_INFO_DOM_ELEFANT", ("",)), None, 2, gc.getBonusInfo(bonus_ivory).getButton(), ColorTypes(13), x, y, True, True) # Add Unit gc.getPlayer(iNewUnitOwner).initUnit(iUnitType, x, y, UnitAITypes.UNITAI_EXPLORE, DirectionTypes.DIRECTION_SOUTH) continue # Barbarenforts/festungen (erzeugt barbarische Einheiten alle x Runden) if iPlotImprovement == impBarbFort: iBarbForts += 1 #if iPlotOwner == -1 or iPlotOwner == iBarbPlayer: if loopPlot.getNumUnits() == 0: # Verteidiger setzen PAE_Barbaren.setFortDefence(loopPlot) elif loopPlot.getNumUnits() > 4: iNum = loopPlot.getNumUnits() - 4 for k in xrange(iNum): loopPlot.getUnit(k).kill(True, -1) elif pBarbPlayer.getCurrentEra() > 0: if bRageBarbs: iTurns = 5 else: iTurns = 10 if gc.getGame().getGameTurn() % iTurns == 0: iAnzUnits = PAE_Barbaren.countNearbyUnits(loopPlot, 2, iBarbPlayer) if iAnzUnits < 6: # Einheiten) setzen PAE_Barbaren.createBarbUnit(loopPlot) continue # Baerenhoehle elif iPlotImprovement == impCave: iCaves += 1 #if loopPlot.getNumUnits() <= 1: if CvUtil.myRandom(15, "cave bear") == 1: if not PAE_Barbaren.checkNearbyUnits(loopPlot,3): # (Plot, Radius) setUnitIntoCave(loopPlot) continue # Goody huts elif iPlotImprovement == impGoody: iGoodyHuts += 1 # Keine Seuche in Deserts if iPlotTerrain == iTerrDesert and iPlotFeature == iFeatSeuche: loopPlot.setFeatureType(-1,0) # leere Plots zwischenspeichern if iGameTurn > 150 and iGameTurn % 10 == 0: if iPlotOwner == -1: if loopPlot.getNumUnits() == 0 and not loopPlot.isActiveVisible(0): # Empty Plots for Animals and Barbs if iPlotTerrain == iTerrDesert: Desert.append(loopPlot) elif iPlotTerrain == iTerrTundra: Tundra.append(loopPlot) elif iPlotFeature == iFeatDenseForest: DenseForest.append(loopPlot) elif iPlotFeature == iFeatJungle: Jungle.append(loopPlot) elif iPlotFeature == iFeatForest: Forest.append(loopPlot) elif iPlotTerrain == iTerrPlains: Plains.append(loopPlot) if loopPlot.isHills(): Hills.append(loopPlot) # end if - not isCity # Plots verarbeiten -------------------------------- # Flotsam (if activated) if bFlotsam and bFlot and bGoodyHuts: if Ocean: if CvUtil.myRandom(33, "setFlotsam") == 1: iUnit = gc.getInfoTypeForString("UNIT_TREIBGUT") iNum = gc.getMap().getWorldSize() + 1 for i in xrange(iNum): CvUtil.spawnUnit(iUnit, Ocean[CvUtil.myRandom(len(Ocean), "spawnFlotsam")], pBarbPlayer) # Tiere setzen -------------------- if Desert: if CvUtil.myRandom(33, "setAnimals4Desert") == 1: setAnimals(gc.getInfoTypeForString("UNIT_CAMEL"),Desert) setAnimals(gc.getInfoTypeForString("UNIT_LION"),Desert) setAnimals(gc.getInfoTypeForString("UNIT_HYENA"),Desert) elif DenseForest: if CvUtil.myRandom(33, "setAnimals4DenseForest") == 1: setAnimals(gc.getInfoTypeForString("UNIT_WOLF"),DenseForest) setAnimals(gc.getInfoTypeForString("UNIT_UR"),DenseForest) setAnimals(gc.getInfoTypeForString("UNIT_BEAR"),DenseForest) elif Tundra: if CvUtil.myRandom(33, "setAnimals4Tundra") == 1: setAnimals(gc.getInfoTypeForString("UNIT_WOLF"),Tundra) setAnimals(gc.getInfoTypeForString("UNIT_BEAR"),Tundra) elif Jungle: if CvUtil.myRandom(33, "setAnimals4Jungle") == 1: setAnimals(gc.getInfoTypeForString("UNIT_PANTHER"),Jungle) setAnimals(gc.getInfoTypeForString("UNIT_TIGER"),Jungle) setAnimals(gc.getInfoTypeForString("UNIT_LEOPARD"),Jungle) setAnimals(gc.getInfoTypeForString("UNIT_ELEFANT"),Jungle) elif Forest: if CvUtil.myRandom(33, "setAnimals4Forest") == 1: setAnimals(gc.getInfoTypeForString("UNIT_WOLF"),Forest) setAnimals(gc.getInfoTypeForString("UNIT_BEAR"),Forest) setAnimals(gc.getInfoTypeForString("UNIT_BOAR"),Forest) setAnimals(gc.getInfoTypeForString("UNIT_DEER"),Forest) elif Plains: if CvUtil.myRandom(33, "setAnimals4Plains") == 1: setAnimals(gc.getInfoTypeForString("UNIT_HYENA"),Plains) setAnimals(gc.getInfoTypeForString("UNIT_LEOPARD"),Plains) #setAnimals(gc.getInfoTypeForString("UNIT_HORSE"),Plains) # Goody huts setzen if bGoodyHuts: nPlots = Jungle + Forest + Plains if nPlots: if CvUtil.myRandom(33, "setGoodyHuts") == 1: setGoodies(impGoody,iGoodyHuts,nPlots) # Barbaren Forts setzen if bBarbForts: nPlots = Hills if nPlots: if CvUtil.myRandom(33, "setBarbForts") == 1: setGoodies(impBarbFort,iBarbForts,nPlots) # Caves setzen nPlots = Jungle + Forest + DenseForest + Desert + Tundra if nPlots: if CvUtil.myRandom(33, "setCaves") == 1: setGoodies(impCave,iCaves,nPlots) # move Desertstorm / Sandsturm bewegen if lDesertStorm: doMoveDesertStorm(lDesertStorm) # Olympiade / Olympic Games / Panhellenic Games doOlympicGames()