a3_vemf_reloaded/exile_vemf_reloaded/functions/fn_transferOwner.sqf
2016-04-06 18:04:51 +02:00

87 lines
2.5 KiB
Plaintext

/*
Author: IT07
Description:
handles the transfer of ownership to another given unit/client/object.
Will transfer complete group to the same (new) owner.
Params:
_this select 0: GROUP - the group of which the ownership should be transfered
Returns:
BOOLEAN - true if transfer was successful
*/
private ["_toTransfer","_hcEnabled","_hcUIDs","_hcClients","_to","_transfer"];
_transfer = false;
_toTransfer = param [0, grpNull, [grpNull]];
if not isNull _toTransfer then
{
// Check if HC is enabled
_hcEnabled = "headLessClientSupport" call VEMFr_fnc_getSetting;
_forceClients = uiNamespace getVariable ["VEMFr_forceAItoClients", nil];
if not(isNil"_forceClients") then
{
if _forceClients then
{
_hcEnabled = -1;
};
};
if (_hcEnabled isEqualTo 1) then
{ // Gather the Headless Client(s)
_hcClients = [];
{
if (typeOf _x isEqualTo "HeadlessClient_F") then // it is an HC
{
_hcClients pushBack [_x, owner _x];
};
} forEach allPlayers;
if (count _hcClients > 0) then
{
_to = call VEMFr_fnc_headLessClient; // Select a random hc
};
if (count _hcClients isEqualTo 0) then
{
uiNamespace setVariable ["VEMFr_forceAItoClients", true];
};
};
if (_hcEnabled isEqualTo 0) then
{
if ([1] call VEMFr_fnc_playerCount) then
{
_closest = [0,0,0];
{
if (isPlayer _x) then
{
_leaderPos = position (leader _toTransfer);
_dist = _leaderPos distance (position _x);
if (_dist < (_leaderPos distance _closest)) then
{ // Find the closest player
_closest = position _x;
_to = _x;
};
};
} forEach allPlayers;
};
};
if not isNil"_to" then
{
_transfer = _toTransfer setGroupOwner (owner _to);
_load = uiNamespace getVariable ["VEMFrHcLoad", nil];
if not isNil"_load" then
{
_index = _load find _to;
if (_index > -1) then
{
_load set [_index, ((_load select _index) select 1) + 1];
};
if (_index isEqualTo -1) then
{
_load pushBack [_to, 1];
};
};
};
};
_transfer // Return the value of this var to the calling script