- 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
341 lines
13 KiB
Plaintext
341 lines
13 KiB
Plaintext
#include "script_component.hpp"
|
|
|
|
[{
|
|
GETVAR(player,FORGE_isLoaded,false)
|
|
}, {
|
|
[QGVAR(initPhone), []] call CFUNC(localEvent);
|
|
}] call CFUNC(waitUntilAndExecute);
|
|
|
|
if (isNil QGVAR(PhoneRepository)) then { [] call FUNC(initRepository); };
|
|
|
|
[QGVAR(initPhone), {
|
|
GVAR(PhoneRepository) call ["init", []];
|
|
|
|
["forge_server_phone_requestInitPhone", [getPlayerUID player, createHashMap]] call CFUNC(serverEvent);
|
|
["forge_server_phone_requestRefreshContacts", [getPlayerUID player, player]] call CFUNC(serverEvent);
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(responseSyncPhone), {
|
|
params [["_data", createHashMap, [createHashMap]]];
|
|
|
|
GVAR(PhoneRepository) call ["sync", [_data]];
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
// Contact Management Response Events
|
|
[QGVAR(responseAddContact), {
|
|
params [["_success", false, [false]]];
|
|
|
|
if (_success) then {
|
|
EGVAR(notifications,NotificationService) call ["create", ["success", "Contact Added", "Contact added successfully", 3000]];
|
|
[QGVAR(refreshUI), []] call CFUNC(localEvent);
|
|
} else {
|
|
EGVAR(notifications,NotificationService) call ["create", ["danger", "Contact Error", "Failed to add contact", 4000]];
|
|
};
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(responseAddContactByPhone), {
|
|
params [["_success", false, [false]], ["_phoneNumber", "", [""]]];
|
|
|
|
if (_success) then {
|
|
EGVAR(notifications,NotificationService) call ["create", ["success", "Contact Added", format ["Contact with phone %1 added successfully", _phoneNumber], 3000]];
|
|
[QGVAR(refreshUI), []] call CFUNC(localEvent);
|
|
} else {
|
|
EGVAR(notifications,NotificationService) call ["create", ["warning", "Contact Not Found", format ["Player with phone %1 not found", _phoneNumber], 4000]];
|
|
};
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(responseAddContactByEmail), {
|
|
params [["_success", false, [false]], ["_email", "", [""]]];
|
|
|
|
if (_success) then {
|
|
EGVAR(notifications,NotificationService) call ["create", ["success", "Contact Added", format ["Contact with email %1 added successfully", _email], 3000]];
|
|
[QGVAR(refreshUI), []] call CFUNC(localEvent);
|
|
} else {
|
|
EGVAR(notifications,NotificationService) call ["create", ["warning", "Contact Not Found", format ["Player with email %1 not found", _email], 4000]];
|
|
};
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(responseRemoveContact), {
|
|
params [["_success", false, [false]], ["_contactUid", "", [""]]];
|
|
|
|
if (_success) then {
|
|
EGVAR(notifications,NotificationService) call ["create", ["success", "Contact Removed", "Contact removed successfully", 3000]];
|
|
[QGVAR(refreshUI), []] call CFUNC(localEvent);
|
|
} else {
|
|
EGVAR(notifications,NotificationService) call ["create", ["danger", "Contact Error", "Failed to remove contact", 4000]];
|
|
};
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(responseRefreshContacts), {
|
|
params [["_contacts", [], [[]]]];
|
|
|
|
diag_log format ["[FORGE:Client:Phone] Contacts refreshed: %1 contacts", count _contacts];
|
|
|
|
[QGVAR(updateContacts), [_contacts]] call CFUNC(localEvent);
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(responseGetContacts), {
|
|
params [["_contactUids", [], [[]]]];
|
|
|
|
diag_log format ["[FORGE:Client:Phone] Got contact UIDs: %1", _contactUids];
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
// Messaging Response Events
|
|
[QGVAR(responseMessageSent), {
|
|
params [["_messageObj", createHashMap, [createHashMap]]];
|
|
|
|
diag_log format ["[FORGE:Client:Phone] Message sent: %1", _messageObj];
|
|
|
|
[QGVAR(updateMessageSent), [_messageObj]] call CFUNC(localEvent);
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(responseMessageReceived), {
|
|
params [["_messageObj", createHashMap, [createHashMap]]];
|
|
|
|
private _fromUid = _messageObj get "from";
|
|
private _message = _messageObj get "message";
|
|
private _contacts = player getVariable ["FORGE_Contacts", []];
|
|
private _senderName = "Unknown";
|
|
|
|
{
|
|
if ((_x get "uid") isEqualTo _fromUid) exitWith {
|
|
_senderName = _x get "name";
|
|
};
|
|
} forEach _contacts;
|
|
|
|
EGVAR(notifications,NotificationService) call ["create", ["info", "New Message", format ["From %1", _senderName], 4000]];
|
|
|
|
diag_log format ["[FORGE:Client:Phone] Message received from %1: %2", _fromUid, _message];
|
|
|
|
[QGVAR(updateMessageReceived), [_messageObj]] call CFUNC(localEvent);
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(responseSendMessage), {
|
|
params [["_success", false, [false]]];
|
|
|
|
if (_success) then {
|
|
EGVAR(notifications,NotificationService) call ["create", ["success", "Message Sent", "Message sent successfully", 2000]];
|
|
} else {
|
|
EGVAR(notifications,NotificationService) call ["create", ["danger", "Message Failed", "Failed to send message", 4000]];
|
|
};
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(responseGetMessages), {
|
|
params [["_messages", [], [[]]]];
|
|
|
|
diag_log format ["[FORGE:Client:Phone] Got %1 messages", count _messages];
|
|
|
|
[QGVAR(updateMessages), [_messages]] call CFUNC(localEvent);
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(responseGetMessageThread), {
|
|
params [["_messages", [], [[]]], ["_otherUid", "", [""]]];
|
|
|
|
diag_log format ["[FORGE:Client:Phone] Got message thread with %1: %2 messages", _otherUid, count _messages];
|
|
|
|
[QGVAR(updateMessageThread), [_messages, _otherUid]] call CFUNC(localEvent);
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(responseMarkMessageRead), {
|
|
params [["_success", false, [false]], ["_messageId", "", [""]]];
|
|
|
|
if (_success) then { diag_log format ["[FORGE:Client:Phone] Message %1 marked as read", _messageId]; };
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(responseMessageRead), {
|
|
params [["_messageId", "", [""]]];
|
|
|
|
diag_log format ["[FORGE:Client:Phone] Message %1 marked as read", _messageId];
|
|
|
|
[QGVAR(updateMessageRead), [_messageId]] call CFUNC(localEvent);
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(responseDeleteMessage), {
|
|
params [["_success", false, [false]], ["_messageId", "", [""]]];
|
|
|
|
if (_success) then {
|
|
diag_log format ["[FORGE:Client:Phone] Message %1 deleted", _messageId];
|
|
[QGVAR(updateMessageDeleted), [_messageId]] call CFUNC(localEvent);
|
|
} else {
|
|
EGVAR(notifications,NotificationService) call ["create", ["danger", "Message Delete Failed", "Failed to delete message", 4000]];
|
|
};
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
// Email Response Events
|
|
[QGVAR(responseEmailSent), {
|
|
params [["_emailObj", createHashMap, [createHashMap]]];
|
|
|
|
diag_log format ["[FORGE:Client:Phone] Email sent: %1", _emailObj];
|
|
|
|
[QGVAR(updateEmailSent), [_emailObj]] call CFUNC(localEvent);
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(responseEmailReceived), {
|
|
params [["_emailObj", createHashMap, [createHashMap]]];
|
|
|
|
private _fromUid = _emailObj get "from";
|
|
private _subject = _emailObj get "subject";
|
|
private _contacts = player getVariable ["FORGE_Contacts", []];
|
|
private _senderName = "Unknown";
|
|
|
|
{
|
|
if ((_x get "uid") isEqualTo _fromUid) exitWith {
|
|
_senderName = _x get "name";
|
|
};
|
|
} forEach _contacts;
|
|
|
|
EGVAR(notifications,NotificationService) call ["create", ["info", "New Email", format ["From %1: %2", _senderName, _subject], 4000]];
|
|
|
|
diag_log format ["[FORGE:Client:Phone] Email received from %1: %2", _fromUid, _subject];
|
|
|
|
[QGVAR(updateEmailReceived), [_emailObj]] call CFUNC(localEvent);
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(responseSendEmail), {
|
|
params [["_success", false, [false]]];
|
|
|
|
if (_success) then {
|
|
EGVAR(notifications,NotificationService) call ["create", ["success", "Email Sent", "Email sent successfully", 2000]];
|
|
} else {
|
|
EGVAR(notifications,NotificationService) call ["create", ["danger", "Email Failed", "Failed to send email", 4000]];
|
|
};
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(responseGetEmails), {
|
|
params [["_emails", [], [[]]]];
|
|
|
|
diag_log format ["[FORGE:Client:Phone] Got %1 emails", count _emails];
|
|
|
|
[QGVAR(updateEmails), [_emails]] call CFUNC(localEvent);
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(responseMarkEmailRead), {
|
|
params [["_success", false, [false]], ["_emailId", "", [""]]];
|
|
|
|
if (_success) then {
|
|
diag_log format ["[FORGE:Client:Phone] Email %1 marked as read", _emailId];
|
|
[QGVAR(updateEmailRead), [_emailId]] call CFUNC(localEvent);
|
|
};
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(responseEmailRead), {
|
|
params [["_emailId", "", [""]]];
|
|
|
|
diag_log format ["[FORGE:Client:Phone] Email %1 marked as read", _emailId];
|
|
|
|
[QGVAR(updateEmailRead), [_emailId]] call CFUNC(localEvent);
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(responseDeleteEmail), {
|
|
params [["_success", false, [false]], ["_emailId", "", [""]]];
|
|
|
|
if (_success) then {
|
|
diag_log format ["[FORGE:Client:Phone] Email %1 deleted", _emailId];
|
|
[QGVAR(updateEmailDeleted), [_emailId]] call CFUNC(localEvent);
|
|
} else {
|
|
EGVAR(notifications,NotificationService) call ["create", ["danger", "Email Delete Failed", "Failed to delete email", 4000]];
|
|
};
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
// Cleanup Response Events
|
|
[QGVAR(responseRemovePhone), {
|
|
params [["_success", false, [false]]];
|
|
|
|
if (_success) then { diag_log "[FORGE:Client:Phone] Phone data removed successfully"; };
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
// UI Update Events (for internal use)
|
|
[QGVAR(refreshUI), {
|
|
private _control = (uiNamespace getVariable ["RscPhone", displayNull]) displayCtrl 1001;
|
|
|
|
if (!isNull _control) then { _control ctrlWebBrowserAction ["ExecJS", "refreshContacts()"]; };
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(updateContacts), {
|
|
params [["_contacts", [], [[]]]];
|
|
|
|
private _control = (uiNamespace getVariable ["RscPhone", displayNull]) displayCtrl 1001;
|
|
|
|
if (!isNull _control) then { _control ctrlWebBrowserAction ["ExecJS", format ["updateContacts(%1)", (toJSON _contacts)]]; };
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(updateMessageSent), {
|
|
params [["_messageObj", createHashMap, [createHashMap]]];
|
|
|
|
private _control = (uiNamespace getVariable ["RscPhone", displayNull]) displayCtrl 1001;
|
|
|
|
if (!isNull _control) then { _control ctrlWebBrowserAction ["ExecJS", format ["updateMessageSent(%1)", (toJSON _messageObj)]]; };
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(updateMessageReceived), {
|
|
params [["_messageObj", createHashMap, [createHashMap]]];
|
|
|
|
private _control = (uiNamespace getVariable ["RscPhone", displayNull]) displayCtrl 1001;
|
|
|
|
if (!isNull _control) then { _control ctrlWebBrowserAction ["ExecJS", format ["updateMessageReceived(%1)", (toJSON _messageObj)]]; };
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(updateMessages), {
|
|
params [["_messages", [], [[]]]];
|
|
|
|
private _control = (uiNamespace getVariable ["RscPhone", displayNull]) displayCtrl 1001;
|
|
|
|
if (!isNull _control) then { _control ctrlWebBrowserAction ["ExecJS", format ["updateMessages(%1)", (toJSON _messages)]]; };
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(updateMessageThread), {
|
|
params [["_messages", [], [[]]], ["_otherUid", "", [""]]];
|
|
|
|
private _control = (uiNamespace getVariable ["RscPhone", displayNull]) displayCtrl 1001;
|
|
|
|
if (!isNull _control) then { _control ctrlWebBrowserAction ["ExecJS", format ["updateMessageThread(%1, %2)", (toJSON _messages), (toJSON _otherUid)]]; };
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(updateMessageDeleted), {
|
|
params [["_messageId", "", [""]]];
|
|
|
|
private _control = (uiNamespace getVariable ["RscPhone", displayNull]) displayCtrl 1001;
|
|
|
|
if (!isNull _control) then { _control ctrlWebBrowserAction ["ExecJS", format ["updateMessageDeleted(%1)", (toJSON _messageId)]]; };
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(updateEmailSent), {
|
|
params [["_emailObj", createHashMap, [createHashMap]]];
|
|
|
|
private _control = (uiNamespace getVariable ["RscPhone", displayNull]) displayCtrl 1001;
|
|
|
|
if (!isNull _control) then { _control ctrlWebBrowserAction ["ExecJS", format ["updateEmailSent(%1)", (toJSON _emailObj)]]; };
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(updateEmailReceived), {
|
|
params [["_emailObj", createHashMap, [createHashMap]]];
|
|
|
|
private _control = (uiNamespace getVariable ["RscPhone", displayNull]) displayCtrl 1001;
|
|
|
|
if (!isNull _control) then { _control ctrlWebBrowserAction ["ExecJS", format ["updateEmailReceived(%1)", (toJSON _emailObj)]]; };
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(updateEmails), {
|
|
params [["_emails", [], [[]]]];
|
|
|
|
private _control = (uiNamespace getVariable ["RscPhone", displayNull]) displayCtrl 1001;
|
|
|
|
if (!isNull _control) then { _control ctrlWebBrowserAction ["ExecJS", format ["updateEmails(%1)", (toJSON _emails)]]; };
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(updateEmailRead), {
|
|
params [["_emailId", "", [""]]];
|
|
|
|
private _control = (uiNamespace getVariable ["RscPhone", displayNull]) displayCtrl 1001;
|
|
|
|
if (!isNull _control) then { _control ctrlWebBrowserAction ["ExecJS", format ["updateEmailRead(%1)", (toJSON _emailId)]]; };
|
|
}] call CFUNC(addEventHandler);
|
|
|
|
[QGVAR(updateEmailDeleted), {
|
|
params [["_emailId", "", [""]]];
|
|
|
|
private _control = (uiNamespace getVariable ["RscPhone", displayNull]) displayCtrl 1001;
|
|
|
|
if (!isNull _control) then { _control ctrlWebBrowserAction ["ExecJS", format ["updateEmailDeleted(%1)", (toJSON _emailId)]]; };
|
|
}] call CFUNC(addEventHandler);
|