diff --git a/addons/main/CfgFunctions.hpp b/addons/main/CfgFunctions.hpp
index 8a18378..3be15d0 100644
--- a/addons/main/CfgFunctions.hpp
+++ b/addons/main/CfgFunctions.hpp
@@ -4,11 +4,30 @@ class CfgFunctions {
class init {
file = "\armatak\armatak\armatak_main\functions\fn_init.sqf";
};
-
+ class extract_callsign {
+ file = "\armatak\armatak\armatak_main\functions\extract_data\fn_extract_callsign.sqf";
+ };
+ class extract_role {
+ file = "\armatak\armatak\armatak_main\functions\extract_data\fn_extract_role.sqf";
+ };
+ class extract_side {
+ file = "\armatak\armatak\armatak_main\functions\extract_data\fn_extract_side.sqf";
+ };
+ class extract_position {
+ file = "\armatak\armatak\armatak_main\functions\extract_data\fn_extract_position.sqf";
+ };
class extract_info {
file = "\armatak\armatak\armatak_main\functions\extract_data\fn_extract_info.sqf";
};
-
+ class extract_drone_info {
+ file = "\armatak\armatak\armatak_main\functions\extract_data\fn_extract_drone_info.sqf";
+ };
+ class extract_uuid {
+ file = "\armatak\armatak\armatak_main\functions\extract_data\fn_extract_uuid.sqf";
+ };
+ class extract_auth_token {
+ file = "\armatak\armatak\armatak_main\functions\extract_data\fn_extract_auth_token.sqf";
+ };
class convert_location {
file = "\armatak\armatak\armatak_main\functions\map\fn_convert_location.sqf";
};
@@ -24,6 +43,15 @@ class CfgFunctions {
class convert_to_vr {
file = "\armatak\armatak\armatak_main\functions\map\fn_convert_to_vr.sqf";
};
+ class postMarkers {
+ file = "\armatak\armatak\armatak_main\functions\api\fn_postMarkers.sqf";
+ };
+ class postMarkersDebug {
+ file = "\armatak\armatak\armatak_main\functions\api\fn_postMarkersDebug.sqf";
+ };
+ class deleteMarkers {
+ file = "\armatak\armatak\armatak_main\functions\api\fn_deleteMarkers.sqf";
+ };
};
};
};
\ No newline at end of file
diff --git a/addons/main/functions/api/fn_deleteMarkers.sqf b/addons/main/functions/api/fn_deleteMarkers.sqf
new file mode 100644
index 0000000..03f95ba
--- /dev/null
+++ b/addons/main/functions/api/fn_deleteMarkers.sqf
@@ -0,0 +1,3 @@
+params["_marker"];
+
+"armatak" callExtension ["ots_api:delete", _marker call armatak_fnc_extract_info];
\ No newline at end of file
diff --git a/addons/main/functions/api/fn_postMarkers.sqf b/addons/main/functions/api/fn_postMarkers.sqf
new file mode 100644
index 0000000..0dceec5
--- /dev/null
+++ b/addons/main/functions/api/fn_postMarkers.sqf
@@ -0,0 +1,3 @@
+params["_markers"];
+
+"armatak" callExtension ["ots_api:post", [_markers]];
\ No newline at end of file
diff --git a/addons/main/functions/api/fn_postMarkersDebug.sqf b/addons/main/functions/api/fn_postMarkersDebug.sqf
new file mode 100644
index 0000000..ff878d5
--- /dev/null
+++ b/addons/main/functions/api/fn_postMarkersDebug.sqf
@@ -0,0 +1,3 @@
+params["_markers"];
+
+"armatak" callExtension ["ots_api:post_debug", [markers]];
\ No newline at end of file
diff --git a/addons/main/functions/extract_data/fn_extract_auth_token.sqf b/addons/main/functions/extract_data/fn_extract_auth_token.sqf
new file mode 100644
index 0000000..82a7723
--- /dev/null
+++ b/addons/main/functions/extract_data/fn_extract_auth_token.sqf
@@ -0,0 +1,18 @@
+private _atak_server_instance = missionNamespace getVariable "_atak_server_instance";
+private _atak_server_instance_username = missionNamespace getVariable "_atak_server_instance_username";
+private _atak_server_instance_password = missionNamespace getVariable "_atak_server_instance_password";
+private _authentication = [_atak_server_instance, _atak_server_instance_username, _atak_server_instance_password];
+
+_atak_server_instance_token = ("armatak" callExtension ["ots_api:get_auth_token", [_authentication]]) select 0;
+
+if ((_atak_server_instance_token != "") and !(["ERROR", _atak_server_instance_token, false] call BIS_fnc_inString)) then {
+ missionNamespace setVariable ["_atak_server_instance_token", _atak_server_instance_token];
+ private _warning = format ["ARMATAK
%1", "Authorized"];
+ [[_warning, 1.5]] call CBA_fnc_notify;
+} else {
+ missionNamespace setVariable ["_atak_server_instance_token", _atak_server_instance_token];
+ private _warning = format ["ARMATAK
%1", "Failed to get Auth Token " + _atak_server_instance_token];
+ [[_warning, 1]] call CBA_fnc_notify;
+};
+
+_atak_server_instance_token
\ No newline at end of file
diff --git a/addons/main/functions/extract_data/fn_extract_callsign.sqf b/addons/main/functions/extract_data/fn_extract_callsign.sqf
new file mode 100644
index 0000000..9d91d51
--- /dev/null
+++ b/addons/main/functions/extract_data/fn_extract_callsign.sqf
@@ -0,0 +1,8 @@
+params["_unit"];
+private _callsign = "";
+if (roleDescription _unit != "") then {
+ _callsign = name _unit + " | " + roleDescription _unit;
+} else {
+ _callsign = name _unit;
+};
+_callsign
\ No newline at end of file
diff --git a/addons/main/functions/extract_data/fn_extract_drone_info.sqf b/addons/main/functions/extract_data/fn_extract_drone_info.sqf
new file mode 100644
index 0000000..cbeb07c
--- /dev/null
+++ b/addons/main/functions/extract_data/fn_extract_drone_info.sqf
@@ -0,0 +1,32 @@
+params["_drone"];
+private _location = (getPos _drone) call armatak_fnc_convert_location;
+private _atak_uid = _drone call armatak_fnc_extract_uuid;
+private _atak_latitude = _location select 0;
+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 = _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;
+switch (side _drone) do {
+ case "WEST": {
+ _atak_role = "a-f-A-M-F-Q"
+ };
+ case "EAST": {
+ _atak_role = "a-h-A-M-F-Q"
+ };
+ case "INDEPENDENT": {
+ _atak_role = "a-n-A-M-F-Q"
+ };
+ case "CIVILIAN": {
+ _atak_role = "a-f-A-C"
+ };
+ default {
+ _atak_role = "a-f-A-M-F-Q"
+ };
+};
+_drone_info = [_atak_uid, _atak_latitude, _atak_longitude, _atak_speed, _atak_bearing, _atak_role, _atak_callsign, _atak_altitude, _atak_server_instance, _atak_server_instance_token];
+
+_drone_info
\ No newline at end of file
diff --git a/addons/main/functions/extract_data/fn_extract_info.sqf b/addons/main/functions/extract_data/fn_extract_info.sqf
index 0e35c2c..9b2d8cd 100644
--- a/addons/main/functions/extract_data/fn_extract_info.sqf
+++ b/addons/main/functions/extract_data/fn_extract_info.sqf
@@ -5,11 +5,22 @@
params["_unit"];
private _location = (getPos _unit) call armatak_fnc_convert_location;
+private _atak_uid = [_unit] call armatak_fnc_extract_uuid;
private _atak_latitude = _location select 0;
private _atak_longitude = _location select 1;
-private _atak_altitude = _location select 2;
+private _atak_speed = speed _unit;
private _atak_bearing = parseNumber ((getDir _unit) toFixed 0);
+private _atak_role = [_unit] call armatak_fnc_extract_role;
+private _atak_callsign = [_unit] call armatak_fnc_extract_callsign;
+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_latitude,_atak_longitude,_atak_altitude,_atak_bearing];
+_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/extract_data/fn_extract_role.sqf b/addons/main/functions/extract_data/fn_extract_role.sqf
new file mode 100644
index 0000000..d1d4004
--- /dev/null
+++ b/addons/main/functions/extract_data/fn_extract_role.sqf
@@ -0,0 +1,100 @@
+params["_unit"];
+private _affiliation = "f";
+private _type = "G";
+private _role = "a-f-G-U-C-I";
+switch (side _unit) do {
+ case "WEST": {
+ _affiliation = "f";
+ };
+ case "EAST": {
+ _affiliation = "h";
+ };
+ case "INDEPENDENT": {
+ _affiliation = "n";
+ };
+ case "CIVILIAN": {
+ _affiliation = "u";
+ };
+ default {
+ _affiliation = "f";
+ };
+};
+_unit_type = _unit call BIS_fnc_objectType select 1;
+switch (_unit_type) do {
+ case "AT": {
+ _type = "G-U-C-F-R";
+ };
+ case "Civilian": {
+ _type = "G-E-V-C";
+ };
+ case "Diver": {
+ _type = "U-S";
+ };
+ case "Infantry": {
+ _type = "G-U-C-I";
+ };
+ case "Medic": {
+ _type = "a-f-G-U-C";
+ };
+ case "MG": {
+ _type = "G-U-C-I";
+ };
+ case "Officer": {
+ _type = "G-U-C-I";
+ };
+ case "Pilot": {
+ _type = "G-U-C-V";
+ };
+ case "Sniper": {
+ _type = "G-U-C-R-X";
+ };
+ case "SpecialForces": {
+ _type = "G-U-C-R-X";
+ };
+ case "UAVPilot": {
+ _type = "G-U-C-V-U";
+ };
+ default {
+ _type = "G-U-C-I";
+ };
+};
+if (!isNull vehicle _unit) then {
+ _vehicle_type = (vehicle _unit) call BIS_fnc_objectType select 1;
+ switch (_vehicle_type) do {
+ case "Car": {
+ _type = "G-U-C-I-M";
+ };
+ case "Helicopter": {
+ _type = "A-M-H";
+ };
+ case "Motorcycle": {
+ _type = "G-U-C-I-M";
+ };
+ case "Plane": {
+ _type = "A-M-F";
+ };
+ case "Ship": {
+ _type = "S";
+ };
+ case "StaticWeapon": {
+ _type = "G-U-C-F-M";
+ };
+ case "Submarine": {
+ _type = "U-S";
+ };
+ case "TrackedAPC": {
+ _type = "G-U-C-I-I";
+ };
+ case "Tank": {
+ _type = "G-U-C-A-T";
+ };
+ case "WheeledAPC": {
+ _type = "G-U-C-I-Z";
+ };
+ default {};
+ };
+};
+
+_role = "a-" + _affiliation + "-" + _type;
+
+_role
\ No newline at end of file
diff --git a/addons/main/functions/extract_data/fn_extract_side.sqf b/addons/main/functions/extract_data/fn_extract_side.sqf
new file mode 100644
index 0000000..0c86d12
--- /dev/null
+++ b/addons/main/functions/extract_data/fn_extract_side.sqf
@@ -0,0 +1,20 @@
+params["_unit"];
+_side = "friendly";
+switch (side _unit) do {
+ case "WEST": {
+ _side = "friendly";
+ };
+ case "EAST": {
+ _side = "hostile";
+ };
+ case "INDEPENDENT": {
+ _side = "neutral";
+ };
+ case "CIVILIAN": {
+ _side = "unknown";
+ };
+ default {
+ _side = "friendly";
+ };
+};
+_side
\ No newline at end of file