Jump to content
Sign in to follow this  
*tcf*jackal

Object Tracking Device (script ideas)

Recommended Posts

Hi all,

Cobra4v320 has created a great "defuse the bomb" script.

This reminded me of a superb COOP mission from the ArmA1 days called "The Briefcase" in which the players had to acquire a tracker device which would help guide them to the location of a suitcase nuke so that they could attempt to defuse it. This was of course, all done against the clock and was one of the best ArmA missions I'd ever played.

One of the gems of this mission for me was the tracker device script, and I always felt the script could have been used in other missions too. Broadly speaking when activated through an addAction, the player would hear a beep, and the closer they got to the bearing of the nuke, the quicker the beep got. The closer they got to the nuke itself, the higher the pitch of the beep. Couple this with Cobra4v320's defuse script and a similar mission could be introduced to A3. The tracker device was itself an in-game object which had to be picked up, and would be held by one player at a time, obviously.

Now, this brings some questions.

1) Does such an object tracking device (type of) script already exist in A3?

2) Does the mission, or similar, already exist in A3 and I've somehow missed it?

I have a copy of the original A1 mission from the post above, but first up, im no coder, and second of all I wouldnt want to rip off someone else's code. But what i'm wondering is if anybody would be interested in perhaps helping create a shiny new A3 version of the script. I think it would compliment Cobra's script really well. Im already starting to think of some great uses and features where this could be used. Imagine how much fun could be had if the target object was an enemy player. A new cougar hunt!

Thoughts and comments welcomed and encouraged!

Edited by *TCF*Jackal

Share this post


Link to post
Share on other sites

Take a look through the functions in the editor I think the previous tracker is still working in A3.

I found this bit of code that may enable it. It was from A2 and not tested in A3

dirIndicator = [player,targ,[0.706,0.0745,0.0196,1]] call bis_fnc_dirIndicator;

Share this post


Link to post
Share on other sites

Thanks very much Sel, I'll take a look through the functions.

Now that you mention it, was there a campaign mission in A2 or A2OA which used some form of tracker? I have very, very vague recollection of something, but only since you mentioned it.

I'll take a good close look at BIS_fnc_dirIndicator

EDIT: That works really well Sel. Having seen the on-screen indicator, I kinda remember this from A2 now. A good starter for 10 right there.

Edited by *TCF*Jackal

Share this post


Link to post
Share on other sites

Hi all,

Im looking for so much needed guidance with some code im trying to put together, bearing in mind that im no coder. Im trying to mimic a tracking device using audible beeps. So the closer the player's bearing is to the relative bearing of an object, the higher the pitch of the beep. At this point im just looking to get the bearing portion of the script running, and then I'd like to add some more code which takes the players distance into account and sets the frequency of the beeps accordingly. Im aware this has been done before, but in the interests of learning I thought I'd try a different approach.

Using this code, gives us the _bearing variable, which in isolation works well.

_bearing = [player, getpos obj] call BIS_fnc_relativeDirTo;

So, next im trying to repeatedly test the _bearing variable in a loop. If the variable is within certain ranges, the _sound variable is then set accordingly. This is then used to actually play the desired beep. Rinse and repeat while the player is alive! Im getting nowhere fast with this having tried different syntax's. Im not even sure if the flow is correct either, so all in all im a little lost. Here's the code thus far, from start to finish.

while {alive player} do
{
_bearing = [player, getpos obj] call BIS_fnc_relativeDirTo;
switch (_sound) do 
{
case ((_bearing >= 0) && (_bearing < 19)): {_sound = "beep"};
case ((_bearing >= 19) && (_bearing < 39)): {_sound = "beep1"};
case ((_bearing >= 39) && (_bearing < 59)): {_sound = "beep2"};
case ((_bearing >= 59) && (_bearing < 79)): {_sound = "beep3"};
case ((_bearing >= 79) && (_bearing < 99)): {_sound = "beep4"};
case ((_bearing >= 99) && (_bearing < 119)): {_sound = "beep5"};
case ((_bearing >= 119) && (_bearing < 139)): {_sound = "beep6"};
case ((_bearing >= 139) && (_bearing < 159)): {_sound = "beep7"};
case ((_bearing >= 159) && (_bearing < 179)): {_sound = "beep8"};
case ((_bearing >= 179) && (_bearing < 199)): {_sound = "beep9"};
case ((_bearing >= 199) && (_bearing < 219)): {_sound = "beep8"};
case ((_bearing >= 219) && (_bearing < 239)): {_sound = "beep7"};
case ((_bearing >= 239) && (_bearing < 259)): {_sound = "beep6"};
case ((_bearing >= 259) && (_bearing < 279)): {_sound = "beep5"};
case ((_bearing >= 279) && (_bearing < 299)): {_sound = "beep4"};
case ((_bearing >= 299) && (_bearing < 319)): {_sound = "beep3"};
case ((_bearing >= 319) && (_bearing < 339)): {_sound = "beep2"};
case ((_bearing >= 339) && (_bearing <= 360)): {_sound = "beep1"};
};
playsound _sound;
sleep 0.5;
};

Share this post


Link to post
Share on other sites
Hi all,

Im looking for so much needed guidance with some code im trying to put together, bearing in mind that im no coder. Im trying to mimic a tracking device using audible beeps. So the closer the player's bearing is to the relative bearing of an object, the higher the pitch of the beep. At this point im just looking to get the bearing portion of the script running, and then I'd like to add some more code which takes the players distance into account and sets the frequency of the beeps accordingly. Im aware this has been done before, but in the interests of learning I thought I'd try a different approach.

Using this code, gives us the _bearing variable, which in isolation works well.

_bearing = [player, getpos obj] call BIS_fnc_relativeDirTo;

So, next im trying to repeatedly test the _bearing variable in a loop. If the variable is within certain ranges, the _sound variable is then set accordingly. This is then used to actually play the desired beep. Rinse and repeat while the player is alive! Im getting nowhere fast with this having tried different syntax's. Im not even sure if the flow is correct either, so all in all im a little lost. Here's the code thus far, from start to finish.

while {alive player} do
{
_bearing = [player, getpos obj] call BIS_fnc_relativeDirTo;
switch (_sound) do 
{
case ((_bearing >= 0) && (_bearing < 19)): {_sound = "beep"};
case ((_bearing >= 19) && (_bearing < 39)): {_sound = "beep1"};
case ((_bearing >= 39) && (_bearing < 59)): {_sound = "beep2"};
case ((_bearing >= 59) && (_bearing < 79)): {_sound = "beep3"};
case ((_bearing >= 79) && (_bearing < 99)): {_sound = "beep4"};
case ((_bearing >= 99) && (_bearing < 119)): {_sound = "beep5"};
case ((_bearing >= 119) && (_bearing < 139)): {_sound = "beep6"};
case ((_bearing >= 139) && (_bearing < 159)): {_sound = "beep7"};
case ((_bearing >= 159) && (_bearing < 179)): {_sound = "beep8"};
case ((_bearing >= 179) && (_bearing < 199)): {_sound = "beep9"};
case ((_bearing >= 199) && (_bearing < 219)): {_sound = "beep8"};
case ((_bearing >= 219) && (_bearing < 239)): {_sound = "beep7"};
case ((_bearing >= 239) && (_bearing < 259)): {_sound = "beep6"};
case ((_bearing >= 259) && (_bearing < 279)): {_sound = "beep5"};
case ((_bearing >= 279) && (_bearing < 299)): {_sound = "beep4"};
case ((_bearing >= 299) && (_bearing < 319)): {_sound = "beep3"};
case ((_bearing >= 319) && (_bearing < 339)): {_sound = "beep2"};
case ((_bearing >= 339) && (_bearing <= 360)): {_sound = "beep1"};
};
playsound _sound;
sleep 0.5;
};

while {alive player} do

{

_bearing = [player, getpos obj] call BIS_fnc_relativeDirTo;

switch (_sound) do

{

case ((_bearing >= 0) && (_bearing < 19)): {_sound = "beep"};

case ((_bearing >= 19) && (_bearing < 39)): {_sound = "beep1"};

case ((_bearing >= 39) && (_bearing < 59)): {_sound = "beep2"};

case ((_bearing >= 59) && (_bearing < 79)): {_sound = "beep3"};

case ((_bearing >= 79) && (_bearing < 99)): {_sound = "beep4"};

case ((_bearing >= 99) && (_bearing < 119)): {_sound = "beep5"};

case ((_bearing >= 119) && (_bearing < 139)): {_sound = "beep6"};

case ((_bearing >= 139) && (_bearing < 159)): {_sound = "beep7"};

case ((_bearing >= 159) && (_bearing < 179)): {_sound = "beep8"};

case ((_bearing >= 179) && (_bearing < 199)): {_sound = "beep9"};

case ((_bearing >= 199) && (_bearing < 219)): {_sound = "beep8"};

case ((_bearing >= 219) && (_bearing < 239)): {_sound = "beep7"};

case ((_bearing >= 239) && (_bearing < 259)): {_sound = "beep6"};

case ((_bearing >= 259) && (_bearing < 279)): {_sound = "beep5"};

case ((_bearing >= 279) && (_bearing < 299)): {_sound = "beep4"};

case ((_bearing >= 299) && (_bearing < 319)): {_sound = "beep3"};

case ((_bearing >= 319) && (_bearing < 339)): {_sound = "beep2"};

case ((_bearing >= 339) && (_bearing <= 360)): {_sound = "beep1"};

};

playsound _sound;

sleep 0.5;

};

your problem here is bolded. watch what your putting where, and when. in simple terms, you want _bearing where _sound is in the parenthses at the top of the script

  • Like 1

Share this post


Link to post
Share on other sites

Many thanks for the pointer Austin! I'll go and give that a shot.

---------- Post added at 01:12 PM ---------- Previous post was at 12:49 PM ----------

One step closer! As Austin suggested, correcting the "switch" did the trick. Also had to declare this as was getting undeclared variable in expression errors:

_sound = "beep";

Now I have a looping beep (what an age we live in!) which doesn't yet change source. Im off to bury my head in rpt files to figure out why! Probably a logic issue.

Share this post


Link to post
Share on other sites

I haven't been able to figure this out having tried variations of the code below. The following runs without errors in the rpt, but the _sound variable doesn't update regardless of the direction the player turns. I added a little hint to make sure _bearing is updated as part of the loop, and it seems it is. However, I only ever get the same "Beep".

To clarify, beep1, 2, 3, 4.....etc are defined in a description.ext and point to individual ogg files.

This is driving me nuts. Anyone have any suggestions? They would be greatly appreciated.

while {alive player} do
{
_bearing = [player, getpos obj] call BIS_fnc_relativeDirTo;
_sound = "beep";
switch (_bearing) do 
{
case (_bearing > 0): {_sound = "beep"};
case (_bearing > 19): {_sound = "beep1"};
case (_bearing > 39): {_sound = "beep2"};
case (_bearing > 59): {_sound = "beep3"};
case (_bearing > 79): {_sound = "beep4"};
case (_bearing > 99): {_sound = "beep5"};
case (_bearing > 119): {_sound = "beep6"};
case (_bearing > 139): {_sound = "beep7"};
case (_bearing > 159): {_sound = "beep8"};
case (_bearing > 179): {_sound = "beep9"};
case (_bearing > 199): {_sound = "beep8"};
case (_bearing > 219): {_sound = "beep7"};
case (_bearing > 239): {_sound = "beep6"};
case (_bearing > 259): {_sound = "beep5"};
case (_bearing > 279): {_sound = "beep4"};
case (_bearing > 299): {_sound = "beep3"};
case (_bearing > 319): {_sound = "beep2"};
case (_bearing > 339): {_sound = "beep1"};
};
playsound _sound;
hint format["Bearing is %1", _bearing];
sleep 1;
};

Share this post


Link to post
Share on other sites
I haven't been able to figure this out having tried variations of the code below. The following runs without errors in the rpt, but the _sound variable doesn't update regardless of the direction the player turns. I added a little hint to make sure _bearing is updated as part of the loop, and it seems it is. However, I only ever get the same "Beep".

To clarify, beep1, 2, 3, 4.....etc are defined in a description.ext and point to individual ogg files.

This is driving me nuts. Anyone have any suggestions? They would be greatly appreciated.

while {alive player} do
{
_bearing = [player, getpos obj] call BIS_fnc_relativeDirTo;
_sound = "beep";
switch (_bearing) do 
{
case (_bearing > 0): {_sound = "beep"};
case (_bearing > 19): {_sound = "beep1"};
case (_bearing > 39): {_sound = "beep2"};
case (_bearing > 59): {_sound = "beep3"};
case (_bearing > 79): {_sound = "beep4"};
case (_bearing > 99): {_sound = "beep5"};
case (_bearing > 119): {_sound = "beep6"};
case (_bearing > 139): {_sound = "beep7"};
case (_bearing > 159): {_sound = "beep8"};
case (_bearing > 179): {_sound = "beep9"};
case (_bearing > 199): {_sound = "beep8"};
case (_bearing > 219): {_sound = "beep7"};
case (_bearing > 239): {_sound = "beep6"};
case (_bearing > 259): {_sound = "beep5"};
case (_bearing > 279): {_sound = "beep4"};
case (_bearing > 299): {_sound = "beep3"};
case (_bearing > 319): {_sound = "beep2"};
case (_bearing > 339): {_sound = "beep1"};
};
playsound _sound;
hint format["Bearing is %1", _bearing];
sleep 1;
};

I'm not sure if switch command is just botched or if it only accepts some really simplistic input. You could use a crapton of if statements to check direction, something like this:

if(_bearing >= 0 && _bearing < 19) then {_sound = "beep";}; //etc etc

Share this post


Link to post
Share on other sites

Looks like an issue with the switch, in addition surely you need two conditions for each case, in order to check if it was between a certain range. I'm not sure but I think switch will select the first case that evaluates true, so if the bearing is 80 "beep" will be selected.

Try changing the switch to

switch (true) do
 {
    case (_bearing > 0 && _bearing <= 19): {_sound = "beep"};
    case (_bearing > 19 && _bearing <= 39): {_sound = "beep1"}; 
      etc.
  };

Share this post


Link to post
Share on other sites

This

switch (_bearing) do 

and one of these

case (_bearing > 0)

have to match i.e the final result of the condition, stuff between the ().

At the moment they look like this

switch (80) do 

or what ever the bearing is, and

case (true)

true as _bearing is greater than 0.

But 80 and true do not match.

Change

switch (_bearing) do 

to

switch (true) do 

then when ever one of your case statements is true they match and the statements code will run.

surely you need two conditions for each case, in order to check if it was between a certain range.
not necessary as the switch will bail out as soon as one of the case statements matches. What you do need to do is run the numbers in reverse 339, 319, 299, 279 etc else like above example with a bearing of 80 , _bearing > 0 will be true so it will bail out at the first case condition.

while {alive player} do {
_bearing = [player, getpos obj] call BIS_fnc_relativeDirTo;
_sound = "beep";
switch (true) do {
	case (_bearing > 339): {_sound = "beep1"};
	case (_bearing > 319): {_sound = "beep2"};
	case (_bearing > 299): {_sound = "beep3"};
	case (_bearing > 279): {_sound = "beep4"};
	case (_bearing > 259): {_sound = "beep5"};
	case (_bearing > 239): {_sound = "beep6"};
	case (_bearing > 219): {_sound = "beep7"};
	case (_bearing > 199): {_sound = "beep8"};
	case (_bearing > 179): {_sound = "beep9"};
	case (_bearing > 159): {_sound = "beep8"};
	case (_bearing > 139): {_sound = "beep7"};
	case (_bearing > 119): {_sound = "beep6"};
	case (_bearing > 99): {_sound = "beep5"};
	case (_bearing > 79): {_sound = "beep4"};
	case (_bearing > 59): {_sound = "beep3"};
	case (_bearing > 39): {_sound = "beep2"};
	case (_bearing > 19): {_sound = "beep1"};
	case (_bearing > 0): {_sound = "beep"};
};
playsound _sound;
hint format["Bearing is %1", _bearing];
sleep 1;
};

___________________________

Maybe something else to try out would be playsound3D and instead of having multiple sound files use the pitch parameter in playsound3D to alter the sound played. Just play with one sound and find a setting for your liking of lowest and highest pitch. Then you just need to convert 0 - 360 to clamp between these pitch ranges.

Edited by Larrow

Share this post


Link to post
Share on other sites

Thanks for all the help guys, I really appreciate you taking the time to help a guy (me) who doesn't really know what he's doing!

@Larrow, thanks for the detailed explanation. A huge help as its clear my understanding of a switch wasn't quite what it should be. I'll also ready up on playsound3D, so thanks again for the pointer there.

I'll go give this a try, and also digest the info above.

Share this post


Link to post
Share on other sites

I've done something similar recently:

this is the script used on AddAction (Detector: ON):

oDetector is an object attached to the player (player can take or drop the detector)

oHerramienta is the object to find.

Both placed on editor

_accObjeto = 	[_this, 0, objNull] call BIS_fnc_param;
_accJugador = 	[_this, 1, objNull] call BIS_fnc_param;
_accID = 		[_this, 2, -1] call BIS_fnc_param;
_accArgument =	[_this, 3, []] call BIS_fnc_param;

oDetector setVariable ['Detector_ON',1,true];

_tiempoGuardado = time;
while {((oDetector getVariable ['Detector_ON',0]) == 1)} Do 
{	
//if player drop the detector...
if ((oDetector getVariable ['Detector_TAKE',1]) == 0) exitWith {oDetector setVariable ['Detector_ON',0,true];};
if (time > _tiempoGuardado) then 
{	
	playSound3D [MISSION_ROOT + "Sounds\Detector_BEEP.ogg", oDetector, false, (getPosASL oDetector), 4, 1, 40];

	//BEARING
	_pos1 = getpos oHerramienta;
	_pos2 = getpos _accJugador;
	_dir1 = ((_pos1 select 0) - (_pos2 select 0)) atan2 ((_pos1 select 1) - (_pos2 select 1));
	_dir2 = getdir _accJugador;
	if (_dir1 < 0) then {_dir1 = 360 + _dir1};
	_diff = (_dir2 max _dir1) - (_dir2 min _dir1);
	if (_diff > 180) then {_diff = abs(_diff - 360)};

	_restoDir = ((0.5 * _diff) / 180);

	//DISTANCE
	_restoDis = ((oDetector distance oHerramienta)/100);

	_tiempoGuardado = (time + 0.05) + (_restoDis + _restoDir);
};
};

this line can be modified (the script is wip)

	_restoDis = ((oDetector distance oHerramienta)/100);

/100 is the max distance

the script emit a BEEP every 0.05 secs plus the distance between the object and player, plus bearing

may be you can take any idea..

Edited by KoVValsky

Share this post


Link to post
Share on other sites

You can change the pitch of the sound you play, no need to have many sounds for that.

[color="#FF8040"]tracker [color="#8B3E2F"][b]=[/b][/color] [color="#FF0000"]0[/color] [color="#191970"][b]spawn[/b][/color] [color="#8B3E2F"][b]{[/b][/color]
[color="#191970"][b]while[/b][/color] [color="#8B3E2F"][b]{[/b][/color][color="#000000"]true[/color][color="#8B3E2F"][b]}[/b][/color] [color="#191970"][b]do[/b][/color] [color="#8B3E2F"][b]{[/b][/color]
	[color="#1874CD"]_pPlayer[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#191970"][b]getPosASL[/b][/color] [color="#000000"]player[/color][color="#8B3E2F"][b];[/b][/color]
	[color="#1874CD"]_pTarget[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#191970"][b]getPosASL[/b][/color] target[color="#8B3E2F"][b];[/b][/color]
	[color="#1874CD"]_offset[/color] [color="#8B3E2F"][b]=[/b][/color] [color="#191970"][b]vectorMagnitude[/b][/color] [color="#8B3E2F"][b]([/b][/color]
		[color="#191970"][b]vectorDir[/b][/color] [color="#000000"]player[/color] [color="#191970"][b]vectorAdd[/b][/color] [color="#8B3E2F"][b]([/b][/color][color="#1874CD"]_pPlayer[/color] [color="#191970"][b]vectorFromTo[/b][/color] [color="#1874CD"]_pTarget[/color][color="#8B3E2F"][b])[/b][/color]
	[color="#8B3E2F"][b])[/b][/color] [color="#8B3E2F"][b]/[/b][/color] [color="#FF0000"]20[/color][color="#8B3E2F"][b];[/b][/color]
	[color="#191970"][b]playSound3D[/b][/color] [color="#8B3E2F"][b][[/b][/color]
		[color="#7A7A7A"]"a3\sounds_f\sfx\Beep_Target.wss"[/color][color="#8B3E2F"][b],[/b][/color] 
		[color="#000000"]player[/color][color="#8B3E2F"][b],[/b][/color] 
		[color="#000000"]false[/color][color="#8B3E2F"][b],[/b][/color] 
		[color="#1874CD"]_pPlayer[/color][color="#8B3E2F"][b],[/b][/color] 
		[color="#FF0000"]0.5[/color] [color="#8B3E2F"][b]+[/b][/color] [color="#1874CD"]_offset[/color][color="#8B3E2F"][b],[/b][/color] 
		[color="#FF0000"]0.8[/color] [color="#8B3E2F"][b]+[/b][/color] [color="#1874CD"]_offset[/color][color="#8B3E2F"][b],[/b][/color] 
		[color="#FF0000"]0[/color]
	[color="#8B3E2F"][b]][/b][/color][color="#8B3E2F"][b];[/b][/color]
	[color="#191970"][b]sleep[/b][/color] [color="#8B3E2F"][b]([/b][/color][color="#8B3E2F"][b]([/b][/color]
		[color="#191970"][b]sqrt[/b][/color] [color="#8B3E2F"][b]([/b][/color][color="#1874CD"]_pPlayer[/color] [color="#191970"][b]vectorDistance[/b][/color] [color="#1874CD"]_pTarget[/color][color="#8B3E2F"][b])[/b][/color] [color="#8B3E2F"][b]/[/b][/color] [color="#FF0000"]5[/color] [color="#8B3E2F"][b]-[/b][/color] [color="#1874CD"]_offset[/color]
	[color="#8B3E2F"][b])[/b][/color] [color="#191970"][b]max[/b][/color] [color="#FF0000"]0.05[/color][color="#8B3E2F"][b])[/b][/color][color="#8B3E2F"][b];[/b][/color]
[color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color]
[color="#8B3E2F"][b]}[/b][/color][color="#8B3E2F"][b];[/b][/color]

[color="#006400"][i]//to terminate[/i][/color]

[color="#191970"][b]terminate[/b][/color] tracker[color="#8B3E2F"][b];[/b][/color][/color]

Made with KK's SQF to BBCode Converter

Share this post


Link to post
Share on other sites

Thanks for sharing guys. Its interesting to see the different approaches people have taken to get a similar result. That's the beauty of a game that allows you access "under the hood". Endless solutions to different conundrums.

Your scripts look far more elegant than mine do at present, so I definitely have plenty room for improvement. Even though it took me most of the weekend to get it (them) working, it was time well spent as I've learned lots. In their current guise the scripts do exactly what I want them to do, based on mission specific requirements:

- Mimic a device which emits a sound which changes in pitch and frequency based on the distance and relative bearing of the player to a specified object

- access to the device limited to the pilot of a chopper, and only when he/she is sitting in the pilots seat

- ability to switch the device on and off at will while in the pilots seat (via "addActions")

- be able to get in and out of the chopper repeatedly, and not have the script break

I'll post them here when im next at home, to get some constructive feedback.

Next steps in development would be to make the script(s) more portable and versatile so that they can be used in other missions without having to hack them to bits. At the moment they don't take parameters which makes them very static. This is more down to my lack of scripting experience than anything else. But KoVValsy has provided a good example on how to implement that so I'll look at that very soon.

I'd also like to try and create a version which provides access to the tracker when the player has a specific named item in his/her inventory. I don't think this will be too difficult to do. Oh, and the pitch manipulation of one sound file rather than using several files sounds much tidier. So I'll try that too!

Thanks again everyone!

Edited by *TCF*Jackal

Share this post


Link to post
Share on other sites

anyone have an example mission of this script ? 

 

Here's the code without the extra BBCode tags:

tracker = 0 spawn {
	while {true} do {
		_pPlayer = getPosASL player;
		_pTarget = getPosASL target;
		_offset = vectorMagnitude (
			vectorDir player vectorAdd (_pPlayer vectorFromTo _pTarget)
		) / 20;
		playSound3D [
			"a3\sounds_f\sfx\Beep_Target.wss", 
			player, 
			false, 
			_pPlayer, 
			0.5 + _offset, 
			0.8 + _offset, 
			0
		];
		sleep ((
			sqrt (_pPlayer vectorDistance _pTarget) / 5 - _offset
		) max 0.05);
	};
};

//to terminate

terminate tracker;

Share this post


Link to post
Share on other sites

can someone upload the full sqf code to this? I can not get it to work???

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

×