Transferring Unit Control
-
I am working on a mod where major powers gain control of unaligned nations through random events. For example
<attachment name="triggerAttachmentSpainUnited_States" attachTo="United_States" javaClass="games.strategy.triplea.attachments.TriggerAttachment" type="player"> <option name="conditions" value="conditionAttachmentEveryTurn"/> <option name="players" value="United_States"/> <option name="chance" value="1:80"/> <option name="chanceIncrementOnFailure" value="1"/> <option name="when" value="before:United_StatesPurchase"/> <option name="changeOwnership" value="Spain:Non_Aligned:United_States:false"/> <option name="uses" value="1"/> </attachment>Is there any way to change the ownership of the units directly. I would rather avoid having to specify for each territory removing each unit and adding a new units.
-
Hi Roger
What I did was a little different as I had all units from all their TTys change at once and I don't remember 100% of how I did it but you already have the "changeOwnership" .
You need to use "GiveUnitControl" and then specify the TTy. So you'd still need a trigger for each TTy but not individual units. You need to add it in multiple places.
From POS2

@wc_sumpton may know of a better way.
Edit

Idk. Maybe that won't work as it Might activate all the TTys that have that attachment
-
-
@wc_sumpton said in Transferring Unit Control:
Try reviewing here.
@beelee is pointing you in the right direction.
Cheers...
Thanks. I will give that a try.
-
I tried the code and it doesn't seem to work. I will use "removeUnits" and "placement".
-
I don't understand the problem. In "World War II Global 1940 2nd Edition" all UK_Pacific are changed into British units, also if Japanese attack Russians then all Mongolians territories change to Russians along with their units.
Do units/infantry have "canBeGivenByTerritoryTo"?
Do territories/Spain have "changeUnitOwners"?
Do Non_Aligned have "playerAttachment" with "giveUnitControl"?
Is "Give Units By Territory" true"?
Is "changeOwnership" combat value true?If you are more problems post some code.
Cheers...
-
@wc_sumpton said in Transferring Unit Control:
I don't understand the problem. In "World War II Global 1940 2nd Edition" all UK_Pacific are changed into British units, also if Japanese attack Russians then all Mongolians territories change to Russians along with their units.
Do units/infantry have "canBeGivenByTerritoryTo"?
Do territories/Spain have "changeUnitOwners"?
Do Non_Aligned have "playerAttachment" with "giveUnitControl"?
Is "Give Units By Territory" true"?
Is "changeOwnership" combat value true?If you are more problems post some code.
Cheers...
I tried all of those things, and the units do not change ownership.
<attachment name="unitAttachment" attachTo="infantry" javaClass="games.strategy.triplea.attachments.UnitAttachment" type="unitType"> <option name="movement" value="1"/> <option name="transportCost" value="1"/> <option name="attack" value="1"/> <option name="defense" value="2"/> <option name="isLandTransportable" value="true"/> <option name="artillerySupportable" value="true"/> <option name="canBeGivenByTerritoryTo" value="Soviet_Union"/> </attachment> <attachment name="territoryAttachment" attachTo="Ireland" javaClass="games.strategy.triplea.attachments.TerritoryAttachment" type="territory"> <option name="production" value="1"/> <option name="changeUnitOwners" value="Soviet_Union"/> </attachment> <attachment name="playerAttachment" attachTo="Non_Aligned" javaClass="games.strategy.triplea.attachments.PlayerAttachment" type="player"> <option name="giveUnitControl" value="Soviet_Union"/> </attachment> <property name="Give Units By Territory" value="true" editable="false"> <boolean/> </property> <attachment name="triggerAttachmentIrelandSoviet_Union" attachTo="Soviet_Union" javaClass="games.strategy.triplea.attachments.TriggerAttachment" type="player"> <option name="conditions" value="conditionAttachmentEveryTurn"/> <option name="conditions" value="conditionAttachmentIrelandNon_Aligned"/> <option name="players" value="Soviet_Union"/> <option name="chance" value="80:80"/> <option name="chanceIncrementOnFailure" value="1"/> <option name="when" value="before:Soviet_UnionPurchase"/> <option name="changeOwnership" value="Ireland:Non_Aligned:Soviet_Union:true"/> <option name="changeOwnership" value="Ireland:Non_Aligned:Soviet_Union:false"/> <option name="uses" value="1"/> </attachment>Ireland changes ownership, but the unit remains Non_Aligned
-
@rogercooper said in Transferring Unit Control:

these seem at odds with one another
Edit
Maybe you need to add this or the by TTy not all TTys
-
Does Non_Aligned have "canTakeOverOwnedTerritory" as part of it relationshipTypeAttachment?
<option name="changeOwnership" value="Ireland:Non_Aligned:Soviet_Union:true"/> <option name="changeOwnership" value="Ireland:Non_Aligned:Soviet_Union:false"/>Will not work because Ireland is not Non_Aligned for the second call because it is owned by Soviet_Union.
Cheers...
-
@wc_sumpton said in Transferring Unit Control:
Does Non_Aligned have "canTakeOverOwnedTerritory" as part of it relationshipTypeAttachment?
<option name="changeOwnership" value="Ireland:Non_Aligned:Soviet_Union:true"/> <option name="changeOwnership" value="Ireland:Non_Aligned:Soviet_Union:false"/>Will not work because Ireland is not Non_Aligned for the second call because it is owned by Soviet_Union.
Cheers...
I tried reversing the order, but the result is the same, the territory changed ownership but not the units.
I also tried to remove and place. It doesn't work because the program assumes that the units to be removed are from the attached player. I would need to have a separate trigger for that.
-
The order does not matter.
<option name="changeOwnership" value="Ireland:Non_Aligned:Soviet_Union:true"/> <!-- <option name="changeOwnership" value="Ireland:Non_Aligned:Soviet_Union:false"/>Non_Aligned no longer own Ireland, Soviet_Union does, so this will not run --> <option name="changeOwnership" value="Ireland:any:Soviet_Union:false"/> <!-- Uses 'any' for old owner -->@rogercooper said in Transferring Unit Control:
Ireland changes ownership, but the unit remains Non_Aligned
I'm going to setup a test map.
Cheers...
-
There are two different settings. Both have unit, territory, player, and options.
canBeGivenByTerritoryTo is used to give control of a unit to another player when the unit enters a territory with changeUnitOwners unless giveUnitControlInAllTerritories is set in playerAttachment. playerAttachment should contain giveUnitControl and option "Give Units By Territory" should also be set.But what I think you want capture.
canBeCapturedOnEnteringBy is used to gain control of the unit when a territory with captureUnitOnEnteringBy is captured. playerAttachment should contain captureUnitOnEnteringBy and option "Capture Units On Entering Territory" should also be set.Cheers...
-
@wc_sumpton said in Transferring Unit Control:
The order does not matter.
<option name="changeOwnership" value="Ireland:Non_Aligned:Soviet_Union:true"/> <!-- <option name="changeOwnership" value="Ireland:Non_Aligned:Soviet_Union:false"/>Non_Aligned no longer own Ireland, Soviet_Union does, so this will not run --> <option name="changeOwnership" value="Ireland:any:Soviet_Union:false"/> <!-- Uses 'any' for old owner -->@rogercooper said in Transferring Unit Control:
Ireland changes ownership, but the unit remains Non_Aligned
I'm going to setup a test map.
Cheers...
Neither is what I want. I want to change control of the territory and units without any requirement for entry.
-
@rogercooper said in Transferring Unit Control:
Neither is what I want. I want to change control of the territory and units without any requirement for entry.
Yes, and I understand that. That is why I pointed to "World War II Global 1940 2nd Edition" all the Mongolian territories as well as their infantry units change to Russian control on Japan's turn. Russia did not have to enter those territories.
I also understand that you want to keep your project to yourself, but there is not enough information to debug what the problem might be.
I'm sorry, what you are describing seem doable. But I'm not able to figure the disconnect. The problem is probably on my side.
Again sorry.Cheers...
P.S.
You could try adding canBeCapturedOnEnteringBy to the infantry, captureUnitOnEnteringBy to Ireland and to Non_Aligned playerAttachment and setting "Capture Units On Entering Territory". What could it hurt since nothing else has worked.
Cheers...
-
@wc_sumpton I am trying a different approach.
<attachment name="triggerAttachmentIrelandSoviet_Union" attachTo="Soviet_Union" javaClass="games.strategy.triplea.attachments.TriggerAttachment" type="player"> <option name="conditions" value="conditionAttachmentEveryTurn"/> <option name="conditions" value="conditionAttachmentIrelandNon_Aligned"/> <option name="players" value="Soviet_Union"/> <option name="chance" value="80:80"/> <option name="chanceIncrementOnFailure" value="1"/> <option name="when" value="before:Soviet_UnionPurchase"/> <option name="placement" value="Ireland:infantry" /> <option name="changeOwnership" value="Ireland:Non_Aligned:Soviet_Union:false"/> <option name="activateTrigger" value="triggerAttachmentIrelandSoviet_Union2:1:false:false:false:false"/> <option name="uses" value="1"/> </attachment> <attachment name="triggerAttachmentIrelandSoviet_Union2" 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="Ireland:All"/> </attachment> <attachment name="triggerAttachmentIrelandAligned" 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="Ireland:All"/> </attachment>Without the activateTrigger it changes control and adds a Soviet unit. With the activate trigger, I get the error
Could not parse:C:\Users\Roger\triplea\downloadedMaps\East_and_West\games\East_and_West-Automated-7p.xml, map name: ''C:\Users\Roger\triplea\downloadedMaps\East_and_West\games\East_and_West-Automated-7p.xml'', unexpected exception while setting values for attachment: TriggerAttachment attached to: PlayerId named: Soviet_Union with name: triggerAttachmentIrelandSoviet_Union, failed to set string property value to 'triggerAttachmentIrelandSoviet_Union2:1:false:false:false:false'
GameParseException: map name: ''C:\Users\Roger\triplea\downloadedMaps\East_and_West\games\East_and_West-Automated-7p.xml'', unexpected exception while setting values for attachment: TriggerAttachment attached to: PlayerId named: Soviet_Union with name: triggerAttachmentIrelandSoviet_Union, failed to set string property value to 'triggerAttachmentIrelandSoviet_Union2:1:false:false:false:false'
MutableProperty$InvalidValueException: failed to set string property value to 'triggerAttachmentIrelandSoviet_Union2:1:false:false:false:false'
GameParseException: No TriggerAttachment named: triggerAttachmentIrelandSoviet_Union2, for: TriggerAttachment attached to: PlayerId named: Soviet_Union with name: triggerAttachmentIrelandSoviet_Union
I am not sure why "triggerAttachmentIrelandSoviet_Union2" is not being recognized by the parser. I am using "activateTrigger" incorrectly? The example in Pact of Steel 2 is
<option name="activateTrigger" value="triggerAttachment_Americans_Aid_UK:1:false:false:false:false"/>and I have followed the same format.
-
Put the called trigger triggerAttachmentIrelandSoviet_Union2 above the calling trigger.
<attachment name="triggerAttachmentIrelandSoviet_Union2" 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="Ireland:All"/> </attachment> <attachment name="triggerAttachmentIrelandSoviet_Union" attachTo="Soviet_Union" javaClass="games.strategy.triplea.attachments.TriggerAttachment" type="player"> <option name="conditions" value="conditionAttachmentEveryTurn"/> <option name="conditions" value="conditionAttachmentIrelandNon_Aligned"/> <option name="players" value="Soviet_Union"/> <option name="chance" value="80:80"/> <option name="chanceIncrementOnFailure" value="1"/> <option name="when" value="before:Soviet_UnionPurchase"/> <option name="placement" value="Ireland:infantry" /> <option name="changeOwnership" value="Ireland:Non_Aligned:Soviet_Union:false"/> <option name="activateTrigger" value="triggerAttachmentIrelandSoviet_Union2:1:false:false:false:false"/> <option name="uses" value="1"/> </attachment>Cheers...
-
@wc_sumpton That did it! Thank you for your help.

To recap this for anyone looking at this in the future.
<attachment name="triggerAttachmentIrelandSoviet_Union2" 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="Ireland:All"/> </attachment> <attachment name="triggerAttachmentIrelandSoviet_Union" attachTo="Soviet_Union" javaClass="games.strategy.triplea.attachments.TriggerAttachment" type="player"> <option name="conditions" value="conditionAttachmentEveryTurn"/> <option name="conditions" value="conditionAttachmentIrelandNon_Aligned"/> <option name="players" value="Soviet_Union"/> <option name="chance" value="80:80"/> <option name="chanceIncrementOnFailure" value="1"/> <option name="when" value="before:Soviet_UnionPurchase"/> <option name="placement" value="Ireland:infantry" /> <option name="changeOwnership" value="Ireland:Non_Aligned:Soviet_Union:false"/> <option name="activateTrigger" value="triggerAttachmentIrelandSoviet_Union2:1:false:false:false:false"/> <option name="uses" value="1"/> </attachment>No need make changes anywhere outside of the triggers.
-
As I stated above, there are two methods, a player can give control of their units to another player, or a player can take control of another players units.
Germany wants to give Italians infantry in Venice.

In the unitAttachment for infantry add<option name="canBeGivenByTerritoryTo" value="Italians"/>.
In the territoryAttachment for Venice add<option name="changeUnitOwners" value="Italians"/>.
In the playerAttachment for Germany add<option name="giveUnitControl" value="Italians"/>.
And set <property name="Give Units By Territory" value="true" editable="false"/>
Now German infantry can be given to Italians either by trigger or movement.

At the end of Germany's noncombat move there are 2 German infantry in Venice. One moved from Wittenberg another placed by trigger.
At Germany's endTurn the units will switch to Italian control.

There are two things to remember when giving unit control. Territory ownership does not matter. If Germany owns Venice, Italians will still gain control. Change of control only happens on the Giving Player's endTurn.Using "canBeGivenByTerritoryTo" to give a Neutral players unit will not work unless the Neutral player has an endTurn/endTurnNoPU step.
Cheers...
-
The second method is to take control of another players units.

To let Germany take control of the 4 units in Bulgaria and the one unit in Varna.
In the unitAttachment for infantry add<option name="canBeCapturedOnEnteringBy" value="Germans"/>.
In the territoryAttachment for Bulgaria and Varna add<option name="captureUnitOnEnteringBy" value="Germans"/>.
In the playerAttachment for Neutral_Player add<option name="captureUnitOnEnteringBy" value="Germans"/>.
And set <property name="Capture Units On Entering Territory" value="true"/>.
Then this<option name="changeOwnership" value="Bulgaria:any:Germans:true"/>in a trigger, the 'when' can be any step.
After Germany's noncombat move.

The 4 units changed, but not factory or the Territory and because Germany moved into Varna during noncombat the unit and territory does not change.
Adding<option name="canTakeOverOwnedTerritory" value="true"/>to the relationshipTypeAttachment between Germany and Neutral_Player to get this.

Control of the units happens on the 'true' setting of 'changeOwnership' and changes at the 'when'.Cheers...