Exemplo n.º 1
0
def updateRiverFeature(pPlot, riverDesc, bSave=False):
	"""Reset plot, apply new river tile description and
	redraw. Optionally, invoke save of new values in
	script field."""
	pPlot.resetFeatureModel()
	iVariety = pPlot.getFeatureVariety()

	# Aktualisiere Variety, falls erforderlich.
	if riverDesc.getVariety() is not iVariety:
		iFeature = pPlot.getFeatureType()
		iVariety = riverDesc.getVariety()
		pPlot.setFeatureType(-1, 0)
		pPlot.setFeatureType(iFeature, iVariety)

	# Verstecken aller Unterknoten
	_resetRiverFeature(pPlot)

	# Anzeigen des passenden Unterknoten und Anpassung der Textur(en)
	bShowRiverFeatures = not CyUserProfile().getPlayerOption(
		PlayerOptionTypes.PLAYEROPTION_MODDER_1)
	if bShowRiverFeatures:
		riverDesc.draw(pPlot)

	if riverDesc.rtype is None or riverDesc.align is None:
		return

	# Speichern der neuen Werte
	if bSave:
		CvUtil.addScriptData(pPlot, "r", riverDesc.dumpScriptDict())
Exemplo n.º 2
0
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)