arma2-epoch-server/MPMissions/DayZ_Epoch_24.Napf/scripts/marker_manager.sqf
2022-04-21 16:15:41 +03:00

116 lines
4.2 KiB
Plaintext
Executable File

/*
DayZ Epoch Client-Side Marker Manager
Author: JasonTM
* Manages map markers locally on each client
* Markers are updated on demand instead of on a server side loop
* Localizes marker text
* JIP: request and create all server side markers
* Mission Start: create the markers for the mission
* Mission Update: update the single marker with text. ex. A.I. counter.
* Mission End: remove all markers
[
position, - 2D or 3D array
createMarker, - String
setMarkerColor, - String
setMarkerType, - String
setMarkerShape, - String
setMarkerBrush, - String
setMarkerSize, - 2D array
setMarkerText, - Array of Strings and Scalar - can be localized.
setMarkerAlpha - Scalar
]
*/
fnc_localizeMarkerText = {
local _text = _this;
{
local _index = _forEachIndex;
if (typeName _x == "ARRAY") then {
{
if (typeName _x == "STRING") then {
if (["STR_",_x] call fnc_inString) then {
(_text select _index) set [_forEachIndex, localize _x];
};
};
} forEach _x;
_text set [_index, format _x];
} else {
if (typeName _x == "STRING") then {
if (["STR_",_x] call fnc_inString) then {
_text set [_index, localize _x];
};
};
};
} forEach _text;
_text = format _text;
_text
};
fnc_markerManager = {
local _option = _this select 0;
local _args = _this select 1; // Always an array except for remove single marker option.
if (_option == "textSingle") exitWith {
(_args select 0) setMarkerTextLocal ((_args select 1) call fnc_localizeMarkerText);
};
if (_option == "removeSingle") exitWith {
deleteMarkerLocal _args;
};
if (_option == "createSingle") exitWith {
deleteMarkerLocal (_args select 1); // delete marker if it exits.
local _marker = createMarkerLocal [(_args select 1),(_args select 0)];
if ((_args select 2) != "") then {_marker setMarkerColorLocal (_args select 2);};
if ((_args select 3) != "") then {_marker setMarkerTypeLocal (_args select 3);};
if ((_args select 4) != "") then {_marker setMarkerShapeLocal (_args select 4);};
if ((_args select 5) != "") then {_marker setMarkerBrushLocal (_args select 5);};
if ( count (_args select 6) > 0) then {_marker setMarkerSizeLocal (_args select 6);};
if ( count (_args select 7) > 0) then {_marker setMarkerTextLocal ((_args select 7) call fnc_localizeMarkerText);};
if ((_args select 8) > 0) then {_marker setMarkerAlphaLocal (_args select 8);};
};
if (_option == "start") exitWith {
{
if (typeName _x == "ARRAY") then {
local _marker = createMarkerLocal [(_x select 1),(_x select 0)];
if ((_x select 2) != "") then {_marker setMarkerColorLocal (_x select 2);};
if ((_x select 3) != "") then {_marker setMarkerTypeLocal (_x select 3);};
if ((_x select 4) != "") then {_marker setMarkerShapeLocal (_x select 4);};
if ((_x select 5) != "") then {_marker setMarkerBrushLocal (_x select 5);};
if (count (_x select 6) > 0) then {_marker setMarkerSizeLocal (_x select 6);};
if ( count (_x select 7) > 0) then {_marker setMarkerTextLocal ((_x select 7) call fnc_localizeMarkerText);};
if ((_x select 8) > 0) then {_marker setMarkerAlphaLocal (_x select 8);};
};
} count _args;
};
if (_option == "end") exitWith {
{
deleteMarkerLocal _x;
} count _args;
};
if (_option == "JIP") exitWith {
for "_i" from 0 to ((count _args) - 1) do {
local _current = _args select _i;
if (typeName _current == "ARRAY") then {
{
if (typeName _x == "ARRAY") then {
local _marker = createMarkerLocal [(_x select 1),(_x select 0)];
if ((_x select 2) != "") then {_marker setMarkerColorLocal (_x select 2);};
if ((_x select 3) != "") then {_marker setMarkerTypeLocal (_x select 3);};
if ((_x select 4) != "") then {_marker setMarkerShapeLocal (_x select 4);};
if ((_x select 5) != "") then {_marker setMarkerBrushLocal (_x select 5);};
if (count (_x select 6) > 0) then {_marker setMarkerSizeLocal (_x select 6);};
if ( count (_x select 7) > 0) then {_marker setMarkerTextLocal ((_x select 7) call fnc_localizeMarkerText);};
if ((_x select 8) > 0) then {_marker setMarkerAlphaLocal (_x select 8);};
};
} count _current;
};
};
};
};
"PVDZ_ServerMarkerSend" addPublicVariableEventHandler {(_this select 1) call fnc_markerManager;};