# Forge Database Module ## Overview The Database module provides a comprehensive data persistence system for the Forge client. It includes features for managing player data, organization information, and game state persistence using the ArmaDragonflyClient database system. ## Dependencies - forge_client_main - ArmaDragonflyClient ## Authors - J. Schmidt - Creedcoder - IDSolutions ## Features ### Database System 1. **Server Communication** (`fnc_requestServerDB.sqf`) - Handles client-server database communication - Manages asynchronous database operations - Provides callback support for data retrieval - Ensures data consistency across clients 2. **Data Management** - **Player Data** - Armory unlocks - Garage unlocks - Locker contents - Vehicle inventory - Financial information - Contact details - Organization membership - Player statistics - Equipment loadouts - Position and state - **Organization Data** - Member information - Asset tracking - Financial records - Reputation system - Activity logs - Creation timestamps - Modification history 3. **Persistence Features** - Automatic data saving - Periodic state synchronization - Data validation and sanitization - Error recovery mechanisms - Transaction logging - Data versioning ### Data Operations 1. **Storage Operations** - Hash-based storage (HSET) - Bulk data operations - Atomic transactions - Data serialization - String normalization 2. **Retrieval Operations** - Hash-based retrieval (HGET) - Bulk data loading - Data deserialization - Error handling - Default value management 3. **Synchronization** - Client-server sync - Real-time updates - Conflict resolution - State verification - Data integrity checks ## Event Handlers The module uses several event handlers for initialization and execution: - `XEH_preInit.sqf`: Pre-initialization setup - `XEH_postInit.sqf`: Post-initialization tasks - `XEH_preStart.sqf`: Pre-start configuration - `XEH_postInit_client.sqf`: Client-specific post-initialization - `XEH_preInit_server.sqf`: Server-specific pre-initialization ## Usage To use the database module: 1. Ensure the module is properly loaded in your mission 2. Initialize database connections 3. Perform database operations: ```sqf // Request data from server ["hgetall", "Hello World!", { systemChat format ["Message: %1", _this]; }] call forge_db_fnc_requestServerDB; // Save player data [] call forge_client_init_fnc_playerDBSave; // Load player data [] call forge_client_init_fnc_playerDBLoad; ``` 4. Handle database callbacks and responses ## Debugging Debug mode can be enabled by uncommenting the following in `script_component.hpp`: ```cpp #define DEBUG_MODE_FULL ``` ## Version Information Version information is managed through the main Forge client system configuration. ## Technical Details - Asynchronous database operations - Callback-based response handling - Data serialization and normalization - Error handling and recovery - Transaction logging - State management - Data validation - Conflict resolution - Real-time synchronization - Bulk operation support - Atomic transactions - Data versioning - Integrity verification