server/addons/db/functions/fnc_loadFromProfile.sqf
Jacob Schmidt 5b30efa3b0
All checks were successful
Build / Build (push) Successful in 26s
feat: Refactor database system for improved persistence and functionality
This commit refactors the database system to improve persistence, functionality, and code clarity. The key changes include:

-   **Removed direct store access:** Removed `createStore`, `getFromStore`, and `getStore` PREP macros.
-   **Centralized store management:** Introduced a central store registry (`FORGE_STORE_REG`) managed by the database interface.
-   **Namespace-based persistence:** Stores are now persisted in mission and profile namespaces instead of a global store.
-   **Simplified load/save functions:** `loadFromMission`, `loadFromProfile`, `saveToMission`, `saveToProfile`, and `saveToTemp` functions are updated to use the new namespace-based persistence. They now accept a `keyField` parameter for retrieving specific fields within a key's data.
-   **Refactored `processDBRequest`:** Updated to handle new request types and parameters, aligning with the refactored load/save functions.
-   **Improved error handling:** Added more robust error handling and logging, including checks for empty store names and missing keys.
-   **Removed client registration:** Removed client registration and cleanup logic as it's no longer needed with the new persistence model.
-   **Updated `verifyDB`:** Simplified to directly return the store registry.
-   **Updated `initDB`:** Refactored to use a HashMap object for the store interface and added more database functions.
-   **Added .gitignore entries:** Added entries for Visual Studio and other common build artifacts.
-   **Updated `loadGameState` and `saveGameState`:** Updated to support loading and saving game state to either mission or profile namespace.
2025-04-05 14:16:35 -05:00

33 lines
947 B
Plaintext

#include "..\script_component.hpp"
/*
* Function: forge_server_db_fnc_loadFromProfile
* Author: J. Schmidt
*
* Description:
* Loads data from profile namespace
*
* Arguments:
* 0: _name - Store name <STRING>
* 1: _key - Key to retrieve <STRING>
* 2: _keyField - Field of the key to retrieve <STRING>
*
* Return Value:
* Retrieved data
*/
params [["_name", "", [""]], ["_key", "", [""]], ["_keyField", "", [""]]];
if (_name isEqualTo "") exitWith { ERROR_MSG("Store name cannot be empty"); nil };
private _store = profileNamespace getVariable _name;
if (isNil "_store") exitWith { ERROR_MSG_1("Store %1 not found",_name); nil };
if (_key isEqualTo "") then { _store } else { _store get _key };
if (_keyField isNotEqualTo "") then {
private _keyData = _store get _key;
if (isNil "_keyData") exitWith { ERROR_MSG_3("KeyField %1 not found in key %2 of store %3",_keyField,_key,_name); nil };
_keyData get _keyField
};