forge/arma/client/addons/phone/functions/fnc_initRepository.sqf
Jacob Schmidt 0cd6509337 Refactor phone and task systems around repositories
- Rename phone class to repository and update client event handlers
- Split task helpers/modules/prototypes and add mission generator flow
- Add reward parsing, mission manager startup, and attack logging
2026-05-02 01:29:25 -05:00

257 lines
8.1 KiB
Plaintext

#include "..\script_component.hpp"
#pragma hemtt ignore_variables ["_self"]
/*
* Author: IDSolutions
* Initialize phone repository
*
* Arguments:
* N/A
*
* Return Value:
* Phone repository object
*
* Examples:
* [] call forge_client_phone_fnc_initRepository
*
* Public: Yes
*/
GVAR(PhoneRepository) = createHashMapObject [[
["#type", "IPhoneRepository"],
["#create", {
_self set ["uid", getPlayerUID player];
_self set ["notes", createHashMap];
_self set ["events", []];
_self set ["settings", createHashMap];
_self set ["isLoaded", false];
_self set ["lastSave", time];
private _settings = createHashMap;
_settings set ["theme", "light"];
_settings set ["notifications", true];
_settings set ["sound", true];
_settings set ["vibration", true];
_self set ["settings", _settings];
}],
["init", {
private _savedNotes = profileNamespace getVariable ["FORGE_Phone_Notes", createHashMap];
private _savedEvents = profileNamespace getVariable ["FORGE_Phone_Events", []];
private _savedSettings = profileNamespace getVariable ["FORGE_Phone_Settings", createHashMap];
_self set ["notes", _savedNotes];
_self set ["events", _savedEvents];
private _defaultSettings = _self get "settings";
{
_defaultSettings set [_x, _y];
} forEach _savedSettings;
_self set ["settings", _defaultSettings];
_self set ["isLoaded", true];
systemChat format ["Phone loaded for %1", name player];
diag_log "[FORGE:Client:Phone] Phone Repository Initialized!";
}],
["_padString", {
params [["_number", 0, [0]], ["_length", 0, [0]]];
private _str = str _number;
while { (_str select [(_length - 1), 1]) == "" } do { _str = "0" + _str };
_str
}],
["save", {
params [["_sync", false, [false]]];
profileNamespace setVariable ["FORGE_Phone_Notes", _self get "notes"];
profileNamespace setVariable ["FORGE_Phone_Events", _self get "events"];
profileNamespace setVariable ["FORGE_Phone_Settings", _self get "settings"];
if (_sync) then { saveProfileNamespace; };
_self set ["lastSave", time];
}],
["sync", {
params [["_data", createHashMap, [createHashMap]]];
if (_data isEqualTo createHashMap) exitWith { diag_log "[FORGE:Client:Phone] Empty data received for sync, skipping."; };
}],
["get", {
params [["_key", "", [""]], ["_default", nil, [[], "", 0, false, createHashMap]]];
private _settings = _self get "settings";
_settings getOrDefault [_key, _default];
}],
["addNote", {
params [["_data", createHashMap, [createHashMap]]];
if (_data isEqualTo createHashMap) exitWith { false };
private _noteId = _data get "id";
private _notes = _self get "notes";
_notes set [_noteId, _data];
_self call ["save", [true]];
diag_log format ["[FORGE:Client:Phone] Added note [ID: %1]", _noteId];
true
}],
["updateNote", {
params [["_data", createHashMap, [createHashMap]]];
private _noteId = _data get "id";
if (isNil "_noteId" || _noteId == "") exitWith { false };
private _notes = _self get "notes";
if !(_noteId in _notes) exitWith { false };
_notes set [_noteId, _data];
_self set ["notes", _notes];
_self call ["save", [true]];
diag_log format ["[FORGE:Client:Phone] Updated note [ID: %1]", _noteId];
true
}],
["deleteNote", {
params [["_noteId", "", [""]]];
if (_noteId == "") exitWith { false };
private _notes = _self get "notes";
if !(_noteId in _notes) exitWith { false };
_notes deleteAt _noteId;
_self set ["notes", _notes];
_self call ["save", [true]];
diag_log format ["[FORGE:Client:Phone] Deleted note [ID: %1]", _noteId];
true
}],
["getNote", {
params [["_noteId", "", [""]], ["_default", nil]];
private _notes = _self get "notes";
_notes getOrDefault [_noteId, _default];
}],
["getAllNotes", {
private _notes = _self get "notes";
private _notesArray = [];
{
_notesArray pushBack _y;
} forEach _notes;
_notesArray
}],
["setSetting", {
params [["_key", "", [""]], ["_value", nil]];
if (_key == "") exitWith { false };
private _settings = _self get "settings";
_settings set [_key, _value];
_self set ["settings", _settings];
_self call ["save", [true]];
true
}],
["getSetting", {
params [["_key", "", [""]], ["_default", nil]];
private _settings = _self get "settings";
_settings getOrDefault [_key, _default];
}],
["getAllSettings", {
_self get "settings";
}],
["addEvent", {
params [["_eventData", createHashMap, [createHashMap]]];
if (_eventData isEqualTo createHashMap) exitWith { false };
private _eventId = _eventData get "id";
if (isNil "_eventId" || _eventId == "") exitWith { false };
private _events = _self get "events";
private _existingIndex = _events findIf { (_x get "id") isEqualTo _eventId };
if (_existingIndex >= 0) then {
_events set [_existingIndex, _eventData];
diag_log format ["[FORGE:Client:Phone] Updated event [ID: %1]", _eventId];
} else {
_events pushBack _eventData;
diag_log format ["[FORGE:Client:Phone] Added event [ID: %1]", _eventId];
};
_self set ["events", _events];
_self call ["save", [true]];
true
}],
["updateEvent", {
params [["_eventData", createHashMap, [createHashMap]]];
private _eventId = _eventData get "id";
if (isNil "_eventId" || _eventId == "") exitWith { false };
private _events = _self get "events";
private _existingIndex = _events findIf { (_x get "id") isEqualTo _eventId };
if (_existingIndex < 0) exitWith { false };
_events set [_existingIndex, _eventData];
_self set ["events", _events];
_self call ["save", [true]];
diag_log format ["[FORGE:Client:Phone] Updated event [ID: %1]", _eventId];
true
}],
["deleteEvent", {
params [["_eventId", "", [""]]];
if (_eventId == "") exitWith { false };
private _events = _self get "events";
private _existingIndex = _events findIf { (_x get "id") isEqualTo _eventId };
if (_existingIndex < 0) exitWith { false };
_events deleteAt _existingIndex;
_self set ["events", _events];
_self call ["save", [true]];
diag_log format ["[FORGE:Client:Phone] Deleted event [ID: %1]", _eventId];
true
}],
["getEvent", {
params [["_eventId", "", [""]], ["_default", nil]];
private _events = _self get "events";
private _event = _events select { (_x get "id") isEqualTo _eventId };
if (_event isNotEqualTo []) then { _event select 0 } else { _default };
}],
["getAllEvents", {
_self get "events";
}],
["getEventsByDate", {
params [["_date", "", [""]]];
private _events = _self get "events";
_events select {
private _eventStartTime = _x get "startTime";
if (isNil "_eventStartTime") then { false } else {
private _eventDate = (_eventStartTime splitString "T") select 0;
_eventDate isEqualTo _date
};
}
}],
["clearAllEvents", {
_self set ["events", []];
_self call ["save", [true]];
diag_log "[FORGE:Client:Phone] Cleared all events";
true
}],
["getEventsForToday", {
private _currentTime = systemTimeUTC;
private _todayDate = format ["%1-%2-%3",
_currentTime select 0,
_self call ["_padString", [(_currentTime select 1), 2]],
_self call ["_padString", [(_currentTime select 2), 2]]
];
_self call ["getEventsByDate", [_todayDate]]
}]
]];
GVAR(PhoneRepository)