setPos: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Text replacement - "| mp =" to "|mp=")
m (Text replacement - "<sqf>([^↵][^\/]*↵[^\/]*)<\/sqf>" to "<sqf> $1 </sqf>")
 
(71 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{RV|type=command
{{RV|type=command


| ofp
|game1= ofp
|version1= 1.00


|1.00
|game2= ofpe
|version2= 1.00
 
|game3= arma1
|version3= 1.00
 
|game4= arma2
|version4= 1.00
 
|game5= arma2oa
|version5= 1.50
 
|game6= tkoh
|version6= 1.00
 
|game7= arma3
|version7= 0.50


|eff= global
|eff= global
Line 10: Line 27:
|gr1= Positions
|gr1= Positions


| Sets object position. The position is clamped to the bound of minXYZ: [-50k,-50k,-50k]; maxXYZ: [500k,500k,500k] (See [[Position]])
|descr= Sets object position to format [[Position#PositionAGLS|PositionAGLS]] (over surface). The Z value is used to calculate the nearest surface below the provided position. If the surface is close, it uses the Z position of the surface. Otherwise, Z value becomes the offset from that surface.
{{Feature| important | It is recommended to '''avoid''' this command when placing objects above other objects, due to the unpredictable behavior described above.}}


| object '''setPos''' pos
|mp= {{Feature|arma1|{{Name|arma1|short}} 1.00 to 1.06: this command has local effect, but some simulation types do synchronise their changes over the network whilst others do not.<br>
So far, the only known simulation type that doesn't synchronise its position over the net is "static" ({{hl|c= simulation{{=}}"house"}}).}}
 
|s1= object [[setPos]] pos


|p1= object: [[Object]]
|p1= object: [[Object]]


|p2= pos: [[Array]] - position in format [[PositionAGL]] or [[Position2D]]
|p2= pos: [[Array]] - position in format [[Position#PositionAGL|PositionAGL]] or [[Position#Introduction|Position2D]], in which case Z will be set to 0


| [[Nothing]]
|r1= [[Nothing]]
|x1 = <code>[[player]] [[setPos]] [<nowiki/>[[getPos]] [[player]] [[select]] 0, [[getPos]] [[player]] [[select]] 1, ([[getPos]] [[player]] [[select]] 2) +10];


//the same as above using [[modelToWorld]]:
|x1= <sqf>
[[player]] [[setPos]] ([[player]] [[modelToWorld]] [0,0,10]);
player setPos [getPos player select 0, getPos player select 1, (getPos player select 2) +10];


//the same as above using [[vectorAdd]]:
// the same as above using set (OFP:R v1.75)
[[player]] [[setPos]] ([[getPos]] [[player]] [[vectorAdd]] [0,0,10]);
_pos = getPos player;
</code>
_pos set [2, _pos select 2 + 10];
player setPos _pos;


|x2= <code>_obj [[setPos]] [<nowiki/>[[getPos]] _obj [[select]] 0, [[getPos]] _obj [[select]] 1, -5];</code>
// the same as above using modelToWorld (ArmA v1.00)
player setPos (player modelToWorld [0,0,10]);


|x3 = <code>[[player]] [[setPos]] ([[getPos]] _obj);</code>
// the same as above using vectorAdd (Arma 3 v1.22)
player setPos (getPos player vectorAdd [0,0,10]);
</sqf>


|mp= ''ArmA 1.00 - 1.06:'' This command has local effect, but some simulation types do synchronise their changes over the network whilst others do not. The only known object types that currently, don't synchronise their positions over the net, are statics (simulation <nowiki>=</nowiki> "house"). 
|x2= <sqf>_obj setPos [getPos _obj select 0, getPos _obj select 1, -5];</sqf>


''Since ArmA 1.08 and later'' the command is global for every object again.| [[setPosASL]], [[getPos]], [[setVehiclePosition]], [[Position#setPosAGLS|setPosAGLS]]
|x3= <sqf>player setPos (getPos _obj);</sqf>
 
|seealso= [[setPosASL]] [[getPos]] [[setVehiclePosition]] [[Position#setPosAGLS|setPosAGLS]]
}}
}}


<dl class="command_description">
{{Note
<!-- Note Section BEGIN -->
|user= Hduregger
 
|timestamp= 20110206202000
<dd class="notedate">Posted on 6 Feb, 2011
|text= Calling [[setPos]] on an object can cause the object's orientation to change. This depends on the terrain and/or objects below the object. This was tested by calling [[setPos]] on a test object with the position of a helicopter ([[modelToWorld]] with some offset). When flying over land the orientation of the test object would rapidly change depending on the slope of the ground and objects beneath it.
<dt class="note">[[User:Hduregger|Hduregger]]<dd class="note">
Comment applicable to Ver '''1.96''' and '''earlier''':
Calling [[setPos]] on an object can cause the object's orientation to change. This depends on the terrain and/or objects below the object. This was tested by calling [[setPos]] on a test object with the position of a helicopter ([[modelToWorld]] with some offset). When flying over land the orientation of the test object would rapidly change depending on the slope of the ground and objects beneath it.
<sqf>obj1 setPos [x,y,z]</sqf>
Comment applicable to Ver '''1.96''' and '''earlier''':<br>  
obj1 setPos [x,y,z]
Will place most objects z metres above ground level (negative numbers for underground). But if obj1 is a trigger then it will be placed z metres above sea level. This can be very useful if you want to check a unit's height above sea level but it can be a problem if you want to move a trigger to create an explosion or a sound. To move a trigger to a location at ground level:  
Will place most objects z metres above ground level (negative numbers for underground). But if obj1 is a trigger then it will be placed z metres above sea level. This can be very useful if you want to check a unit's height above sea level but it can be a problem if you want to move a trigger to create an explosion or a sound. To move a trigger to a location at ground level:  
<code>triggername [[setPos]] [x,y,0];
<sqf>
triggername [[setPos]] [x,y,[[abs]]([[getPos]] triggername [[select]] 2)];</code>
triggername setPos [x,y,0];
Note for Armed Assault: Using [[setPos]] for a trigger will work in exactly the same way that [[setPos]] works for other objects - namely that [[setPos]] [x,y,z] will place the trigger z metres above ground level.  
triggername setPos [x,y,abs(getPos triggername select 2)];
SetPos for static objects like a ammo crate do not work in MP.
</sqf>
Note for {{Name|arma1|short}}: Using [[setPos]] for a trigger will work in exactly the same way that [[setPos]] works for other objects - namely that [[setPos]] [x,y,z] will place the trigger z metres above ground level.  
[[setPos]] for static objects like an ammo crate do not work in MP.
}}


<dd class="notedate">Posted on 23 Nov, 2011
{{Note
<dt class="note">[[User:Tankbuster|Tankbuster]]<dd class="note">
|user= Tankbuster
You can use [[getPos]] and [[setPos]] on triggers.  
|timestamp= 20121123130600
<!-- Note Section END -->
|text= You can use [[getPos]] and [[setPos]] on triggers.
</dl>
}}
 
[[Category:Scripting Commands|SETPOS]]
[[Category:Scripting Commands OFP 1.99|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands OFP 1.96|SETPOS]]
[[Category:Scripting Commands OFP 1.46|SETPOS]]
{{GameCategory|arma1|Scripting Commands}}
{{GameCategory|arma2|Scripting Commands}}
{{GameCategory|arma3|Scripting Commands}}
{{GameCategory|tkoh|Scripting Commands}}

Latest revision as of 11:34, 3 September 2024

Hover & click on the images for description

Description

Description:
Sets object position to format PositionAGLS (over surface). The Z value is used to calculate the nearest surface below the provided position. If the surface is close, it uses the Z position of the surface. Otherwise, Z value becomes the offset from that surface.
It is recommended to avoid this command when placing objects above other objects, due to the unpredictable behavior described above.
Multiplayer:
Armed Assault
ArmA 1.00 to 1.06: this command has local effect, but some simulation types do synchronise their changes over the network whilst others do not.
So far, the only known simulation type that doesn't synchronise its position over the net is "static" (simulation="house").
Groups:
Positions

Syntax

Syntax:
object setPos pos
Parameters:
object: Object
pos: Array - position in format PositionAGL or Position2D, in which case Z will be set to 0
Return Value:
Nothing

Examples

Example 1:
player setPos [getPos player select 0, getPos player select 1, (getPos player select 2) +10]; // the same as above using set (OFP:R v1.75) _pos = getPos player; _pos set [2, _pos select 2 + 10]; player setPos _pos; // the same as above using modelToWorld (ArmA v1.00) player setPos (player modelToWorld [0,0,10]); // the same as above using vectorAdd (Arma 3 v1.22) player setPos (getPos player vectorAdd [0,0,10]);
Example 2:
_obj setPos [getPos _obj select 0, getPos _obj select 1, -5];
Example 3:
player setPos (getPos _obj);

Additional Information

See also:
setPosASL getPos setVehiclePosition setPosAGLS

Notes

Report bugs on the Feedback Tracker and/or discuss them on the Arma Discord or on the Forums.
Only post proven facts here! Add Note
Hduregger - c
Posted on Feb 06, 2011 - 20:20 (UTC)
Calling setPos on an object can cause the object's orientation to change. This depends on the terrain and/or objects below the object. This was tested by calling setPos on a test object with the position of a helicopter (modelToWorld with some offset). When flying over land the orientation of the test object would rapidly change depending on the slope of the ground and objects beneath it. Comment applicable to Ver 1.96 and earlier:
obj1 setPos [x,y,z]
Will place most objects z metres above ground level (negative numbers for underground). But if obj1 is a trigger then it will be placed z metres above sea level. This can be very useful if you want to check a unit's height above sea level but it can be a problem if you want to move a trigger to create an explosion or a sound. To move a trigger to a location at ground level:
triggername setPos [x,y,0]; triggername setPos [x,y,abs(getPos triggername select 2)];
Note for ArmA: Using setPos for a trigger will work in exactly the same way that setPos works for other objects - namely that setPos [x,y,z] will place the trigger z metres above ground level. setPos for static objects like an ammo crate do not work in MP.
Tankbuster - c
Posted on Nov 23, 2012 - 13:06 (UTC)
You can use getPos and setPos on triggers.