#include "..\script_component.hpp" /* * File: fnc_initModel.sqf * Author: IDSolutions * Date: 2026-03-16 * Last Update: 2026-03-16 * Public: No * * Description: * Initializes the bank account data model. Provides default account * schema, player-based account creation, schema migration for * existing accounts, and field-level validation. * * Parameter(s): * None * * Returns: * Bank model object [HASHMAP OBJECT] * * Example(s): * call forge_server_bank_fnc_initModel */ #pragma hemtt ignore_variables ["_self"] GVAR(BankModel) = compileFinal createHashMapObject [[ ["#type", "BankModel"], ["defaults", compileFinal { private _account = createHashMap; _account set ["uid", ""]; _account set ["name", ""]; _account set ["bank", 0]; _account set ["cash", 0]; _account set ["earnings", 0]; _account set ["pin", 1234]; _account set ["transactions", []]; _account }], ["fromPlayer", compileFinal { params [["_player", objNull, [objNull]]]; if (_player isEqualTo objNull) exitWith { _self call ["defaults", []] }; private _account = _self call ["defaults", []]; _account set ["uid", getPlayerUID _player]; _account set ["name", name _player]; _account }], ["migrate", compileFinal { params [["_account", createHashMap, [createHashMap]]]; private _defaults = _self call ["defaults", []]; { if !(_x in _account) then { _account set [_x, _y]; }; } forEach _defaults; _account }], ["validate", compileFinal { params [["_account", createHashMap, [createHashMap]]]; private _uid = _account getOrDefault ["uid", ""]; private _name = _account getOrDefault ["name", ""]; private _bank = _account getOrDefault ["bank", 0]; private _cash = _account getOrDefault ["cash", 0]; private _earnings = _account getOrDefault ["earnings", 0]; private _pin = _account getOrDefault ["pin", 1234]; [_uid, _name, _bank, _cash, _earnings, _pin] try { if (_uid isEqualTo "" || !(_uid isEqualType "")) then { throw "Invalid UID!"; }; if (_name isEqualTo "" || !(_name isEqualType "")) then { throw "Invalid Name!"; }; if (_bank < 0 || !(_bank isEqualType 0)) then { throw "Invalid Bank!"; }; if (_cash < 0 || !(_cash isEqualType 0)) then { throw "Invalid Cash!"; }; if (_earnings < 0 || !(_earnings isEqualType 0)) then { throw "Invalid Earnings!"; }; if (_pin < 1000 || _pin > 9999 || !(_pin isEqualType 0)) then { throw "Invalid Pin!"; }; } catch { ["ERROR", format ["Failed to validate account %1!", _exception]] call EFUNC(common,log); false }; true }] ]]; GVAR(BankModel)