-
Notifications
You must be signed in to change notification settings - Fork 8
/
tp_leader.sqf
55 lines (46 loc) · 1.68 KB
/
tp_leader.sqf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/*
NAME: tp_leader.sqf
AUTHOR: TAW_SAFORAX, aeroson
VERSION: 1.2
DESCRIPTION:
upon executon:
teleports player behind his squad leader, or moves him into squad leader's vehicle
if player is his own squad leader, it teleports him to member of his group in the field
USAGE:
place this into flag's init:
this addAction ["TP to SL", "tpLeader.sqf"];
*/
private ["_leader", "_leaderVehicle"];
_leader = leader player;
if(player == _leader) then {
private ["_units", "_sumOfDistanceSqr", "_avgOfDistanceSqr"];
// player is hiw own leader, find member of player's group that is above the average of distances of all group members
_units = units group player;
_sumOfDistanceSqr = 0;
{
_sumOfDistanceSqr = _sumOfDistanceSqr + (player distanceSqr _x);
} forEach _units;
_avgOfDistanceSqr = _sumOfDistanceSqr / count _units;
{
if(player distanceSqr _x >= _avgOfDistanceSqr) exitWith {
_leader = _x;
};
} forEach _units;
};
_leaderVehicle = vehicle _leader;
if(_leaderVehicle == _leader) then {
// leader is on foot
private ["_howFarBehindSquadLeader"];
_howFarBehindSquadLeader = 2 + random 3; // move to 2-5 meters behind the back of squad leader
_pos = ( (getPosATL _leader) vectorDiff ( (vectorDir _leader) vectorMultiply _howFarBehindSquadLeader ) );
if((_pos select 2)>1) then {
_pos = _pos findEmptyPosition [0, 10]; // teleports to safe position if your leader is too high up, but doesnt look nice, since you dont end up behind your sl
};
player setPosATL _pos;
player setDir ( getDir _leader );
} else {
// leader is in vehicle
if(!(player moveInAny _leaderVehicle)) then {
hint "Your squad leader is in vehicle, which is full."; // failed moveInAny _leaderVehicle
};
};