Limit total number of Chinese fighters?
-
I'm building a map where China produces units mostly based on territories it controls, as in WW2v3, using the ProductionPerXTerritories. However, I've added a national objective that gives China a fighter each turn if America controls a suitable port (e.g. Manila, Guam, Fukien, etc.) to deliver that fighter. I want to cap the total number of Chinese fighters on the map at a time at 2.
I'm not sure how to do this using a sane number of lines of code -- maxBuiltPerPlayer doesn't work because that cap triggers when you try to purchase a unit in the purchase phase, which is bypassed by the "purchase" instruction in my national objective. placementLimit doesn't work, because it only stops you from stacking 3+ fighters in the same territory; it won't stop you from placing one fighter in each Chinese territory. directPresenceTerritories plus invert doesn't work for the same reason.
Anyone have any suggestions?
Relevant code is below:
<attachment name="conditionAttachmentFlyingTigersAvail" attachTo="Chinese" javaClass="games.strategy.triplea.attachments.RulesAttachment" type="player"> <option name="alliedOwnershipTerritories" value="Western United States:Hawaiian Islands:Szechuan" count="3"/> <option name="alliedOwnershipTerritories" value="Fukien:Indochina:Kwangtung:Formosa:Philippine Islands:Okinawa:Guam" count="1"/> </attachment> <attachment name="objectiveAttachment2" attachTo="Chinese" javaClass="games.strategy.triplea.attachments.RulesAttachment" type="player"> <option name="conditions" value="conditionAttachmentFlyingTigers"/> </attachment> <attachment name="triggerAttachmentFlyingTigers" attachTo="Chinese" javaClass="games.strategy.triplea.attachments.TriggerAttachment" type="player"> <option name="conditions" value="conditionAttachmentFlyingTigers"/> <option name="when" value="before:chinesePurchase"/> <option name="purchase" value="flyingTiger" count="1"/> </attachment>
<attachment name="unitAttachment" attachTo="flyingTiger" javaClass="games.strategy.triplea.attachments.UnitAttachment" type="unitType"> <option name="movement" value="4"/> <option name="carrierCost" value="1"/> <option name="isAir" value="true"/> <option name="attack" value="3"/> <option name="defense" value="4"/> <option name="canIntercept" value="true"/> <option name="canEscort" value="true"/> <option name="airDefense" value="1"/> <option name="airAttack" value="1"/> <option name='maxBuiltPerPlayer' value='2'/> </attachment>
<attachment name="rulesAttachment" attachTo="Chinese" javaClass="games.strategy.triplea.attachments.RulesAttachment" type="player"> <option name="movementRestrictionTerritories" value="Xinjiang:Chinghai:Ningxia:Tibet:Szechuan:Yunnan:Fukien:Suiyuan:Henan:Hubei:Hunan:Manchuria:Hulunbuir:Korea:Kiangsu:Kwangtung:Burma:Thailand:Indochina:Malaya"/> <option name="movementRestrictionType" value="allowed"/> <option name="productionPerXTerritories" value="2"/> <option name="placementAnyTerritory" value="true"/> <option name="placementCapturedTerritory" value="true"/> <option name="placementPerTerritory" value="4"/> </attachment>
-
In this case you will have to create 2 counts, one to check for 2 fighters in one territory, and one to check for 1 fighter in 2 territories. Since these will be "and conditions" they can be place as a condition.
<attachment name="conditionAttachmentFlyingTigersAvail" attachTo="Chinese" javaClass="RulesAttachment" type="player"> <option name="alliedOwnershipTerritories" value="Western United States:Hawaiian Islands:Szechuan" count="3"/> <option name="alliedOwnershipTerritories" value="Fukien:Indochina:Kwangtung:Formosa:Philippine Islands:Okinawa:Guam" count="1"/> </attachment> <attachment name="conditionAttachment2FlyingTigersIn1" attachTo="Chinese" javaClass="RulesAttachment" type="player"> <option name="conditions" value="conditionAttachmentFlyingTigersAvail"/> <option name="directPresenceTerritories" value="@ChinaTerritories@" count="2"/> <option name="unitPresence" value="flyingTiger" count="1"/> <option name="invert" value="true"/> </attachment> <attachment name="conditionAttachment1FlyingTigersIn2" attachTo="Chinese" javaClass="RulesAttachment" type="player"> <option name="conditions" value="conditionAttachment2FlyingTigersIn1"/> <option name="directPresenceTerritories" value="@ChinaTerritories@" count="2"/> <option name="unitPresence" value="flyingTiger" count="1"/> <option name="invert" value="true"/> </attachment>
Because all the conditions are chained together, only the last condition needs to be checked for the trigger.
Hope this helps.
Cheers...
-
@wc_sumpton Brilliant, thanks! Works great. I swear I tried hard to think of this on my own and couldn't, but it seems so obvious once you point it out.
-
@jason-green-lowe said in Limit total number of Chinese fighters?:
I swear I tried hard to think of this on my own and couldn't, but it seems so obvious once you point it out.
I have said the same thing! @beelee, @TheDog and many others have pointed stuff out to me, and I'll just go "WOW! I could have had a V8!" (Head-slap emoji)
Cheers...