- 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
257 lines
8.1 KiB
Plaintext
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)
|