Problem with foreach
-
I am receiving the error
GameParseException: Attachment has invalid variables in foreach: $NeutralArea$
Does anyone see an error?
<variableList> <variable name="MajorPower"> <element name="Britain"/> <element name="Soviet_Union"/> <element name="United_States"/> <element name="Western_Europe"/> </variable> <variable name="NewUnit"> <element name="aaGun1"/> <element name="APC"/> <element name="bomber_lr"/> <element name="fighter_jp"/> <element name="fighter_lr"/> <element name="fission_bomb"/> <element name="fusion_bomb"/> <element name="heavy_armor"/> <element name="heavy_transport"/> <element name="marine"/> <element name="nuclear_carrier"/> <element name="radar_cruiser"/> <element name="self-propelled_artillery"/> <element name="special_forces"/> <element name="submarine1"/> <element name="submarine2"/> <element name="submarine3"/> </variable> <variable name="NeutralArea"> <element name="Afghanistan"/> <element name="Borneo/Celebes"/> <element name="Ethiopia"/> <element name="Finland"/> <element name="Iran"/> <element name="Ireland"/> <element name="Java"/> <element name="Rio de Oro"/> <element name="Spain"/> <element name="Sumatra"/> <element name="Sweden"/> <element name="Switzerland"/> <element name="Thailand"/> <element name="Tibet"/> </variable> </variableList> <!-- <attachment name="conditionAttachmentIrelandNon_Aligned" attachTo="Non_Aligned" javaClass="games.strategy.triplea.attachments.RulesAttachment" type="player"> <option name="directOwnershipTerritories" value="Ireland" count="1"/> </attachment> --> <attachment foreach="$NeutralArea$" name="conditionAttachment@NeutralArea@Non_Aligned" attachTo="Non_Aligned" javaClass="games.strategy.triplea.attachments.RulesAttachment" type="player"> <option name="directOwnershipTerritories" value="@NeutralArea@" count="1"/> </attachment> Note that commented out code works. -
variableList section is within attachmentList section. variableList needs its own section like resourceList, playerList, unitList.
Most xml's have variableList section at the top prior to the map section.Cheers...
-
@wc_sumpton said in Problem with foreach:
variableList section is within attachmentList section. variableList needs its own section like resourceList, playerList, unitList.
Most xml's have variableList section at the top prior to the map section.Cheers...
Thank you for your help. That fixed it.
-
@rogercooper I want to post my complete solution as it has some tricks people might want to use. I was surprised that you can use both a cartesian join "^" and a standard join ":" in the same foreach structure.
Another neat trick is that you can use Export/Export game.xml file to resolve all the for eaches. Useful if you want to check that the result is correct or if you need to customize some entries.
<variableList> <variable name="MajorPower"> <element name="Britain"/> <element name="Soviet_Union"/> <element name="United_States"/> <element name="Western_Europe"/> </variable> <variable name="NeutralArea"> <element name="Afghanistan"/> <element name="Borneo/Celebes"/> <element name="Ethiopia"/> <element name="Finland"/> <element name="Iran"/> <element name="Ireland"/> <element name="Java"/> <element name="Rio de Oro"/> <element name="Spain"/> <element name="Sumatra"/> <element name="Sweden"/> <element name="Switzerland"/> <element name="Thailand"/> <element name="Tibet"/> </variable> <variable name="NeutralSetup"> <element name="infantry"/> <element name="infantry"/> <element name="infantry:infantry"/> <element name="infantry:infantry:infantry"/> <element name="infantry:armor:fighter"/> <element name="infantry"/> <element name="infantry"/> <element name="infantry"/> <element name="infantry:infantry:infantry:infantry:armor:fighter"/> <element name="infantry"/> <element name="infantry:infantry:infantry:armor:fighter"/> <element name="infantry:infantry:infantry:fighter"/> <element name="infantry:infantry"/> <element name="infantry:infantry"/> </variable> </variableList>and
<attachment name="conditionAttachmentEveryTurn" attachTo="United_States" javaClass="games.strategy.triplea.attachments.RulesAttachment" type="player"> <option name="rounds" value="1-100"/> </attachment> <attachment foreach="$NeutralArea$" name="conditionAttachment@NeutralArea@Non_Aligned" attachTo="Non_Aligned" javaClass="games.strategy.triplea.attachments.RulesAttachment" type="player"> <option name="directOwnershipTerritories" value="@NeutralArea@" count="1"/> </attachment> <attachment foreach="$NeutralArea$" name="triggerAttachment@NeutralArea@RemoveUnits" attachTo="Non_Aligned" javaClass="games.strategy.triplea.attachments.TriggerAttachment" type="player"> <option name="players" value="Non_Aligned"/> <option name="uses" value="1"/> <option name="removeUnits" value="@NeutralArea@:All" count="5"/> </attachment> <attachment foreach="$MajorPower$^$NeutralArea$:$NeutralSetup$" name="triggerAttachment@MajorPower@@NeutralArea@" attachTo="@MajorPower@" javaClass="games.strategy.triplea.attachments.TriggerAttachment" type="player"> <option name="conditions" value="conditionAttachmentEveryTurn"/> <option name="conditions" value="conditionAttachment@NeutralArea@Non_Aligned"/> <option name="players" value="@MajorPower@"/> <option name="chance" value="1:80"/> <option name="chanceIncrementOnFailure" value="1"/> <option name="when" value="before:@MajorPower@Purchase"/> <option name="placement" value="@NeutralArea@:@NeutralSetup@" /> <option name="changeOwnership" value="@NeutralArea@:Non_Aligned:@MajorPower@:false"/> <option name="activateTrigger" value="triggerAttachment@NeutralArea@RemoveUnits:1:false:false:false:false"/> <option name="uses" value="1"/> </attachment>