client/addons/org/functions/fnc_invite.sqf
Jacob Schmidt 613f05d52a Refactor: Database and Client Updates
This commit introduces several changes related to database interactions and client-side functionality:

*   **Database Response Handling:** Implements a mechanism to handle responses from server requests, specifically for database operations. This includes setting up a callback system to process results based on request IDs.
*   **Store Functionality:** Corrects a typo in the `fnc_buyItem.sqf` script, changing `EFUNC(armory,addArmoryItem)` to `EFUNC(arsenal,addArmoryItem)`.
*   **Inventory Management:** Improves the `fnc_moveInventory.sqf` script by correcting a conditional statement to ensure proper handling of inventory items.
*   **Configuration Updates:** Updates the mod configuration (`CfgMods.hpp`) to use the correct path for the mod picture.
*   **Client Initialization:** Adds a client registration call to the server during client post-initialization (`XEH_postInit_client.sqf`).
*   **Workflow Update:** Updates the build workflow to use the latest Ubuntu runner.
*   **Database Preparation:** Removes unnecessary preparations from `XEH_postInit.sqf` and `XEH_PREP.hpp`.
2025-03-28 09:46:24 -05:00

76 lines
2.4 KiB
Plaintext

#include "..\script_component.hpp"
/*
* Function: forge_client_org_fnc_invite
* Author: J. Schmidt
*
* Description:
* Sends an invitation to a player to join an organization
*
* Arguments:
* 0: _uid - Player UID <STRING>
* 1: _name - Organization name <STRING>
* 2: _targetUID - Target player's UID <STRING>
* 3: _targetName - Target player's name <STRING>
*
* Return Value:
* Success <BOOL>
*/
params [["_uid", "", [""]], ["_name", "", [""]], ["_targetUID", "", [""]], ["_targetName", "", [""]]];
if (_uid == "" || _name == "" || _targetUID == "" || _targetName == "") exitWith { TRACE_3("Invalid parameters for organization invitation",_uid,_name,_targetUID); false };
private _store = call FUNC(verifyOrgStore);
private _key = format ["%1_%2", _uid, _name];
private _org = _store call ["getByKey", [_key]];
private _timestamp = systemTimeUTC apply { if (_x < 10) then { "0" + str _x } else { str _x }};
private _dateTime = format ["%1-%2-%3_%4:%5:%6.%7", _timestamp#0, _timestamp#1, _timestamp#2, _timestamp#3, _timestamp#4, _timestamp#5, _timestamp#6];
if (isNil "_org") exitWith { TRACE_1("Organization not found",_key); false };
private _invites = _org get "invites";
private _logs = _org get "logs";
private _invite = createHashMapFromArray [
["uid", _targetUID],
["name", _targetName],
["timestamp", _dateTime],
["status", "pending"]
];
_invites set [_targetUID, _invite];
_org set ["invites", _invites];
_logs pushBack [_dateTime, "INVITE", _targetName, _targetUID];
_org set ["logs", _logs];
_store call ["post", [_uid, _name]];
[_targetUID, _uid, _name, _dateTime] spawn {
params ["_targetUID", "_ownerUID", "_orgName", "_timestamp"];
if (isRemoteExecuted && remoteExecutedOwner != 2) exitWith {};
private _target = [_targetUID] call BIS_fnc_getUnitByUID;
if !(isNull _target) then {
private _orgInvites = GETVAR(profileNamespace,FORGE_ORG_INVITES,createHashMap);
private _inviteKey = format ["%1_%2", _ownerUID, _orgName];
_orgInvites set [_inviteKey, createHashMapFromArray [
["orgName", _orgName],
["ownerUID", _ownerUID],
["timestamp", _timestamp],
["status", "pending"]
]];
SETVAR(profileNamespace,FORGE_ORG_INVITES,_orgInvites);
saveProfileNamespace;
[format ["You have been invited to join %1", _orgName]] remoteExec ["hint", _target];
};
};
true