Code:
from CvPythonExtensions import *
import CvUtil
import PyHelpers
import Popup as PyPopup
#import CvCustomEventManager
PyInfo = PyHelpers.PyInfo
# globals
gc = CyGlobalContext()
class CvTerraformEventManager:
def __init__(self, eventManager):
eventManager.addEventHandler("improvementBuilt", self.onImprovementBuilt)
eventManager.addEventHandler("BeginPlayerTurn", self.onBeginPlayerTurn)
self.list = []
self.pPlot = CyMap().plot(0,0)
self.iCounter = 0
self.pPlot_remembered = [-1,""]
def setVars(self):
self.grass = gc.getInfoTypeForString("IMPROVEMENT_TERRAFORM_GRASS")
self.plains = gc.getInfoTypeForString("IMPROVEMENT_TERRAFORM_PLAINS")
self.desert = gc.getInfoTypeForString("IMPROVEMENT_TERRAFORM_DESERT")
self.snow = gc.getInfoTypeForString("IMPROVEMENT_TERRAFORM_SNOW")
self.raiseelev = gc.getInfoTypeForString("IMPROVEMENT_TERRAFORM_RAISE")
self.lowerelev = gc.getInfoTypeForString("IMPROVEMENT_TERRAFORM_LOWER")
self.land = gc.getInfoTypeForString("IMPROVEMENT_TERRAFORM_MAKE_LAND")
self.jungle = gc.getInfoTypeForString("IMPROVEMENT_TERRAFORM_MAKE_JUNGLE")
self.forest = gc.getInfoTypeForString("IMPROVEMENT_TERRAFORM_PLANT_FOREST")
#self.forest2 = gc.getInfoTypeForString("IMPROVEMENT_TERRAFORM_PLANT_FORESTW")
self.iCOASTID = gc.getInfoTypeForString('TERRAIN_COAST')
self.iOCEANID = gc.getInfoTypeForString('TERRAIN_OCEAN')
self.iHARBOURID = gc.getInfoTypeForString('BUILDING_HARBOR')
self.iDOCKID = gc.getInfoTypeForString('BUILDING_DRYDOCK')
self.iLIGHTHOUSEID = gc.getInfoTypeForString('BUILDING_LIGHTHOUSE')
self.iPEAKID = gc.getInfoTypeForString("TERRAIN_PEAK")
self.iGRASSID = gc.getInfoTypeForString("TERRAIN_GRASS")
self.iPLAINSID = gc.getInfoTypeForString("TERRAIN_PLAINS")
self.iFLOODPLAINSID = gc.getInfoTypeForString("FEATURE_FLOOD_PLAINS")
self.iTUNDRAID = gc.getInfoTypeForString("TERRAIN_TUNDRA")
self.iSNOWID = gc.getInfoTypeForString("TERRAIN_SNOW")
self.iDESERTID = gc.getInfoTypeForString("TERRAIN_DESERT")
self.iFORESTID = gc.getInfoTypeForString("FEATURE_FOREST")
self.iJUNGLEID = gc.getInfoTypeForString("FEATURE_JUNGLE")
self.iWaterlandID = gc.getInfoTypeForString('IMPROVEMENT_TERRAFORM_MAKE_LAND')
self.iCounter = 1
def onBeginPlayerTurn(self, argsList):
iGameTurn, iPlayer = argsList
# ForestMod Sevo's Worker Fix - is checking all tiles whether some of them had the forest planted in last turn and then removes improvement
if (self.pPlot_remembered[0] != -1):
self.pPlot_remembered[0] += 1
if (self.pPlot_remembered[0] > 3):
self.pPlot_remembered[1].setImprovementType(-1)
self.pPlot_remembered = [-1,""]
def onImprovementBuilt(self, argsList):
if self.iCounter != 1:
self.setVars()
iImprovement, iX, iY = argsList
pPlot = CyMap().plot(iX,iY)
if(iImprovement==self.grass):
pPlot.setTerrainType(self.iGRASSID, true, true)
pPlot.setImprovementType(-1)
elif(iImprovement==self.plains):
if(pPlot.getTerrainType()==self.iSNOWID):
pPlot.setTerrainType(self.iTUNDRAID, true, true)
else:
pPlot.setTerrainType(self.iPLAINSID, true, true)
pPlot.setImprovementType(-1)
elif(iImprovement==self.desert):
pPlot.setTerrainType(self.iDESERTID, true, true)
if((pPlot.isRiverSide()==1) and (pPlot.getPlotType()==PlotTypes.PLOT_LAND)):
pPlot.setFeatureType(self.iFLOODPLAINSID, 0)
pPlot.setImprovementType(-1)
elif(iImprovement==self.snow):
if(pPlot.getTerrainType()==self.iTUNDRAID):
pPlot.setTerrainType(self.iSNOWID, true, true)
else:
pPlot.setTerrainType(self.iTUNDRAID, true, true)
pPlot.setImprovementType(-1)
elif(iImprovement==self.raiseelev):
if(pPlot.getPlotType()==PlotTypes.PLOT_LAND):
pPlot.setPlotType(PlotTypes.PLOT_HILLS, true, true)
if(pPlot.getFeatureType()==self.iFLOODPLAINSID):
pPlot.setFeatureType(-1,0)
else:
self.RescueMoveUnits(pPlot)
pPlot.setPlotType(PlotTypes.PLOT_PEAK, true, true)
pPlot.setFeatureType(-1,0)
pPlot.setRouteType(-1)
pPlot.setImprovementType(-1)
elif(iImprovement==self.lowerelev):
if(pPlot.getPlotType()==PlotTypes.PLOT_LAND):
self.RescueMoveUnits(pPlot)
pPlot.setPlotType(PlotTypes.PLOT_OCEAN, true, true)
#pPlot.setPlotType(PlotTypes.PLOT_COAST, true, true)
elif(pPlot.getPlotType()==PlotTypes.PLOT_PEAK):
pPlot.setPlotType(PlotTypes.PLOT_HILLS, true, true)
else:
pPlot.setPlotType(PlotTypes.PLOT_LAND, true, true)
if(pPlot.getTerrainType()==self.iDESERTID and pPlot.isRiver()):
pPlot.setFeatureType(self.iFLOODPLAINSID, 0)
pPlot.setImprovementType(-1)
elif(iImprovement==self.land):
self.RescueMoveUnits(pPlot)
pPlot.setTerrainType(self.iPLAINSID, true, true)
pPlot.setImprovementType(-1)
elif(iImprovement==self.jungle):
pPlot.setFeatureType(self.iJUNGLEID, 1)
#pPlot.setImprovementType(-1)
#CyInterface().addMessage(CyGame().getActivePlayer(),True,25,'A new djungle has been planted!','AS2D_DISCOVERBONUS',1,'Art/Interface/Buttons/TerrainFeatures/Forest.dds',ColorTypes(8),iX,iY,True,True)
self.pPlot_remembered = [1,pPlot]
# elif(iImprovement==self.forest):
# pPlot.setFeatureType(self.iFORESTID, 0)
# #pPlot.setImprovementType(-1)
# #CyInterface().addMessage(CyGame().getActivePlayer(),True,25,'A new forest has been planted!','AS2D_DISCOVERBONUS',1,'Art/Interface/Buttons/TerrainFeatures/Forest.dds',ColorTypes(8),iX,iY,True,True)
# self.pPlot_remembered = [1,pPlot]
elif(iImprovement==self.forest): # self.forest2
pPlot.setFeatureType(self.iFORESTID, 1)
#pPlot.setImprovementType(-1)
#CyInterface().addMessage(CyGame().getActivePlayer(),True,25,'A new forest has been planted!','AS2D_DISCOVERBONUS',1,'Art/Interface/Buttons/TerrainFeatures/Forest.dds',ColorTypes(8),iX,iY,True,True)
self.pPlot_remembered = [1,pPlot]
#Kontrolle, ob Hafen abgerissen werden muss
bCityCheck = 0
if iImprovement == self.iWaterlandID:
for x in [-1,0,1]:
for y in [-1,0,1]:
if CyMap().plot(iX +x, iY +y).isCity() == 1:
iCityX = iX +x
iCityY = iY +y
pCity = CyMap().plot(iX +x, iY +y).getPlotCity()
bCityCheck = 1
bCoastNear = 0
if bCityCheck == 1:
for x in [-1,0,1]:
for y in [-1,0,1]:
iTerrain = CyMap().plot(iCityX +x, iCityY +y).getTerrainType()
if (iTerrain == self.iOCEANID or iTerrain == self.iCOASTID):
bCoastNear = 1
#reset or remove harbor and drydock if no coast near
if bCoastNear == 0:
if pCity.isHasRealBuilding(self.iDOCKID):
pCity.setHasRealBuilding(self.iDOCKID, false)
if pCity.isHasRealBuilding(self.iHARBOURID):
pCity.setHasRealBuilding(self.iHARBOURID, false)
if pCity.isHasRealBuilding(self.iLIGHTHOUSEID):
pCity.setHasRealBuilding(self.iLIGHTHOUSEID, false)
def RescueMoveUnits(self, pPlot):
numberofunits = pPlot.getNumUnits()
while(numberofunits > 0):
pPlot.getUnit(0).jumpToNearestValidPlot()
numberofunits = pPlot.getNumUnits()