- Introduce `OrgUIBridge` to centralize UI event/request/response handling - Add leave and disband org requests with server handlers and client bridge events - Enforce portal permissions for leaving/disbanding and protect owner/self from member removal
169 lines
5.9 KiB
Plaintext
169 lines
5.9 KiB
Plaintext
#include "..\script_component.hpp"
|
|
|
|
/*
|
|
* File: fnc_initOrgClass.sqf
|
|
* Author: IDSolutions
|
|
* Date: 2026-02-13
|
|
* Last Update: 2026-02-13
|
|
* Public: No
|
|
*
|
|
* Description:
|
|
* Initializes the org class.
|
|
*
|
|
* Arguments:
|
|
* None
|
|
*
|
|
* Return Value:
|
|
* Org class object [HASHMAP OBJECT]
|
|
*
|
|
* Examples:
|
|
* call forge_client_org_fnc_initOrgClass
|
|
*/
|
|
|
|
#pragma hemtt ignore_variables ["_self"]
|
|
GVAR(OrgBaseClass) = compileFinal createHashMapFromArray [
|
|
["#type", "OrgBaseClass"],
|
|
["#create", compileFinal {
|
|
_self set ["uid", getPlayerUID player];
|
|
_self set ["org", createHashMap];
|
|
_self set ["isLoaded", false];
|
|
_self set ["lastSave", time];
|
|
|
|
private _org = createHashMap;
|
|
_org set ["id", ""];
|
|
_org set ["owner", ""];
|
|
_org set ["name", ""];
|
|
_org set ["funds", 0];
|
|
_org set ["reputation", 0];
|
|
_org set ["assets", createHashMap];
|
|
_org set ["fleet", createHashMap];
|
|
_org set ["members", createHashMap];
|
|
|
|
_self set ["org", _org];
|
|
}],
|
|
["init", compileFinal {
|
|
private _uid = _self get "uid";
|
|
private _org = _self get "org";
|
|
|
|
[SRPC(org,requestInitOrg), [_uid, _org]] call CFUNC(serverEvent);
|
|
|
|
systemChat format ["Org loaded for %1", (name player)];
|
|
diag_log "[FORGE:Client:Org] Org Class Initialized!";
|
|
}],
|
|
["save", compileFinal {
|
|
params [["_sync", false, [false]]];
|
|
|
|
private _uid = _self get "uid";
|
|
[SRPC(org,requestSaveOrg), [_uid, _sync]] call CFUNC(serverEvent);
|
|
|
|
_self set ["lastSave", time];
|
|
}],
|
|
["sync", compileFinal {
|
|
params [["_data", createHashMap, [createHashMap]], ["_jip", false, [false]]];
|
|
|
|
private _isLoaded = _self get "isLoaded";
|
|
private _org = _self get "org";
|
|
|
|
{ _org set [_x, _y]; } forEach _data;
|
|
_self set ["org", _org];
|
|
|
|
if !(_isLoaded) then { _self set ["isLoaded", true]; };
|
|
diag_log "[FORGE:Client:Org] Sync completed";
|
|
}],
|
|
["buildPortalPayload", compileFinal {
|
|
private _orgData = _self get "org";
|
|
|
|
private _name = _orgData get "name";
|
|
private _id = _orgData get "id";
|
|
private _ownerUid = _orgData get "owner";
|
|
private _funds = _orgData get "funds";
|
|
private _reputation = _orgData get "reputation";
|
|
private _assetsRaw = _orgData get "assets";
|
|
private _fleetRaw = _orgData get "fleet";
|
|
private _membersRaw = _orgData get "members";
|
|
private _isDefaultOrg = (_orgData getOrDefault ["default", false])
|
|
|| {toLower _id isEqualTo "default"}
|
|
|| {toLower _ownerUid isEqualTo "server"};
|
|
|
|
private _playerName = name player;
|
|
private _playerUid = getPlayerUID player;
|
|
private _playerVar = vehicleVarName player;
|
|
private _sessionRole = "Member";
|
|
private _sessionIsCeo = _isDefaultOrg && {_playerVar isEqualTo "ceo"};
|
|
private _ownerName = ["", "Server"] select (toLower _ownerUid isEqualTo "server");
|
|
|
|
private _membersList = [];
|
|
{
|
|
private _memberData = _y;
|
|
private _memberName = _memberData getOrDefault ["name", "Unknown"];
|
|
private _memberUid = _memberData getOrDefault ["uid", ""];
|
|
|
|
if (_memberUid isEqualTo _ownerUid && {_ownerName isEqualTo ""}) then { _ownerName = _memberName; };
|
|
if (_memberUid isEqualTo _playerUid) then { _sessionRole = "Member"; };
|
|
|
|
_membersList pushBack (createHashMapFromArray [
|
|
["uid", _memberUid],
|
|
["name", _memberName]
|
|
]);
|
|
} forEach _membersRaw;
|
|
|
|
if (_ownerName isEqualTo "" && { _ownerUid isEqualTo _playerUid }) then { _ownerName = _playerName; };
|
|
if (_ownerName isEqualTo "" && { _ownerUid isNotEqualTo "" }) then { _ownerName = "Unknown Owner"; };
|
|
if (_ownerUid isEqualTo _playerUid) then { _sessionRole = "Leader"; };
|
|
|
|
private _assetsList = [];
|
|
{
|
|
private _assetData = _y;
|
|
_assetsList pushBack (createHashMapFromArray [
|
|
["name", _assetData getOrDefault ["name", "Unknown Asset"]],
|
|
["type", _assetData getOrDefault ["type", "items"]],
|
|
["quantity", str (_assetData getOrDefault ["quantity", 0])]
|
|
]);
|
|
} forEach _assetsRaw;
|
|
|
|
private _fleetList = [];
|
|
{
|
|
private _vehicleData = _y;
|
|
_fleetList pushBack (createHashMapFromArray [
|
|
["name", _vehicleData getOrDefault ["name", "Unknown Vehicle"]],
|
|
["type", _vehicleData getOrDefault ["type", "other"]],
|
|
["status", _vehicleData getOrDefault ["status", "Unknown"]],
|
|
["damage", _vehicleData getOrDefault ["damage", "0%"]]
|
|
]);
|
|
} forEach _fleetRaw;
|
|
|
|
createHashMapFromArray [
|
|
["session", createHashMapFromArray [
|
|
["actorName", _playerName],
|
|
["actorUid", _playerUid],
|
|
["role", _sessionRole],
|
|
["ceo", _sessionIsCeo]
|
|
]],
|
|
["portalData", createHashMapFromArray [
|
|
["org", createHashMapFromArray [
|
|
["name", _name],
|
|
["tag", _id],
|
|
["owner", _ownerName],
|
|
["ownerUid", _ownerUid],
|
|
["isDefault", _isDefaultOrg]
|
|
]],
|
|
["funds", _funds],
|
|
["reputation", _reputation],
|
|
["members", _membersList],
|
|
["fleet", _fleetList],
|
|
["assets", _assetsList],
|
|
["activity", []]
|
|
]]
|
|
]
|
|
}],
|
|
["get", compileFinal {
|
|
params [["_key", "", [""]], ["_default", nil, [[], "", 0, false, createHashMap]]];
|
|
|
|
private _org = _self get "org";
|
|
_org getOrDefault [_key, _default];
|
|
}]
|
|
];
|
|
|
|
GVAR(OrgClass) = createHashMapObject [GVAR(OrgBaseClass)];
|
|
GVAR(OrgClass)
|