116 lines
4.2 KiB
Plaintext
116 lines
4.2 KiB
Plaintext
|
/*
|
||
|
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;};
|