From bc07343edbc9b2f95b32fe75df24f4f23e4c249c Mon Sep 17 00:00:00 2001 From: Valmo Trindade Date: Tue, 3 Sep 2024 00:21:17 -0300 Subject: [PATCH] added a more refined way to handle drones used by the player --- .../main/functions/api/fn_postDroneMarker.sqf | 8 ++--- .../extract_data/fn_extract_info.sqf | 7 +++++ addons/main/functions/fn_init.sqf | 29 +++++++++++++++---- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/addons/main/functions/api/fn_postDroneMarker.sqf b/addons/main/functions/api/fn_postDroneMarker.sqf index f9f91e4..cac8cba 100644 --- a/addons/main/functions/api/fn_postDroneMarker.sqf +++ b/addons/main/functions/api/fn_postDroneMarker.sqf @@ -1,8 +1,4 @@ -params["_unit"]; - -_drone = vehicle (getConnectedUAVUnit _unit); - -if (isNull _drone) exitWith {}; +params["_drone"]; private _location = (getPos _drone) call armatak_fnc_convert_location; @@ -12,7 +8,7 @@ private _atak_longitude = _location select 1; private _atak_speed = speed _drone; private _atak_bearing = parseNumber ((getDir _drone) toFixed 0); private _atak_role = "a-f-A"; -private _atak_callsign = "[UAV]" + name _unit; +private _atak_callsign = _drone getVariable "_atak_uav_callsign"; private _atak_server_instance = missionNamespace getVariable "_atak_server_instance"; private _atak_server_instance_token = missionNamespace getVariable "_atak_server_instance_token"; private _atak_altitude = _location select 2; diff --git a/addons/main/functions/extract_data/fn_extract_info.sqf b/addons/main/functions/extract_data/fn_extract_info.sqf index 965a2a3..17b9cc3 100644 --- a/addons/main/functions/extract_data/fn_extract_info.sqf +++ b/addons/main/functions/extract_data/fn_extract_info.sqf @@ -16,6 +16,13 @@ private _atak_altitude = _location select 2; private _atak_server_instance = missionNamespace getVariable "_atak_server_instance"; private _atak_server_instance_token = missionNamespace getVariable "_atak_server_instance_token"; +_drone = vehicle (getConnectedUAVUnit _unit); + +if (!isNull _drone) then { + _drone setVariable ["_atak_uav_connected", true]; + _drone setVariable ["_atak_uav_callsign", "[UAV]" + name _unit]; +}; + _unit_info = [_atak_uid, _atak_latitude, _atak_longitude, _atak_speed, _atak_bearing, _atak_role, _atak_callsign, _atak_altitude, _atak_server_instance, _atak_server_instance_token]; _unit_info \ No newline at end of file diff --git a/addons/main/functions/fn_init.sqf b/addons/main/functions/fn_init.sqf index 8a81eb8..2b299b8 100644 --- a/addons/main/functions/fn_init.sqf +++ b/addons/main/functions/fn_init.sqf @@ -22,11 +22,11 @@ if (isServer && _activated) exitWith { _atak_server_instance_token = call armatak_fnc_extract_auth_token; - if (isNull _atak_server_instance_token) then { - private _warning = format ["ARMATAK
%1", "Connected"]; + if (_atak_server_instance_token == "") then { + private _warning = format ["ARMATAK
%1", "Connection Failed"]; [[_warning, 2]] call CBA_fnc_notify; } else { - private _warning = format ["ARMATAK
%1", "Connection Failed"]; + private _warning = format ["ARMATAK
%1", "Connected"]; [[_warning, 2]] call CBA_fnc_notify; }; @@ -36,8 +36,14 @@ if (isServer && _activated) exitWith { { private _unit = _x; _unit call armatak_fnc_postMarker; - _unit call armatak_fnc_postDroneMarker; + _unit call armatak_fnc_extract_drone_info; } forEach playableUnits; + { + private _drone = _x; + if (_drone getVariable "_atak_uav_connected") then { + _drone call armatak_fnc_postDroneMarker; + }; + } forEach allUnitsUAV; }, 1, []] call CBA_fnc_addPerFrameHandler; }, [], 1] call CBA_fnc_waitAndExecute; @@ -46,15 +52,28 @@ if (isServer && _activated) exitWith { private _unit = _x; _unit call armatak_fnc_deleteMarker; } forEach playableUnits; + { + private _drone = _x; + _drone call armatak_fnc_deleteMarker; + } forEach allUnitsUAV; }]; } else { [{ player call armatak_fnc_postMarker; - player call armatak_fnc_postDroneMarker; + { + private _drone = _x; + if (_drone getVariable "_atak_uav_connected") then { + _drone call armatak_fnc_postDroneMarker; + }; + } forEach allUnitsUAV; }, 1, []] call CBA_fnc_addPerFrameHandler; addMissionEventHandler ["Ended", { player call armatak_fnc_deleteMarker; + { + private _drone = _x; + _drone call armatak_fnc_deleteMarker; + } forEach allUnitsUAV; }]; }; }; \ No newline at end of file