from CvPythonExtensions import *
import CvUtil
gc = CyGlobalContext()
class SettlersEventManager:
def __init__(self, eventManager):
eventManager.addEventHandler("cityBuilt", self.onCityBuilt)
eventManager.addEventHandler("ModNetMessage", self.onModNetMessage)
def onCityBuilt(self, argsList):
'City Built'
city = argsList[0]
if city.getOwner() == gc.getGame().getActivePlayer() :
pUnit = CyInterface().getHeadSelectedUnit() # note that if the unit is grouped,headUnit is not forced to be the settler
if pUnit:
iOwner = city.getOwner()
iCityID = city.getID()
iUnitClass = pUnit.getUnitClassType()
CyMessageControl().sendModNetMessage(167, iOwner, iCityID, iUnitClass, -1) # be sure 167 is not use for another mod net message, the best should be to add an id in CvUtil like for events
def onModNetMessage(self, argsList):
'Called whenever CyMessageControl().sendModNetMessage() is called - this is all for you modders!'
iData1, iData2, iData3, iData4, iData5 = argsList
if iData1 == 167 :
addBuildings(iData2, iData3, iData4)
CvUtil.pyPrint( 'onModNetMessage' )
def addBuildings(iOwner, iCityID, iUnitClass):
city = gc.getPlayer(iOwner).getCity(iCityID)
pPlayer = gc.getPlayer(iOwner)
#if iUnitClass == gc.getInfoTypeForString("UNITCLASS_SETTLER"):
# ## Do Nothing
# pass
if iUnitClass == gc.getInfoTypeForString("UNITCLASS_COLONIST"):
city.setPopulation(3)
[COLOR="Red"] if pPlayer.hasTrait(gc.getInfoTypeForString("TRAIT_EXPANSIVE")):
city.changePopulation(1)[/COLOR]
_addBuilding(city, "BUILDINGCLASS_BARRACKS")
_addBuilding(city, "BUILDINGCLASS_GRANARY")
_addBuilding(city, "BUILDINGCLASS_FORGE")
_addBuilding(city, "BUILDINGCLASS_MARKET")
if city.plot().isCoastalLand():
_addBuilding(city, "BUILDINGCLASS_HARBOR")
_addBuilding(city, "BUILDINGCLASS_LIGHTHOUSE")
elif iUnitClass == gc.getInfoTypeForString("UNITCLASS_PIONEER"):
city.setPopulation(4)
[COLOR="Red"] if pPlayer.hasTrait(gc.getInfoTypeForString("TRAIT_EXPANSIVE")):
city.changePopulation(1)[/COLOR]
_addBuilding(city, "BUILDINGCLASS_GARRISON")
_addBuilding(city, "BUILDINGCLASS_GRANARY")
_addBuilding(city, "BUILDINGCLASS_FORGE")
_addBuilding(city, "BUILDINGCLASS_COURTHOUSE")
_addBuilding(city, "BUILDINGCLASS_MARKET")
_addBuilding(city, "BUILDINGCLASS_STABLE")
_addBuilding(city, "BUILDINGCLASS_GROCER")
_addBuilding(city, "BUILDINGCLASS_BANK")
_addBuilding(city, "BUILDINGCLASS_LIBRARY")
if city.plot().isCoastalLand():
_addBuilding(city, "BUILDINGCLASS_HARBOR")
_addBuilding(city, "BUILDINGCLASS_LIGHTHOUSE")
elif iUnitClass == gc.getInfoTypeForString("UNITCLASS_ARCHITECT"):
[COLOR="Red"] if pPlayer.hasTrait(gc.getInfoTypeForString("TRAIT_EXPANSIVE")):
city.changePopulation(1)[/COLOR]
_addBuilding(city, "BUILDINGCLASS_BARRACKS")
_addBuilding(city, "BUILDINGCLASS_GRANARY")
_addBuilding(city, "BUILDINGCLASS_COURTHOUSE")
_addBuilding(city, "BUILDINGCLASS_MARKET")
_addBuilding(city, "BUILDINGCLASS_STABLE")
_addBuilding(city, "BUILDINGCLASS_GROCER")
_addBuilding(city, "BUILDINGCLASS_AQUEDUCT")
_addBuilding(city, "BUILDINGCLASS_BANK")
_addBuilding(city, "BUILDINGCLASS_FORGE")
_addBuilding(city, "BUILDINGCLASS_LIBRARY")
_addBuilding(city, "BUILDINGCLASS_JAIL")
_addBuilding(city, "BUILDINGCLASS_OBSERVATORY")
_addBuilding(city, "BUILDINGCLASS_THEATRE")
_addBuilding(city, "BUILDINGCLASS_CUSTOM_HOUSE")
_addBuilding(city, "BUILDINGCLASS_INDUSTRIAL_PARK")
_addBuilding(city, "BUILDINGCLASS_LEVEE")
_addBuilding(city, "BUILDINGCLASS_PUBLIC_TRANSPORTATION")
if city.plot().isCoastalLand():
_addBuilding(city, "BUILDINGCLASS_HARBOR")
_addBuilding(city, "BUILDINGCLASS_LIGHTHOUSE")
def _addBuilding(pCity, szBuilding):
iBuilding = gc.getInfoTypeForString(szBuilding)
iUniqueBuilding = gc.getCivilizationInfo(gc.getPlayer(pCity.getOwner()).getCivilizationType()).getCivilizationBuildings(iBuilding)
if iUniqueBuilding > -1:
if pCity.canConstruct(iUniqueBuilding, False, True, False):
pCity.setNumRealBuilding(iUniqueBuilding, pCity.getNumRealBuilding(iUniqueBuilding) + 1)