From e5339a5f3fcf12422a886c3958810972760d1ab5 Mon Sep 17 00:00:00 2001 From: Timi007 Date: Sat, 30 May 2026 17:24:03 +0200 Subject: [PATCH] Optimize JIP queue --- addons/markers/functions/fnc_createMarker.sqf | 8 +++++++- addons/markers/functions/fnc_deleteMarker.sqf | 19 ++++++++++++++++++- .../markers/functions/fnc_setMarkerAlpha.sqf | 8 +++++++- addons/markers/functions/fnc_setMarkerPos.sqf | 8 +++++++- .../markers/functions/fnc_setMarkerScale.sqf | 8 +++++++- 5 files changed, 46 insertions(+), 5 deletions(-) diff --git a/addons/markers/functions/fnc_createMarker.sqf b/addons/markers/functions/fnc_createMarker.sqf index 2dbfee7..cb9fad1 100644 --- a/addons/markers/functions/fnc_createMarker.sqf +++ b/addons/markers/functions/fnc_createMarker.sqf @@ -59,6 +59,12 @@ if ((_playerUID isEqualTo "_SP_PLAYER_") || {_playerUID isEqualTo "_SP_AI_"} || }; private _namePrefix = [_editable, _broadcastChannel, _playerUID] call FUNC(generateUniquePrefix); -[_namePrefix, _broadcastChannel, _pos, _markerParameter, _scale, _alpha] remoteExecCall [QFUNC(createMarkerLocal), ([_broadcastChannel] call FUNC(getBroadcastTargets)), true]; +private _jipId = format [QGVAR(createMarker_%1), _namePrefix]; + +[_namePrefix, _broadcastChannel, _pos, _markerParameter, _scale, _alpha] remoteExecCall [ + QFUNC(createMarkerLocal), + ([_broadcastChannel] call FUNC(getBroadcastTargets)), + _jipId +]; _namePrefix diff --git a/addons/markers/functions/fnc_deleteMarker.sqf b/addons/markers/functions/fnc_deleteMarker.sqf index 744f4bc..e35f908 100644 --- a/addons/markers/functions/fnc_deleteMarker.sqf +++ b/addons/markers/functions/fnc_deleteMarker.sqf @@ -25,7 +25,24 @@ private _broadcastChannel = [_namePrefix] call FUNC(getBroadcastChannel); CHECKRET(((_broadcastChannel > 5) || (_broadcastChannel < -1)),ERROR("Invalid marker prefix. No MTS marker"); false); +private _targets = [_broadcastChannel] call FUNC(getBroadcastTargets); + //broadcast marker depending on channel ID -[_namePrefix] remoteExecCall [QFUNC(deleteMarkerLocal), ([_broadcastChannel] call FUNC(getBroadcastTargets)), true]; +[_namePrefix] remoteExecCall [ + QFUNC(deleteMarkerLocal), + _targets, + _targets isNotEqualTo 0 +]; + +// We can only safely remove global markers from JIP +// Special cases are side markers where we do not remove JIP. +// Example: Create marker in west side -> switch side -> remove marker: +// The marker should still be created if JIP in west. +if (_targets isEqualTo 0) then { + { + private _jipId = format [QGVAR(%1_%2), _x, _namePrefix]; + remoteExec ["", _jipId]; // remove the order from the JIP queue + } forEach ["createMarker", "setMarkerAlpha", "setMarkerPos", "setMarkerScale"]; +}; true diff --git a/addons/markers/functions/fnc_setMarkerAlpha.sqf b/addons/markers/functions/fnc_setMarkerAlpha.sqf index 01b6d91..7ca4db0 100644 --- a/addons/markers/functions/fnc_setMarkerAlpha.sqf +++ b/addons/markers/functions/fnc_setMarkerAlpha.sqf @@ -27,7 +27,13 @@ private _broadcastChannel = [_namePrefix] call FUNC(getBroadcastChannel); CHECKRET(((_broadcastChannel > 5) || (_broadcastChannel < -1)),ERROR("Invalid marker prefix. No MTS marker")); +private _jipId = format [QGVAR(setMarkerAlpha_%1), _namePrefix]; + // Broadcast marker depending on channel ID -[_namePrefix, _alpha] remoteExecCall [QFUNC(setMarkerAlphaLocal), ([_broadcastChannel] call FUNC(getBroadcastTargets)), true]; +[_namePrefix, _alpha] remoteExecCall [ + QFUNC(setMarkerAlphaLocal), + ([_broadcastChannel] call FUNC(getBroadcastTargets)), + _jipId +]; nil diff --git a/addons/markers/functions/fnc_setMarkerPos.sqf b/addons/markers/functions/fnc_setMarkerPos.sqf index 88bb74d..e0d70b2 100644 --- a/addons/markers/functions/fnc_setMarkerPos.sqf +++ b/addons/markers/functions/fnc_setMarkerPos.sqf @@ -26,7 +26,13 @@ private _broadcastChannel = [_namePrefix] call FUNC(getBroadcastChannel); CHECKRET(((_broadcastChannel > 5) || (_broadcastChannel < -1)),ERROR("Invalid marker prefix. No MTS marker")); +private _jipId = format [QGVAR(setMarkerPos_%1), _namePrefix]; + //broadcast marker depending on channel ID -[_namePrefix, _newPos] remoteExecCall [QFUNC(setMarkerPosLocal), ([_broadcastChannel] call FUNC(getBroadcastTargets)), true]; +[_namePrefix, _newPos] remoteExecCall [ + QFUNC(setMarkerPosLocal), + ([_broadcastChannel] call FUNC(getBroadcastTargets)), + _jipId +]; nil diff --git a/addons/markers/functions/fnc_setMarkerScale.sqf b/addons/markers/functions/fnc_setMarkerScale.sqf index a1004f8..ef39983 100644 --- a/addons/markers/functions/fnc_setMarkerScale.sqf +++ b/addons/markers/functions/fnc_setMarkerScale.sqf @@ -26,7 +26,13 @@ private _broadcastChannel = [_namePrefix] call FUNC(getBroadcastChannel); CHECKRET(((_broadcastChannel > 5) || (_broadcastChannel < -1)),ERROR("Invalid marker prefix. No MTS marker")); +private _jipId = format [QGVAR(setMarkerScale_%1), _namePrefix]; + //broadcast marker depending on channel ID -[_namePrefix, _newScale] remoteExecCall [QFUNC(setMarkerScaleLocal), ([_broadcastChannel] call FUNC(getBroadcastTargets)), true]; +[_namePrefix, _newScale] remoteExecCall [ + QFUNC(setMarkerScaleLocal), + ([_broadcastChannel] call FUNC(getBroadcastTargets)), + _jipId +]; nil