diff --git a/arma/server/addons/cad/functions/fnc_initAssignmentRepository.sqf b/arma/server/addons/cad/functions/fnc_initAssignmentRepository.sqf index b8ab1ae..8a09aa6 100644 --- a/arma/server/addons/cad/functions/fnc_initAssignmentRepository.sqf +++ b/arma/server/addons/cad/functions/fnc_initAssignmentRepository.sqf @@ -305,6 +305,18 @@ GVAR(AssignmentRepositoryBaseClass) = compileFinal createHashMapFromArray [ _result set ["assignment", _assignment]; _result set ["leaderUid", _leaderUid]; _result set ["isDispatchOrder", _isDispatchOrder]; + if (!_isDispatchOrder && { !(isNil QEGVAR(task,TaskStore)) }) then { + private _acceptResult = EGVAR(task,TaskStore) call ["acceptTask", [_taskID, _leaderUid]]; + if !(_acceptResult getOrDefault ["success", false]) then { + ["WARNING", format [ + "CAD assigned task %1 to group %2 but could not mark it accepted for leader %3: %4", + _taskID, + _groupID, + _leaderUid, + _acceptResult getOrDefault ["message", "Unknown error."] + ]] call EFUNC(common,log); + }; + }; if (_isDispatchOrder) then { _result set ["order", +(_dispatchOrderRegistry getOrDefault [_taskID, createHashMap])]; }; diff --git a/arma/server/addons/cad/functions/fnc_initCadStore.sqf b/arma/server/addons/cad/functions/fnc_initCadStore.sqf index 0bec8bb..2040ad3 100644 --- a/arma/server/addons/cad/functions/fnc_initCadStore.sqf +++ b/arma/server/addons/cad/functions/fnc_initCadStore.sqf @@ -294,6 +294,38 @@ GVAR(CadStoreBaseClass) = compileFinal createHashMapFromArray [ _self call ["emitGroupEvent", ["cad.group.updated", _result]]; _result }], + ["buildSeedHydratePayload", compileFinal { + params [["_seed", createHashMap, [createHashMap]]]; + + private _session = _seed getOrDefault ["session", createHashMap]; + private _isDispatcher = _session getOrDefault ["isDispatcher", false]; + private _contracts = []; + + if (_isDispatcher) then { + { + if !(_x isEqualType createHashMap) then { continue; }; + + private _entry = +_x; + private _taskID = _entry getOrDefault ["taskId", _entry getOrDefault ["taskID", ""]]; + if (_taskID isEqualTo "") then { continue; }; + + _entry set ["taskId", _taskID]; + _entry set ["taskID", _taskID]; + _entry set ["assignedGroupId", ""]; + _entry set ["assignmentState", "unassigned"]; + _contracts pushBack _entry; + } forEach (_seed getOrDefault ["activeTasks", []]); + }; + + createHashMapFromArray [ + ["groups", _seed getOrDefault ["groups", []]], + ["contracts", _contracts], + ["requests", []], + ["assignments", []], + ["activity", []], + ["session", _session] + ] + }], ["buildHydratePayload", compileFinal { params [["_uid", "", [""]]]; @@ -313,19 +345,12 @@ GVAR(CadStoreBaseClass) = compileFinal createHashMapFromArray [ ["activeTasks", EGVAR(task,TaskStore) call ["getActiveTaskCatalog", []]], ["session", _session] ]; - private _emptyPayload = createHashMapFromArray [ - ["groups", _seed get "groups"], - ["contracts", []], - ["requests", []], - ["assignments", []], - ["activity", []], - ["session", _session] - ]; + private _seedPayload = _self call ["buildSeedHydratePayload", [_seed]]; private _persistenceService = _self getOrDefault ["PersistenceService", createHashMap]; if (_persistenceService isEqualTo createHashMap) exitWith { ["WARNING", "CAD hydrate extension state is unavailable; returning seed-only payload."] call EFUNC(common,log); - _emptyPayload + _seedPayload }; private _hydrateResult = _persistenceService call ["buildHydratePayload", [_seed]]; @@ -334,7 +359,7 @@ GVAR(CadStoreBaseClass) = compileFinal createHashMapFromArray [ }; ["WARNING", "CAD hydrate failed in the extension; returning seed-only payload."] call EFUNC(common,log); - _emptyPayload + _seedPayload }] ]; diff --git a/arma/server/addons/task/XEH_postInit.sqf b/arma/server/addons/task/XEH_postInit.sqf index e93f034..7666467 100644 --- a/arma/server/addons/task/XEH_postInit.sqf +++ b/arma/server/addons/task/XEH_postInit.sqf @@ -1,6 +1,5 @@ #include "script_component.hpp" -if !(isNil QGVAR(TaskStore)) then { GVAR(TaskStore) call ["resetMissionState", []]; }; if (isNil QEGVAR(common,EventBus)) then { call EFUNC(common,eventBus); }; if (isNil QGVAR(TaskLifecycleEventLogTokens)) then { private _logTaskLifecycleEvent = { diff --git a/arma/server/addons/task/functions/fnc_initTaskStore.sqf b/arma/server/addons/task/functions/fnc_initTaskStore.sqf index cb48ada..96b9a0c 100644 --- a/arma/server/addons/task/functions/fnc_initTaskStore.sqf +++ b/arma/server/addons/task/functions/fnc_initTaskStore.sqf @@ -257,7 +257,7 @@ GVAR(TaskStore) = createHashMapObject [[ if (_taskID isEqualTo "") exitWith { createHashMap }; - private _entry = _self call ["callTaskState", ["task:catalog:get", [_taskID], createHashMap]]; + [(_self call ["callTaskState", ["task:catalog:get", [_taskID], createHashMap]])] params [["_entry", createHashMap, [createHashMap]]]; if !(_entry isEqualType createHashMap) exitWith { createHashMap }; _entry @@ -267,10 +267,13 @@ GVAR(TaskStore) = createHashMapObject [[ if (_taskID isEqualTo "") exitWith { false }; - private _entry = _self call ["getTaskCatalogEntry", [_taskID]]; + [(_self call ["getTaskCatalogEntry", [_taskID]])] params [["_entry", createHashMap, [createHashMap]]]; if (_entry isEqualTo createHashMap) exitWith { false }; - (_entry getOrDefault ["accepted", false]) || { (_entry getOrDefault ["requesterUid", ""]) isNotEqualTo "" } + [(_entry getOrDefault ["accepted", false])] params [["_accepted", false, [false]]]; + [(_entry getOrDefault ["requesterUid", ""])] params [["_requesterUid", "", [""]]]; + + _accepted || { _requesterUid isNotEqualTo "" } }], ["acceptTask", compileFinal { params [["_taskID", "", [""]], ["_requesterUid", "", [""]]];