Merge development into master: shared Web UI runtime, bridge-driven UIs, and server-authoritative store flow #1

Merged
J.Schmidt92 merged 37 commits from development into master 2026-03-14 20:12:08 -05:00
5 changed files with 19 additions and 18 deletions
Showing only changes of commit d94cc9d8d5 - Show all commits

View File

@ -4,7 +4,7 @@
* File: fnc_handleUIEvents.sqf * File: fnc_handleUIEvents.sqf
* Author: IDSolutions * Author: IDSolutions
* Date: 2026-01-28 * Date: 2026-01-28
* Last Update: 2026-01-31 * Last Update: 2026-02-04
* Public: No * Public: No
* *
* Description: * Description:
@ -38,7 +38,7 @@ switch (_event) do {
case "actor::open::garage": { hint "Garage interaction is not yet implemented."; }; case "actor::open::garage": { hint "Garage interaction is not yet implemented."; };
case "actor::open::vgarage": { [] spawn EFUNC(garage,openVG); }; case "actor::open::vgarage": { [] spawn EFUNC(garage,openVG); };
case "actor::open::org": { [] spawn EFUNC(org,openUI); }; case "actor::open::org": { [] spawn EFUNC(org,openUI); };
case "actor::open::vlocker": { ["Open", [false, FORGE_Locker_Box, player]] spawn BFUNC(arsenal) }; case "actor::open::vlocker": { [FORGE_Locker_Box, player, false] spawn AFUNC(arsenal,openBox) };
case "actor::open::phone": { hint "Phone interaction is not yet implemented."; }; case "actor::open::phone": { hint "Phone interaction is not yet implemented."; };
case "actor::open::iplayer": { hint "Player interaction is not yet implemented." }; case "actor::open::iplayer": { hint "Player interaction is not yet implemented." };
case "actor::open::store": { hint "Store interaction is not yet implemented."; }; case "actor::open::store": { hint "Store interaction is not yet implemented."; };

View File

@ -1,8 +1,8 @@
#include "script_component.hpp" #include "script_component.hpp"
[missionNamespace, "arsenalOpened", { ["ace_arsenal_displayOpened", {
disableSerialization; disableSerialization;
params ["_display"]; params ["_display"];
_display displayAddEventHandler ["KeyDown", "_this select 3"]; _display displayAddEventHandler ["KeyDown", "_this select 3"];
{ (_display displayCtrl _x) ctrlShow false } forEach [44151, 44150, 44146, 44147, 44148, 44149, 44346]; { (_display displayCtrl _x) ctrlShow false } forEach [1002, 1003, 1004, 1005, 1006];
}] call BIS_fnc_addScriptedEventHandler; }] call CFUNC(addEventHandler);

View File

@ -4,7 +4,7 @@
* File: fnc_initLockerClass.sqf * File: fnc_initLockerClass.sqf
* Author: IDSolutions * Author: IDSolutions
* Date: 2025-12-17 * Date: 2025-12-17
* Last Update: 2026-01-31 * Last Update: 2026-02-04
* Public: No * Public: No
* *
* Description: * Description:
@ -65,11 +65,12 @@ GVAR(LockerRepository) = compileFinal createHashMapFromArray [
{ {
_x params ["_containerClass", "_containerObj"]; _x params ["_containerClass", "_containerObj"];
private _isBackpack = isClass (configFile >> "CfgVehicles" >> _containerClass); private _cfgVehicles = configFile >> "CfgVehicles" >> _containerClass;
private _cfgWeapons = configFile >> "CfgWeapons" >> _containerClass; private _cfgWeapons = configFile >> "CfgWeapons" >> _containerClass;
private _itemInfoType = getNumber (_cfgWeapons >> "ItemInfo" >> "type"); private _itemInfoType = getNumber (_cfgWeapons >> "ItemInfo" >> "type");
private _isVest = isClass _cfgWeapons && {_itemInfoType == 701}; private _isBackpack = isClass _cfgVehicles;
private _isUniform = isClass _cfgWeapons && {_itemInfoType == 801}; private _isUniform = isClass _cfgWeapons && {_itemInfoType == TYPE_UNIFORM};
private _isVest = isClass _cfgWeapons && {_itemInfoType == TYPE_VEST};
if (!_isBackpack && !_isVest && !_isUniform) then { continue; }; if (!_isBackpack && !_isVest && !_isUniform) then { continue; };
@ -147,7 +148,7 @@ GVAR(LockerRepository) = compileFinal createHashMapFromArray [
} forEach _attachments; } forEach _attachments;
if (_primaryMag isNotEqualTo ["", 0]) then { if (_primaryMag isNotEqualTo ["", 0]) then {
_primaryMag params ["_magClass", "_ammoCount"]; _primaryMag params ["_magClass", "_ammoCount"]; // TODO: Add ammo count to locker
if (_magClass != "") then { if (_magClass != "") then {
private _existing = _locker getOrDefault [_magClass, createHashMap]; private _existing = _locker getOrDefault [_magClass, createHashMap];
private _existingCount = _existing getOrDefault ["amount", 0]; private _existingCount = _existing getOrDefault ["amount", 0];
@ -161,7 +162,7 @@ GVAR(LockerRepository) = compileFinal createHashMapFromArray [
}; };
if (_secondaryMag isNotEqualTo ["", 0]) then { if (_secondaryMag isNotEqualTo ["", 0]) then {
_secondaryMag params ["_magClass", "_ammoCount"]; _secondaryMag params ["_magClass", "_ammoCount"]; // TODO: Add ammo count to locker
if (_magClass != "") then { if (_magClass != "") then {
private _existing = _locker getOrDefault [_magClass, createHashMap]; private _existing = _locker getOrDefault [_magClass, createHashMap];
private _existingCount = _existing getOrDefault ["amount", 0]; private _existingCount = _existing getOrDefault ["amount", 0];

View File

@ -4,7 +4,7 @@
* File: fnc_initVAClass.sqf * File: fnc_initVAClass.sqf
* Author: IDSolutions * Author: IDSolutions
* Date: 2025-12-16 * Date: 2025-12-16
* Last Update: 2026-01-31 * Last Update: 2026-02-04
* Public: No * Public: No
* *
* Description: * Description:
@ -78,19 +78,19 @@ GVAR(VArsenalClass) = createHashMapObject [[
}], }],
["applyItems", { ["applyItems", {
private _items = _self call ["get", ["items", []]]; private _items = _self call ["get", ["items", []]];
[FORGE_Armory_Box, _items, false, true, 1, 0] call BFUNC(addVirtualItemCargo); [FORGE_Locker_Box, _items] call AFUNC(arsenal,addVirtualItems);
}], }],
["applyWeapons", { ["applyWeapons", {
private _weapons = _self call ["get", ["weapons", []]]; private _weapons = _self call ["get", ["weapons", []]];
[FORGE_Armory_Box, _weapons, false, true, 1, 1] call BFUNC(addVirtualItemCargo); [FORGE_Locker_Box,_weapons] call AFUNC(arsenal,addVirtualItems);
}], }],
["applyMagazines", { ["applyMagazines", {
private _magazines = _self call ["get", ["magazines", []]]; private _magazines = _self call ["get", ["magazines", []]];
[FORGE_Armory_Box, _magazines, false, true, 1, 2] call BFUNC(addVirtualItemCargo); [FORGE_Locker_Box,_magazines] call AFUNC(arsenal,addVirtualItems);
}], }],
["applyBackpacks", { ["applyBackpacks", {
private _backpacks = _self call ["get", ["backpacks", []]]; private _backpacks = _self call ["get", ["backpacks", []]];
[FORGE_Armory_Box, _backpacks, false, true, 1, 3] call BFUNC(addVirtualItemCargo); [FORGE_Locker_Box,_backpacks] call AFUNC(arsenal,addVirtualItems);
}] }]
]]; ]];

View File

@ -4,7 +4,7 @@
* File: fnc_initLocker.sqf * File: fnc_initLocker.sqf
* Author: IDSolutions * Author: IDSolutions
* Date: 2025-12-17 * Date: 2025-12-17
* Last Update: 2026-01-31 * Last Update: 2026-02-04
* Public: No * Public: No
* *
* Description: * Description:
@ -23,7 +23,7 @@
private _lockers = (allVariables missionNamespace) select { private _lockers = (allVariables missionNamespace) select {
private _var = missionNamespace getVariable _x; private _var = missionNamespace getVariable _x;
("locker" in _x) && { _var isEqualType objNull } && { !isNull _var } && { _x isNotEqualTo "forge_locker_box" } ("locker" in _x) && { _var isEqualType objNull } && { !isNull _var }
}; };
if (_lockers isEqualTo []) exitWith { ["INFO", "No editor-placed lockers found."] call EFUNC(common,log) }; if (_lockers isEqualTo []) exitWith { ["INFO", "No editor-placed lockers found."] call EFUNC(common,log) };