problem with new event

globosud

Warlord
Joined
Jul 7, 2017
Messages
109
I created this script to spawn a new modular improvement, created by me, already tested. it gives me syntax error and other errors. Thanks for your help
######## Suez_Canal Event ########

def canTriggerSuez_Canal(argsList):
kTriggeredData = argsList[0]
player = gc.getPlayer(kTriggeredData.ePlayer)

if (player.getCivilizationType() == gc.getInfoTypeForString("CIVILIZATION_SUEZ")): ##Defines the Civilization
return True

return False

def applySuez_Canal(argsList):
iEvent = argsList[0]
kTriggeredData = argsList[1]

player = gc.getPlayer(kTriggeredData.ePlayer)
plot = gc.getMap().plot(167, 49) ##THE COORDINATES##

iImprovementType = CvUtil.findInfoTypeNum(gc.getImprovementInfo,gc.getNumImprovementInfos(), 'IMPROVEMENT_SUEZ_CANAL'))
 
Now it doesn't give me any errors, but nothing happens
######## Suez_Canal Event ########

def canTriggerSuez_Canal(argsList):
kTriggeredData = argsList[0]
player = gc.getPlayer(kTriggeredData.ePlayer)

if (player.getCivilizationType() == gc.getInfoTypeForString("CIVILIZATION_SUEZ")): ##Defines the Civilization
return True

return False

def applySuez_Canal(argsList):
iEvent = argsList[0]
kTriggeredData = argsList[1]

player = gc.getPlayer(kTriggeredData.ePlayer)
plot = gc.getMap().plot(167, 49) ##THE COORDINATES##

iImp = CvUtil.findInfoTypeNum(gc.getImprovementInfo,gc.getNumImprovementInfos(), 'IMPROVEMENT_SUEZ_CANAL')
 
Last edited:
What was the error message and where are you using iImprovementType and iImp?

Also please use the code tags for more readability:
"["CODE=python"]"
#Python code here
"["/CODE"]"
 
What was the error message and where are you using iImprovementType and iImp?

Also please use the code tags for more readability:
"["CODE=python"]"
#Python code here
"["/CODE"]"
then the event consists in spawning an improvement on the coordinate for civilization, the improvement is modular, but even without the phyton script, when I activate the normal event without phyton script, nothing happens, while if I use an already existing improvement works . the phyton script doesn't give me errors.

In the CvRandomEventInterface
######## Suez_Canal Event ########

def canTriggerSuez_Canal(argsList):
kTriggeredData = argsList[0]
player = gc.getPlayer(kTriggeredData.ePlayer)

if (player.getCivilizationType() == gc.getInfoTypeForString("CIVILIZATION_SUEZ")): ##Defines the Civilization
return True

return False

def applySuez_Canal(argsList):
iEvent = argsList[0]
kTriggeredData = argsList[1]

player = gc.getPlayer(kTriggeredData.ePlayer)
plot = gc.getMap().plot(167, 49) ##THE COORDINATES##

iImp = CvUtil.findInfoTypeNum(gc.getImprovementInfo,gc.getNumImprovementInfos(), 'IMPROVEMENT_SUEZ_CANAL')

######## END_Suez_Canal Event ########

THIS IS THE MODULAR EVENT TRIGGER
Suez_CIV4EventTriggerInfos


Civ4EventTriggerInfos xmlns="x-schema:Suez_CIV4EventSchema.xml">
<EventTriggerInfos>
<EventTriggerInfo>
<Type>EVENTTRIGGER_SUEZ_CANAL_BUILT_1</Type>
<WorldNewsTexts>
<Text>TXT_KEY_EVENTTRIGGER_PASTURE_BUILT</Text>
</WorldNewsTexts>
<TriggerTexts>
<TriggerText>
<Text>TXT_KEY_EVENT_PASTURE_BUILT</Text>
<Era>NONE</Era>
</TriggerText>
</TriggerTexts>
<bSinglePlayer>0</bSinglePlayer>
<iPercentGamesActive>100</iPercentGamesActive>
<iWeight>-1</iWeight>
<bProbabilityUnitMultiply>0</bProbabilityUnitMultiply>
<bProbabilityBuildingMultiply>0</bProbabilityBuildingMultiply>
<Civic>NONE</Civic>
<iMinTreasury>0</iMinTreasury>
<iMinPopulation>0</iMinPopulation>
<iMaxPopulation>0</iMaxPopulation>
<iMinMapLandmass>0</iMinMapLandmass>
<iMinOurLandmass>0</iMinOurLandmass>
<iMaxOurLandmass>-1</iMaxOurLandmass>
<MinDifficulty>NONE</MinDifficulty>
<iAngry>0</iAngry>
<iUnhealthy>0</iUnhealthy>
<UnitsRequired/>
<iNumUnits>0</iNumUnits>
<iNumUnitsGlobal>0</iNumUnitsGlobal>
<iUnitDamagedWeight>0</iUnitDamagedWeight>
<iUnitDistanceWeight>0</iUnitDistanceWeight>
<iUnitExperienceWeight>0</iUnitExperienceWeight>
<bUnitsOnPlot>0</bUnitsOnPlot>
<BuildingsRequired/>
<iNumBuildings>0</iNumBuildings>
<iNumBuildingsGlobal>0</iNumBuildingsGlobal>
<iNumPlotsRequired>1</iNumPlotsRequired>
<bOwnPlot>1</bOwnPlot>
<iPlotType>-1</iPlotType>
<FeaturesRequired/>
<TerrainsRequired/>
<ImprovementsRequired>
<ImprovementType>NONE</ImprovementType>
</ImprovementsRequired>
<BonusesRequired/>
<RoutesRequired/>
<ReligionsRequired/>
<iNumReligions>0</iNumReligions>
<CorporationsRequired/>
<iNumCorporations>0</iNumCorporations>
<bPickReligion>0</bPickReligion>
<bStateReligion>0</bStateReligion>
<bHolyCity>0</bHolyCity>
<bPickCorporation>0</bPickCorporation>
<bHeadquarters>0</bHeadquarters>
<Events>
<Event>EVENT_SUEZ_CANAL_BUILT_1</Event>
</Events>
<PrereqEvents/>
<bPrereqEventPlot>0</bPrereqEventPlot>
<OrPreReqs/>
<AndPreReqs>
<PrereqTech>TECH_CALENDAR</PrereqTech>
</AndPreReqs>
<ObsoleteTechs/>
<bRecurring>1</bRecurring>
<bTeam>0</bTeam>
<bGlobal>0</bGlobal>
<bPickPlayer>0</bPickPlayer>
<bOtherPlayerWar>0</bOtherPlayerWar>
<bOtherPlayerHasReligion>0</bOtherPlayerHasReligion>
<bOtherPlayerHasOtherReligion>0</bOtherPlayerHasOtherReligion>
<bOtherPlayerAI>0</bOtherPlayerAI>
<iOtherPlayerShareBorders>0</iOtherPlayerShareBorders>
<OtherPlayerHasTech>NONE</OtherPlayerHasTech>
<bPickCity>1</bPickCity>
<bPickOtherPlayerCity>0</bPickOtherPlayerCity>
<bShowPlot>0</bShowPlot>
<iCityFoodWeight>0</iCityFoodWeight>
<PythonCanDo>canTriggerSuez_Canal</PythonCanDo>
<PythonCanDoCity/>
<PythonCanDoUnit/>
<PythonCallback/>
</EventTriggerInfo>
</EventTriggerInfos>
</Civ4EventTriggerInfos>

AND THIS IS Suez_CIV4EventInfos
<Civ4EventInfos xmlns="x-schema:Suez_CIV4EventSchema.xml">
<EventInfos>
<EventInfo>
<Type>EVENT_SUEZ_CANAL_BUILT_1</Type>
<Description>TXT_KEY_EVENT_PASTURE_BUILT_1</Description>
<LocalInfoText/>
<WorldNewsTexts/>
<OtherPlayerPopup/>
<QuestFailText/>
<bQuest>0</bQuest>
<bGlobal>0</bGlobal>
<bTeam>0</bTeam>
<bPickCity>1</bPickCity>
<bPickOtherPlayerCity>0</bPickOtherPlayerCity>
<bDeclareWar>0</bDeclareWar>
<iGold>0</iGold>
<bGoldToPlayer>0</bGoldToPlayer>
<iRandomGold>0</iRandomGold>
<iCulture>0</iCulture>
<iEspionagePoints>0</iEspionagePoints>
<bGoldenAge>0</bGoldenAge>
<iFreeUnitSupport>0</iFreeUnitSupport>
<iInflationMod>0</iInflationMod>
<iSpaceProductionMod>0</iSpaceProductionMod>
<Tech>NONE</Tech>
<TechFlavors/>
<iTechPercent>0</iTechPercent>
<iTechCostPercent>0</iTechCostPercent>
<iTechMinTurnsLeft>0</iTechMinTurnsLeft>
<PrereqTech>NONE</PrereqTech>
<UnitClass>NONE</UnitClass>
<iNumFreeUnits>0</iNumFreeUnits>
<bDisbandUnit>0</bDisbandUnit>
<iUnitExperience>0</iUnitExperience>
<iUnitImmobileTurns>0</iUnitImmobileTurns>
<UnitPromotion/>
<UnitName/>
<UnitCombatPromotions/>
<UnitClassPromotions/>
<BuildingClass>NONE</BuildingClass>
<iBuildingChange>0</iBuildingChange>
<BuildingExtraYields/>
<BuildingExtraCommerces/>
<BuildingExtraHappies/>
<BuildingExtraHealths/>
<iHappy>0</iHappy>
<iHealth>0</iHealth>
<iHurryAnger>0</iHurryAnger>
<iHappyTurns>0</iHappyTurns>
<iRevoltTurns>0</iRevoltTurns>
<iMinPillage>0</iMinPillage>
<iMaxPillage>0</iMaxPillage>
<iFood>0</iFood>
<iFoodPercent>0</iFoodPercent>
<FreeSpecialistCounts/>
<FeatureType>NONE</FeatureType>
<iFeatureChange>0</iFeatureChange>
<ImprovementType>IMPROVEMENT_SUEZ_CANAL</ImprovementType>
<iImprovementChange>0</iImprovementChange>
<BonusType>NONE</BonusType>
<iBonusChange>0</iBonusChange>
<RouteType>NONE</RouteType>
<iRouteChange>0</iRouteChange>
<BonusRevealed>NONE</BonusRevealed>
<BonusGift>NONE</BonusGift>
<PlotExtraYields/>
<iConvertOwnCities>0</iConvertOwnCities>
<iConvertOtherCities>0</iConvertOtherCities>
<iMaxNumReligions>-1</iMaxNumReligions>
<iOurAttitudeModifier>0</iOurAttitudeModifier>
<iAttitudeModifier>0</iAttitudeModifier>
<iTheirEnemyAttitudeModifier>0</iTheirEnemyAttitudeModifier>
<iPopulationChange>0</iPopulationChange>
<AdditionalEvents/>
<EventTimes/>
<ClearEvents/>
<PythonCallback>applySuez_Canal</PythonCallback>
<PythonExpireCheck/>
<PythonCanDo/>
<PythonHelp/>
<Button>,Art/Interface/Buttons/Process/Blank.dds,Art/Interface/Buttons/Beyond_the_Sword_Atlas.dds,8,5</Button>
<iAIValue>1000</iAIValue>
</EventInfo>
</EventInfos>
</Civ4EventInfos>
 
Last edited:
I don't have any experience with custom events, but the modiki indicates improvements can be added to a plot without a callback.

In Suez_CIV4EventInfos, try setting iImprovementChange to 1 and see if that works :

XML:
<iImprovementChange>1</iImprovementChange>

You will also need to make sure canTriggerSuez_Canal only returns true when the event is on the plot you want.
 
thanks for the help, I'll try some new solutions, see if I can activate or scrpt, if so I'll look for help again
 
Last edited:
The code in the original post seems to miss a line that places the improvement on the map. It only seems to look up the plot object, the player object (not really needed) and the improvement type ID. So adding plot.setImprovementType(iImp) may help. But, if the same can be accomplished purely through XML, that's probably preferable.
 
Top Bottom