|
From: <sjo...@us...> - 2010-07-25 11:48:53
|
Revision: 3071
http://civ4mods.svn.sourceforge.net/civ4mods/?rev=3071&view=rev
Author: sjodster
Date: 2010-07-25 11:48:46 +0000 (Sun, 25 Jul 2010)
Log Message:
-----------
Initial commit of stock BTS Python files:
* Popup.py
* CvEventInterface.py
* CvRandomEventInterface.py
* CvDomesticAdvisor.py
* CvInfoScreen.py
Added Paths:
-----------
realism/bts/trunk/mod/Assets/Python/EntryPoints/CvEventInterface.py
realism/bts/trunk/mod/Assets/Python/EntryPoints/CvRandomEventInterface.py
realism/bts/trunk/mod/Assets/Python/Screens/CvDomesticAdvisor.py
realism/bts/trunk/mod/Assets/Python/Screens/CvInfoScreen.py
realism/bts/trunk/mod/Assets/Python/pyHelper/
realism/bts/trunk/mod/Assets/Python/pyHelper/Popup.py
Added: realism/bts/trunk/mod/Assets/Python/EntryPoints/CvEventInterface.py
===================================================================
--- realism/bts/trunk/mod/Assets/Python/EntryPoints/CvEventInterface.py (rev 0)
+++ realism/bts/trunk/mod/Assets/Python/EntryPoints/CvEventInterface.py 2010-07-25 11:48:46 UTC (rev 3071)
@@ -0,0 +1,30 @@
+# Sid Meier's Civilization 4
+# Copyright Firaxis Games 2005
+#
+# CvEventInterface.py
+#
+# These functions are App Entry Points from C++
+# WARNING: These function names should not be changed
+# WARNING: These functions can not be placed into a class
+#
+# No other modules should import this
+#
+import CvUtil
+import CvEventManager
+from CvPythonExtensions import *
+
+normalEventManager = CvEventManager.CvEventManager()
+
+def getEventManager():
+ return normalEventManager
+
+def onEvent(argsList):
+ 'Called when a game event happens - return 1 if the event was consumed'
+ return getEventManager().handleEvent(argsList)
+
+def applyEvent(argsList):
+ context, playerID, netUserData, popupReturn = argsList
+ return getEventManager().applyEvent(argsList)
+
+def beginEvent(context, argsList=-1):
+ return getEventManager().beginEvent(context, argsList)
Added: realism/bts/trunk/mod/Assets/Python/EntryPoints/CvRandomEventInterface.py
===================================================================
--- realism/bts/trunk/mod/Assets/Python/EntryPoints/CvRandomEventInterface.py (rev 0)
+++ realism/bts/trunk/mod/Assets/Python/EntryPoints/CvRandomEventInterface.py 2010-07-25 11:48:46 UTC (rev 3071)
@@ -0,0 +1,4122 @@
+# Sid Meier's Civilization 4
+# Copyright Firaxis Games 2005
+#
+# CvRandomEventInterface.py
+#
+# These functions are App Entry Points from C++
+# WARNING: These function names should not be changed
+# WARNING: These functions can not be placed into a class
+#
+# No other modules should import this
+#
+import CvUtil
+from CvPythonExtensions import *
+
+gc = CyGlobalContext()
+localText = CyTranslator()
+
+
+######## BLESSED SEA ###########
+
+def getHelpBlessedSea1(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ map = gc.getMap()
+ iOurMinLandmass = (3 * gc.getWorldInfo(map.getWorldSize()).getDefaultPlayers()) / 2
+
+ szHelp = localText.getText("TXT_KEY_EVENT_BLESSED_SEA_HELP", (iOurMinLandmass, ))
+
+ return szHelp
+
+def canTriggerBlessedSea(argsList):
+ kTriggeredData = argsList[0]
+ map = gc.getMap()
+
+ if gc.getGame().isOption(GameOptionTypes.GAMEOPTION_ONE_CITY_CHALLENGE) and gc.getPlayer(kTriggeredData.ePlayer).isHuman():
+ return false
+
+ iMapMinLandmass = 2 * gc.getWorldInfo(map.getWorldSize()).getDefaultPlayers()
+ iOurMaxLandmass = gc.getWorldInfo(map.getWorldSize()).getDefaultPlayers() / 2
+
+ if (map.getNumLandAreas() < iMapMinLandmass):
+ return false
+
+ iOurLandmasses = 0
+ for i in range(map.getIndexAfterLastArea()):
+ area = map.getArea(i)
+ if not area.isNone() and not area.isWater() and area.getCitiesPerPlayer(kTriggeredData.ePlayer) > 0:
+ iOurLandmasses += 1
+
+ if (iOurLandmasses > iOurMaxLandmass):
+ return false
+
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+ if player.getUnitClassCount(CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_GALLEY')) == 0:
+ if player.getUnitClassCount(CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_CARAVEL')) == 0:
+ if player.getUnitClassCount(CvUtil.findInfoTypeNum(gc.getUnitClassInfo, gc.getNumUnitClassInfos(), 'UNITCLASS_GALLEON')) == 0:
+ return false
+
+ return true
+
+def canTriggerBlessedSea2(argsList):
+
+ kTriggeredData = argsList[0]
+ map = gc.getMap()
+ iOurMinLandmass = (3 * gc.getWorldInfo(map.getWorldSize()).getDefaultPlayers()) / 2
+
+ iOurLandmasses = 0
+ for i in range(map.getIndexAfterLastArea()):
+ area = map.getArea(i)
+ if not area.isNone() and not area.isWater() and area.getCitiesPerPlayer(kTriggeredData.ePlayer) > 0:
+ iOurLandmasses += 1
+
+ if (iOurLandmasses < iOurMinLandmass):
+ return false
+
+ return true
+
+def applyBlessedSea2(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ iBuilding = -1
+
+ if (-1 != kTriggeredData.eReligion):
+ for i in range(gc.getNumBuildingInfos()):
+ if (gc.getBuildingInfo(i).getSpecialBuildingType() == CvUtil.findInfoTypeNum(gc.getSpecialBuildingInfo,gc.getNumSpecialBuildingInfos(),'SPECIALBUILDING_TEMPLE')):
+ if (gc.getBuildingInfo(i).getReligionType() == kTriggeredData.eReligion):
+ iBuilding = i
+ break
+
+
+ if (iBuilding == -1):
+ return
+
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+ (loopCity, iter) = player.firstCity(false)
+
+ while(loopCity):
+
+ if (loopCity.getPopulation() >= 5):
+ if (loopCity.canConstruct(iBuilding, false, false, true)):
+ loopCity.setNumRealBuilding(iBuilding, 1)
+
+ (loopCity, iter) = player.nextCity(iter, false)
+
+
+def canApplyBlessedSea2(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ iBuilding = -1
+
+ if (-1 != kTriggeredData.eReligion):
+ for i in range(gc.getNumBuildingInfos()):
+ if (gc.getBuildingInfo(i).getSpecialBuildingType() == CvUtil.findInfoTypeNum(gc.getSpecialBuildingInfo,gc.getNumSpecialBuildingInfos(),'SPECIALBUILDING_TEMPLE')):
+ if (gc.getBuildingInfo(i).getReligionType() == kTriggeredData.eReligion):
+ iBuilding = i
+ break
+
+
+ if (iBuilding == -1):
+ return false
+
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+ (loopCity, iter) = player.firstCity(false)
+ bFound = false
+
+ while(loopCity):
+
+ if (loopCity.getPopulation() >= 5):
+ if (loopCity.canConstruct(iBuilding, false, false, true)):
+ bFound = true
+ break
+
+ (loopCity, iter) = player.nextCity(iter, false)
+
+ return bFound
+
+
+######## HOLY MOUNTAIN ###########
+
+def getHelpHolyMountain1(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ map = gc.getMap()
+ iMinPoints = 2 * gc.getWorldInfo(map.getWorldSize()).getDefaultPlayers()
+
+ iBuilding = -1
+ iReligion = gc.getPlayer(kTriggeredData.ePlayer).getStateReligion()
+
+ if (-1 != iReligion):
+ for i in range(gc.getNumBuildingInfos()):
+ if (gc.getBuildingInfo(i).getSpecialBuildingType() == CvUtil.findInfoTypeNum(gc.getSpecialBuildingInfo, gc.getNumSpecialBuildingInfos(), 'SPECIALBUILDING_CATHEDRAL')):
+ if (gc.getBuildingInfo(i).getReligionType() == iReligion):
+ iBuilding = i
+ break
+
+
+ szHelp = localText.getText("TXT_KEY_EVENT_HOLY_MOUNTAIN_HELP", ( gc.getBuildingInfo(iBuilding).getTextKey(), gc.getBuildingInfo(iBuilding).getTextKey(), iMinPoints))
+
+ return szHelp
+
+def canTriggerHolyMountain(argsList):
+ kTriggeredData = argsList[0]
+ map = gc.getMap()
+
+ if gc.getGame().isOption(GameOptionTypes.GAMEOPTION_ONE_CITY_CHALLENGE) and gc.getPlayer(kTriggeredData.ePlayer).isHuman():
+ return false
+
+ plot = gc.getMap().plot(kTriggeredData.iPlotX, kTriggeredData.iPlotY)
+ if (plot.getOwner() == -1):
+ return true
+
+ return false
+
+def expireHolyMountain1(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ plot = gc.getMap().plot(kTriggeredData.iPlotX, kTriggeredData.iPlotY)
+ if (plot == None):
+ return true
+
+ if (plot.getOwner() != kTriggeredData.ePlayer and plot.getOwner() != -1):
+ return true
+
+ return false
+
+def canTriggerHolyMountainDone(argsList):
+
+ kTriggeredData = argsList[0]
+ trigger = gc.getEventTriggerInfo(kTriggeredData.eTrigger)
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+
+ kOrigTriggeredData = player.getEventOccured(trigger.getPrereqEvent(0))
+
+ if (kOrigTriggeredData == None):
+ return false
+
+ plot = gc.getMap().plot(kOrigTriggeredData.iPlotX, kOrigTriggeredData.iPlotY)
+ if (plot == None):
+ return false
+
+ if (plot.getOwner() != kTriggeredData.ePlayer):
+ return false
+
+ return true
+
+def canTriggerHolyMountainRevealed(argsList):
+
+ kTriggeredData = argsList[0]
+ trigger = gc.getEventTriggerInfo(kTriggeredData.eTrigger)
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+
+ kOrigTriggeredData = player.getEventOccured(trigger.getPrereqEvent(0))
+
+ if (kOrigTriggeredData == None):
+ return false
+
+ iNumPoints = 0
+
+ for i in range(gc.getNumBuildingInfos()):
+ if (gc.getBuildingInfo(i).getReligionType() == kOrigTriggeredData.eReligion):
+ if (gc.getBuildingInfo(i).getSpecialBuildingType() == CvUtil.findInfoTypeNum(gc.getSpecialBuildingInfo,gc.getNumSpecialBuildingInfos(),'SPECIALBUILDING_CATHEDRAL')):
+ iNumPoints += 4 * player.countNumBuildings(i)
+ elif (gc.getBuildingInfo(i).getSpecialBuildingType() == CvUtil.findInfoTypeNum(gc.getSpecialBuildingInfo,gc.getNumSpecialBuildingInfos(),'SPECIALBUILDING_TEMPLE')):
+ iNumPoints += player.countNumBuildings(i)
+ elif (gc.getBuildingInfo(i).getSpecialBuildingType() == CvUtil.findInfoTypeNum(gc.getSpecialBuildingInfo,gc.getNumSpecialBuildingInfos(),'SPECIALBUILDING_MONASTERY')):
+ iNumPoints += player.countNumBuildings(i)
+
+ if (iNumPoints < 2 * gc.getWorldInfo(gc.getMap().getWorldSize()).getDefaultPlayers()):
+ return false
+
+ plot = gc.getMap().plot(kOrigTriggeredData.iPlotX, kOrigTriggeredData.iPlotY)
+ if (plot == None):
+ return false
+
+ plot.setRevealed(player.getTeam(), true, true, -1)
+
+ kActualTriggeredDataObject = player.getEventTriggered(kTriggeredData.iId)
+ kActualTriggeredDataObject.iPlotX = kOrigTriggeredData.iPlotX
+ kActualTriggeredDataObject.iPlotY = kOrigTriggeredData.iPlotY
+
+ return true
+
+def doHolyMountainRevealed(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ if (kTriggeredData.ePlayer == gc.getGame().getActivePlayer()):
+ CyCamera().JustLookAtPlot( CyMap().plot( kTriggeredData.iPlotX, kTriggeredData.iPlotY ) )
+
+ return 1
+
+######## MARATHON ###########
+
+def canTriggerMarathon(argsList):
+ kTriggeredData = argsList[0]
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+ otherPlayer = gc.getPlayer(kTriggeredData.eOtherPlayer)
+ team = gc.getTeam(player.getTeam())
+
+ if (team.AI_getAtWarCounter(otherPlayer.getTeam()) == 1):
+ (loopUnit, iter) = otherPlayer.firstUnit(false)
+ while( loopUnit ):
+ plot = loopUnit.plot()
+ if (not plot.isNone()):
+ if (plot.getOwner() == kTriggeredData.ePlayer):
+ return true
+ (loopUnit, iter) = otherPlayer.nextUnit(iter, false)
+
+ return false
+
+######## WEDDING FEUD ###########
+
+def doWeddingFeud2(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+ (loopCity, iter) = player.firstCity(false)
+
+ while(loopCity):
+ if loopCity.isHasReligion(kTriggeredData.eReligion):
+ loopCity.changeHappinessTimer(30)
+ (loopCity, iter) = player.nextCity(iter, false)
+
+ return 1
+
+def getHelpWeddingFeud2(argsList):
+ iEvent = argsList[0]
+ event = gc.getEventInfo(iEvent)
+ kTriggeredData = argsList[1]
+ religion = gc.getReligionInfo(kTriggeredData.eReligion)
+
+ szHelp = localText.getText("TXT_KEY_EVENT_WEDDING_FEUD_2_HELP", (gc.getDefineINT("TEMP_HAPPY"), 30, religion.getChar()))
+
+ return szHelp
+
+def canDoWeddingFeud3(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+
+ if player.getGold() - 10 * player.getNumCities() < 0:
+ return false
+
+ return true
+
+
+def doWeddingFeud3(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ destPlayer = gc.getPlayer(kTriggeredData.eOtherPlayer)
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+
+ for iLoopPlayer in range(gc.getMAX_CIV_PLAYERS()):
+ loopPlayer = gc.getPlayer(iLoopPlayer)
+ if loopPlayer.isAlive() and loopPlayer.getStateReligion() == player.getStateReligion():
+ loopPlayer.AI_changeAttitudeExtra(kTriggeredData.ePlayer, 1)
+ player.AI_changeAttitudeExtra(iLoopPlayer, 1)
+
+ if gc.getTeam(destPlayer.getTeam()).canDeclareWar(player.getTeam()):
+ if destPlayer.isHuman():
+ # this works only because it's a single-player only event
+ popupInfo = CyPopupInfo()
+ popupInfo.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_PYTHON)
+ popupInfo.setText(localText.getText("TXT_KEY_EVENT_WEDDING_FEUD_OTHER_3", (gc.getReligionInfo(kTriggeredData.eReligion).getAdjectiveKey(), player.getCivilizationShortDescriptionKey())))
+ popupInfo.setData1(kTriggeredData.eOtherPlayer)
+ popupInfo.setData2(kTriggeredData.ePlayer)
+ popupInfo.setPythonModule("CvRandomEventInterface")
+ popupInfo.setOnClickedPythonCallback("weddingFeud3Callback")
+ popupInfo.addPythonButton(localText.getText("TXT_KEY_POPUP_YES", ()), "")
+ popupInfo.addPythonButton(localText.getText("TXT_KEY_POPUP_NO", ()), "")
+ popupInfo.addPopup(kTriggeredData.eOtherPlayer)
+ else:
+ gc.getTeam(destPlayer.getTeam()).declareWar(player.getTeam(), false, WarPlanTypes.WARPLAN_LIMITED)
+
+ return 1
+
+
+def weddingFeud3Callback(argsList):
+ iButton = argsList[0]
+ iData1 = argsList[1]
+ iData2 = argsList[2]
+ iData3 = argsList[3]
+ szText = argsList[4]
+ bOption1 = argsList[5]
+ bOption2 = argsList[6]
+
+ if iButton == 0:
+ destPlayer = gc.getPlayer(iData1)
+ player = gc.getPlayer(iData2)
+ gc.getTeam(destPlayer.getTeam()).declareWar(player.getTeam(), false, WarPlanTypes.WARPLAN_LIMITED)
+
+ return 0
+
+def getHelpWeddingFeud3(argsList):
+ iEvent = argsList[0]
+ event = gc.getEventInfo(iEvent)
+ kTriggeredData = argsList[1]
+ religion = gc.getReligionInfo(kTriggeredData.eReligion)
+
+ szHelp = localText.getText("TXT_KEY_EVENT_WEDDING_FEUD_3_HELP", (1, religion.getChar()))
+
+ return szHelp
+
+######## SPICY ###########
+
+def canTriggerSpicy(argsList):
+
+ kTriggeredData = argsList[0]
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+
+ iSpice = CvUtil.findInfoTypeNum(gc.getBonusInfo,gc.getNumBonusInfos(),'BONUS_SPICES')
+ iHappyBonuses = 0
+ bSpices = false
+ for i in range(gc.getNumBonusInfos()):
+ bonus = gc.getBonusInfo(i)
+ iNum = player.getNumAvailableBonuses(i)
+ if iNum > 0 :
+ if bonus.getHappiness() > 0:
+ iHappyBonuses += 1
+ if iHappyBonuses > 4:
+ return false
+ if i == iSpice:
+ return false
+
+ plot = gc.getMap().plot(kTriggeredData.iPlotX, kTriggeredData.iPlotY)
+ if not plot.canHaveBonus(iSpice, false):
+ return false
+
+ return true
+
+def doSpicy2(argsList):
+# need this because plantations are notmally not allowed unless there are already spices
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ plot = gc.getMap().plot(kTriggeredData.iPlotX, kTriggeredData.iPlotY)
+
+ if not plot.isNone():
+ plot.setImprovementType(CvUtil.findInfoTypeNum(gc.getImprovementInfo,gc.getNumImprovementInfos(),'IMPROVEMENT_PLANTATION'))
+
+ return 1
+
+def getHelpSpicy2(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ iPlantation = CvUtil.findInfoTypeNum(gc.getImprovementInfo,gc.getNumImprovementInfos(),'IMPROVEMENT_PLANTATION')
+ szHelp = localText.getText("TXT_KEY_EVENT_IMPROVEMENT_GROWTH", ( gc.getImprovementInfo(iPlantation).getTextKey(), ))
+
+ return szHelp
+
+######## BABY BOOM ###########
+
+def canTriggerBabyBoom(argsList):
+ kTriggeredData = argsList[0]
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+ team = gc.getTeam(player.getTeam())
+
+ if team.getAtWarCount(true) > 0:
+ return false
+
+ for iLoopTeam in range(gc.getMAX_CIV_TEAMS()):
+ if iLoopTeam != player.getTeam():
+ if team.AI_getAtPeaceCounter(iLoopTeam) == 1:
+ return true
+
+ return false
+
+######## BARD TALE ###########
+
+def applyBardTale3(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+
+ player.changeGold(-10 * player.getNumCities())
+
+def canApplyBardTale3(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+
+ if player.getGold() - 10 * player.getNumCities() < 0:
+ return false
+
+ return true
+
+
+def getHelpBardTale3(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+
+ szHelp = localText.getText("TXT_KEY_EVENT_GOLD_LOST", (10 * player.getNumCities(), ))
+
+ return szHelp
+
+######## LOOTERS ###########
+
+def getHelpLooters3(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+ otherPlayer = gc.getPlayer(kTriggeredData.eOtherPlayer)
+ city = otherPlayer.getCity(kTriggeredData.iOtherPlayerCityId)
+
+ szHelp = localText.getText("TXT_KEY_EVENT_LOOTERS_3_HELP", (1, 2, city.getNameKey()))
+
+ return szHelp
+
+def canApplyLooters3(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ otherPlayer = gc.getPlayer(kTriggeredData.eOtherPlayer)
+ city = otherPlayer.getCity(kTriggeredData.iOtherPlayerCityId)
+
+ iNumBuildings = 0
+ for iBuilding in range(gc.getNumBuildingInfos()):
+ if (city.getNumRealBuilding(iBuilding) > 0 and gc.getBuildingInfo(iBuilding).getProductionCost() <= 100 and gc.getBuildingInfo(iBuilding).getProductionCost() > 0 and not isLimitedWonderClass(gc.getBuildingInfo(iBuilding).getBuildingClassType())):
+ iNumBuildings += 1
+
+ return (iNumBuildings > 0)
+
+
+def applyLooters3(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ otherPlayer = gc.getPlayer(kTriggeredData.eOtherPlayer)
+ city = otherPlayer.getCity(kTriggeredData.iOtherPlayerCityId)
+
+ iNumBuildings = gc.getGame().getSorenRandNum(2, "Looters event number of buildings destroyed")
+ iNumBuildingsDestroyed = 0
+
+ listBuildings = []
+ for iBuilding in range(gc.getNumBuildingInfos()):
+ if (city.getNumRealBuilding(iBuilding) > 0 and gc.getBuildingInfo(iBuilding).getProductionCost() <= 100 and gc.getBuildingInfo(iBuilding).getProductionCost() > 0 and not isLimitedWonderClass(gc.getBuildingInfo(iBuilding).getBuildingClassType())):
+ listBuildings.append(iBuilding)
+
+ for i in range(iNumBuildings+1):
+ if len(listBuildings) > 0:
+ iBuilding = listBuildings[gc.getGame().getSorenRandNum(len(listBuildings), "Looters event building destroyed")]
+ szBuffer = localText.getText("TXT_KEY_EVENT_CITY_IMPROVEMENT_DESTROYED", (gc.getBuildingInfo(iBuilding).getTextKey(), ))
+ CyInterface().addMessage(kTriggeredData.eOtherPlayer, false, gc.getEVENT_MESSAGE_TIME(), szBuffer, "AS2D_BOMBARDED", InterfaceMessageTypes.MESSAGE_TYPE_INFO, gc.getBuildingInfo(iBuilding).getButton(), gc.getInfoTypeForString("COLOR_RED"), city.getX(), city.getY(), true, true)
+ city.setNumRealBuilding(iBuilding, 0)
+ iNumBuildingsDestroyed += 1
+ listBuildings.remove(iBuilding)
+
+ if iNumBuildingsDestroyed > 0:
+ szBuffer = localText.getText("TXT_KEY_EVENT_NUM_BUILDINGS_DESTROYED", (iNumBuildingsDestroyed, gc.getPlayer(kTriggeredData.eOtherPlayer).getCivilizationAdjectiveKey(), city.getNameKey()))
+ CyInterface().addMessage(kTriggeredData.ePlayer, false, gc.getEVENT_MESSAGE_TIME(), szBuffer, "AS2D_BOMBARDED", InterfaceMessageTypes.MESSAGE_TYPE_INFO, None, gc.getInfoTypeForString("COLOR_WHITE"), -1, -1, true, true)
+
+######## BROTHERS IN NEED ###########
+
+def canTriggerBrothersInNeed(argsList):
+ kTriggeredData = argsList[0]
+ trigger = gc.getEventTriggerInfo(kTriggeredData.eTrigger)
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+ otherPlayer = gc.getPlayer(kTriggeredData.eOtherPlayer)
+
+ if not player.canTradeNetworkWith(kTriggeredData.eOtherPlayer):
+ return false
+
+ listResources = []
+ listResources.append(CvUtil.findInfoTypeNum(gc.getBonusInfo,gc.getNumBonusInfos(),'BONUS_COPPER'))
+ listResources.append(CvUtil.findInfoTypeNum(gc.getBonusInfo,gc.getNumBonusInfos(),'BONUS_IRON'))
+ listResources.append(CvUtil.findInfoTypeNum(gc.getBonusInfo,gc.getNumBonusInfos(),'BONUS_HORSE'))
+ listResources.append(CvUtil.findInfoTypeNum(gc.getBonusInfo,gc.getNumBonusInfos(),'BONUS_IVORY'))
+ listResources.append(CvUtil.findInfoTypeNum(gc.getBonusInfo,gc.getNumBonusInfos(),'BONUS_OIL'))
+ listResources.append(CvUtil.findInfoTypeNum(gc.getBonusInfo,gc.getNumBonusInfos(),'BONUS_URANIUM'))
+
+ bFound = false
+ for iResource in listResources:
+ if (player.getNumTradeableBonuses(iResource) > 1 and otherPlayer.getNumAvailableBonuses(iResource) <= 0):
+ bFound = true
+ break
+
+ if not bFound:
+ return false
+
+ for iTeam in range(gc.getMAX_CIV_TEAMS()):
+ if iTeam != player.getTeam() and iTeam != otherPlayer.getTeam() and gc.getTeam(iTeam).isAlive():
+ if gc.getTeam(iTeam).isAtWar(otherPlayer.getTeam()) and not gc.getTeam(iTeam).isAtWar(player.getTeam()):
+ return true
+
+ return false
+
+def canDoBrothersInNeed1(argsList):
+ kTriggeredData = argsList[1]
+ newArgs = (kTriggeredData, )
+
+ return canTriggerBrothersInNeed(newArgs)
+
+######## HURRICANE ###########
+
+def canTriggerHurricaneCity(argsList):
+ eTrigger = argsList[0]
+ ePlayer = argsList[1]
+ iCity = argsList[2]
+
+ player = gc.getPlayer(ePlayer)
+ city = player.getCity(iCity)
+
+ if city.isNone():
+ return false
+
+ if not city.isCoastal(gc.getMIN_WATER_SIZE_FOR_OCEAN()):
+ return false
+
+ if city.plot().getLatitude() <= 0:
+ return false
+
+ if city.getPopulation() < 2:
+ return false
+
+ return true
+
+def canApplyHurricane1(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+ city = player.getCity(kTriggeredData.iCityId)
+
+ listBuildings = []
+ for iBuilding in range(gc.getNumBuildingInfos()):
+ if (city.getNumRealBuilding(iBuilding) > 0 and gc.getBuildingInfo(iBuilding).getProductionCost() > 0 and not isLimitedWonderClass(gc.getBuildingInfo(iBuilding).getBuildingClassType())):
+ listBuildings.append(iBuilding)
+
+ return (len(listBuildings) > 0)
+
+def canApplyHurricane2(argsList):
+ return (not canApplyHurricane1(argsList))
+
+
+def applyHurricane1(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+ city = player.getCity(kTriggeredData.iCityId)
+
+ listCheapBuildings = []
+ listExpensiveBuildings = []
+ for iBuilding in range(gc.getNumBuildingInfos()):
+ if (city.getNumRealBuilding(iBuilding) > 0 and gc.getBuildingInfo(iBuilding).getProductionCost() <= 100 and gc.getBuildingInfo(iBuilding).getProductionCost() > 0 and not isLimitedWonderClass(gc.getBuildingInfo(iBuilding).getBuildingClassType())):
+ listCheapBuildings.append(iBuilding)
+ if (city.getNumRealBuilding(iBuilding) > 0 and gc.getBuildingInfo(iBuilding).getProductionCost() > 100 and gc.getBuildingInfo(iBuilding).getProductionCost() > 0 and not isLimitedWonderClass(gc.getBuildingInfo(iBuilding).getBuildingClassType())):
+ listExpensiveBuildings.append(iBuilding)
+
+ if len(listCheapBuildings) > 0:
+ iBuilding = listCheapBuildings[gc.getGame().getSorenRandNum(len(listCheapBuildings), "Hurricane event cheap building destroyed")]
+ szBuffer = localText.getText("TXT_KEY_EVENT_CITY_IMPROVEMENT_DESTROYED", (gc.getBuildingInfo(iBuilding).getTextKey(), ))
+ CyInterface().addMessage(kTriggeredData.ePlayer, false, gc.getEVENT_MESSAGE_TIME(), szBuffer, "AS2D_BOMBARDED", InterfaceMessageTypes.MESSAGE_TYPE_INFO, gc.getBuildingInfo(iBuilding).getButton(), gc.getInfoTypeForString("COLOR_RED"), city.getX(), city.getY(), true, true)
+ city.setNumRealBuilding(iBuilding, 0)
+
+ if len(listExpensiveBuildings) > 0:
+ iBuilding = listExpensiveBuildings[gc.getGame().getSorenRandNum(len(listExpensiveBuildings), "Hurricane event expensive building destroyed")]
+ szBuffer = localText.getText("TXT_KEY_EVENT_CITY_IMPROVEMENT_DESTROYED", (gc.getBuildingInfo(iBuilding).getTextKey(), ))
+ CyInterface().addMessage(kTriggeredData.ePlayer, false, gc.getEVENT_MESSAGE_TIME(), szBuffer, "AS2D_BOMBARDED", InterfaceMessageTypes.MESSAGE_TYPE_INFO, gc.getBuildingInfo(iBuilding).getButton(), gc.getInfoTypeForString("COLOR_RED"), city.getX(), city.getY(), true, true)
+ city.setNumRealBuilding(iBuilding, 0)
+
+
+######## CYCLONE ###########
+
+def canTriggerCycloneCity(argsList):
+ eTrigger = argsList[0]
+ ePlayer = argsList[1]
+ iCity = argsList[2]
+
+ player = gc.getPlayer(ePlayer)
+ city = player.getCity(iCity)
+
+ if city.isNone():
+ return false
+
+ if not city.isCoastal(gc.getMIN_WATER_SIZE_FOR_OCEAN()):
+ return false
+
+ if city.plot().getLatitude() >= 0:
+ return false
+
+ return true
+
+######## TSUNAMI ###########
+
+def canTriggerTsunamiCity(argsList):
+ eTrigger = argsList[0]
+ ePlayer = argsList[1]
+ iCity = argsList[2]
+
+ player = gc.getPlayer(ePlayer)
+ city = player.getCity(iCity)
+
+ if city.isNone():
+ return false
+
+ if not city.isCoastal(gc.getMIN_WATER_SIZE_FOR_OCEAN()):
+ return false
+
+ return true
+
+def canApplyTsunami1(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+ city = player.getCity(kTriggeredData.iCityId)
+
+ return (city.getPopulation() < 6)
+
+def canApplyTsunami2(argsList):
+ return (not canApplyTsunami1(argsList))
+
+
+def applyTsunami1(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+ city = player.getCity(kTriggeredData.iCityId)
+
+ city.kill()
+
+def applyTsunami2(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+ city = player.getCity(kTriggeredData.iCityId)
+
+ listBuildings = []
+ for iBuilding in range(gc.getNumBuildingInfos()):
+ if (city.getNumRealBuilding(iBuilding) > 0 and gc.getBuildingInfo(iBuilding).getProductionCost() > 0 and not isLimitedWonderClass(gc.getBuildingInfo(iBuilding).getBuildingClassType())):
+ listBuildings.append(iBuilding)
+
+ for i in range(5):
+ if len(listBuildings) > 0:
+ iBuilding = listBuildings[gc.getGame().getSorenRandNum(len(listBuildings), "Tsunami event building destroyed")]
+ szBuffer = localText.getText("TXT_KEY_EVENT_CITY_IMPROVEMENT_DESTROYED", (gc.getBuildingInfo(iBuilding).getTextKey(), ))
+ CyInterface().addMessage(kTriggeredData.ePlayer, false, gc.getEVENT_MESSAGE_TIME(), szBuffer, "AS2D_BOMBARDED", InterfaceMessageTypes.MESSAGE_TYPE_INFO, gc.getBuildingInfo(iBuilding).getButton(), gc.getInfoTypeForString("COLOR_RED"), city.getX(), city.getY(), true, true)
+ city.setNumRealBuilding(iBuilding, 0)
+ listBuildings.remove(iBuilding)
+
+
+def getHelpTsunami2(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+ city = player.getCity(kTriggeredData.iCityId)
+
+ szHelp = localText.getText("TXT_KEY_EVENT_TSUNAMI_2_HELP", (5, city.getNameKey()))
+
+ return szHelp
+
+
+######## MONSOON ###########
+
+def canTriggerMonsoonCity(argsList):
+ eTrigger = argsList[0]
+ ePlayer = argsList[1]
+ iCity = argsList[2]
+
+ player = gc.getPlayer(ePlayer)
+ city = player.getCity(iCity)
+
+ if city.isNone():
+ return false
+
+ if city.isCoastal(gc.getMIN_WATER_SIZE_FOR_OCEAN()):
+ return false
+
+ iJungleType = CvUtil.findInfoTypeNum(gc.getFeatureInfo, gc.getNumFeatureInfos(),'FEATURE_JUNGLE')
+
+ for iDX in range(-3, 4):
+ for iDY in range(-3, 4):
+ pLoopPlot = plotXY(city.getX(), city.getY(), iDX, iDY)
+ if not pLoopPlot.isNone() and pLoopPlot.getFeatureType() == iJungleType:
+ return true
+
+ return false
+
+######## VOLCANO ###########
+
+def getHelpVolcano1(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ szHelp = localText.getText("TXT_KEY_EVENT_VOLCANO_1_HELP", ())
+
+ return szHelp
+
+def canApplyVolcano1(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ iNumImprovements = 0
+ for iDX in range(-1, 2):
+ for iDY in range(-1, 2):
+ loopPlot = plotXY(kTriggeredData.iPlotX, kTriggeredData.iPlotY, iDX, iDY)
+ if not loopPlot.isNone():
+ if (iDX != 0 or iDY != 0):
+ if loopPlot.getImprovementType() != -1:
+ iNumImprovements += 1
+
+ return (iNumImprovements > 0)
+
+def applyVolcano1(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ listPlots = []
+ for iDX in range(-1, 2):
+ for iDY in range(-1, 2):
+ loopPlot = plotXY(kTriggeredData.iPlotX, kTriggeredData.iPlotY, iDX, iDY)
+ if not loopPlot.isNone():
+ if (iDX != 0 or iDY != 0):
+ if loopPlot.getImprovementType() != -1:
+ listPlots.append(loopPlot)
+
+ listRuins = []
+ listRuins.append(CvUtil.findInfoTypeNum(gc.getImprovementInfo,gc.getNumImprovementInfos(),'IMPROVEMENT_COTTAGE'))
+ listRuins.append(CvUtil.findInfoTypeNum(gc.getImprovementInfo,gc.getNumImprovementInfos(),'IMPROVEMENT_HAMLET'))
+ listRuins.append(CvUtil.findInfoTypeNum(gc.getImprovementInfo,gc.getNumImprovementInfos(),'IMPROVEMENT_VILLAGE'))
+ listRuins.append(CvUtil.findInfoTypeNum(gc.getImprovementInfo,gc.getNumImprovementInfos(),'IMPROVEMENT_TOWN'))
+
+ iRuins = CvUtil.findInfoTypeNum(gc.getImprovementInfo,gc.getNumImprovementInfos(),'IMPROVEMENT_CITY_RUINS')
+
+ for i in range(3):
+ if len(listPlots) > 0:
+ plot = listPlots[gc.getGame().getSorenRandNum(len(listPlots), "Volcano event improvement destroyed")]
+ iImprovement = plot.getImprovementType()
+ szBuffer = localText.getText("TXT_KEY_EVENT_CITY_IMPROVEMENT_DESTROYED", (gc.getImprovementInfo(iImprovement).getTextKey(), ))
+ CyInterface().addMessage(kTriggeredData.ePlayer, false, gc.getEVENT_MESSAGE_TIME(), szBuffer, "AS2D_BOMBARDED", InterfaceMessageTypes.MESSAGE_TYPE_INFO, gc.getImprovementInfo(iImprovement).getButton(), gc.getInfoTypeForString("COLOR_RED"), plot.getX(), plot.getY(), true, true)
+ if iImprovement in listRuins:
+ plot.setImprovementType(iRuins)
+ else:
+ plot.setImprovementType(-1)
+ listPlots.remove(plot)
+
+ if i == 1 and gc.getGame().getSorenRandNum(100, "Volcano event num improvements destroyed") < 50:
+ break
+
+######## DUSTBOWL ###########
+
+def canTriggerDustbowlCont(argsList):
+ kTriggeredData = argsList[0]
+
+ trigger = gc.getEventTriggerInfo(kTriggeredData.eTrigger)
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+
+ kOrigTriggeredData = player.getEventOccured(trigger.getPrereqEvent(0))
+
+ if (kOrigTriggeredData == None):
+ return false
+
+ iFarmType = CvUtil.findInfoTypeNum(gc.getImprovementInfo,gc.getNumImprovementInfos(),'IMPROVEMENT_FARM')
+ iPlainsType = CvUtil.findInfoTypeNum(gc.getTerrainInfo,gc.getNumTerrainInfos(),'TERRAIN_PLAINS')
+
+ map = gc.getMap()
+ iBestValue = map.getGridWidth() + map.getGridHeight()
+ bestPlot = None
+ for i in range(map.numPlots()):
+ plot = map.plotByIndex(i)
+ if (plot.getOwner() == kTriggeredData.ePlayer and plot.getImprovementType() == iFarmType and plot.getTerrainType() == iPlainsType):
+ iValue = plotDistance(kOrigTriggeredData.iPlotX, kOrigTriggeredData.iPlotY, plot.getX(), plot.getY())
+ if iValue < iBestValue:
+ iBestValue = iValue
+ bestPlot = plot
+
+ if bestPlot != None:
+ kActualTriggeredDataObject = player.getEventTriggered(kTriggeredData.iId)
+ kActualTriggeredDataObject.iPlotX = bestPlot.getX()
+ kActualTriggeredDataObject.iPlotY = bestPlot.getY()
+ else:
+ player.resetEventOccured(trigger.getPrereqEvent(0))
+ return false
+
+ return true
+
+def getHelpDustBowl2(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ szHelp = localText.getText("TXT_KEY_EVENT_DUSTBOWL_2_HELP", ())
+
+ return szHelp
+
+######## SALTPETER ###########
+
+def getSaltpeterNumExtraPlots():
+ map = gc.getMap()
+ if map.getWorldSize() <= 1:
+ return 1
+ elif map.getWorldSize() <= 3:
+ return 2
+ elif map.getWorldSize() <= 4:
+ return 3
+ else:
+ return 4
+
+def getHelpSaltpeter(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ szHelp = localText.getText("TXT_KEY_EVENT_SALTPETER_HELP", (getSaltpeterNumExtraPlots(), ))
+
+ return szHelp
+
+def canApplySaltpeter(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ map = gc.getMap()
+
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+
+ plot = gc.getMap().plot(kTriggeredData.iPlotX, kTriggeredData.iPlotY)
+ if (plot == None):
+ return false
+
+ iForest = CvUtil.findInfoTypeNum(gc.getFeatureInfo,gc.getNumFeatureInfos(),'FEATURE_FOREST')
+
+ iNumPlots = 0
+ for i in range(map.numPlots()):
+ loopPlot = map.plotByIndex(i)
+ if (loopPlot.getOwner() == kTriggeredData.ePlayer and loopPlot.getFeatureType() == iForest and loopPlot.isHills()):
+ iDistance = plotDistance(kTriggeredData.iPlotX, kTriggeredData.iPlotY, loopPlot.getX(), loopPlot.getY())
+ if iDistance > 0:
+ iNumPlots += 1
+
+ return (iNumPlots >= getSaltpeterNumExtraPlots())
+
+def applySaltpeter(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ map = gc.getMap()
+
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+
+ plot = gc.getMap().plot(kTriggeredData.iPlotX, kTriggeredData.iPlotY)
+ if (plot == None):
+ return
+
+ iForest = CvUtil.findInfoTypeNum(gc.getFeatureInfo,gc.getNumFeatureInfos(),'FEATURE_FOREST')
+
+ listPlots = []
+ for i in range(map.numPlots()):
+ loopPlot = map.plotByIndex(i)
+ if (loopPlot.getOwner() == kTriggeredData.ePlayer and loopPlot.getFeatureType() == iForest and loopPlot.isHills()):
+ iDistance = plotDistance(kTriggeredData.iPlotX, kTriggeredData.iPlotY, loopPlot.getX(), loopPlot.getY())
+ if iDistance > 0:
+ listPlots.append((iDistance, loopPlot))
+
+ listPlots.sort()
+
+ iCount = getSaltpeterNumExtraPlots()
+ for loopPlot in listPlots:
+ if iCount == 0:
+ break
+ iCount -= 1
+ gc.getGame().setPlotExtraYield(loopPlot[1].getX(), loopPlot[1].getY(), YieldTypes.YIELD_COMMERCE, 1)
+ CyInterface().addMessage(kTriggeredData.ePlayer, false, gc.getEVENT_MESSAGE_TIME(), localText.getText("TXT_KEY_EVENT_SALTPETER_DISCOVERED", ()), "", InterfaceMessageTypes.MESSAGE_TYPE_INFO, None, gc.getInfoTypeForString("COLOR_WHITE"), loopPlot[1].getX(), loopPlot[1].getY(), true, true)
+
+######## GREAT DEPRESSION ###########
+
+def applyGreatDepression(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+ corporation = gc.getCorporationInfo(kTriggeredData.eCorporation)
+
+ for iPlayer in range(gc.getMAX_CIV_PLAYERS()):
+ loopPlayer = gc.getPlayer(iPlayer)
+ if loopPlayer.isAlive():
+ loopPlayer.changeGold(-loopPlayer.getGold()/4)
+
+ if iPlayer != kTriggeredData.ePlayer:
+ szText = localText.getText("TXT_KEY_EVENTTRIGGER_GREAT_DEPRESSION", (player.getCivilizationAdjectiveKey(), u"", u"", u"", u"", corporation.getTextKey()))
+ szText += u"\n\n" + localText.getText("TXT_KEY_EVENT_GREAT_DEPRESSION_HELP", (25, ))
+ popupInfo = CyPopupInfo()
+ popupInfo.setText(szText)
+ popupInfo.addPopup(iPlayer)
+
+
+def getHelpGreatDepression(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ szHelp = localText.getText("TXT_KEY_EVENT_GREAT_DEPRESSION_HELP", (25, ))
+
+ return szHelp
+
+######## CHAMPION ###########
+
+def canTriggerChampion(argsList):
+ kTriggeredData = argsList[0]
+
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+ team = gc.getTeam(player.getTeam())
+
+ if team.getAtWarCount(true) > 0:
+ return false
+
+ return true
+
+def canTriggerChampionUnit(argsList):
+ eTrigger = argsList[0]
+ ePlayer = argsList[1]
+ iUnit = argsList[2]
+
+ player = gc.getPlayer(ePlayer)
+ unit = player.getUnit(iUnit)
+
+ if unit.isNone():
+ return false
+
+ if unit.getDamage() > 0:
+ return false
+
+ if unit.getExperience() < 3:
+ return false
+
+ iLeadership = CvUtil.findInfoTypeNum(gc.getPromotionInfo,gc.getNumPromotionInfos(),'PROMOTION_LEADERSHIP')
+ if unit.isHasPromotion(iLeadership):
+ return false
+
+ return true
+
+def applyChampion(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+ unit = player.getUnit(kTriggeredData.iUnitId)
+
+ iLeadership = CvUtil.findInfoTypeNum(gc.getPromotionInfo,gc.getNumPromotionInfos(),'PROMOTION_LEADERSHIP')
+
+ unit.setHasPromotion(iLeadership, true)
+
+def getHelpChampion(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+ unit = player.getUnit(kTriggeredData.iUnitId)
+
+ iLeadership = CvUtil.findInfoTypeNum(gc.getPromotionInfo,gc.getNumPromotionInfos(),'PROMOTION_LEADERSHIP')
+
+ szHelp = localText.getText("TXT_KEY_EVENT_CHAMPION_HELP", (unit.getNameKey(), gc.getPromotionInfo(iLeadership).getTextKey()))
+
+ return szHelp
+
+######## ELECTRIC COMPANY ###########
+
+def canTriggerElectricCompany(argsList):
+ kTriggeredData = argsList[0]
+
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+
+ (loopCity, iter) = player.firstCity(false)
+
+ while(loopCity):
+
+ if (loopCity.angryPopulation(0) > 0):
+ return false
+
+ (loopCity, iter) = player.nextCity(iter, false)
+
+ return true
+
+######## GOLD RUSH ###########
+
+def canTriggerGoldRush(argsList):
+ kTriggeredData = argsList[0]
+
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+
+ iIndustrial = CvUtil.findInfoTypeNum(gc.getEraInfo,gc.getNumEraInfos(),'ERA_INDUSTRIAL')
+
+ if player.getCurrentEra() != iIndustrial:
+ return false
+
+
+ return true
+
+######## INFLUENZA ###########
+
+def canTriggerInfluenza(argsList):
+ kTriggeredData = argsList[0]
+
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+ team = gc.getTeam(player.getTeam())
+
+ iIndustrial = CvUtil.findInfoTypeNum(gc.getEraInfo,gc.getNumEraInfos(),'ERA_INDUSTRIAL')
+
+ if player.getCurrentEra() <= iIndustrial:
+ return false
+
+ iMedicine = CvUtil.findInfoTypeNum(gc.getTechInfo,gc.getNumTechInfos(),'TECH_MEDICINE')
+
+ if team.isHasTech(iMedicine):
+ return false
+
+ return true
+
+def applyInfluenza2(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+ eventCity = player.getCity(kTriggeredData.iCityId)
+
+ iNumCities = 2 + gc.getGame().getSorenRandNum(3, "Influenza event number of cities")
+
+ listCities = []
+ (loopCity, iter) = player.firstCity(false)
+ while(loopCity):
+ if loopCity.getPopulation() > 2:
+ iDistance = plotDistance(eventCity.getX(), eventCity.getY(), loopCity.getX(), loopCity.getY())
+ if iDistance > 0:
+ listCities.append((iDistance, loopCity))
+ (loopCity, iter) = player.nextCity(iter, false)
+
+ listCities.sort()
+
+ if iNumCities > len(listCities):
+ iNumCities = len(listCities)
+
+ for i in range(iNumCities):
+ (iDist, loopCity) = listCities[i]
+ loopCity.changePopulation(-2)
+ szBuffer = localText.getText("TXT_KEY_EVENT_INFLUENZA_HIT_CITY", (loopCity.getNameKey(), ))
+ CyInterface().addMessage(kTriggeredData.ePlayer, false, gc.getEVENT_MESSAGE_TIME(), szBuffer, "AS2D_PILLAGE", InterfaceMessageTypes.MESSAGE_TYPE_INFO, None, gc.getInfoTypeForString("COLOR_RED"), loopCity.getX(), loopCity.getY(), true, true)
+
+
+def getHelpInfluenza2(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ szHelp = localText.getText("TXT_KEY_EVENT_INFLUENZA_HELP_2", (2, ))
+
+ return szHelp
+
+######## SOLO FLIGHT ###########
+
+
+def canTriggerSoloFlight(argsList):
+ kTriggeredData = argsList[0]
+
+ map = gc.getMap()
+ if map.getWorldSize() == CvUtil.findInfoTypeNum(gc.getWorldInfo, gc.getNumWorldInfos(), 'WORLDSIZE_DUEL'):
+ iMinLandmass = 3
+ elif map.getWorldSize() == CvUtil.findInfoTypeNum(gc.getWorldInfo, gc.getNumWorldInfos(), 'WORLDSIZE_TINY'):
+ iMinLandmass = 4
+ elif map.getWorldSize() == CvUtil.findInfoTypeNum(gc.getWorldInfo, gc.getNumWorldInfos(), 'WORLDSIZE_SMALL'):
+ iMinLandmass = 6
+ elif map.getWorldSize() == CvUtil.findInfoTypeNum(gc.getWorldInfo, gc.getNumWorldInfos(), 'WORLDSIZE_STANDARD'):
+ iMinLandmass = 8
+ elif map.getWorldSize() == CvUtil.findInfoTypeNum(gc.getWorldInfo, gc.getNumWorldInfos(), 'WORLDSIZE_LARGE'):
+ iMinLandmass = 10
+ else:
+ iMinLandmass = 12
+
+ if (map.getNumLandAreas() < iMinLandmass):
+ return false
+
+ if gc.getGame().isGameMultiPlayer():
+ return false
+
+ return true
+
+def getHelpSoloFlight(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ szHelp = localText.getText("TXT_KEY_EVENT_SOLO_FLIGHT_HELP_1", (1, ))
+
+ return szHelp
+
+def applySoloFlight(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ for iPlayer in range(gc.getMAX_CIV_PLAYERS()):
+ loopPlayer = gc.getPlayer(iPlayer)
+ if loopPlayer.isAlive() and iPlayer != kTriggeredData.ePlayer:
+ loopTeam = gc.getTeam(loopPlayer.getTeam())
+ if loopTeam.isHasMet(gc.getPlayer(kTriggeredData.ePlayer).getTeam()):
+ loopPlayer.AI_changeAttitudeExtra(kTriggeredData.ePlayer, 1)
+
+
+######## ANTELOPE ###########
+
+def canTriggerAntelope(argsList):
+
+ kTriggeredData = argsList[0]
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+
+ iDeer = CvUtil.findInfoTypeNum(gc.getBonusInfo,gc.getNumBonusInfos(),'BONUS_DEER')
+ iHappyBonuses = 0
+ bDeer = false
+ for i in range(gc.getNumBonusInfos()):
+ bonus = gc.getBonusInfo(i)
+ iNum = player.getNumAvailableBonuses(i)
+ if iNum > 0 :
+ if bonus.getHappiness() > 0:
+ iHappyBonuses += 1
+ if iHappyBonuses > 5:
+ return false
+ if i == iDeer:
+ return false
+
+ plot = gc.getMap().plot(kTriggeredData.iPlotX, kTriggeredData.iPlotY)
+ if not plot.canHaveBonus(iDeer, false):
+ return false
+
+ return true
+
+def doAntelope2(argsList):
+# Need this because camps are not normally allowed unless there is already deer.
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ plot = gc.getMap().plot(kTriggeredData.iPlotX, kTriggeredData.iPlotY)
+
+ if not plot.isNone():
+ plot.setImprovementType(CvUtil.findInfoTypeNum(gc.getImprovementInfo,gc.getNumImprovementInfos(),'IMPROVEMENT_CAMP'))
+
+ return 1
+
+def getHelpAntelope2(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ iCamp = CvUtil.findInfoTypeNum(gc.getImprovementInfo,gc.getNumImprovementInfos(),'IMPROVEMENT_CAMP')
+ szHelp = localText.getText("TXT_KEY_EVENT_IMPROVEMENT_GROWTH", ( gc.getImprovementInfo(iCamp).getTextKey(), ))
+
+ return szHelp
+
+######## WHALEOFATHING ###########
+
+def canTriggerWhaleOfAThing(argsList):
+
+ kTriggeredData = argsList[0]
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+
+ iWhale = CvUtil.findInfoTypeNum(gc.getBonusInfo,gc.getNumBonusInfos(),'BONUS_WHALE')
+ iHappyBonuses = 0
+ bWhale = false
+ for i in range(gc.getNumBonusInfos()):
+ bonus = gc.getBonusInfo(i)
+ iNum = player.getNumAvailableBonuses(i)
+ if iNum > 0 :
+ if bonus.getHappiness() > 0:
+ iHappyBonuses += 1
+ if iHappyBonuses > 5:
+ return false
+ if i == iWhale:
+ return false
+
+ plot = gc.getMap().plot(kTriggeredData.iPlotX, kTriggeredData.iPlotY)
+ if not plot.canHaveBonus(iWhale, false):
+ return false
+
+ return true
+
+
+######## HIYOSILVER ###########
+
+def canTriggerHiyoSilver(argsList):
+
+ kTriggeredData = argsList[0]
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+
+ iSilver = CvUtil.findInfoTypeNum(gc.getBonusInfo,gc.getNumBonusInfos(),'BONUS_SILVER')
+ iHappyBonuses = 0
+ bSilver = false
+ for i in range(gc.getNumBonusInfos()):
+ bonus = gc.getBonusInfo(i)
+ iNum = player.getNumAvailableBonuses(i)
+ if iNum > 0 :
+ if bonus.getHappiness() > 0:
+ iHappyBonuses += 1
+ if iHappyBonuses > 5:
+ return false
+ if i == iSilver:
+ return false
+
+ plot = gc.getMap().plot(kTriggeredData.iPlotX, kTriggeredData.iPlotY)
+ if not plot.canHaveBonus(iSilver, false):
+ return false
+
+ return true
+
+######## WININGMONKS ###########
+
+def canTriggerWiningMonks(argsList):
+
+ kTriggeredData = argsList[0]
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+
+ if player.getNumAvailableBonuses(CvUtil.findInfoTypeNum(gc.getBonusInfo,gc.getNumBonusInfos(),'BONUS_WINE')) > 0:
+ return false
+
+ return true
+
+
+def doWiningMonks2(argsList):
+# Need this because wineries are not normally allowed unless there is already wine.
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ plot = gc.getMap().plot(kTriggeredData.iPlotX, kTriggeredData.iPlotY)
+
+ if not plot.isNone():
+ plot.setImprovementType(CvUtil.findInfoTypeNum(gc.getImprovementInfo,gc.getNumImprovementInfos(),'IMPROVEMENT_WINERY'))
+
+ return 1
+
+def getHelpWiningMonks2(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ iImp = CvUtil.findInfoTypeNum(gc.getImprovementInfo,gc.getNumImprovementInfos(),'IMPROVEMENT_WINERY')
+ szHelp = localText.getText("TXT_KEY_EVENT_IMPROVEMENT_GROWTH", ( gc.getImprovementInfo(iImp).getTextKey(), ))
+
+ return szHelp
+
+
+######## INDEPENDENTFILMS ###########
+
+def canTriggerIndependentFilms(argsList):
+
+ kTriggeredData = argsList[0]
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+
+ for i in range(gc.getNumBuildingInfos()):
+ if gc.getBuildingInfo(i).getFreeBonus() == CvUtil.findInfoTypeNum(gc.getBonusInfo,gc.getNumBonusInfos(),'BONUS_MOVIES'):
+ if player.countNumBuildings(i) > 0:
+ return false
+
+ return true
+
+def doIndependentFilms(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+ city = player.getCity(kTriggeredData.iCityId)
+
+ iBonus = CvUtil.findInfoTypeNum(gc.getBonusInfo,gc.getNumBonusInfos(),'BONUS_MOVIES')
+
+ city.changeFreeBonus(iBonus, 1)
+
+ return 1
+
+def getHelpIndependentFilms(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+ city = player.getCity(kTriggeredData.iCityId)
+
+ iBonus = CvUtil.findInfoTypeNum(gc.getBonusInfo,gc.getNumBonusInfos(),'BONUS_MOVIES')
+
+ szHelp = localText.getText("TXT_KEY_EVENT_INDEPENDENTFILMS_HELP_1", ( 1, gc.getBonusInfo(iBonus).getChar(), city.getNameKey()))
+
+ return szHelp
+
+######## ANCIENT OLYMPICS ###########
+
+def canTriggerAncientOlympics(argsList):
+
+ kTriggeredData = argsList[0]
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+
+ stateReligion = player.getStateReligion()
+
+ if stateReligion == CvUtil.findInfoTypeNum(gc.getReligionInfo,gc.getNumReligionInfos(),'RELIGION_JUDAISM'):
+ return false
+
+ if stateReligion == CvUtil.findInfoTypeNum(gc.getReligionInfo,gc.getNumReligionInfos(),'RELIGION_CHRISTIANITY'):
+ return false
+
+ if stateReligion == CvUtil.findInfoTypeNum(gc.getReligionInfo,gc.getNumReligionInfos(),'RELIGION_ISLAM'):
+ return false
+
+ return true
+
+def doAncientOlympics2(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ map = gc.getMap()
+
+ for j in range(gc.getMAX_CIV_PLAYERS()):
+ loopPlayer = gc.getPlayer(j)
+ if j != kTriggeredData.ePlayer and loopPlayer.isAlive() and not loopPlayer.isMinorCiv():
+
+ for i in range(map.numPlots()):
+ plot = map.plotByIndex(i)
+ if not plot.isWater() and plot.getOwner() == kTriggeredData.ePlayer and plot.isAdjacentPlayer(j, true):
+ loopPlayer.AI_changeMemoryCount(kTriggeredData.ePlayer, MemoryTypes.MEMORY_EVENT_GOOD_TO_US, 1)
+ break
+
+ return 1
+
+def getHelpAncientOlympics2(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ szHelp = localText.getText("TXT_KEY_EVENT_ANCIENTOLYMPICS_HELP_2", ( 1, ))
+
+ return szHelp
+
+
+######## MODERN OLYMPICS ###########
+
+def canTriggerModernOlympics(argsList):
+
+ kTriggeredData = argsList[0]
+ trigger = gc.getEventTriggerInfo(kTriggeredData.eTrigger)
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+
+ kOrigTriggeredData = player.getEventOccured(trigger.getPrereqEvent(0))
+
+ if (kOrigTriggeredData == None):
+ return false
+
+ kActualTriggeredDataObject = player.getEventTriggered(kTriggeredData.iId)
+ kActualTriggeredDataObject.iCityId = kOrigTriggeredData.iCityId
+ kActualTriggeredDataObject.iPlotX = kOrigTriggeredData.iPlotX
+ kActualTriggeredDataObject.iPlotY = kOrigTriggeredData.iPlotY
+
+ return true
+
+def getHelpModernOlympics(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ szHelp = localText.getText("TXT_KEY_EVENT_SOLO_FLIGHT_HELP_1", (1, ))
+
+ return szHelp
+
+def applyModernOlympics(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ for iPlayer in range(gc.getMAX_CIV_PLAYERS()):
+ loopPlayer = gc.getPlayer(iPlayer)
+ if loopPlayer.isAlive() and iPlayer != kTriggeredData.ePlayer:
+ loopTeam = gc.getTeam(loopPlayer.getTeam())
+ if loopTeam.isHasMet(gc.getPlayer(kTriggeredData.ePlayer).getTeam()):
+ loopPlayer.AI_changeAttitudeExtra(kTriggeredData.ePlayer, 1)
+
+
+######## INTERSTATE ###########
+
+def canTriggerInterstate(argsList):
+
+ kTriggeredData = argsList[0]
+ trigger = gc.getEventTriggerInfo(kTriggeredData.eTrigger)
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+
+ if not player.isCivic(CvUtil.findInfoTypeNum(gc.getCivicInfo,gc.getNumCivicInfos(),'CIVIC_EMANCIPATION')):
+ return false
+
+ return true
+
+def getHelpInterstate(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ szHelp = localText.getText("TXT_KEY_UNIT_MOVEMENT", (1, gc.getRouteInfo(CvUtil.findInfoTypeNum(gc.getRouteInfo,gc.getNumRouteInfos(),'ROUTE_ROAD')).getTextKey()))
+
+ return szHelp
+
+def applyInterstate(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+ team = gc.getTeam(player.getTeam())
+
+ iRoad = CvUtil.findInfoTypeNum(gc.getRouteInfo,gc.getNumRouteInfos(),'ROUTE_ROAD')
+
+ team.changeRouteChange(iRoad, -5)
+
+######## EARTH DAY ###########
+
+def getHelpEarthDay2(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ szHelp = localText.getText("TXT_KEY_EVENT_EARTHDAY_HELP_2", ())
+
+ return szHelp
+
+def canApplyEarthDay2(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+
+ iCivic = CvUtil.findInfoTypeNum(gc.getCivicInfo,gc.getNumCivicInfos(),'CIVIC_ENVIRONMENTALISM')
+
+ for iPlayer in range(gc.getMAX_CIV_PLAYERS()):
+ loopPlayer = gc.getPlayer(iPlayer)
+ if loopPlayer.isAlive() and iPlayer != kTriggeredData.ePlayer and not loopPlayer.isHuman():
+ loopTeam = gc.getTeam(loopPlayer.getTeam())
+ if loopTeam.isHasMet(gc.getPlayer(kTriggeredData.ePlayer).getTeam()):
+ tradeData = TradeData()
+ tradeData.ItemType = TradeableItems.TRADE_CIVIC
+ tradeData.iData = iCivic
+ if loopPlayer.canTradeItem(kTriggeredData.ePlayer, tradeData, False):
+ if (loopPlayer.getTradeDenial(kTriggeredData.ePlayer, tradeData) == DenialTypes.NO_DENIAL):
+ return true
+ return false
+
+
+def applyEarthDay2(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+
+ iCivic = CvUtil.findInfoTypeNum(gc.getCivicInfo,gc.getNumCivicInfos(),'CIVIC_ENVIRONMENTALISM')
+ iCivicOption = CvUtil.findInfoTypeNum(gc.getCivicOptionInfo,gc.getNumCivicOptionInfos(),'CIVICOPTION_ECONOMY')
+
+ listPlayers = []
+ for iPlayer in range(gc.getMAX_CIV_PLAYERS()):
+ loopPlayer = gc.getPlayer(iPlayer)
+ if loopPlayer.isAlive() and iPlayer != kTriggeredData.ePlayer and not loopPlayer.isHuman():
+ loopTeam = gc.getTeam(loopPlayer.getTeam())
+ if loopTeam.isHasMet(gc.getPlayer(kTriggeredData.ePlayer).getTeam()):
+ tradeData = TradeData()
+ tradeData.ItemType = TradeableItems.TRADE_CIVIC
+ tradeData.iData = iCivic
+ if loopPlayer.canTradeItem(kTriggeredData.ePlayer, tradeData, False):
+ if (loopPlayer.getTradeDenial(kTriggeredData.ePlayer, tradeData) == DenialTypes.NO_DENIAL):
+ listPlayers.append((-loopPlayer.AI_civicValue(iCivic), iPlayer))
+
+ listPlayers.sort()
+
+ if len(listPlayers) > 3:
+ listPlayers = listPlayers[:2]
+
+ for (iValue, iPlayer) in listPlayers:
+ gc.getPlayer(iPlayer).setCivics(iCivicOption, iCivic)
+
+######## FREEDOM CONCERT ###########
+
+def getHelpFreedomConcert2(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ szHelp = localText.getText("TXT_KEY_EVENT_FREEDOMCONCERT_HELP_2", ())
+
+ return szHelp
+
+def canApplyFreedomConcert2(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+ eventCity = player.getCity(kTriggeredData.iCityId)
+
+ for iReligion in range(gc.getNumReligionInfos()):
+ if eventCity.isHasReligion(iReligion):
+ (loopCity, iter) = player.firstCity(false)
+ while(loopCity):
+ if not loopCity.isHasReligion(iReligion):
+ for jReligion in range(gc.getNumReligionInfos()):
+ if loopCity.isHasReligion(jReligion):
+ return true
+ (loopCity, iter) = player.nextCity(iter, false)
+
+ return false
+
+def applyFreedomConcert2(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+ eventCity = player.getCity(kTriggeredData.iCityId)
+
+ for iReligion in range(gc.getNumReligionInfos()):
+ if eventCity.isHasReligion(iReligion):
+
+ bestCity = None
+ iBestDistance = 0
+ (loopCity, iter) = player.firstCity(false)
+ while(loopCity):
+ if not loopCity.isHasReligion(iReligion):
+ bValid = false
+ for jReligion in range(gc.getNumReligionInfos()):
+ if loopCity.isHasReligion(jReligion):
+ bValid = true
+ break
+
+ if bValid:
+ iDistance = plotDistance(eventCity.getX(), eventCity.getY(), loopCity.getX(), loopCity.getY())
+
+ if iDistance < iBestDistance or bestCity == None:
+ bestCity = loopCity
+ iBestDistance = iDistance
+
+ (loopCity, iter) = player.nextCity(iter, false)
+
+
+ if bestCity != None:
+ bestCity.setHasReligion(iReligion, true, true, true)
+
+######## HEROIC_GESTURE ###########
+
+def canTriggerHeroicGesture(argsList):
+ kTriggeredData = argsList[0]
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+ destPlayer = gc.getPlayer(kTriggeredData.eOtherPlayer)
+
+ if not gc.getTeam(destPlayer.getTeam()).canChangeWarPeace(player.getTeam()):
+ return false
+
+ if gc.getTeam(destPlayer.getTeam()).AI_getWarSuccess(player.getTeam()) <= 0:
+ return false
+
+ if gc.getTeam(player.getTeam()).AI_getWarSuccess(destPlayer.getTeam()) <= 0:
+ return false
+
+ return true
+
+def doHeroicGesture2(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ destPlayer = gc.getPlayer(kTriggeredData.eOtherPlayer)
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+
+ if destPlayer.isHuman():
+ # this works only because it's a single-player only event
+ popupInfo = CyPopupInfo()
+ popupInfo.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_PYTHON)
+ popupInfo.setText(localText.getText("TXT_KEY_EVENT_HEROIC_GESTURE_OTHER_3", (player.getCivilizationAdjectiveKey(), )))
+ popupInfo.setData1(kTriggeredData.eOtherPlayer)
+ popupInfo.setData2(kTriggeredData.ePlayer)
+ popupInfo.setPythonModule("CvRandomEventInterface")
+ popupInfo.setOnClickedPythonCallback("heroicGesture2Callback")
+ popupInfo.addPythonButton(localText.getText("TXT_KEY_POPUP_YES", ()), "")
+ popupInfo.addPythonButton(localText.getText("TXT_KEY_POPUP_NO", ()), "")
+ popupInfo.addPopup(kTriggeredData.eOtherPlayer)
+ else:
+ destPlayer.forcePeace(kTriggeredData.ePlayer)
+ destPlayer.AI_changeAttitudeExtra(kTriggeredData.ePlayer, 1)
+ player.AI_changeAttitudeExtra(kTriggeredData.eOtherPlayer, 1)
+
+ return
+
+def heroicGesture2Callback(argsList):
+ iButton = argsList[0]
+ iData1 = argsList[1]
+ iData2 = argsList[2]
+ iData3 = argsList[3]
+ szText = argsList[4]
+ bOption1 = argsList[5]
+ bOption2 = argsList[6]
+
+ if iButton == 0:
+ destPlayer = gc.getPlayer(iData1)
+ player = gc.getPlayer(iData2)
+ destPlayer.forcePeace(iData2)
+ destPlayer.AI_changeAttitudeExtra(iData2, 1)
+ player.AI_changeAttitudeExtra(iData1, 1)
+
+ return 0
+
+def getHelpHeroicGesture2(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ destPlayer = gc.getPlayer(kTriggeredData.eOtherPlayer)
+
+ # Get help text
+ szHelp = localText.getText("TXT_KEY_EVENT_ATTITUDE_GOOD", (1, destPlayer.getNameKey()));
+
+ return szHelp
+
+######## GREAT_MEDIATOR ###########
+
+def canTriggerGreatMediator(argsList):
+ kTriggeredData = argsList[0]
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+ destPlayer = gc.getPlayer(kTriggeredData.eOtherPlayer)
+
+ if not gc.getTeam(player.getTeam()).canChangeWarPeace(destPlayer.getTeam()):
+ return false
+
+ if gc.getTeam(player.getTeam()).AI_getAtWarCounter(destPlayer.getTeam()) < 10:
+ return false
+
+ return true
+
+def doGreatMediator2(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ destPlayer = gc.getPlayer(kTriggeredData.eOtherPlayer)
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+
+ if destPlayer.isHuman():
+ # this works only because it's a single-player only event
+ popupInfo = CyPopupInfo()
+ popupInfo.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_PYTHON)
+ popupInfo.setText(localText.getText("TXT_KEY_EVENT_GREAT_MEDIATOR_OTHER_3", (player.getCivilizationAdjectiveKey(), )))
+ popupInfo.setData1(kTriggeredData.eOtherPlayer)
+ popupInfo.setData2(kTriggeredData.ePlayer)
+ popupInfo.setPythonModule("CvRandomEventInterface")
+ popupInfo.setOnClickedPythonCallback("greatMediator2Callback")
+ popupInfo.addPythonButton(localText.getText("TXT_KEY_POPUP_YES", ()), "")
+ popupInfo.addPythonButton(localText.getText("TXT_KEY_POPUP_NO", ()), "")
+ popupInfo.addPopup(kTriggeredData.eOtherPlayer)
+ else:
+ gc.getTeam(player.getTeam()).makePeace(destPlayer.getTeam())
+ destPlayer.AI_changeAttitudeExtra(kTriggeredData.ePlayer, 1)
+ player.AI_changeAttitudeExtra(kTriggeredData.eOtherPlayer, 1)
+
+ return
+
+def greatMediator2Callback(argsList):
+ iButton = argsList[0]
+ iData1 = argsList[1]
+ iData2 = argsList[2]
+ iData3 = argsList[3]
+ szText = argsList[4]
+ bOption1 = argsList[5]
+ bOption2 = argsList[6]
+
+ if iButton == 0:
+ destPlayer = gc.getPlayer(iData1)
+ player = gc.getPlayer(iData2)
+ gc.getTeam(destPlayer.getTeam()).makePeace(player.getTeam())
+ destPlayer.AI_changeAttitudeExtra(iData2, 1)
+ player.AI_changeAttitudeExtra(iData1, 1)
+
+ return 0
+
+def getHelpGreatMediator2(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ destPlayer = gc.getPlayer(kTriggeredData.eOtherPlayer)
+
+ # Get help text
+ szHelp = localText.getText("TXT_KEY_EVENT_ATTITUDE_GOOD", (1, destPlayer.getNameKey()));
+
+ return szHelp
+
+######## ANCIENT_TEXTS ###########
+
+def doAncientTexts2(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ for iPlayer in range(gc.getMAX_CIV_PLAYERS()):
+ loopPlayer = gc.getPlayer(iPlayer)
+ if loopPlayer.isAlive() and iPlayer != kTriggeredData.ePlayer:
+ loopTeam = gc.getTeam(loopPlayer.getTeam())
+ if loopTeam.isHasMet(gc.getPlayer(kTriggeredData.ePlayer).getTeam()):
+ loopPlayer.AI_changeAttitudeExtra(kTriggeredData.ePlayer, 1)
+
+ return
+
+def getHelpAncientTexts2(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ szHelp = localText.getText("TXT_KEY_EVENT_SOLO_FLIGHT_HELP_1", (1, ))
+
+ return szHelp
+
+
+######## IMPACT_CRATER ###########
+
+def canTriggerImpactCrater(argsList):
+
+ kTriggeredData = argsList[0]
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+
+ iUranium = CvUtil.findInfoTypeNum(gc.getBonusInfo,gc.getNumBonusInfos(),'BONUS_URANIUM')
+ if player.getNumAvailableBonuses(iUranium) > 0:
+ return false
+
+ plot = gc.getMap().plot(kTriggeredData.iPlotX, kTriggeredData.iPlotY)
+ if not plot.canHaveBonus(iUranium, false):
+ return false
+
+ return true
+
+def doImpactCrater2(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ plot = gc.getMap().plot(kTriggeredData.iPlotX, kTriggeredData.iPlotY)
+
+ if not plot.isNone():
+ plot.setImprovementType(CvUtil.findInfoTypeNum(gc.getImprovementInfo,gc.getNumImprovementInfos(),'IMPROVEMENT_MINE'))
+
+ return 1
+
+def getHelpImpactCrater2(argsList):
+ iEvent = argsList[0]
+ kTriggeredData = argsList[1]
+
+ iMine = CvUtil.findInfoTypeNum(gc.getImprovementInfo,gc.getNumImprovementInfos(),'IMPROVEMENT_MINE')
+ szHelp = localText.getText("TXT_KEY_EVENT_IMPROVEMENT_GROWTH", ( gc.getImprovementInfo(iMine).getTextKey(), ))
+
+ return szHelp
+
+
+######## THE_HUNS ###########
+
+def canTriggerTheHuns(argsList):
+
+ kTriggeredData = argsList[0]
+ player = gc.getPlayer(kTriggeredData.ePlayer)
+ ...
[truncated message content] |