#include "..\script_component.hpp" /* * File: fnc_initPayloadBuilder.sqf * Author: IDSolutions * Date: 2026-04-02 * Public: No * * Description: * Initializes the bank payload builder for session/view shaping. * Keeps hydrate/context construction out of BankStore so the store * can focus on extension-backed account operations. */ #pragma hemtt ignore_variables ["_self"] GVAR(BankPayloadBuilder) = createHashMapObject [[ ["#type", "BankPayloadBuilder"], ["buildOperationContext", compileFinal { params [["_uid", "", [""]], ["_modeOverride", "", [""]]]; private _session = GVAR(BankSessionManager) call ["getSessionState", [_uid]]; private _mode = if (_modeOverride isEqualTo "") then { _session getOrDefault ["mode", "bank"] } else { GVAR(BankSessionManager) call ["resolveMode", [_modeOverride]] }; createHashMapFromArray [ ["mode", _mode], ["atmAuthorized", _session getOrDefault ["atmAuthorized", false]] ] }], ["buildTransferContext", compileFinal { params [["_uid", "", [""]], ["_from", "", [""]]]; private _context = _self call ["buildOperationContext", [_uid]]; _context set ["fromField", _from]; _context }], ["buildCheckoutContext", compileFinal { params [["_source", "bank", [""]], ["_commit", false, [false]]]; createHashMapFromArray [ ["commit", _commit], ["sourceField", toLowerANSI _source] ] }], ["resolveOrgState", compileFinal { params [["_uid", "", [""]]]; private _defaultState = createHashMapFromArray [["funds", 0], ["name", ""]]; if (_uid isEqualTo "") exitWith { _defaultState }; private _actor = EGVAR(actor,Registry) getOrDefault [_uid, createHashMap]; private _orgID = _actor getOrDefault ["organization", "default"]; if (_orgID isEqualTo "") then { _orgID = "default"; }; private _org = EGVAR(org,OrgStore) call ["loadById", [_orgID]]; if (_org isEqualTo createHashMap) then { _org = EGVAR(org,OrgStore) call ["loadById", ["default"]]; }; if (_org isEqualTo createHashMap) exitWith { _defaultState }; createHashMapFromArray [["funds", _org getOrDefault ["funds", 0]], ["name", _org getOrDefault ["name", ""]]] }], ["buildTransferTargets", compileFinal { params [["_sourceUid", "", [""]]]; private _targets = []; { if (isNull _x) then { continue; }; private _targetUid = getPlayerUID _x; private _targetName = name _x; if (_targetUid isEqualTo "" || { _targetUid isEqualTo _sourceUid } || { _targetName isEqualTo "" }) then { continue; }; _targets pushBack (createHashMapFromArray [["name", _targetName], ["uid", _targetUid]]); } forEach allPlayers; private _targetPairs = _targets apply { [toLowerANSI (_x getOrDefault ["name", ""]), _x] }; _targetPairs sort true; _targetPairs apply { _x param [1, createHashMap] } }], ["buildHydratePayload", compileFinal { params [["_uid", "", [""]], ["_mode", "", [""]], ["_resetAuthorization", false, [false]]]; if (_uid isEqualTo "") exitWith { createHashMap }; private _account = GVAR(BankStore) call ["get", [_uid, ""]]; if (_account isEqualTo createHashMap) then { _account = GVAR(BankStore) call ["init", [_uid]]; }; if (_account isEqualTo createHashMap) exitWith { createHashMap }; private _session = GVAR(BankSessionManager) call ["syncSessionMode", [_uid, _mode, _resetAuthorization]]; private _orgState = _self call ["resolveOrgState", [_uid]]; private _player = [_uid] call EFUNC(common,getPlayer); private _playerName = if (isNull _player) then { _account getOrDefault ["name", "Unknown"] } else { name _player }; createHashMapFromArray [ ["session", createHashMapFromArray [ ["atmAuthorized", _session getOrDefault ["atmAuthorized", false]], ["mode", _session getOrDefault ["mode", "bank"]], ["orgFunds", _orgState getOrDefault ["funds", 0]], ["orgName", _orgState getOrDefault ["name", ""]], ["playerName", _playerName], ["transferTargets", _self call ["buildTransferTargets", [_uid]]], ["uid", _uid] ]], ["account", GVAR(BankMessenger) call ["buildAccountPatch", [_account]]] ] }] ]]; GVAR(BankPayloadBuilder)