diff --git a/arma/server/addons/bank/functions/fnc_initStore.sqf b/arma/server/addons/bank/functions/fnc_initStore.sqf index d04e37b..4e64347 100644 --- a/arma/server/addons/bank/functions/fnc_initStore.sqf +++ b/arma/server/addons/bank/functions/fnc_initStore.sqf @@ -243,12 +243,24 @@ GVAR(BankBaseStore) = compileFinal createHashMapFromArray [ private _orgPatch = _orgResult getOrDefault ["patch", createHashMap]; if (_orgPatch isNotEqualTo createHashMap) then { - { - private _memberPlayer = [_x] call EFUNC(common,getPlayer); - if (_memberPlayer isNotEqualTo objNull) then { - [CRPC(org,responseSyncOrg), [_orgPatch], _memberPlayer] call CFUNC(targetEvent); - }; - } forEach (_orgResult getOrDefault ["memberUids", []]); + private _memberUids = +(_orgResult getOrDefault ["memberUids", []]); + if (isNil QEGVAR(common,EventBus)) then { + { + private _memberPlayer = [_x] call EFUNC(common,getPlayer); + if (_memberPlayer isNotEqualTo objNull) then { + [CRPC(org,responseSyncOrg), [_orgPatch], _memberPlayer] call CFUNC(targetEvent); + }; + } forEach _memberUids; + } else { + EGVAR(common,EventBus) call ["emit", [ + "org.sync.requested", + createHashMapFromArray [ + ["memberUids", _memberUids], + ["patch", +_orgPatch] + ], + createHashMapFromArray [["source", "bank"]] + ]]; + }; }; if (_persistenceFailures isNotEqualTo []) then { diff --git a/arma/server/addons/cad/functions/fnc_initCadStore.sqf b/arma/server/addons/cad/functions/fnc_initCadStore.sqf index d95fdca..0bec8bb 100644 --- a/arma/server/addons/cad/functions/fnc_initCadStore.sqf +++ b/arma/server/addons/cad/functions/fnc_initCadStore.sqf @@ -71,11 +71,24 @@ GVAR(CadStoreBaseClass) = compileFinal createHashMapFromArray [ ]; if (_uid isEqualTo "" || { _message isEqualTo "" }) exitWith { false }; + if (isNil QEGVAR(common,EventBus)) exitWith { + private _player = [_uid] call EFUNC(common,getPlayer); + if (_player isEqualTo objNull) exitWith { false }; - private _player = [_uid] call EFUNC(common,getPlayer); - if (_player isEqualTo objNull) exitWith { false }; + [CRPC(notifications,recieveNotification), [_type, _title, _message], _player] call CFUNC(targetEvent); + true + }; - [CRPC(notifications,recieveNotification), [_type, _title, _message], _player] call CFUNC(targetEvent); + EGVAR(common,EventBus) call ["emit", [ + "notification.requested", + createHashMapFromArray [ + ["uids", [_uid]], + ["notificationType", _type], + ["title", _title], + ["message", _message] + ], + createHashMapFromArray [["source", "cad"]] + ]]; true }], ["resolveRequestPlayer", compileFinal { diff --git a/arma/server/addons/common/XEH_preInit.sqf b/arma/server/addons/common/XEH_preInit.sqf index 9dd4ebf..52ef5b7 100644 --- a/arma/server/addons/common/XEH_preInit.sqf +++ b/arma/server/addons/common/XEH_preInit.sqf @@ -5,3 +5,33 @@ PREP_RECOMPILE_START; PREP_RECOMPILE_END; // private _category = [QUOTE(MOD_NAME), LLSTRING(displayName)]; + +if (isNil QGVAR(EventBus)) then { call FUNC(eventBus); }; +if (isNil QGVAR(NotificationEventTokens)) then { + private _sendNotification = { + params ["_event"]; + + private _uids = +(_event getOrDefault ["uids", []]); + private _type = _event getOrDefault ["notificationType", "info"]; + private _title = _event getOrDefault ["title", ""]; + private _message = _event getOrDefault ["message", ""]; + private _duration = _event getOrDefault ["duration", -1]; + + if (_message isEqualTo "" || { _uids isEqualTo [] }) exitWith {}; + + private _params = [_type, _title, _message]; + if (_duration >= 0) then { + _params pushBack _duration; + }; + + { + private _player = [_x] call FUNC(getPlayer); + if (isNull _player) then { continue; }; + [CRPC(notifications,recieveNotification), _params, _player] call CFUNC(targetEvent); + } forEach _uids; + }; + + GVAR(NotificationEventTokens) = [ + GVAR(EventBus) call ["on", ["notification.requested", _sendNotification, "common.notification.send"]] + ]; +}; diff --git a/arma/server/addons/economy/functions/fnc_initFEconomyStore.sqf b/arma/server/addons/economy/functions/fnc_initFEconomyStore.sqf index 0806220..2e6824d 100644 --- a/arma/server/addons/economy/functions/fnc_initFEconomyStore.sqf +++ b/arma/server/addons/economy/functions/fnc_initFEconomyStore.sqf @@ -4,7 +4,7 @@ * File: fnc_initFEconomyStore.sqf * Author: IDSolutions * Date: 2025-12-20 - * Last Update: 2026-04-18 + * Last Update: 2026-05-15 * Public: No * * Description: @@ -54,6 +54,30 @@ GVAR(FEconomyStore) = createHashMapObject [[ SETVAR(_target,liters,0); true }], + ["notify", { + params [["_unit", objNull, [objNull]], ["_type", "info", [""]], ["_title", "Refueling", [""]], ["_message", "", [""]]]; + + if (isNull _unit || { _message isEqualTo "" }) exitWith { false }; + + private _uid = getPlayerUID _unit; + if (_uid isEqualTo "") exitWith { false }; + if (isNil QEGVAR(common,EventBus)) then { + [CRPC(notifications,recieveNotification), [_type, _title, _message], _unit] call CFUNC(targetEvent); + } else { + EGVAR(common,EventBus) call ["emit", [ + "notification.requested", + createHashMapFromArray [ + ["uids", [_uid]], + ["notificationType", _type], + ["title", _title], + ["message", _message] + ], + createHashMapFromArray [["source", "economy"]] + ]]; + }; + + true + }], ["refuel", { params [["_target", objNull, [objNull]], ["_unit", objNull, [objNull]]]; @@ -62,13 +86,13 @@ GVAR(FEconomyStore) = createHashMapObject [[ private _currentFuel = fuel _target; private _missingFuel = (1 - _currentFuel) max 0 min 1; if (_missingFuel <= 0.001) exitWith { - [CRPC(notifications,recieveNotification), ["info", "Refueling", "Vehicle fuel tank is already full."], _unit] call CFUNC(targetEvent); + _self call ["notify", [_unit, "info", "Refueling", "Vehicle fuel tank is already full."]]; false }; if (isNil QGVAR(SEconomyStore)) exitWith { ["ERROR", "Service economy store unavailable for garage refueling charge.", nil, nil] call EFUNC(common,log); - [CRPC(notifications,recieveNotification), ["danger", "Refueling", "Organization billing is unavailable. Refueling was not completed."], _unit] call CFUNC(targetEvent); + _self call ["notify", [_unit, "danger", "Refueling", "Organization billing is unavailable. Refueling was not completed."]]; false }; @@ -79,7 +103,7 @@ GVAR(FEconomyStore) = createHashMapObject [[ private _totalCost = _totalLiters * GVAR(FuelCost); private _chargeResult = GVAR(SEconomyStore) call ["chargeOrg", [_unit, _totalCost, "Refueling"]]; if !(_chargeResult getOrDefault ["success", false]) exitWith { - [CRPC(notifications,recieveNotification), ["danger", "Refueling", _chargeResult getOrDefault ["message", "Organization funds cannot cover this refuel. Refueling was not completed."]], _unit] call CFUNC(targetEvent); + _self call ["notify", [_unit, "danger", "Refueling", _chargeResult getOrDefault ["message", "Organization funds cannot cover this refuel. Refueling was not completed."]]]; false }; @@ -88,7 +112,7 @@ GVAR(FEconomyStore) = createHashMapObject [[ private _formattedTotalCost = [_totalCost] call EFUNC(common,formatNumber); private _formattedTotalLiters = _totalLiters toFixed 2; - [CRPC(notifications,recieveNotification), ["info", "Refueling", format ["Refueling complete: %1L
Organization charged $%2.", _formattedTotalLiters, _formattedTotalCost]], _unit] call CFUNC(targetEvent); + _self call ["notify", [_unit, "info", "Refueling", format ["Refueling complete: %1L
Organization charged $%2.", _formattedTotalLiters, _formattedTotalCost]]]; true }], ["stop", { @@ -117,25 +141,25 @@ GVAR(FEconomyStore) = createHashMapObject [[ }; if (_totalCost <= 0) exitWith { - [CRPC(notifications,recieveNotification), ["info", "Refueling", format ["Refueling complete: %1L", _formattedTotalLiters]], _player] call CFUNC(targetEvent); + _self call ["notify", [_player, "info", "Refueling", format ["Refueling complete: %1L", _formattedTotalLiters]]]; _fuelRegistry deleteAt _index; }; if (isNil QGVAR(SEconomyStore)) exitWith { ["ERROR", "Service economy store unavailable for refueling charge.", nil, nil] call EFUNC(common,log); - [CRPC(notifications,recieveNotification), ["danger", "Refueling", "Organization billing is unavailable. Refueling was not completed."], _player] call CFUNC(targetEvent); + _self call ["notify", [_player, "danger", "Refueling", "Organization billing is unavailable. Refueling was not completed."]]; _self call ["rollbackFuel", [_target, _initialFuel]]; _fuelRegistry deleteAt _index; }; private _chargeResult = GVAR(SEconomyStore) call ["chargeOrg", [_player, _totalCost, "Refueling"]]; if !(_chargeResult getOrDefault ["success", false]) exitWith { - [CRPC(notifications,recieveNotification), ["danger", "Refueling", _chargeResult getOrDefault ["message", "Organization funds cannot cover this refuel. Refueling was not completed."]], _player] call CFUNC(targetEvent); + _self call ["notify", [_player, "danger", "Refueling", _chargeResult getOrDefault ["message", "Organization funds cannot cover this refuel. Refueling was not completed."]]]; _self call ["rollbackFuel", [_target, _initialFuel]]; _fuelRegistry deleteAt _index; }; - [CRPC(notifications,recieveNotification), ["info", "Refueling", format ["Refueling complete: %1L
Organization charged $%2.", _formattedTotalLiters, _formattedTotalCost]], _player] call CFUNC(targetEvent); + _self call ["notify", [_player, "info", "Refueling", format ["Refueling complete: %1L
Organization charged $%2.", _formattedTotalLiters, _formattedTotalCost]]]; _fuelRegistry deleteAt _index; }] ]]; diff --git a/arma/server/addons/economy/functions/fnc_initMEconomyStore.sqf b/arma/server/addons/economy/functions/fnc_initMEconomyStore.sqf index 217fe97..9024a48 100644 --- a/arma/server/addons/economy/functions/fnc_initMEconomyStore.sqf +++ b/arma/server/addons/economy/functions/fnc_initMEconomyStore.sqf @@ -4,7 +4,7 @@ * File: fnc_initMEconomyStore.sqf * Author: IDSolutions * Date: 2025-12-20 - * Last Update: 2026-04-18 + * Last Update: 2026-05-15 * Public: No * * Description: @@ -66,6 +66,30 @@ GVAR(MEconomyStore) = createHashMapObject [[ } forEach _mSpawns; }; }], + ["notify", { + params [["_unit", objNull, [objNull]], ["_type", "info", [""]], ["_title", "Medical Billing", [""]], ["_message", "", [""]]]; + + if (isNull _unit || { _message isEqualTo "" }) exitWith { false }; + + private _uid = getPlayerUID _unit; + if (_uid isEqualTo "") exitWith { false }; + if (isNil QEGVAR(common,EventBus)) then { + [CRPC(notifications,recieveNotification), [_type, _title, _message], _unit] call CFUNC(targetEvent); + } else { + EGVAR(common,EventBus) call ["emit", [ + "notification.requested", + createHashMapFromArray [ + ["uids", [_uid]], + ["notificationType", _type], + ["title", _title], + ["message", _message] + ], + createHashMapFromArray [["source", "economy"]] + ]]; + }; + + true + }], ["chargePlayer", { params [["_uid", "", [""]], ["_amount", 0, [0]]]; @@ -118,7 +142,18 @@ GVAR(MEconomyStore) = createHashMapObject [[ private _patch = _charge getOrDefault ["patch", createHashMap]; if (_patch isNotEqualTo createHashMap && { !(isNil QEGVAR(bank,BankMessenger)) }) then { - EGVAR(bank,BankMessenger) call ["sendAccountSync", [_uid, _patch]]; + if (isNil QEGVAR(common,EventBus)) then { + EGVAR(bank,BankMessenger) call ["sendAccountSync", [_uid, _patch]]; + } else { + EGVAR(common,EventBus) call ["emit", [ + "bank.account.sync.requested", + createHashMapFromArray [ + ["uid", _uid], + ["account", +_patch] + ], + createHashMapFromArray [["source", "economy"]] + ]]; + }; }; private _savedAccount = EGVAR(bank,BankStore) call ["save", [_uid]]; @@ -144,27 +179,27 @@ GVAR(MEconomyStore) = createHashMapObject [[ private _personalCharge = _self call ["chargePlayer", [_uid, _healCost]]; if (_personalCharge getOrDefault ["success", false]) exitWith { private _sourceLabel = ["cash", "bank"] select ((_personalCharge getOrDefault ["source", "bank"]) isEqualTo "bank"); - [CRPC(notifications,recieveNotification), ["info", "Medical Billing", format ["Medical service charged $%1 from your %2.", [_healCost] call EFUNC(common,formatNumber), _sourceLabel]], _unit] call CFUNC(targetEvent); + _self call ["notify", [_unit, "info", "Medical Billing", format ["Medical service charged $%1 from your %2.", [_healCost] call EFUNC(common,formatNumber), _sourceLabel]]]; [CRPC(actor,onActorHealed), [], _unit] call CFUNC(targetEvent); }; if !(_personalCharge getOrDefault ["fallbackEligible", false]) exitWith { private _message = _personalCharge getOrDefault ["message", "Personal funds could not be charged for medical service."]; - [CRPC(notifications,recieveNotification), ["danger", "Medical Billing", _message], _unit] call CFUNC(targetEvent); + _self call ["notify", [_unit, "danger", "Medical Billing", _message]]; }; if (isNil QGVAR(SEconomyStore)) exitWith { ["ERROR", "Service economy store unavailable for medical organization fallback charge.", nil, nil] call EFUNC(common,log); - [CRPC(notifications,recieveNotification), ["danger", "Medical Billing", "Organization billing is unavailable. Medical service cannot complete."], _unit] call CFUNC(targetEvent); + _self call ["notify", [_unit, "danger", "Medical Billing", "Organization billing is unavailable. Medical service cannot complete."]]; }; private _chargeResult = GVAR(SEconomyStore) call ["chargeOrg", [_unit, _healCost, "Medical", true]]; if !(_chargeResult getOrDefault ["success", false]) exitWith { private _message = _chargeResult getOrDefault ["message", "Organization funds cannot cover this medical service."]; - [CRPC(notifications,recieveNotification), ["danger", "Medical Billing", _message], _unit] call CFUNC(targetEvent); + _self call ["notify", [_unit, "danger", "Medical Billing", _message]]; }; - [CRPC(notifications,recieveNotification), ["info", "Medical Billing", format ["Personal funds could not cover medical service. Organization charged $%1; repay it through your organization credit line.", [_healCost] call EFUNC(common,formatNumber)]], _unit] call CFUNC(targetEvent); + _self call ["notify", [_unit, "info", "Medical Billing", format ["Personal funds could not cover medical service. Organization charged $%1; repay it through your organization credit line.", [_healCost] call EFUNC(common,formatNumber)]]]; [CRPC(actor,onActorHealed), [], _unit] call CFUNC(targetEvent); }], ["onRespawn", { diff --git a/arma/server/addons/economy/functions/fnc_initSEconomyStore.sqf b/arma/server/addons/economy/functions/fnc_initSEconomyStore.sqf index 52c6454..72bcc13 100644 --- a/arma/server/addons/economy/functions/fnc_initSEconomyStore.sqf +++ b/arma/server/addons/economy/functions/fnc_initSEconomyStore.sqf @@ -4,7 +4,7 @@ * File: fnc_initSEconomyStore.sqf * Author: IDSolutions * Date: 2025-12-20 - * Last Update: 2026-04-18 + * Last Update: 2026-05-15 * Public: No * * Description: @@ -34,7 +34,22 @@ GVAR(SEconomyStore) = createHashMapObject [[ if (isNull _unit || { _message isEqualTo "" }) exitWith { false }; - [CRPC(notifications,recieveNotification), [_type, _title, _message], _unit] call CFUNC(targetEvent); + private _uid = getPlayerUID _unit; + if (_uid isEqualTo "") exitWith { false }; + if (isNil QEGVAR(common,EventBus)) then { + [CRPC(notifications,recieveNotification), [_type, _title, _message], _unit] call CFUNC(targetEvent); + } else { + EGVAR(common,EventBus) call ["emit", [ + "notification.requested", + createHashMapFromArray [ + ["uids", [_uid]], + ["notificationType", _type], + ["title", _title], + ["message", _message] + ], + createHashMapFromArray [["source", "economy"]] + ]]; + }; true }], ["syncOrgPatch", { @@ -43,12 +58,24 @@ GVAR(SEconomyStore) = createHashMapObject [[ private _patch = _result getOrDefault ["patch", createHashMap]; if ((keys _patch) isEqualTo []) exitWith { false }; - { - private _memberPlayer = [_x] call EFUNC(common,getPlayer); - if (_memberPlayer isNotEqualTo objNull) then { - [CRPC(org,responseSyncOrg), [_patch], _memberPlayer] call CFUNC(targetEvent); - }; - } forEach (_result getOrDefault ["memberUids", []]); + private _memberUids = +(_result getOrDefault ["memberUids", []]); + if (isNil QEGVAR(common,EventBus)) then { + { + private _memberPlayer = [_x] call EFUNC(common,getPlayer); + if (_memberPlayer isNotEqualTo objNull) then { + [CRPC(org,responseSyncOrg), [_patch], _memberPlayer] call CFUNC(targetEvent); + }; + } forEach _memberUids; + } else { + EGVAR(common,EventBus) call ["emit", [ + "org.sync.requested", + createHashMapFromArray [ + ["memberUids", _memberUids], + ["patch", +_patch] + ], + createHashMapFromArray [["source", "economy"]] + ]]; + }; true }], diff --git a/arma/server/addons/garage/XEH_postInit.sqf b/arma/server/addons/garage/XEH_postInit.sqf index c45c803..8916239 100644 --- a/arma/server/addons/garage/XEH_postInit.sqf +++ b/arma/server/addons/garage/XEH_postInit.sqf @@ -1,3 +1,24 @@ #include "script_component.hpp" call FUNC(initGarage); + +if (isNil QEGVAR(common,EventBus)) then { call EFUNC(common,eventBus); }; +if (isNil QGVAR(SyncEventTokens)) then { + private _sendVGarageSync = { + params ["_event"]; + + private _uid = _event getOrDefault ["uid", ""]; + private _patch = _event getOrDefault ["patch", createHashMap]; + + if (_uid isEqualTo "" || { _patch isEqualTo createHashMap }) exitWith {}; + + private _player = [_uid] call EFUNC(common,getPlayer); + if (isNull _player) exitWith {}; + + [CRPC(garage,responseSyncVG), [_patch], _player] call CFUNC(targetEvent); + }; + + GVAR(SyncEventTokens) = [ + EGVAR(common,EventBus) call ["on", ["garage.vgarage.sync.requested", _sendVGarageSync, "garage.vgarage.sync"]] + ]; +}; diff --git a/arma/server/addons/locker/XEH_postInit.sqf b/arma/server/addons/locker/XEH_postInit.sqf index 4125916..e0e1969 100644 --- a/arma/server/addons/locker/XEH_postInit.sqf +++ b/arma/server/addons/locker/XEH_postInit.sqf @@ -1,3 +1,39 @@ #include "script_component.hpp" call FUNC(initLocker); + +if (isNil QEGVAR(common,EventBus)) then { call EFUNC(common,eventBus); }; +if (isNil QGVAR(SyncEventTokens)) then { + private _sendLockerSync = { + params ["_event"]; + + private _uid = _event getOrDefault ["uid", ""]; + private _patch = _event getOrDefault ["patch", createHashMap]; + + if (_uid isEqualTo "" || { _patch isEqualTo createHashMap }) exitWith {}; + + private _player = [_uid] call EFUNC(common,getPlayer); + if (isNull _player) exitWith {}; + + [CRPC(locker,responseSyncLocker), [_patch], _player] call CFUNC(targetEvent); + }; + + private _sendVASync = { + params ["_event"]; + + private _uid = _event getOrDefault ["uid", ""]; + private _patch = _event getOrDefault ["patch", createHashMap]; + + if (_uid isEqualTo "" || { _patch isEqualTo createHashMap }) exitWith {}; + + private _player = [_uid] call EFUNC(common,getPlayer); + if (isNull _player) exitWith {}; + + [CRPC(locker,responseSyncVA), [_patch], _player] call CFUNC(targetEvent); + }; + + GVAR(SyncEventTokens) = [ + EGVAR(common,EventBus) call ["on", ["locker.sync.requested", _sendLockerSync, "locker.sync"]], + EGVAR(common,EventBus) call ["on", ["locker.va.sync.requested", _sendVASync, "locker.va.sync"]] + ]; +}; diff --git a/arma/server/addons/org/XEH_preInit.sqf b/arma/server/addons/org/XEH_preInit.sqf index 8469bcc..933f557 100644 --- a/arma/server/addons/org/XEH_preInit.sqf +++ b/arma/server/addons/org/XEH_preInit.sqf @@ -6,6 +6,67 @@ PREP_RECOMPILE_END; // private _category = [QUOTE(MOD_NAME), LLSTRING(displayName)]; +GVAR(RequestOrgSync) = { + params [["_memberUids", [], [[]]], ["_patch", createHashMap, [createHashMap]]]; + + if (_memberUids isEqualTo []) exitWith {}; + + if (isNil QEGVAR(common,EventBus)) exitWith { + { + private _memberPlayer = [_x] call EFUNC(common,getPlayer); + if (_memberPlayer isNotEqualTo objNull) then { + [CRPC(org,responseSyncOrg), [_patch], _memberPlayer] call CFUNC(targetEvent); + }; + } forEach _memberUids; + }; + + EGVAR(common,EventBus) call ["emit", [ + "org.sync.requested", + createHashMapFromArray [ + ["memberUids", +_memberUids], + ["patch", +_patch] + ], + createHashMapFromArray [["source", "org"]] + ]]; +}; + +GVAR(RequestNotification) = { + params [ + ["_uids", [], [[]]], + ["_type", "info", [""]], + ["_title", "", [""]], + ["_message", "", [""]], + ["_duration", -1, [0]] + ]; + + if (_uids isEqualTo [] || { _message isEqualTo "" }) exitWith {}; + + if (isNil QEGVAR(common,EventBus)) exitWith { + private _params = [_type, _title, _message]; + if (_duration >= 0) then { _params pushBack _duration; }; + { + private _player = [_x] call EFUNC(common,getPlayer); + if (_player isNotEqualTo objNull) then { + [CRPC(notifications,recieveNotification), _params, _player] call CFUNC(targetEvent); + }; + } forEach _uids; + }; + + private _payload = createHashMapFromArray [ + ["uids", +_uids], + ["notificationType", _type], + ["title", _title], + ["message", _message] + ]; + if (_duration >= 0) then { _payload set ["duration", _duration]; }; + + EGVAR(common,EventBus) call ["emit", [ + "notification.requested", + _payload, + createHashMapFromArray [["source", "org"]] + ]]; +}; + [QGVAR(requestInitOrg), { params [["_uid", "", [""]]]; @@ -71,12 +132,9 @@ PREP_RECOMPILE_END; if (_result getOrDefault ["success", false]) then { private _patch = _result getOrDefault ["patch", createHashMap]; - { - private _memberPlayer = [_x] call EFUNC(common,getPlayer); - if (_memberPlayer isNotEqualTo objNull && { _patch isNotEqualTo createHashMap }) then { - [CRPC(org,responseSyncOrg), [_patch], _memberPlayer] call CFUNC(targetEvent); - }; - } forEach (_result getOrDefault ["memberUids", []]); + if (_patch isNotEqualTo createHashMap) then { + [_result getOrDefault ["memberUids", []], _patch] call GVAR(RequestOrgSync); + }; }; [CRPC(org,responseCreditLine), [createHashMapFromArray [ @@ -100,14 +158,9 @@ PREP_RECOMPILE_END; private _result = GVAR(OrgStore) call ["runPayroll", [_uid, _amount]]; if (_result getOrDefault ["success", false]) then { - { - private _memberPlayer = [_x] call EFUNC(common,getPlayer); - if (_memberPlayer isNotEqualTo objNull) then { - [CRPC(org,responseSyncOrg), [createHashMap], _memberPlayer] call CFUNC(targetEvent); - }; - } forEach (_result getOrDefault ["memberUids", []]); - - [CRPC(org,responseSyncOrg), [createHashMap], _requester] call CFUNC(targetEvent); + private _syncTargets = +(_result getOrDefault ["memberUids", []]); + _syncTargets pushBackUnique _uid; + [_syncTargets, createHashMap] call GVAR(RequestOrgSync); }; [CRPC(org,responseTreasuryAction), [createHashMapFromArray [ @@ -133,14 +186,9 @@ PREP_RECOMPILE_END; private _result = GVAR(OrgStore) call ["transferFunds", [_uid, _memberUid, _memberName, _amount]]; if (_result getOrDefault ["success", false]) then { - { - private _memberPlayer = [_x] call EFUNC(common,getPlayer); - if (_memberPlayer isNotEqualTo objNull) then { - [CRPC(org,responseSyncOrg), [createHashMap], _memberPlayer] call CFUNC(targetEvent); - }; - } forEach (_result getOrDefault ["memberUids", []]); - - [CRPC(org,responseSyncOrg), [createHashMap], _requester] call CFUNC(targetEvent); + private _syncTargets = +(_result getOrDefault ["memberUids", []]); + _syncTargets pushBackUnique _uid; + [_syncTargets, createHashMap] call GVAR(RequestOrgSync); }; [CRPC(org,responseTreasuryAction), [createHashMapFromArray [ @@ -161,22 +209,9 @@ PREP_RECOMPILE_END; private _result = GVAR(OrgStore) call ["inviteMember", [_uid, _targetUid, _targetName]]; if (_result getOrDefault ["success", false]) then { - { - private _memberPlayer = [_x] call EFUNC(common,getPlayer); - if (_memberPlayer isNotEqualTo objNull) then { - [CRPC(org,responseSyncOrg), [createHashMap], _memberPlayer] call CFUNC(targetEvent); - }; - } forEach [_uid, _result getOrDefault ["targetUid", _targetUid]]; - - private _targetPlayer = [_result getOrDefault ["targetUid", _targetUid]] call EFUNC(common,getPlayer); - if (_targetPlayer isNotEqualTo objNull) then { - [CRPC(notifications,recieveNotification), [ - "info", - "Organization Invite", - "You received an organization invite. Open the organization portal to accept or decline it.", - 7000 - ], _targetPlayer] call CFUNC(targetEvent); - }; + private _resolvedTargetUid = _result getOrDefault ["targetUid", _targetUid]; + [[_uid, _resolvedTargetUid], createHashMap] call GVAR(RequestOrgSync); + [[_resolvedTargetUid], "info", "Organization Invite", "You received an organization invite. Open the organization portal to accept or decline it.", 7000] call GVAR(RequestNotification); }; [CRPC(org,responseInviteOrg), [createHashMapFromArray [ @@ -215,12 +250,7 @@ PREP_RECOMPILE_END; } forEach (_orgData getOrDefault ["members", createHashMap]); } forEach (_result getOrDefault ["affectedOrgIds", []]); - { - private _memberPlayer = [_x] call EFUNC(common,getPlayer); - if (_memberPlayer isNotEqualTo objNull) then { - [CRPC(org,responseSyncOrg), [createHashMap], _memberPlayer] call CFUNC(targetEvent); - }; - } forEach _syncTargets; + [_syncTargets, createHashMap] call GVAR(RequestOrgSync); }; [CRPC(org,responseInviteDecision), [createHashMapFromArray [ @@ -255,12 +285,7 @@ PREP_RECOMPILE_END; } forEach (_orgData getOrDefault ["members", createHashMap]); } forEach (_result getOrDefault ["affectedOrgIds", []]); - { - private _memberPlayer = [_x] call EFUNC(common,getPlayer); - if (_memberPlayer isNotEqualTo objNull) then { - [CRPC(org,responseSyncOrg), [createHashMap], _memberPlayer] call CFUNC(targetEvent); - }; - } forEach _syncTargets; + [_syncTargets, createHashMap] call GVAR(RequestOrgSync); }; [CRPC(org,responseInviteDecision), [createHashMapFromArray [ @@ -291,7 +316,8 @@ PREP_RECOMPILE_END; private _notificationParams = _result getOrDefault ["notification", []]; if (_notificationParams isEqualType [] && { count _notificationParams > 0 }) then { - [CRPC(notifications,recieveNotification), _notificationParams, _player] call CFUNC(targetEvent); + private _duration = if ((count _notificationParams) > 3) then { _notificationParams # 3 } else { -1 }; + [[_uid], _notificationParams # 0, _notificationParams # 1, _notificationParams # 2, _duration] call GVAR(RequestNotification); }; }; @@ -344,7 +370,8 @@ PREP_RECOMPILE_END; private _notificationParams = _member getOrDefault ["notification", []]; if (_notificationParams isEqualType [] && { count _notificationParams > 0 }) then { - [CRPC(notifications,recieveNotification), _notificationParams, _memberPlayer] call CFUNC(targetEvent); + private _duration = if ((count _notificationParams) > 3) then { _notificationParams # 3 } else { -1 }; + [[_memberUid], _notificationParams # 0, _notificationParams # 1, _notificationParams # 2, _duration] call GVAR(RequestNotification); }; }; } forEach (_result getOrDefault ["members", []]); diff --git a/arma/server/addons/org/functions/fnc_initOrgStore.sqf b/arma/server/addons/org/functions/fnc_initOrgStore.sqf index be41bab..9764bb9 100644 --- a/arma/server/addons/org/functions/fnc_initOrgStore.sqf +++ b/arma/server/addons/org/functions/fnc_initOrgStore.sqf @@ -4,7 +4,7 @@ * File: fnc_initOrgStore.sqf * Author: IDSolutions * Date: 2026-02-13 - * Last Update: 2026-04-18 + * Last Update: 2026-05-15 * Public: Yes * * Description: @@ -748,10 +748,34 @@ GVAR(OrgBaseStore) = compileFinal createHashMapFromArray [ private _currentBank = _account getOrDefault ["bank", 0]; private _patch = EGVAR(bank,BankStore) call ["mset", [_memberUid, createHashMapFromArray [["bank", _currentBank + _amount]], true]]; if (_patch isEqualTo createHashMap) exitWith { false }; + if (isNil QEGVAR(common,EventBus)) then { + EGVAR(bank,BankMessenger) call ["sendAccountSync", [_memberUid, _patch]]; + } else { + EGVAR(common,EventBus) call ["emit", [ + "bank.account.sync.requested", + createHashMapFromArray [ + ["uid", _memberUid], + ["account", +_patch] + ], + createHashMapFromArray [["source", "org"]] + ]]; + }; - EGVAR(bank,BankMessenger) call ["sendAccountSync", [_memberUid, _patch]]; if (_message isNotEqualTo "") then { - EGVAR(bank,BankMessenger) call ["sendNotification", [_memberUid, "info", "Treasury", _message]]; + if (isNil QEGVAR(common,EventBus)) then { + EGVAR(bank,BankMessenger) call ["sendNotification", [_memberUid, "info", "Treasury", _message]]; + } else { + EGVAR(common,EventBus) call ["emit", [ + "notification.requested", + createHashMapFromArray [ + ["uids", [_memberUid]], + ["notificationType", "info"], + ["title", "Treasury"], + ["message", _message] + ], + createHashMapFromArray [["source", "org"]] + ]]; + }; }; true diff --git a/arma/server/addons/store/functions/fnc_initStorefrontStore.sqf b/arma/server/addons/store/functions/fnc_initStorefrontStore.sqf index 9b43e46..7b0edea 100644 --- a/arma/server/addons/store/functions/fnc_initStorefrontStore.sqf +++ b/arma/server/addons/store/functions/fnc_initStorefrontStore.sqf @@ -238,19 +238,86 @@ GVAR(StorefrontBaseStore) = compileFinal createHashMapFromArray [ private _vgPatch = _result getOrDefault ["vgaragePatch", createHashMap]; private _bankPatch = _result getOrDefault ["bankPatch", createHashMap]; private _orgPatch = _result getOrDefault ["orgPatch", createHashMap]; + private _uid = getPlayerUID _player; - if (keys _lockerPatch isNotEqualTo []) then { [CRPC(locker,responseSyncLocker), [_lockerPatch], _player] call CFUNC(targetEvent); }; - if (keys _vaPatch isNotEqualTo []) then { [CRPC(locker,responseSyncVA), [_vaPatch], _player] call CFUNC(targetEvent); }; - if (keys _vgPatch isNotEqualTo []) then { [CRPC(garage,responseSyncVG), [_vgPatch], _player] call CFUNC(targetEvent); }; - if (keys _bankPatch isNotEqualTo []) then { [CRPC(bank,responseSyncBank), [_bankPatch], _player] call CFUNC(targetEvent); }; + if (keys _lockerPatch isNotEqualTo []) then { + if (isNil QEGVAR(common,EventBus)) then { + [CRPC(locker,responseSyncLocker), [_lockerPatch], _player] call CFUNC(targetEvent); + } else { + EGVAR(common,EventBus) call ["emit", [ + "locker.sync.requested", + createHashMapFromArray [ + ["uid", _uid], + ["patch", +_lockerPatch] + ], + createHashMapFromArray [["source", "store"]] + ]]; + }; + }; + + if (keys _vaPatch isNotEqualTo []) then { + if (isNil QEGVAR(common,EventBus)) then { + [CRPC(locker,responseSyncVA), [_vaPatch], _player] call CFUNC(targetEvent); + } else { + EGVAR(common,EventBus) call ["emit", [ + "locker.va.sync.requested", + createHashMapFromArray [ + ["uid", _uid], + ["patch", +_vaPatch] + ], + createHashMapFromArray [["source", "store"]] + ]]; + }; + }; + + if (keys _vgPatch isNotEqualTo []) then { + if (isNil QEGVAR(common,EventBus)) then { + [CRPC(garage,responseSyncVG), [_vgPatch], _player] call CFUNC(targetEvent); + } else { + EGVAR(common,EventBus) call ["emit", [ + "garage.vgarage.sync.requested", + createHashMapFromArray [ + ["uid", _uid], + ["patch", +_vgPatch] + ], + createHashMapFromArray [["source", "store"]] + ]]; + }; + }; + if (keys _bankPatch isNotEqualTo []) then { + if (isNil QEGVAR(common,EventBus)) then { + [CRPC(bank,responseSyncBank), [_bankPatch], _player] call CFUNC(targetEvent); + } else { + EGVAR(common,EventBus) call ["emit", [ + "bank.account.sync.requested", + createHashMapFromArray [ + ["uid", _uid], + ["account", +_bankPatch] + ], + createHashMapFromArray [["source", "store"]] + ]]; + }; + }; if (keys _orgPatch isNotEqualTo []) then { - { - private _memberPlayer = [_x] call EFUNC(common,getPlayer); - if (_memberPlayer isNotEqualTo objNull) then { - [CRPC(org,responseSyncOrg), [_orgPatch], _memberPlayer] call CFUNC(targetEvent); - }; - } forEach (_result getOrDefault ["orgTargetUids", []]); + private _orgTargetUids = +(_result getOrDefault ["orgTargetUids", []]); + if (isNil QEGVAR(common,EventBus)) then { + { + private _memberPlayer = [_x] call EFUNC(common,getPlayer); + if (_memberPlayer isNotEqualTo objNull) then { + [CRPC(org,responseSyncOrg), [_orgPatch], _memberPlayer] call CFUNC(targetEvent); + }; + } forEach _orgTargetUids; + } else { + EGVAR(common,EventBus) call ["emit", [ + "org.sync.requested", + createHashMapFromArray [ + ["memberUids", _orgTargetUids], + ["patch", +_orgPatch] + ], + createHashMapFromArray [["source", "store"]] + ]]; + }; }; true