Side Relations: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
(Added information about script approach to change the side of an unit)
Line 80: Line 80:
===Scripted approach===
===Scripted approach===


Causing a civilian unit to change sides during a mission by using the [[joinSilent]] command and joining them to a live officer (using an officer with '''deleteVehicle this''' in their init field will not work), will cause the civilian to attack the other side, but the other side will not attack the civilian. Two way hostility must occur using the above method instead.
Causing a civilian unit to change sides during a mission by using the [[joinSilent]] command and joining them to a living officer (using an officer with '''deleteVehicle this''' in their init field will not work), will cause the civilian to attack the other side, but the other side will not attack the civilian.


The [[side]] command will return the correct side for units grouped with a side officer at the start of a mission, but not for units joined during a mission by means of the [[joinSilent]] command.
The [[side]] command will return the correct side for units grouped with a side officer at the start of a mission, but not for units joined during a mission by means of the [[joinSilent]] command.
The trick to make it work is to do first:
<code>_unit joinSilent grpNull;</code>
and as second step:
<code>_unit joinSilent _targetGroup;</code>
The important part is not to join them into the target group directly. So for new units use:
<code>_eastCenter = createCenter east;// if no other east unit exists in the mission
_dummyGroupEast = createGroup east;
_newUnit = _dummyGroupEast createUnit ["TK_Soldier_EP1",position player, [], 0, "FORM"];
_newUnit joinSilent _targetGroup;//_targetGroup could be 'group player' for example
deleteGroup _dummyGroupEast;// if you no longer need the dummy group
</code>


[[Category:ArmA_2:_Editing]]
[[Category:ArmA_2:_Editing]]
[[Category: Scripting Topics]]
[[Category: Scripting Topics]]

Revision as of 12:09, 6 March 2011

Sides

The game consists of 8 Sides:

  • West
  • East
  • Civilian
  • Resistance
  • sideLogic
  • Friendly
  • Enemy
  • Unknown

You can determine which Side a unit is on by using the side command.

NOTE: Make sure to recognize the difference between the Side data type (setter) and the textual side display (getter).

Factions

Factions are are a subset of a given Side. Examples are "USMC", "RU" or "GUE".

A US vehicle driven by a Russian will change from West Side to the East Side, but still remains part of the USMC faction.

Use the faction command on objects or units to determine it.

Change relations

1) You can set which sides Resistance is friendly to in the mission editor (click on the Intel box).

NOTE: It is not possible to change the Resistance side relationship while a mission is running.

2) Everyone is friendly toward Civilians. This means an armed Civilian will be able to slaughter unfriendly AI troops with impunity.

3) You can use the setFriend command at the initialization of a mission to set relations. It is even possible to make Russian and American troops friendly and greet one another.

EAST setFriend [WEST, 1]; WEST setFriend [EAST, 1];

Arming Civilians

You can arm Civilians by inserting code like the following in their initialization field:

this addWeapon "Colt1911"; this addMagazine "7Rnd_45ACP_1911";

NOTE: By default no side will shoot units on the civilian side, even when fired upon by them (same as for captives).

One way hostility

1) Using the setCaptive command allows you to stop enemy units to fire on the target unit. soldier1 setCaptive true; // soldier1 unit can shoot at enemy, but enemy will not return fire

You can re-activate hostility by canceling captive status. soldier1 setCaptive false; // soldier1 will be shoot at again by enemy units

2) Armed civilians will automatically shoot at anybody who is not friendly to Resistance. Or alternatively, you can make Civilians hostile to other sides by using the setFriend command:

civilianUnit setFriend [west, 0]; // Will cause civilians to shoot at West, but not West and Civilians

Civilians will not be attacked back. No setCaptive command is needed.

Two way hostility to civilians

1) You can make other sides hostile to a civilian by making the civilian renegade, but this will mean other civilians too will attack the unit. Run this code on the unit: this addRating -10000; // Will cause sides to shoot civilian, but not civilian to shoot back

When the rating gets below -2000, the unit's side switches to "ENEMY" and the unit is attacked by everyone.

2) To enable hostility both ways - civilians shooting at a side and the side shooting back, you need to move the civilian unit to a hostile side.

Example:

To shoot at West, you can make Resistance unfriendly to West and group the civilian unit with Resistance, or you could group them to East side.

Set in the editor

  1. Group your civilians with an East officer of higher rank than the civilians.
  2. put: deleteVehicle this in the officer’s initialization field (this will cause the officer not to appear)
  3. an alternative is to set the probability of presence slider of the officer to Zero.
  4. When you start the mission, the officer won't be there as he is deleted, but the civvies think they are East, will take over command and follow all waypoints, and fire on anyone on the opposite side

Scripted approach

Causing a civilian unit to change sides during a mission by using the joinSilent command and joining them to a living officer (using an officer with deleteVehicle this in their init field will not work), will cause the civilian to attack the other side, but the other side will not attack the civilian.

The side command will return the correct side for units grouped with a side officer at the start of a mission, but not for units joined during a mission by means of the joinSilent command.

The trick to make it work is to do first: _unit joinSilent grpNull;

and as second step: _unit joinSilent _targetGroup;

The important part is not to join them into the target group directly. So for new units use:

_eastCenter = createCenter east;// if no other east unit exists in the mission _dummyGroupEast = createGroup east; _newUnit = _dummyGroupEast createUnit ["TK_Soldier_EP1",position player, [], 0, "FORM"]; _newUnit joinSilent _targetGroup;//_targetGroup could be 'group player' for example deleteGroup _dummyGroupEast;// if you no longer need the dummy group