diff --git a/addons/arsenal/XEH_preInit.sqf b/addons/arsenal/XEH_preInit.sqf
index 537af9c11d..d91a73ac96 100644
--- a/addons/arsenal/XEH_preInit.sqf
+++ b/addons/arsenal/XEH_preInit.sqf
@@ -12,6 +12,8 @@ GVAR(modList) = ["","curator","kart","heli","mark","expansion","expansionpremium
[QGVAR(camInverted), "CHECKBOX", localize LSTRING(invertCameraSetting), localize LSTRING(settingCategory), false] call CBA_Settings_fnc_init;
[QGVAR(enableModIcons), "CHECKBOX", [LSTRING(modIconsSetting), LSTRING(modIconsTooltip)], localize LSTRING(settingCategory), true] call CBA_Settings_fnc_init;
[QGVAR(fontHeight), "SLIDER", [LSTRING(fontHeightSetting), LSTRING(fontHeightTooltip)], localize LSTRING(settingCategory), [1, 10, 4.5, 1]] call CBA_Settings_fnc_init;
+[QGVAR(enableIdentityTabs), "CHECKBOX", localize LSTRING(enableIdentityTabsSettings), localize LSTRING(settingCategory), true, true] call CBA_Settings_fnc_init;
+
// Arsenal loadouts
[QGVAR(allowDefaultLoadouts), "CHECKBOX", [LSTRING(allowDefaultLoadoutsSetting), LSTRING(defaultLoadoutsTooltip)], localize LSTRING(settingCategory), true, true] call CBA_Settings_fnc_init;
diff --git a/addons/arsenal/defines.hpp b/addons/arsenal/defines.hpp
index ca5e7ed6a2..b414484103 100644
--- a/addons/arsenal/defines.hpp
+++ b/addons/arsenal/defines.hpp
@@ -200,6 +200,21 @@ _buttonCurrentMag2Ctrl ctrlCommit FADE_DELAY;\
IDC_rightTabContentListnBox,\
RIGHT_PANEL_ITEMS_BACKGROUND_IDCS,\
IDC_buttonRemoveAll\
+];\
+{\
+ _x = _display displayCtrl _x;\
+ _x ctrlSetPosition [\
+ safezoneX + safezoneW - 93 * GRID_W,\
+ safezoneY + 14 * GRID_H,\
+ 80 * GRID_W,\
+ safezoneH - 28 * GRID_H\
+ ];\
+ _x ctrlCommit 0;\
+} foreach [\
+ IDC_rightTabContent,\
+ IDC_rightTabContentListnBox,\
+ IDC_blockRightFrame,\
+ IDC_blockRighttBackground\
];
#define TOGGLE_RIGHT_PANEL_CONTAINER\
@@ -232,6 +247,21 @@ _buttonCurrentMag2Ctrl ctrlCommit FADE_DELAY;\
IDC_buttonCurrentMag2,\
IDC_iconBackgroundCurrentMag,\
IDC_iconBackgroundCurrentMag2\
+];\
+{\
+ _x = _display displayCtrl _x;\
+ _x ctrlSetPosition [\
+ safezoneX + safezoneW - 93 * GRID_W,\
+ safezoneY + 14 * GRID_H,\
+ 80 * GRID_W,\
+ safezoneH - 34 * GRID_H\
+ ];\
+ _x ctrlCommit 0;\
+} foreach [\
+ IDC_rightTabContent,\
+ IDC_rightTabContentListnBox,\
+ IDC_blockRightFrame,\
+ IDC_blockRighttBackground\
];
#define TOGGLE_RIGHT_PANEL_HIDE\
diff --git a/addons/arsenal/functions/fnc_buttonExport.sqf b/addons/arsenal/functions/fnc_buttonExport.sqf
index 7bcac4c8ba..dd9233764b 100644
--- a/addons/arsenal/functions/fnc_buttonExport.sqf
+++ b/addons/arsenal/functions/fnc_buttonExport.sqf
@@ -49,3 +49,5 @@ if (GVAR(shiftState)) then {
[_display, localize LSTRING(exportCurrent)] call FUNC(message);
};
+
+[QGVAR(loadoutExported), [_display, GVAR(shiftState)]] call CBA_fnc_localEvent;
diff --git a/addons/arsenal/functions/fnc_buttonImport.sqf b/addons/arsenal/functions/fnc_buttonImport.sqf
index 76cd2f3a75..7cc059d818 100644
--- a/addons/arsenal/functions/fnc_buttonImport.sqf
+++ b/addons/arsenal/functions/fnc_buttonImport.sqf
@@ -109,3 +109,5 @@ if (GVAR(shiftState) && {is3DEN}) then {
[_display, localize LSTRING(importedCurrent)] call FUNC(message);
};
};
+
+[QGVAR(loadoutImported), [_display, (GVAR(shiftState) && {is3DEN})]] call CBA_fnc_localEvent;
diff --git a/addons/arsenal/functions/fnc_buttonLoadoutsLoad.sqf b/addons/arsenal/functions/fnc_buttonLoadoutsLoad.sqf
index 9d413a233c..131bc1331f 100644
--- a/addons/arsenal/functions/fnc_buttonLoadoutsLoad.sqf
+++ b/addons/arsenal/functions/fnc_buttonLoadoutsLoad.sqf
@@ -88,3 +88,5 @@ call FUNC(updateUniqueItemsList);
[GVAR(center), GVAR(currentInsignia)] call bis_fnc_setUnitInsignia;
[(findDisplay IDD_ace_arsenal), [localize LSTRING(loadoutLoaded), _loadoutName] joinString " "] call FUNC(message);
+
+[QGVAR(onLoadoutLoad), [_loadout, _loadoutName]] call CBA_fnc_localEvent;
diff --git a/addons/arsenal/functions/fnc_onArsenalClose.sqf b/addons/arsenal/functions/fnc_onArsenalClose.sqf
index f9d2e2f2c5..f5194825fd 100644
--- a/addons/arsenal/functions/fnc_onArsenalClose.sqf
+++ b/addons/arsenal/functions/fnc_onArsenalClose.sqf
@@ -99,5 +99,6 @@ GVAR(currentInsignia) = nil;
GVAR(currentAction) = nil;
GVAR(center) = nil;
+GVAR(centerNotPlayer) = nil;
showHUD true;
diff --git a/addons/arsenal/functions/fnc_onArsenalOpen.sqf b/addons/arsenal/functions/fnc_onArsenalOpen.sqf
index 4a02dc136a..31777f5ed6 100644
--- a/addons/arsenal/functions/fnc_onArsenalOpen.sqf
+++ b/addons/arsenal/functions/fnc_onArsenalOpen.sqf
@@ -87,8 +87,8 @@ for "_index" from 0 to 10 do {
if (_x != "") then {
(GVAR(virtualItems) select _index) select ([2, 1, 0, 3] select _forEachIndex) pushBackUnique _x;
};
- } foreach _x;
- } foreach _accsArray;
+ } forEach _x;
+ } forEach _accsArray;
{
if !(_x isEqualTo []) then {
@@ -101,7 +101,7 @@ for "_index" from 0 to 10 do {
(GVAR(virtualItems) select 2) pushBackUnique (_x select 1);
};
};
- } foreach _magsArray;
+ } forEach _magsArray;
};
// Inventory items
@@ -113,7 +113,7 @@ for "_index" from 0 to 10 do {
default {
private _array = (LIST_DEFAULTS select _index) select {!(_x isEqualTo "")};
if !(_array isEqualTo []) then {
- {(GVAR(virtualItems) select _index) pushBackUnique _x} foreach _array;
+ {(GVAR(virtualItems) select _index) pushBackUnique _x} forEach _array;
};
};
};
@@ -163,7 +163,7 @@ for "_index" from 0 to 15 do {
private _index = 10 + (["itemmap", "itemcompass", "itemradio", "itemwatch", "itemgps"] find (tolower _simulationType));
GVAR(currentItems) set [_index, _x];
-} foreach (assignedItems GVAR(center));
+} forEach (assignedItems GVAR(center));
GVAR(currentWeaponType) = switch true do {
case (currentWeapon GVAR(center) == GVAR(currentItems) select 0): {0};
@@ -184,7 +184,7 @@ _mouseBlockCtrl ctrlEnable false;
_x ctrlSetFade 1;
_x ctrlShow false;
_x ctrlCommit 0;
-} foreach [
+} forEach [
IDC_blockRightFrame,
IDC_blockRighttBackground,
IDC_loadIndicator,
@@ -258,8 +258,8 @@ if (is3DEN) then {
private _ctrl = _display displayctrl _x;
_ctrl ctrlEnable false;
_ctrl ctrlSetFade 0.6;
- _ctrl ctrlcommit 0;
- } foreach [
+ _ctrl ctrlCommit 0;
+ } forEach [
IDC_buttonFace,
IDC_buttonVoice,
IDC_buttonInsigna
@@ -267,6 +267,19 @@ if (is3DEN) then {
_buttonCloseCtrl = _display displayCtrl IDC_menuBarClose;
_buttonCloseCtrl ctrlSetText (localize "str_ui_debug_but_apply");
+} else {
+ GVAR(centerNotPlayer) = (GVAR(center) != player);
+
+ {
+ private _ctrl = _display displayCtrl _x;
+ _ctrl ctrlEnable GVAR(enableIdentityTabs);
+ _ctrl ctrlSetFade ([0.6, 0] select GVAR(enableIdentityTabs));
+ _ctrl ctrlCommit 0;
+ } forEach [
+ IDC_buttonFace,
+ IDC_buttonVoice,
+ IDC_buttonInsigna
+ ];
};
//--------------- Prepare the left panel
@@ -282,7 +295,7 @@ GVAR(rightTabLnBFocus) = false;
private _panel = _display displayCtrl _x;
_panel ctrlSetFontHeight (GVAR(fontHeight) * GRID_H);
_panel ctrlCommit 0;
-} foreach [IDC_leftTabContent, IDC_rightTabContent, IDC_rightTabContentListnBox];
+} forEach [IDC_leftTabContent, IDC_rightTabContent, IDC_rightTabContentListnBox];
[_display, _display displayCtrl IDC_buttonPrimaryWeapon] call FUNC(fillLeftPanel);
diff --git a/addons/arsenal/functions/fnc_onKeyDown.sqf b/addons/arsenal/functions/fnc_onKeyDown.sqf
index b963974033..d06055f149 100644
--- a/addons/arsenal/functions/fnc_onKeyDown.sqf
+++ b/addons/arsenal/functions/fnc_onKeyDown.sqf
@@ -85,9 +85,31 @@ if !(_loadoutsDisplay isEqualTo displayNull) then {
case (_keyPressed == DIK_BACKSPACE): {
[_display] call FUNC(buttonHide);
};
- // Export button
+ // Export button / export classname
case (_keyPressed == DIK_C && {_ctrlState}): {
- [_display] call FUNC(buttonExport);
+ if (GVAR(leftTabFocus) || {GVAR(rightTabFocus)} || {GVAR(rightTabLnBFocus)}) then {
+ switch true do {
+ case (GVAR(leftTabFocus)): {
+ private _control = (_display displayCtrl IDC_leftTabContent);
+ _control lbData (lbCurSel _control)
+ };
+ case (GVAR(rightTabFocus)): {
+ private _control = (_display displayCtrl IDC_rightTabContent);
+ _control lbData (lbCurSel _control)
+ };
+ case (GVAR(rightTabLnBFocus)): {
+ private _control = (_display displayCtrl IDC_rightTabContentListnBox);
+ _control lnbData [(lnbCurSelRow _control), 0]
+ };
+ } params ["_className"];
+
+ "ace_clipboard" callExtension (_className + ";");
+ "ace_clipboard" callExtension "--COMPLETE--";
+
+ [_display, localize LSTRING(exportedClassnameText)] call FUNC(message);
+ } else {
+ [_display] call FUNC(buttonExport);
+ };
};
// Import button
case (_keyPressed == DIK_V && {_ctrlState}): {
@@ -124,6 +146,18 @@ if !(_loadoutsDisplay isEqualTo displayNull) then {
playsound ["RscDisplayCurator_visionMode",true];
};
+ // Panel up down
+ case (_keyPressed in [DIK_UP, DIK_DOWN]): {
+ if (GVAR(leftTabFocus) || {GVAR(rightTabFocus)} || {GVAR(rightTabLnBFocus)}) then {
+ _return = false;
+ };
+ };
+ // Right panel lnb + and - buttons
+ case (_keyPressed in [DIK_LEFT, DIK_RIGHT]): {
+ if (GVAR(rightTabLnBFocus)) then {
+ [_display, [1, 0] select (_keyPressed == DIK_LEFT)] call FUNC(buttonCargo);
+ };
+ };
};
} else {
switch true do {
@@ -167,22 +201,6 @@ if !(_loadoutsDisplay isEqualTo displayNull) then {
};
};
};
-
- if (GVAR(leftTabFocus) && {_keyPressed in [DIK_UP, DIK_DOWN]}) then {
- _return = false;
- };
-
- if (GVAR(rightTabFocus) && {_keyPressed in [DIK_UP, DIK_DOWN]}) then {
- _return = false;
- };
-
- if (GVAR(rightTabLnBFocus) && {_keyPressed in [DIK_UP, DIK_DOWN]}) then {
- _return = false;
- };
-
- if (GVAR(rightTabLnBFocus) && {_keyPressed in [DIK_LEFT, DIK_RIGHT]}) then {
- [_display, [1, 0] select (_keyPressed == DIK_LEFT)] call FUNC(buttonCargo);
- };
};
_return
diff --git a/addons/arsenal/functions/fnc_showItem.sqf b/addons/arsenal/functions/fnc_showItem.sqf
index e97ebd8dd5..478ae4218d 100644
--- a/addons/arsenal/functions/fnc_showItem.sqf
+++ b/addons/arsenal/functions/fnc_showItem.sqf
@@ -13,7 +13,7 @@
#include "script_component.hpp"
#include "..\defines.hpp"
-
+if (GVAR(centerNotPlayer)) exitWith {};
private _nextAction = switch (GVAR(currentLeftPanel)) do {
diff --git a/addons/arsenal/stringtable.xml b/addons/arsenal/stringtable.xml
index 0af4347727..f22d38a8c4 100644
--- a/addons/arsenal/stringtable.xml
+++ b/addons/arsenal/stringtable.xml
@@ -682,5 +682,17 @@
匯入當前/預設的裝備
汇入当前/预设的装备
+
+ Enable the faces / voices / insignias tabs
+ Activer les onglets faces / voix / insignes
+
+
+ Empty the selected container
+ Vider le conteneur selectionné
+
+
+ Exported class name to clipboard
+ Nom de classe exporté dans le presse papier
+
diff --git a/addons/arsenal/ui/RscAttributes.hpp b/addons/arsenal/ui/RscAttributes.hpp
index e9c4f1f6b4..e52929a58a 100644
--- a/addons/arsenal/ui/RscAttributes.hpp
+++ b/addons/arsenal/ui/RscAttributes.hpp
@@ -717,6 +717,7 @@ class GVAR(display) {
class buttonRemoveAll: ctrlButtonPicture {
idc = IDC_buttonRemoveAll;
text = QPATHTOF(data\iconClearContainer.paa);
+ tooltip = CSTRING(buttonClearContainerTooltip);
colorBackground[]={0,0,0,0.5};
onButtonClick = QUOTE(ctrlParent (_this select 0) call FUNC(buttonClearAll));
fade=1;
diff --git a/addons/arsenal/ui/RscCommon.hpp b/addons/arsenal/ui/RscCommon.hpp
index 60bceeaec3..1d580c679e 100644
--- a/addons/arsenal/ui/RscCommon.hpp
+++ b/addons/arsenal/ui/RscCommon.hpp
@@ -271,6 +271,17 @@ class Display3DEN {
class ContextMenu :ctrlMenu {
class Items {
class Arsenal {
+ items[]= {"aceArsenal", "virtualArsenal"};
+ };
+ class virtualArsenal {
+ text = "BI Virtual Arsenal";
+ action= QUOTE(['arsenal'] call bis_fnc_3DENEntityMenu);
+ value=0;
+ data="Arsenal";
+ opensNewWindow=1;
+ };
+ class aceArsenal: virtualArsenal {
+ text = "ACE Arsenal";
action= QUOTE(call FUNC(open3DEN));
};
};
diff --git a/addons/zeus/CfgFactionClasses.hpp b/addons/zeus/CfgFactionClasses.hpp
index 7d758adfc0..6c164a3c5d 100644
--- a/addons/zeus/CfgFactionClasses.hpp
+++ b/addons/zeus/CfgFactionClasses.hpp
@@ -24,4 +24,9 @@ class CfgFactionClasses {
priority = 2;
side = 7;
};
+ class GVAR(Arsenal) {
+ displayName = "ACE Arsenal";
+ priority = 2;
+ side = 7;
+ };
};
diff --git a/addons/zeus/CfgVehicles.hpp b/addons/zeus/CfgVehicles.hpp
index 49fcb9532a..efa777e5ec 100644
--- a/addons/zeus/CfgVehicles.hpp
+++ b/addons/zeus/CfgVehicles.hpp
@@ -266,6 +266,18 @@ class CfgVehicles {
displayName = CSTRING(ModuleRemoveArsenal_DisplayName);
function = QFUNC(moduleRemoveArsenal);
};
+ class GVAR(AddFullAceArsenal): GVAR(moduleBase) {
+ curatorCanAttach = 1;
+ category = QGVAR(Arsenal);
+ displayName = CSTRING(ModuleAddFullACEArsenal_DisplayName);
+ function = QFUNC(moduleAddAceArsenal);
+ };
+ class GVAR(RemoveFullAceArsenal): GVAR(moduleBase) {
+ curatorCanAttach = 1;
+ category = QGVAR(Arsenal);
+ displayName = CSTRING(ModuleRemoveACEArsenal_DisplayName);
+ function = QFUNC(moduleRemoveAceArsenal);
+ };
class ModuleArsenal_F: Module_F {
function=QFUNC(bi_moduleArsenal);
};
diff --git a/addons/zeus/XEH_PREP.hpp b/addons/zeus/XEH_PREP.hpp
index aba07e7114..648282216a 100644
--- a/addons/zeus/XEH_PREP.hpp
+++ b/addons/zeus/XEH_PREP.hpp
@@ -8,6 +8,7 @@ PREP(bi_moduleRemoteControl);
PREP(getModuleDestination);
PREP(handleZeusUnitAssigned);
PREP(moduleAddArsenal);
+PREP(moduleAddAceArsenal);
PREP(moduleAddSpareTrack);
PREP(moduleAddSpareWheel);
PREP(moduleAddOrRemoveFRIES);
@@ -18,6 +19,7 @@ PREP(moduleGlobalSetSkill);
PREP(moduleGroupSide);
PREP(moduleLoadIntoCargo);
PREP(moduleRemoveArsenal);
+PREP(moduleRemoveAceArsenal);
PREP(moduleSearchNearby);
PREP(moduleSetMedic);
PREP(moduleSetMedicalVehicle);
diff --git a/addons/zeus/config.cpp b/addons/zeus/config.cpp
index 5b764b6007..8e6d9767d6 100644
--- a/addons/zeus/config.cpp
+++ b/addons/zeus/config.cpp
@@ -22,6 +22,8 @@ class CfgPatches {
QGVAR(moduleSuppressiveFire),
QGVAR(AddFullArsenal),
QGVAR(RemoveFullArsenal),
+ QGVAR(AddFullAceArsenal),
+ QGVAR(RemoveFullAceArsenal),
QGVAR(moduleTeleportPlayers)
};
weapons[] = {};
@@ -69,6 +71,12 @@ class CfgPatches {
QGVAR(moduleConfigurePylons)
};
};
+ class GVAR(arsenal): ADDON {
+ units[] = {
+ QGVAR(AddFullAceArsenal),
+ QGVAR(RemoveFullAceArsenal)
+ };
+ };
};
class ACE_Curator {
@@ -78,6 +86,7 @@ class ACE_Curator {
GVAR(cargoAndRepair)[] = {"ace_cargo", "ace_repair"};
GVAR(fastroping) = "ace_fastroping";
GVAR(pylons) = "ace_pylons";
+ GVAR(arsenal) = "ace_arsenal";
};
#include "CfgFactionClasses.hpp"
diff --git a/addons/zeus/functions/fnc_moduleAddAceArsenal.sqf b/addons/zeus/functions/fnc_moduleAddAceArsenal.sqf
new file mode 100644
index 0000000000..d3a6a0cb72
--- /dev/null
+++ b/addons/zeus/functions/fnc_moduleAddAceArsenal.sqf
@@ -0,0 +1,36 @@
+/*
+ * Author: alganthe
+ * Add a full ACE Arsenal to an object
+ *
+ * Arguments:
+ * 0: The module logic