Difference between revisions of "createUnit"

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Text replacement - "_{10,} " to "")
m (Text replacement - " *\| *([Cc]omments|COMMENTS|Game|[Gg]ame [Nn]ame|Game [Vv]ersion|Game Version \(number surrounded by NO SPACES\)|Multiplayer Arguments( \("local" or "global"\))?|Effects|Multiplayer Effects( \("local" or "global"\))?|Multiplayer Exe...)
Line 1: Line 1:
{{Command|Comments=
+
{{Command
  
| ofp |Game name=
+
| ofp
  
|1.34|Game version=
+
|1.34
  
 
|eff= global |Effects in MP=
 
|eff= global |Effects in MP=
  
|gr1= Object Manipulation |GROUP1=
+
|gr1= Object Manipulation
  
 
| Create a unit of class that is defined in [[:Category:CfgVehicles|CfgVehicles]].
 
| Create a unit of class that is defined in [[:Category:CfgVehicles|CfgVehicles]].
Line 13: Line 13:
 
This command could be bugged in {{ofp}} or {{arma1}} ; an additional [[join]] may solve the problem.<br>
 
This command could be bugged in {{ofp}} or {{arma1}} ; an additional [[join]] may solve the problem.<br>
 
However, some commands such as [[setUnitPos]] only work if run before the [[join]].}}
 
However, some commands such as [[setUnitPos]] only work if run before the [[join]].}}
{{Warning | The unit will not be created if the passed group does not exist (a.k.a [[grpNull]]); this can happen if [[createGroup]] fails because the '''group limit has been reached''' (see [[createGroup]] for respective game limits).}} |Description=
+
{{Warning | The unit will not be created if the passed group does not exist (a.k.a [[grpNull]]); this can happen if [[createGroup]] fails because the '''group limit has been reached''' (see [[createGroup]] for respective game limits).}}
  
|group [[createUnit]] [type, position, markers, placement, special] |Syntax=
+
|group [[createUnit]] [type, position, markers, placement, special]
  
|p1= group: [[Group]] - Existing group new unit will join |Parameter 1=
+
|p1= group: [[Group]] - Existing group new unit will join
|p2= [type, position, markers, placement, special]: [[Array]] |Parameter 2=
+
|p2= [type, position, markers, placement, special]: [[Array]]
|p3= type: [[String]] - Class name of unit to be created as per [[CfgVehicles]] |Parameter 3=
+
|p3= type: [[String]] - Class name of unit to be created as per [[CfgVehicles]]
|p4= position: [[Position]], [[Position2D]], [[Object]] or [[Group]] - Location unit is created at. In case of [[Group]] position of the [[group]] [[leader]] is used |Parameter 4=
+
|p4= position: [[Position]], [[Position2D]], [[Object]] or [[Group]] - Location unit is created at. In case of [[Group]] position of the [[group]] [[leader]] is used
|p5= markers: [[Array]] - Placement markers |Parameter 5=
+
|p5= markers: [[Array]] - Placement markers
|p6= placement: [[Number]] - Placement radius |Parameter 6=
+
|p6= placement: [[Number]] - Placement radius
 
|p7= special: [[String]] - Unit placement special, one of:
 
|p7= special: [[String]] - Unit placement special, one of:
 
* <tt>"NONE"</tt> - The unit will be created at the first available free position nearest to given position
 
* <tt>"NONE"</tt> - The unit will be created at the first available free position nearest to given position
 
* <tt>"FORM"</tt> - Not implemented, currently functions the same as "NONE".
 
* <tt>"FORM"</tt> - Not implemented, currently functions the same as "NONE".
 
* <tt>"CAN_COLLIDE"</tt> - The unit will be created exactly at passed position
 
* <tt>"CAN_COLLIDE"</tt> - The unit will be created exactly at passed position
* <tt>"CARGO"</tt> - The unit will be created in cargo of the group's vehicle, regardless of the passed position (see Example 5). If group has no vehicle or there is no cargo space available, the unit will be placed according to <tt>"NONE"</tt>. To check available cargo space use:<code>_hasCargo = _veh [[emptyPositions]] "CARGO" > 0;</code> |Parameter 7=
+
* <tt>"CARGO"</tt> - The unit will be created in cargo of the group's vehicle, regardless of the passed position (see Example 5). If group has no vehicle or there is no cargo space available, the unit will be placed according to <tt>"NONE"</tt>. To check available cargo space use:<code>_hasCargo = _veh [[emptyPositions]] "CARGO" > 0;</code>
  
| [[Object]] - The created unit |Return value=
+
| [[Object]] - The created unit
  
 
|s2= type [[createUnit]] [position, group, init, skill, rank] |Syntax2=
 
|s2= type [[createUnit]] [position, group, init, skill, rank] |Syntax2=
Line 42: Line 42:
  
 
|r2= {{Warning|'''[[Nothing]]''' - This syntax does NOT return a unit reference! In order to reference this unit, you can use {{Inline code|newUnit {{=}} this}} in the ''init'' field.<br>
 
|r2= {{Warning|'''[[Nothing]]''' - This syntax does NOT return a unit reference! In order to reference this unit, you can use {{Inline code|newUnit {{=}} this}} in the ''init'' field.<br>
If the target group is not local, the init script will only execute after a slight delay; see [[User:Killzone_Kid|Killzone_Kid]]'s note below for more information and issues about this syntax.}} |Return value 2=
+
If the target group is not local, the init script will only execute after a slight delay; see [[User:Killzone_Kid|Killzone_Kid]]'s note below for more information and issues about this syntax.}}
  
|x1= <code>_unit = [[group]] [[player]] [[createUnit]] ["B_RangeMaster_F", [[position]] [[player]], [], 0, "FORM"];</code>|Example 1=
+
|x1= <code>_unit = [[group]] [[player]] [[createUnit]] ["B_RangeMaster_F", [[position]] [[player]], [], 0, "FORM"];</code>
|x2= <code>"B_RangeMaster_F" [[createUnit]] [<nowiki/>[[position]] [[player]], [[group]] [[player]]];</code> |Example 2=
+
|x2= <code>"B_RangeMaster_F" [[createUnit]] [<nowiki/>[[position]] [[player]], [[group]] [[player]]];</code>
|x3= <code>"B_RangeMaster_F" [[createUnit]] [<nowiki/>[[getMarkerPos]] "barracks", _groupAlpha];</code> |Example 3=
+
|x3= <code>"B_RangeMaster_F" [[createUnit]] [<nowiki/>[[getMarkerPos]] "barracks", _groupAlpha];</code>
 
|x4= <code>"B_RangeMaster_F" [[createUnit]] [
 
|x4= <code>"B_RangeMaster_F" [[createUnit]] [
 
[[getMarkerPos]] "marker_1",
 
[[getMarkerPos]] "marker_1",
Line 53: Line 53:
 
0.6,
 
0.6,
 
"corporal"
 
"corporal"
];</code> |Example 4=
+
];</code>
  
 
|x5= <code>_veh = "O_Quadbike_01_F" [[createVehicle]] ([[player]] [[getRelPos]] [10, 0]);
 
|x5= <code>_veh = "O_Quadbike_01_F" [[createVehicle]] ([[player]] [[getRelPos]] [10, 0]);
 
_grp = [[createVehicleCrew]] _veh;
 
_grp = [[createVehicleCrew]] _veh;
_unit = _grp [[createUnit]] [<nowiki/>[[typeOf]] [[driver]] _veh, _grp, [], 0, "CARGO"];</code>|Example 5=
+
_unit = _grp [[createUnit]] [<nowiki/>[[typeOf]] [[driver]] _veh, _grp, [], 0, "CARGO"];</code>
  
| [[createCenter]], [[createGroup]], [[createVehicle]], [[setVehiclePosition]], [[create3DENEntity]] |See also=
+
| [[createCenter]], [[createGroup]], [[createVehicle]], [[setVehiclePosition]], [[create3DENEntity]]
 
}}
 
}}
  

Revision as of 01:12, 18 January 2021

Template:Command

Notes

Posted on 27th Nov 2016
Ffur2007slx2_5
Arma 3 logo black.png1.64 The side of the created unit by this command uses its config's side and not the side of a passed empty group created by createGroup: _grp = createGroup east; hint str side _grp; // EAST _ap = _grp createUnit [ "C_man_p_beggar_F", position player, [], 0, "FORM"]; hint str side _ap; // CIV, not EAST We can use join command or fill the _grp with entities in advance to set _ap to the desired side.
Posted on 8th Dec 2018
oOKexOo
Since Arma 3 logo black.png1.86: If you want to place a module with createUnit, you have to ensure that the module gets activated automatically by setting BIS_fnc_initModules_disableAutoActivation to false, e.g: private _grp = createGroup sideLogic; "ModuleSmokeWhite_F" createUnit [ getPos player, _grp, "this setVariable ['BIS_fnc_initModules_disableAutoActivation', false, true];" ];
Posted on 18th Mar 2019
Killzone_Kid
Alt Syntax is the older syntax and differs in functionality from the main, newer syntax. The main difference is that the older syntax does not return unit reference. This is because the unit created with Alt Syntax is created strictly where passed group is local. This means that if the group is remote the unit will be created on the different client than the one the command was executed on and therefore it is not possible to return created unit reference immediately. In contrast, the newer syntax allows creating units in remote groups while returning unit reference immediately, which could be unsafe and the appropriate warning is logged into .rpt file: Warning: Adding units to a remote group is not safe. Please use setGroupOwner to change the group owner first.

Another very important difference is that the older syntax (Alt Syntax) will create unit of the same side as the side of the group passed as argument. For example, if the group is WEST and the unit faction is OPFOR of type, say "O_Soldier_GL_F", the unit created will be on the WEST side as well. In contrast, newer syntax will create the same unit on the EAST side in the WEST group, which will be treated as hostile by other group members and eliminated.

Template:Warning
Posted on June 19, 2020 - 10:13 (UTC)
fusselwurm
Arma 3 logo black.png1.98 note that even when setting the placement special parameter to "NONE", 3DEN-placed objects are being ignored when looking for a free position. In other words: units will spawn within editor-placed rocks or under houses.