combined condition attachment for triggers
-
oops wrong trigger
<attachment name="GsubSZ5ET" attachTo="Germans" javaClass="games.strategy.triplea.attachments.TriggerAttachment" type="player">
<option name="when" value="after:germanEndTurn"/>
<option name="conditions" value="conditionAttachmentSubGSZ5:conditionAttachmentAxisholdGermany"/>
<option name="removeUnits" value="5 Sea Zone:submarine" count="1"/>
<option name="placement" value="5 Sea Zone:submarine_in_sub_bunker" count="1"/>
</attachment> -
but if Germany buys 2 subs
there are 2 conditions - one for 1 sub and one for 2 subs
<attachment name="conditionAttachmentSubGSZ5" attachTo="Germans" javaClass="games.strategy.triplea.attachments.RulesAttachment" type="player">
<option name="directPresenceTerritories" value="5 Sea Zone"/>
<option name="players" value="Germans:Italians:Japanese"/>
<option name="unitPresence" value="submarine" count= "1"/>
</attachment><attachment name="conditionAttachment2SubGSZ5" attachTo="Germans" javaClass="games.strategy.triplea.attachments.RulesAttachment" type="player">
<option name="directPresenceTerritories" value="5 Sea Zone"/>
<option name="players" value="Germans:Italians:Japanese"/>
<option name="unitPresence" value="submarine" count= "2"/>
</attachment>and 2 triggers
<attachment name="GsubSZ5ET" attachTo="Germans" javaClass="games.strategy.triplea.attachments.TriggerAttachment" type="player">
<option name="when" value="after:germanEndTurn"/>
<option name="conditions" value="conditionAttachmentSubGSZ5:conditionAttachmentAxisholdGermany"/>
<option name="removeUnits" value="5 Sea Zone:submarine" count="1"/>
<option name="placement" value="5 Sea Zone:submarine_in_sub_bunker" count="1"/>
</attachment><attachment name="G2subSZ5ET" attachTo="Germans" javaClass="games.strategy.triplea.attachments.TriggerAttachment" type="player">
<option name="when" value="after:germanEndTurn"/>
<option name="conditions" value="conditionAttachment2SubGSZ5:conditionAttachmentAxisholdGermany"/>
<option name="removeUnits" value="5 Sea Zone:submarine" count="2"/>
<option name="placement" value="5 Sea Zone:submarine_in_sub_bunker" count="2"/>
</attachment>but instead of using the second trigger, the programming is using both
G2subSZ75ET: has removed 2 submarines owned by Germans in 75 Sea Zone
G2subSZ75ET: Germans has 2 submarine_in_sub_bunkers placed in 75 Sea Zone
GsubSZ75ET: Germans has 1 submarine_in_sub_bunker placed in 75 Sea ZoneSo: buying 2 subs, means 1+2 = 3 converted units
buying 3 subs, means 1+2+3 = 6 converted untishow to avoid that ?
-
'count' when used in a conditionAttachment means equal to or greater then. So both statements are true if "5 Sea Zone" has 2 German subs. The triggerAttachment does not check the 'count' when using removeUnits. So if 1 unit is there and you remove 2, it will remove the 1 with out any errors.
To insure that only 1 or 2 units are removed you must check for the presents of just 1 unit. So use a condition that inverts the check for 2 and if true then there must be less then 2 units:
<attachment name="conditionAttachmentNo2SubGSZ5" attachTo="Germans" javaClass="games.strategy.triplea.attachments.RulesAttachment" type="player"> <option name="conditions" value="conditionAttachment2SubGSZ5"/> <option name="players" value="Germans:Italians:Japanese"/> <option name="invert" value="true"/> </attachment>
Then add that condition to the deployment of 1 subermarine_in_sub_bunker trigger.
Cheers...
-
so if you have 3 positive conditions
if1,if2,if3
and 3 negative one (with invert)
ifnot1,ifnot2,ifnot3
then the triggers would be:
triggerconvert1
...if1:ifnot2:ifnot3triggerconvert2
...if2:ifnot1:ifnot3triggerconvert3
...if3:ifnot1:ifnot2is that the logic for the xml ?
the ":" works as "AND" in this case -
When testing with count the test is for x or more. So if an zone contains 2 units, testing for 1 unit is true, testing for 2 units is true, but testing for 3 units is false. So to test for an exact number of units there needs to be another check. ie: Are there 2 or more units, and less then 3 units?
So to test for up to 3 units:
1 or more and less then 2
2 or more and less then 3
3 or moreLess then 1 testing is not needed. Also testing for less then three when test for 1.
-
thx,
I understand your idea,
however "count =" is neither <= nor >=
so = 2 would count 2, but it could be 3 or 4 there.
So how to define "2 or less" or "3 and more"
-
Wrong. "count"="2" is 2 or more. This only means assign the number "2" to the variable "count".
When used in conditionAttachment with "requiresUnit" then if there are 2 or more units in the zone, the statement is true.
When used in a triggerAttachment with "removesUnit" then it means remove no more then 2 units, but if there are less units that is ok, even if there are no units to remove.
It may look exact "count=2" but it is not. "count" is just variable. Like "count"="false".
Cheers...
-
Maybe I miss understood your question. You know how to "count" for "2". You want to know how to "count" for less then "3".
Simple, use an invert condition on the "count" for "3":
<!-- Counting for 3 or more German subs in 5 Sea Zone --> <attachment name="conditionAttachment3SubGSZ5" attachTo="Germans" javaClass="games.strategy.triplea.attachments.RulesAttachment" type="player"> <option name="directPresenceTerritories" value="5 Sea Zone"/> <option name="players" value="Germans:Italians:Japanese"/> <option name="unitPresence" value="submarine" count= "3"/> </attachment> <!-- Counting for less the 3 (0,1 or 2) German Subs in 5 Sea Zone --> <attachment name="conditionAttachmentNo3SubGSZ5" attachTo="Germans" javaClass="games.strategy.triplea.attachments.RulesAttachment" type="player"> <option name="conditions" value="conditionAttachment3SubGSZ5"/> <option name="players" value="Germans:Italians:Japanese"/> <option name="invert" value="true"/> </attachment>
So if there are 3 German subs in '5 Sea Zone' then "conditionAttachment3SubGSZ5" will be true and "conditionAttachmentNo3SubGSZ5" will be false. If there are less then 3 subs then "conditionAttachment3SubGSZ5" is false witch will make "conditionAttachmentNo3SubGSZ5" true.
Cheers...
-
This isn't exactly what you're doing but just to add another example:
<attachment name="conditionAttachment_WolfpackRemove112" attachTo="Germans" javaClass="games.strategy.triplea.attachments.RulesAttachment" type="player">
<option name="directPresenceTerritories" value="112 Sea Zone" count="1"/>
<option name="unitPresence" value="GermanUBoat" count="3"/>
<option name="invert" value="true"/>
</attachment><attachment name="triggerAttachment_Germans_RemoveWolfpackSZ112" attachTo="Germans" javaClass="games.strategy.triplea.attachments.TriggerAttachment" type="player">
<option name="conditions" value="conditionAttachment_WolfpackRemove112"/>
<option name="removeUnits" value="112 Sea Zone:Wolfpack" count="1"/>
<option name="when" value="before:germansNonCombatMove"/>
</attachment>So as long as there are less than 3 German Uboat Units in SZ 112, it will remove 1 Wolfpack Unit in SZ 112
-
Correct. If there are 0, 1 or 2 'GermanUBoats' then it will attempt to remove 1 Wolfpack. This will be true even with 0 'GermanUBoats'.
Cheers...
-
@wc_sumpton heh heh you're the one that clued me in on it when I was struggling