mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Merge branch 'master' into avoid-setCaptive
This commit is contained in:
commit
2ca398ea71
@ -33,4 +33,6 @@ GVAR(enabled) &&
|
||||
|
||||
{!(call EFUNC(common,isFeatureCameraActive))} &&
|
||||
{[_unit, objNull, ["isNotInside", "isNotSwimming", "isNotSitting"/*, "isNotOnLadder"*/]] call EFUNC(common,canInteractWith)} && // Ladder needs positioning fixes on throw
|
||||
{_unit call CBA_fnc_canUseWeapon} // Disable in non-FFV seats due to surface detection issues
|
||||
{_unit call CBA_fnc_canUseWeapon} && // Disable in non-FFV seats due to surface detection issues
|
||||
{"" == currentWeapon _unit || {currentWeapon _unit != secondaryWeapon _unit}} &&
|
||||
{0 >= _unit getVariable [QEGVAR(common,effect_blockThrow), 0]}
|
||||
|
1
addons/arsenal/$PBOPREFIX$
Normal file
1
addons/arsenal/$PBOPREFIX$
Normal file
@ -0,0 +1 @@
|
||||
z\ace\addons\arsenal
|
18
addons/arsenal/CfgEventHandlers.hpp
Normal file
18
addons/arsenal/CfgEventHandlers.hpp
Normal file
@ -0,0 +1,18 @@
|
||||
|
||||
class Extended_PreStart_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preStart));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preInit));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_PostInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_postInit));
|
||||
};
|
||||
};
|
45
addons/arsenal/XEH_PREP.hpp
Normal file
45
addons/arsenal/XEH_PREP.hpp
Normal file
@ -0,0 +1,45 @@
|
||||
PREP(addListBoxItem);
|
||||
PREP(addVirtualItems);
|
||||
PREP(buttonCargo);
|
||||
PREP(buttonClearAll);
|
||||
PREP(buttonExport);
|
||||
PREP(buttonHide);
|
||||
PREP(buttonImport);
|
||||
PREP(buttonLoadoutsDelete);
|
||||
PREP(buttonLoadoutsLoad);
|
||||
PREP(buttonLoadoutsRename);
|
||||
PREP(buttonLoadoutsSave);
|
||||
PREP(buttonLoadoutsShare);
|
||||
PREP(clearSearchbar);
|
||||
PREP(fillLeftPanel);
|
||||
PREP(fillLoadoutsList);
|
||||
PREP(fillRightPanel);
|
||||
PREP(handleMouse);
|
||||
PREP(handleScrollWheel);
|
||||
PREP(handleSearchbar);
|
||||
PREP(initBox);
|
||||
PREP(itemInfo);
|
||||
PREP(loadoutsChangeTab);
|
||||
PREP(message);
|
||||
PREP(onArsenalClose);
|
||||
PREP(onArsenalOpen);
|
||||
PREP(onKeyDown);
|
||||
PREP(onLoadoutsClose);
|
||||
PREP(onLoadoutsOpen);
|
||||
PREP(onMouseButtonDown);
|
||||
PREP(onMouseButtonUp);
|
||||
PREP(onSelChangedLeft);
|
||||
PREP(onSelChangedLoadouts);
|
||||
PREP(onSelChangedRight);
|
||||
PREP(onSelChangedRightListnBox);
|
||||
PREP(open3DEN);
|
||||
PREP(openBox);
|
||||
PREP(removeBox);
|
||||
PREP(removeVirtualItems);
|
||||
PREP(scanConfig);
|
||||
PREP(showItem);
|
||||
PREP(sortPanel);
|
||||
PREP(updateCamPos);
|
||||
PREP(updateRightPanel);
|
||||
PREP(updateUniqueItemsList);
|
||||
PREP(verifyLoadout);
|
82
addons/arsenal/XEH_postInit.sqf
Normal file
82
addons/arsenal/XEH_postInit.sqf
Normal file
@ -0,0 +1,82 @@
|
||||
#include "script_component.hpp"
|
||||
#include "defines.hpp"
|
||||
|
||||
GVAR(EH_ID) = 0;
|
||||
GVAR(lastSearchTextLeft) = "";
|
||||
GVAR(lastSearchTextRight) = "";
|
||||
|
||||
[QGVAR(initBox), {_this call FUNC(initBox)}] call CBA_fnc_addEventHandler;
|
||||
[QGVAR(removeBox), {_this call FUNC(removeBox)}] call CBA_fnc_addEventHandler;
|
||||
|
||||
[QGVAR(broadcastFace), {
|
||||
params ["_unit", "_face"];
|
||||
|
||||
_unit setFace _face;
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
|
||||
[QGVAR(broadcastVoice), {
|
||||
params ["_unit", "_voice"];
|
||||
|
||||
_unit setSpeaker _voice;
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
|
||||
[QGVAR(loadoutUnshared), {
|
||||
params ["_contentPanelCtrl" , "_playerName", "_loadoutName"];
|
||||
|
||||
if (!(isNil QGVAR(currentLoadoutsTab)) && {GVAR(currentLoadoutsTab) == IDC_buttonSharedLoadouts}) then {
|
||||
|
||||
private _dataToCheck = _playerName + _loadoutName;
|
||||
|
||||
for '_i' from 0 to (((lnbsize _contentPanelCtrl) select 0) - 1) do {
|
||||
if ((_contentPanelCtrl lnbData [_i, 1]) == _dataToCheck) exitwith {_contentPanelCtrl lnbDeleteRow _i};
|
||||
};
|
||||
} else {
|
||||
|
||||
if (
|
||||
profileName == _playerName &&
|
||||
{!(isNil QGVAR(currentLoadoutsTab) && {GVAR(currentLoadoutsTab) == IDC_buttonMyLoadouts})}
|
||||
) then {
|
||||
|
||||
for '_i' from 0 to (((lnbsize _contentPanelCtrl) select 0) - 1) do {
|
||||
if ((_contentPanelCtrl lnbText [_i, 1]) == _loadoutName) exitwith {
|
||||
_contentPanelCtrl lnbSetPicture [[_i, 0], QPATHTOF(data\iconPublicBlank.paa)];
|
||||
_contentPanelCtrl lnbSetValue [[_i, 0], 0];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
|
||||
[QGVAR(loadoutShared), {
|
||||
params ["_contentPanelCtrl" ,"_loadoutArgs"];
|
||||
_loadoutArgs params ["_playerName", "_loadoutName", "_loadoutData"];
|
||||
|
||||
if (!(isNil QGVAR(currentLoadoutsTab)) && {GVAR(currentLoadoutsTab) == IDC_buttonSharedLoadouts}) then {
|
||||
|
||||
private _curSelData =_contentPanelCtrl lnbData [(lnbCurSelRow _contentPanelCtrl), 1];
|
||||
([_loadoutData] call FUNC(verifyLoadout)) params ["_loadout", "_nullItemsAmount", "_unavailableItemsAmount"];
|
||||
|
||||
private _newRow = _contentPanelCtrl lnbAddRow [_playerName, _loadoutName];
|
||||
|
||||
ADD_LOADOUTS_LIST_PICTURES
|
||||
|
||||
_contentPanelCtrl lnbSetData [[_newRow, 1], _playerName + _loadoutName];
|
||||
|
||||
if (_nullItemsAmount > 0) then {
|
||||
|
||||
_contentPanelCtrl lnbSetColor [[_newRow, 1], [1, 0, 0, 0.8]];
|
||||
} else {
|
||||
|
||||
if (_unavailableItemsAmount > 0) then {
|
||||
_contentPanelCtrl lnbSetColor [[_newRow, 1], [1, 1, 1, 0.25]];
|
||||
};
|
||||
};
|
||||
|
||||
_contentPanelCtrl lnbSort [1, false];
|
||||
|
||||
// Select previously selected loadout
|
||||
for '_i' from 0 to (((lnbsize _contentPanelCtrl) select 0) - 1) do {
|
||||
if ((_contentPanelCtrl lnbText [_i, 1]) == _curSelData) exitwith {_contentPanelCtrl lnbSetCurSelRow _i};
|
||||
};
|
||||
};
|
||||
}] call CBA_fnc_addEventHandler;
|
21
addons/arsenal/XEH_preInit.sqf
Normal file
21
addons/arsenal/XEH_preInit.sqf
Normal file
@ -0,0 +1,21 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
ADDON = false;
|
||||
|
||||
PREP_RECOMPILE_START;
|
||||
#include "XEH_PREP.hpp"
|
||||
PREP_RECOMPILE_END;
|
||||
|
||||
// Arsenal
|
||||
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;
|
||||
|
||||
// Arsenal loadouts
|
||||
[QGVAR(allowDefaultLoadouts), "CHECKBOX", [LSTRING(allowDefaultLoadoutsSetting), LSTRING(defaultLoadoutsTooltip)], localize LSTRING(settingCategory), true, true] call CBA_Settings_fnc_init;
|
||||
[QGVAR(allowSharedLoadouts), "CHECKBOX", localize LSTRING(allowSharingSetting), localize LSTRING(settingCategory), true, true] call CBA_Settings_fnc_init;
|
||||
[QGVAR(EnableRPTLog), "CHECKBOX", [LSTRING(printToRPTSetting), LSTRING(printToRPTTooltip)], localize LSTRING(settingCategory), false, false] call CBA_Settings_fnc_init;
|
||||
|
||||
ADDON = true;
|
5
addons/arsenal/XEH_preStart.sqf
Normal file
5
addons/arsenal/XEH_preStart.sqf
Normal file
@ -0,0 +1,5 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
#include "XEH_PREP.hpp"
|
||||
|
||||
call FUNC(scanConfig);
|
40
addons/arsenal/config.cpp
Normal file
40
addons/arsenal/config.cpp
Normal file
@ -0,0 +1,40 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
class CfgPatches {
|
||||
class ADDON {
|
||||
name = COMPONENT_NAME;
|
||||
units[] = {};
|
||||
weapons[] = {};
|
||||
requiredVersion = REQUIRED_VERSION;
|
||||
requiredAddons[] = {"ace_common"};
|
||||
author = ECSTRING(common,ACETeam);
|
||||
authors[] = {"alganthe"};
|
||||
url = ECSTRING(main,URL);
|
||||
VERSION_CONFIG;
|
||||
};
|
||||
};
|
||||
|
||||
class Cfg3DEN {
|
||||
class Mission {
|
||||
class GVAR(DummyCategory) {
|
||||
displayName="Dummy attribute, should never show up";
|
||||
class AttributeCategories {
|
||||
class ACE3_Arsenal {
|
||||
class Attributes {
|
||||
class GVAR(DefaultLoadoutsListAttribute) {
|
||||
property = QGVAR(DefaultLoadoutsListAttribute);
|
||||
value=0;
|
||||
expression="if !(is3DEN) then {ace_arsenal_defaultLoadoutsList = _value};";
|
||||
defaultValue="[]";
|
||||
validate="none";
|
||||
wikiType="[[Array]]";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
#include "ui\RscAttributes.hpp"
|
||||
#include "CfgEventHandlers.hpp"
|
BIN
addons/arsenal/data/iconClearContainer.paa
Normal file
BIN
addons/arsenal/data/iconClearContainer.paa
Normal file
Binary file not shown.
BIN
addons/arsenal/data/iconPublic.paa
Normal file
BIN
addons/arsenal/data/iconPublic.paa
Normal file
Binary file not shown.
BIN
addons/arsenal/data/iconPublicBlank.paa
Normal file
BIN
addons/arsenal/data/iconPublicBlank.paa
Normal file
Binary file not shown.
BIN
addons/arsenal/data/iconSecondaryMuzzle.paa
Normal file
BIN
addons/arsenal/data/iconSecondaryMuzzle.paa
Normal file
Binary file not shown.
332
addons/arsenal/defines.hpp
Normal file
332
addons/arsenal/defines.hpp
Normal file
@ -0,0 +1,332 @@
|
||||
// Pixel grid
|
||||
#define pixelScale 0.25
|
||||
#define GRID_W (pixelW * pixelGridNoUIScale * pixelScale)
|
||||
#define GRID_H (pixelH * pixelGridNoUIScale * pixelScale)
|
||||
|
||||
// IDCs
|
||||
#define IDD_ace_arsenal 1127001
|
||||
#define IDC_mouseArea 0
|
||||
#define IDC_arrowMinus 101
|
||||
#define IDC_arrowPlus 102
|
||||
#define IDC_blockLeftFrame 3
|
||||
#define IDC_blockLeftBackground 4
|
||||
#define IDC_blockRightFrame 5
|
||||
#define IDC_blockRighttBackground 6
|
||||
#define IDC_loadIndicator 7
|
||||
#define IDC_loadIndicatorBar 701
|
||||
#define IDC_totalWeight 8
|
||||
#define IDC_totalWeightText 801
|
||||
#define IDC_message 9
|
||||
#define IDC_menuBar 10
|
||||
#define IDC_infoBox 11
|
||||
#define IDC_infoBackground 1101
|
||||
#define IDC_infoName 1102
|
||||
#define IDC_infoAuthor 1103
|
||||
#define IDC_DLCBackground 1104
|
||||
#define IDC_DLCIcon 1105
|
||||
#define IDC_mouseBlock 12
|
||||
#define IDC_leftTabContent 13
|
||||
#define IDC_rightTabContent 14
|
||||
#define IDC_rightTabContentListnBox 15
|
||||
#define IDC_sortLeftTab 16
|
||||
#define IDC_sortRightTab 17
|
||||
#define IDC_leftSearchbar 18
|
||||
#define IDC_leftSearchbarButton 41
|
||||
#define IDC_rightSearchbar 19
|
||||
#define IDC_rightSearchbarButton 42
|
||||
#define IDC_tabLeft 20
|
||||
#define IDC_iconBackgroundPrimaryWeapon 2001
|
||||
#define IDC_buttonPrimaryWeapon 2002
|
||||
#define IDC_iconBackgroundHandgun 2003
|
||||
#define IDC_buttonHandgun 2004
|
||||
#define IDC_iconBackgroundSecondaryWeapon 2005
|
||||
#define IDC_buttonSecondaryWeapon 2006
|
||||
#define IDC_iconBackgroundHeadgear 2007
|
||||
#define IDC_buttonHeadgear 2008
|
||||
#define IDC_iconBackgroundUniform 2009
|
||||
#define IDC_buttonUniform 2010
|
||||
#define IDC_iconBackgroundVest 2011
|
||||
#define IDC_buttonVest 2012
|
||||
#define IDC_iconBackgroundBackpack 2013
|
||||
#define IDC_buttonBackpack 2014
|
||||
#define IDC_iconBackgroundGoggles 2015
|
||||
#define IDC_buttonGoggles 2016
|
||||
#define IDC_iconBackgroundNVG 2017
|
||||
#define IDC_buttonNVG 2018
|
||||
#define IDC_iconBackgroundBinoculars 2019
|
||||
#define IDC_buttonBinoculars 2020
|
||||
#define IDC_iconBackgroundMap 2021
|
||||
#define IDC_buttonMap 2022
|
||||
#define IDC_iconBackgroundGPS 2023
|
||||
#define IDC_buttonGPS 2024
|
||||
#define IDC_iconBackgroundRadio 2025
|
||||
#define IDC_buttonRadio 2026
|
||||
#define IDC_iconBackgroundCompass 2028
|
||||
#define IDC_buttonCompass 2029
|
||||
#define IDC_iconBackgroundWatch 2030
|
||||
#define IDC_buttonWatch 2031
|
||||
#define IDC_iconBackgroundFace 2032
|
||||
#define IDC_buttonFace 2033
|
||||
#define IDC_iconBackgroundVoice 2034
|
||||
#define IDC_buttonVoice 2035
|
||||
#define IDC_iconBackgroundInsigna 2036
|
||||
#define IDC_buttonInsigna 2037
|
||||
#define IDC_iconBackgroundOptic 21
|
||||
#define IDC_buttonOptic 22
|
||||
#define IDC_iconBackgroundItemAcc 23
|
||||
#define IDC_buttonItemAcc 24
|
||||
#define IDC_iconBackgroundMuzzle 25
|
||||
#define IDC_buttonMuzzle 26
|
||||
#define IDC_iconBackgroundBipod 27
|
||||
#define IDC_buttonBipod 28
|
||||
#define IDC_iconBackgroundCurrentMag 3001
|
||||
#define IDC_buttonCurrentMag 3002
|
||||
#define IDC_iconBackgroundCurrentMag2 3003
|
||||
#define IDC_buttonCurrentMag2 3004
|
||||
#define IDC_iconBackgroundMag 29
|
||||
#define IDC_buttonMag 30
|
||||
#define IDC_iconBackgroundMagALL 31
|
||||
#define IDC_buttonMagALL 32
|
||||
#define IDC_iconBackgroundThrow 33
|
||||
#define IDC_buttonThrow 34
|
||||
#define IDC_iconBackgroundPut 35
|
||||
#define IDC_buttonPut 36
|
||||
#define IDC_iconBackgroundMisc 37
|
||||
#define IDC_buttonMisc 38
|
||||
#define IDC_buttonRemoveAllSelected 39
|
||||
#define IDC_buttonRemoveAll 40
|
||||
|
||||
#define IDD_loadouts_display 1127002
|
||||
#define IDC_centerBox 3
|
||||
#define IDC_centerTitle 301
|
||||
#define IDC_contentPanel 302
|
||||
#define IDC_textEditBox 303
|
||||
#define IDC_buttonSave 304
|
||||
#define IDC_buttonLoad 305
|
||||
#define IDC_buttonShare 306
|
||||
#define IDC_buttonDelete 307
|
||||
#define IDC_buttonRename 308
|
||||
#define IDC_buttonMyLoadoutsBackground 401
|
||||
#define IDC_buttonMyLoadouts 402
|
||||
#define IDC_buttonDefaultLoadoutsBackground 403
|
||||
#define IDC_buttonDefaultLoadouts 404
|
||||
#define IDC_buttonSharedLoadoutsBackground 405
|
||||
#define IDC_buttonSharedLoadouts 406
|
||||
|
||||
#define FADE_DELAY 0.15
|
||||
#define CAM_DIS_MAX 5
|
||||
|
||||
#define RIGHT_PANEL_ACC_IDCS IDC_buttonOptic, IDC_buttonItemAcc, IDC_buttonMuzzle, IDC_buttonBipod
|
||||
#define RIGHT_PANEL_ACC_BACKGROUND_IDCS IDC_iconBackgroundOptic, IDC_iconBackgroundItemAcc, IDC_iconBackgroundMuzzle, IDC_iconBackgroundBipod
|
||||
#define RIGHT_PANEL_ITEMS_IDCS IDC_buttonMag, IDC_buttonMagALL, IDC_buttonThrow, IDC_buttonPut, IDC_buttonMisc
|
||||
#define RIGHT_PANEL_ITEMS_BACKGROUND_IDCS IDC_iconBackgroundMag, IDC_iconBackgroundMagALL, IDC_iconBackgroundThrow, IDC_iconBackgroundPut, IDC_iconBackgroundMisc
|
||||
#define ARROWS_IDCS IDC_arrowMinus, IDC_arrowPlus
|
||||
|
||||
#define GETDLC\
|
||||
{\
|
||||
private _dlc = "";\
|
||||
private _addons = configsourceaddonlist _this;\
|
||||
if (count _addons > 0) then {\
|
||||
private _mods = configsourcemodlist (configfile >> "CfgPatches" >> _addons select 0);\
|
||||
if (count _mods > 0) then {\
|
||||
_dlc = _mods select 0;\
|
||||
};\
|
||||
};\
|
||||
_dlc\
|
||||
}
|
||||
|
||||
#define ADDMODICON\
|
||||
{\
|
||||
private _dlcName = _this call GETDLC;\
|
||||
if (_dlcName != "") then {\
|
||||
_ctrlPanel lbsetpictureright [_lbAdd,(modParams [_dlcName,["logo"]]) param [0,""]];\
|
||||
_modID = GVAR(modList) find _dlcName;\
|
||||
if (_modID < 0) then {_modID = GVAR(modList) pushback _dlcName;};\
|
||||
_ctrlPanel lbsetvalue [_lbAdd,_modID];\
|
||||
};\
|
||||
};
|
||||
|
||||
#define ADDBINOCULARSMAG\
|
||||
private _magazines = getarray (configfile >> "cfgweapons" >> _item >> "magazines");\
|
||||
if (count _magazines > 0) then {GVAR(center) addmagazine (_magazines select 0)};
|
||||
|
||||
#define TOGGLE_RIGHT_PANEL_WEAPON\
|
||||
{\
|
||||
_x = _display displayCtrl _x;\
|
||||
_x ctrlSetFade 0;\
|
||||
_x ctrlShow true;\
|
||||
_x ctrlEnable true;\
|
||||
_x ctrlCommit FADE_DELAY;\
|
||||
} foreach [\
|
||||
IDC_blockRightFrame,\
|
||||
IDC_blockRighttBackground,\
|
||||
IDC_rightTabContent,\
|
||||
IDC_sortRightTab,\
|
||||
RIGHT_PANEL_ACC_IDCS,\
|
||||
IDC_rightSearchbar,\
|
||||
IDC_rightSearchbarButton,\
|
||||
IDC_buttonCurrentMag\
|
||||
];\
|
||||
private _buttonCurrentMag2Ctrl = _display displayCtrl IDC_buttonCurrentMag2;\
|
||||
if (GVAR(currentLeftPanel) == IDC_buttonPrimaryWeapon) then {\
|
||||
_buttonCurrentMag2Ctrl ctrlSetFade 0;\
|
||||
_buttonCurrentMag2Ctrl ctrlShow true;\
|
||||
_buttonCurrentMag2Ctrl ctrlEnable true;\
|
||||
} else {\
|
||||
_buttonCurrentMag2Ctrl ctrlSetFade 1;\
|
||||
_buttonCurrentMag2Ctrl ctrlShow false;\
|
||||
_buttonCurrentMag2Ctrl ctrlEnable false;\
|
||||
};\
|
||||
_buttonCurrentMag2Ctrl ctrlCommit FADE_DELAY;\
|
||||
{\
|
||||
_x = _display displayCtrl _x;\
|
||||
_x ctrlSetFade 1;\
|
||||
_x ctrlShow false;\
|
||||
_x ctrlEnable false;\
|
||||
_x ctrlCommit FADE_DELAY;\
|
||||
} foreach [\
|
||||
IDC_loadIndicator,\
|
||||
RIGHT_PANEL_ITEMS_IDCS,\
|
||||
IDC_rightTabContentListnBox,\
|
||||
RIGHT_PANEL_ITEMS_BACKGROUND_IDCS,\
|
||||
IDC_buttonRemoveAll\
|
||||
];
|
||||
|
||||
#define TOGGLE_RIGHT_PANEL_CONTAINER\
|
||||
{\
|
||||
_x = _display displayCtrl _x;\
|
||||
_x ctrlSetFade 0;\
|
||||
_x ctrlShow true;\
|
||||
_x ctrlEnable true;\
|
||||
_x ctrlCommit FADE_DELAY;\
|
||||
} foreach [\
|
||||
IDC_blockRightFrame, \
|
||||
IDC_blockRighttBackground,\
|
||||
IDC_loadIndicator,\
|
||||
IDC_rightTabContentListnBox,\
|
||||
IDC_sortRightTab,\
|
||||
IDC_tabRight,\
|
||||
RIGHT_PANEL_ACC_IDCS,\
|
||||
RIGHT_PANEL_ITEMS_IDCS,\
|
||||
IDC_rightSearchbar,\
|
||||
IDC_rightSearchbarButton\
|
||||
];\
|
||||
{\
|
||||
_x = _display displayCtrl _x;\
|
||||
_x ctrlSetFade 1;\
|
||||
_x ctrlShow false;\
|
||||
_x ctrlEnable false;\
|
||||
_x ctrlCommit FADE_DELAY;\
|
||||
} foreach [\
|
||||
IDC_buttonCurrentMag,\
|
||||
IDC_buttonCurrentMag2,\
|
||||
IDC_iconBackgroundCurrentMag,\
|
||||
IDC_iconBackgroundCurrentMag2\
|
||||
];
|
||||
|
||||
#define TOGGLE_RIGHT_PANEL_HIDE\
|
||||
{\
|
||||
_x = _display displayCtrl _x;\
|
||||
_x ctrlSetFade 1;\
|
||||
_x ctrlShow false;\
|
||||
_x ctrlEnable false;\
|
||||
_x ctrlCommit FADE_DELAY;\
|
||||
} foreach [\
|
||||
IDC_blockRightFrame,\
|
||||
IDC_blockRighttBackground,\
|
||||
IDC_loadIndicator,\
|
||||
IDC_rightTabContent,\
|
||||
IDC_rightTabContentListnBox,\
|
||||
IDC_sortRightTab,\
|
||||
RIGHT_PANEL_ACC_BACKGROUND_IDCS,\
|
||||
RIGHT_PANEL_ACC_IDCS,\
|
||||
RIGHT_PANEL_ITEMS_BACKGROUND_IDCS,\
|
||||
RIGHT_PANEL_ITEMS_IDCS,\
|
||||
IDC_buttonRemoveAll,\
|
||||
IDC_rightSearchbar,\
|
||||
IDC_rightSearchbarButton,\
|
||||
IDC_buttonCurrentMag,\
|
||||
IDC_buttonCurrentMag2,\
|
||||
IDC_iconBackgroundCurrentMag,\
|
||||
IDC_iconBackgroundCurrentMag2\
|
||||
];
|
||||
|
||||
#define LIST_DEFAULTS\
|
||||
[\
|
||||
[\
|
||||
(primaryweapon GVAR(center) call bis_fnc_baseWeapon),\
|
||||
(secondaryweapon GVAR(center) call bis_fnc_baseWeapon),\
|
||||
(handgunweapon GVAR(center) call bis_fnc_baseWeapon)\
|
||||
],\
|
||||
[\
|
||||
[primaryWeaponItems GVAR(center), secondaryWeaponItems GVAR(center), handgunItems GVAR(center)],\
|
||||
[primaryWeaponMagazine GVAR(center), secondaryWeaponMagazine GVAR(center), handgunMagazine GVAR(center)]\
|
||||
],\
|
||||
uniformItems GVAR(center) + vestItems GVAR(center) + backpackItems GVAR(center),\
|
||||
[headgear GVAR(center)],\
|
||||
[uniform GVAR(center)],\
|
||||
[vest GVAR(center)],\
|
||||
[backpack GVAR(center)],\
|
||||
[goggles GVAR(center)],\
|
||||
[hmd GVAR(center)],\
|
||||
[binocular GVAR(center)]\
|
||||
]
|
||||
|
||||
#define CHECK_WEAPON_OR_ACC\
|
||||
_item in (_weaponsArray select 0) ||\
|
||||
{_item in (_weaponsArray select 1)} ||\
|
||||
{_item in (_weaponsArray select 2)} ||\
|
||||
{_item in (GVAR(virtualItems) select 9)} ||\
|
||||
{_item in (_accsArray select 0)} ||\
|
||||
{_item in (_accsArray select 1)} ||\
|
||||
{_item in (_accsArray select 2)} ||\
|
||||
{_item in (_accsArray select 3)}
|
||||
|
||||
#define CHECK_ASSIGNED_ITEMS\
|
||||
_item in (GVAR(virtualItems) select 10) ||\
|
||||
{_item in (GVAR(virtualItems) select 11)} ||\
|
||||
{_item in (GVAR(virtualItems) select 12)} ||\
|
||||
{_item in (GVAR(virtualItems) select 13)} ||\
|
||||
{_item in (GVAR(virtualItems) select 14)} ||\
|
||||
{_item in (GVAR(virtualItems) select 8)}
|
||||
|
||||
#define CHECK_CONTAINER\
|
||||
_item in (GVAR(virtualItems) select 4) ||\
|
||||
{_item in (GVAR(virtualItems) select 5)} ||\
|
||||
{_item in (GVAR(virtualItems) select 6)}
|
||||
|
||||
#define CLASS_CHECK_ITEM\
|
||||
isClass (_weaponCfg >> _item) ||\
|
||||
{isClass (_vehcCfg >> _item)} ||\
|
||||
{isClass (_glassesCfg >> _item)} ||\
|
||||
{isClass (_magCfg >> _item)}
|
||||
|
||||
#define CHECK_CONTAINER_ITEMS\
|
||||
_item in (GVAR(virtualItems) select 3) ||\
|
||||
{_item in (_accsArray select 0)} ||\
|
||||
{_item in (_accsArray select 1)} ||\
|
||||
{_item in (_accsArray select 2)} ||\
|
||||
{_item in (_accsArray select 3)} ||\
|
||||
{_item in (GVAR(virtualItems) select 4)} ||\
|
||||
{_item in (GVAR(virtualItems) select 5)} ||\
|
||||
{_item in (GVAR(virtualItems) select 6)} ||\
|
||||
{_item in (GVAR(virtualItems) select 7)} ||\
|
||||
{_item in (GVAR(virtualItems) select 8)} ||\
|
||||
{_item in (GVAR(virtualItems) select 10)} ||\
|
||||
{_item in (GVAR(virtualItems) select 11)} ||\
|
||||
{_item in (GVAR(virtualItems) select 12)} ||\
|
||||
{_item in (GVAR(virtualItems) select 13)} ||\
|
||||
{_item in (GVAR(virtualItems) select 14)} ||\
|
||||
{_item in (GVAR(virtualItems) select 15)} ||\
|
||||
{_item in (GVAR(virtualItems) select 16)} ||\
|
||||
{_item in (GVAR(virtualItems) select 17)}
|
||||
|
||||
#define ADD_LOADOUTS_LIST_PICTURES\
|
||||
_contentPanelCtrl lnbSetPicture [[_newRow, 2], getText (configFile >> "cfgWeapons" >> ((_loadout select 0) select 0) >> "picture")];\
|
||||
_contentPanelCtrl lnbSetPicture [[_newRow, 3], getText (configFile >> "cfgWeapons" >> ((_loadout select 1) select 0) >> "picture")];\
|
||||
_contentPanelCtrl lnbSetPicture [[_newRow, 4], getText (configFile >> "cfgWeapons" >> ((_loadout select 2) select 0) >> "picture")];\
|
||||
_contentPanelCtrl lnbSetPicture [[_newRow, 5], getText (configFile >> "cfgWeapons" >> ((_loadout select 3) select 0) >> "picture")];\
|
||||
_contentPanelCtrl lnbSetPicture [[_newRow, 6], getText (configFile >> "cfgWeapons" >> ((_loadout select 4) select 0) >> "picture")];\
|
||||
_contentPanelCtrl lnbSetPicture [[_newRow, 7], getText (configFile >> "cfgVehicles" >> ((_loadout select 5) select 0) >> "picture")];\
|
||||
_contentPanelCtrl lnbSetPicture [[_newRow, 8], getText (configFile >> "cfgWeapons" >> (_loadout select 6) >> "picture")];\
|
||||
_contentPanelCtrl lnbSetPicture [[_newRow, 9], getText (configFile >> "cfgGlasses" >> (_loadout select 7) >> "picture")];
|
63
addons/arsenal/functions/fnc_addListBoxItem.sqf
Normal file
63
addons/arsenal/functions/fnc_addListBoxItem.sqf
Normal file
@ -0,0 +1,63 @@
|
||||
/*
|
||||
* Author: Dedmen
|
||||
* Add a listbox row.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Config category <STRING> (must be "CfgWeapons", "CfgVehicles", "CfgMagazines", "CfgVoice")
|
||||
* 1: Classname <STRING>
|
||||
* 2: Panel control <CONTROL>
|
||||
* 3: Name of the picture entry in that Cfg class <STRING>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
params ["_configCategory", "_className", "_ctrlPanel", ["_pictureEntryName", "picture", [""]]];
|
||||
|
||||
private _cacheNamespace = _ctrlPanel; //For better readability.
|
||||
|
||||
private _cachedItemInfo = _cacheNamespace getVariable [_configCategory+_className, []];
|
||||
|
||||
//_cachedItemInfo == [_displayName, _itemPicture, _modPicture, _modID]
|
||||
if (_cachedItemInfo isEqualTo []) then {//Not in cache. So get info and put into cache.
|
||||
|
||||
private _configPath = configFile >> _configCategory >> _className;
|
||||
|
||||
_cachedItemInfo set [0, getText (_configPath >> "displayName")];
|
||||
//if _pictureEntryName is empty then this item has no Icons. (Faces)
|
||||
_cachedItemInfo set [1, if (_pictureEntryName isEqualTo "") then {""} else {getText (_configPath >> _pictureEntryName)}];
|
||||
|
||||
//get name of DLC
|
||||
private _dlcName = "";
|
||||
private _addons = configsourceaddonlist _configPath;
|
||||
if !(_addons isEqualTo []) then {
|
||||
private _mods = configsourcemodlist (configfile >> "CfgPatches" >> _addons select 0);
|
||||
if !(_mods isEqualTo []) then {
|
||||
_dlcName = _mods select 0;
|
||||
};
|
||||
};
|
||||
|
||||
if (_dlcName != "") then {
|
||||
_cachedItemInfo set [2, (modParams [_dlcName,["logo"]]) param [0,""]];//mod picture
|
||||
_modID = GVAR(modList) find _dlcName;
|
||||
if (_modID < 0) then {_modID = GVAR(modList) pushback _dlcName;};//We keep a ordered list of all mods for sorting later.
|
||||
_cachedItemInfo set [3, _modID];//mod ID
|
||||
} else {
|
||||
_cachedItemInfo set [2, ""];//mod picture
|
||||
_cachedItemInfo set [3, 0];//mod ID
|
||||
};
|
||||
_cacheNamespace setVariable [_configCategory+_className, _cachedItemInfo];
|
||||
};
|
||||
|
||||
_cachedItemInfo params ["_displayName", "_itemPicture", "_modPicture", "_modID"];
|
||||
|
||||
private _lbAdd = _ctrlPanel lbAdd _displayName;
|
||||
|
||||
_ctrlPanel lbSetData [_lbAdd, _className];
|
||||
_ctrlPanel lbSetPicture [_lbAdd, _itemPicture];
|
||||
_ctrlPanel lbSetPictureRight [_lbAdd,["",_modPicture] select (GVAR(enableModIcons))];
|
||||
_ctrlPanel lbSetValue [_lbAdd,_modID];
|
||||
_ctrlPanel lbSetTooltip [_lbAdd, format ["%1\n%2", _displayName, _className]];
|
223
addons/arsenal/functions/fnc_addVirtualItems.sqf
Normal file
223
addons/arsenal/functions/fnc_addVirtualItems.sqf
Normal file
@ -0,0 +1,223 @@
|
||||
/*
|
||||
* Author: Alganthe, Dedmen
|
||||
* Add virtual items to the provided target.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Target <OBJECT>
|
||||
* 1: Items <ARRAY of strings> <BOOL>
|
||||
* 2: Add globally <BOOL>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [_box, ["item1", "item2", "itemN"]] call ace_arsenal_fnc_addVirtualItems
|
||||
* [_box, true, false] call ace_arsenal_fnc_addVirtualItems
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params [["_object", objNull, [objNull]], ["_items", [], [true, []]], ["_global", false, [false]]];
|
||||
|
||||
if (_object == objNull) exitWith {};
|
||||
if (_items isEqualType [] && {count _items == 0}) exitWith {};
|
||||
|
||||
private _cargo = _object getVariable [QGVAR(virtualItems), [
|
||||
[[], [], []], // Weapons 0, primary, secondary, handgun
|
||||
[[], [], [], []], // WeaponAccessories 1, optic,side,muzzle,bipod
|
||||
[ ], // Magazines 2
|
||||
[ ], // Headgear 3
|
||||
[ ], // Uniform 4
|
||||
[ ], // Vest 5
|
||||
[ ], // Backpacks 6
|
||||
[ ], // Goggles 7
|
||||
[ ], // NVGs 8
|
||||
[ ], // Binoculars 9
|
||||
[ ], // Map 10
|
||||
[ ], // Compass 11
|
||||
[ ], // Radio slot 12
|
||||
[ ], // Watch slot 13
|
||||
[ ], // Comms slot 14
|
||||
[ ], // WeaponThrow 15
|
||||
[ ], // WeaponPut 16
|
||||
[ ] // InventoryItems 17
|
||||
]];
|
||||
|
||||
private _configCfgWeapons = configFile >> "CfgWeapons"; //Save this lookup in variable for perf improvement
|
||||
|
||||
if (_items isEqualType true && {_items}) then {
|
||||
private _configItems = uiNamespace getVariable QGVAR(configItems);
|
||||
|
||||
{
|
||||
(_x select 0) append (_x select 1);
|
||||
(_x select 2) set [(_x select 3), (_x select 0) arrayIntersect (_x select 0)];
|
||||
} forEach [
|
||||
[(_cargo select 0 select 0),(_configItems select 0 select 0), _cargo select 0, 0],
|
||||
[(_cargo select 0 select 1),(_configItems select 0 select 1), _cargo select 0, 1],
|
||||
[(_cargo select 0 select 2),(_configItems select 0 select 2), _cargo select 0, 2],
|
||||
[(_cargo select 1 select 0),(_configItems select 1 select 0), _cargo select 1, 0],
|
||||
[(_cargo select 1 select 1),(_configItems select 1 select 1), _cargo select 1, 1],
|
||||
[(_cargo select 1 select 2),(_configItems select 1 select 2), _cargo select 1, 2],
|
||||
[(_cargo select 1 select 3),(_configItems select 1 select 3), _cargo select 1, 3]
|
||||
];
|
||||
|
||||
for "_index" from 2 to 17 do {
|
||||
(_cargo select _index) append (_configItems select _index);
|
||||
_cargo set [_index, (_cargo select _index) arrayIntersect (_cargo select _index)];
|
||||
};
|
||||
|
||||
} else {
|
||||
{
|
||||
if (_x isEqualType "") then {
|
||||
private _configItemInfo = _configCfgWeapons >> _x >> "ItemInfo";
|
||||
private _simulationType = getText (_configCfgWeapons >> _x >> "simulation");
|
||||
switch true do {
|
||||
case (isClass (_configCfgWeapons >> _x)): {
|
||||
switch true do {
|
||||
/* Weapon acc */
|
||||
case (
|
||||
isClass (_configItemInfo) &&
|
||||
{(getNumber (_configItemInfo >> "type")) in [101, 201, 301, 302]} &&
|
||||
{!(_x isKindOf ["CBA_MiscItem", (_configCfgWeapons)])}
|
||||
): {
|
||||
switch (getNumber (_configItemInfo >> "type")) do {
|
||||
case 201: {
|
||||
(_cargo select 1) select 0 pushBackUnique _x;
|
||||
};
|
||||
case 301: {
|
||||
(_cargo select 1) select 1 pushBackUnique _x;
|
||||
};
|
||||
case 101: {
|
||||
(_cargo select 1) select 2 pushBackUnique _x;
|
||||
};
|
||||
case 302: {
|
||||
(_cargo select 1) select 3 pushBackUnique _x;
|
||||
};
|
||||
};
|
||||
};
|
||||
/* Headgear */
|
||||
case (isClass (_configItemInfo) &&
|
||||
{getNumber (_configItemInfo >> "type") == 605}): {
|
||||
(_cargo select 3) pushBackUnique _x;
|
||||
};
|
||||
/* Uniform */
|
||||
case (isClass (_configItemInfo) &&
|
||||
{getNumber (_configItemInfo >> "type") == 801}): {
|
||||
(_cargo select 4) pushBackUnique _x;
|
||||
};
|
||||
/* Vest */
|
||||
case (isClass (_configItemInfo) &&
|
||||
{getNumber (_configItemInfo >> "type") == 701}): {
|
||||
(_cargo select 5) pushBackUnique _x;
|
||||
};
|
||||
/* NVgs */
|
||||
case (_simulationType == "NVGoggles"): {
|
||||
(_cargo select 8) pushBackUnique _x;
|
||||
};
|
||||
/* Binos */
|
||||
case (_simulationType == "Binocular" ||
|
||||
{(_simulationType == 'Weapon') && {(getNumber (_configCfgWeapons >> _x >> 'type') == 4096)}}): {
|
||||
(_cargo select 9) pushBackUnique _x;
|
||||
};
|
||||
/* Map */
|
||||
case (_simulationType == "ItemMap"): {
|
||||
(_cargo select 10) pushBackUnique _x;
|
||||
};
|
||||
/* Compass */
|
||||
case (_simulationType == "ItemCompass"): {
|
||||
(_cargo select 11) pushBackUnique _x;
|
||||
};
|
||||
/* Radio */
|
||||
case (_simulationType == "ItemRadio"): {
|
||||
(_cargo select 12) pushBackUnique _x;
|
||||
};
|
||||
/* Watch */
|
||||
case (_simulationType == "ItemWatch"): {
|
||||
(_cargo select 13) pushBackUnique _x;
|
||||
};
|
||||
/* GPS */
|
||||
case (_simulationType == "ItemGPS"): {
|
||||
(_cargo select 14) pushBackUnique _x;
|
||||
};
|
||||
/* UAV terminals */
|
||||
case (isClass (_configItemInfo) &&
|
||||
{getNumber (_configItemInfo >> "type") == 621}): {
|
||||
(_cargo select 14) pushBackUnique _x;
|
||||
};
|
||||
/* Weapon, at the bottom to avoid adding binos */
|
||||
case (isClass (_configCfgWeapons >> _x >> "WeaponSlotsInfo") &&
|
||||
{getNumber (_configCfgWeapons >> _x >> 'type') != 4096}): {
|
||||
switch (getNumber (_configCfgWeapons >> _x >> "type")) do {
|
||||
case 1: {
|
||||
(_cargo select 0) select 0 pushBackUnique ([_x] call bis_fnc_baseWeapon);
|
||||
};
|
||||
case 2: {
|
||||
(_cargo select 0) select 2 pushBackUnique ([_x] call bis_fnc_baseWeapon);
|
||||
};
|
||||
case 4: {
|
||||
(_cargo select 0) select 1 pushBackUnique ([_x] call bis_fnc_baseWeapon);
|
||||
};
|
||||
};
|
||||
};
|
||||
/* Misc items */
|
||||
case (
|
||||
isClass (_configItemInfo) &&
|
||||
((getNumber (_configItemInfo >> "type")) in [101, 201, 301, 302] &&
|
||||
{(_x isKindOf ["CBA_MiscItem", (_configCfgWeapons)])}) ||
|
||||
{(getNumber (_configItemInfo >> "type")) in [401, 619, 620]} ||
|
||||
{(getText (_configCfgWeapons >> _x >> "simulation")) == "ItemMineDetector"}
|
||||
): {
|
||||
(_cargo select 17) pushBackUnique _x;
|
||||
};
|
||||
};
|
||||
};
|
||||
case (isClass (configFile >> "CfgMagazines" >> _x)): {
|
||||
// Lists to check against
|
||||
private _grenadeList = [];
|
||||
{
|
||||
_grenadeList append getArray (_configCfgWeapons >> "Throw" >> _x >> "magazines");
|
||||
false
|
||||
} count getArray (_configCfgWeapons >> "Throw" >> "muzzles");
|
||||
|
||||
private _putList = [];
|
||||
{
|
||||
_putList append getArray (_configCfgWeapons >> "Put" >> _x >> "magazines");
|
||||
false
|
||||
} count getArray (_configCfgWeapons >> "Put" >> "muzzles");
|
||||
|
||||
// Check what the magazine actually is
|
||||
switch true do {
|
||||
// Rifle, handgun, secondary weapons mags
|
||||
case (
|
||||
(getNumber (configFile >> "CfgMagazines" >> _x >> "type") in [256,512,1536,16]) &&
|
||||
{!(_x in _grenadeList)} &&
|
||||
{!(_x in _putList)}
|
||||
): {
|
||||
(_cargo select 2) pushBackUnique _x;
|
||||
};
|
||||
// Grenades
|
||||
case (_x in _grenadeList): {
|
||||
(_cargo select 15) pushBackUnique _x;
|
||||
};
|
||||
// Put
|
||||
case (_x in _putList): {
|
||||
(_cargo select 16) pushBackUnique _x;
|
||||
};
|
||||
};
|
||||
};
|
||||
case (isClass (configFile >> "CfgVehicles" >> _x)): {
|
||||
if (getText (configFile >> "CfgVehicles" >> _x >> "vehicleClass") == "Backpacks") then {
|
||||
(_cargo select 6) pushBackUnique _x;
|
||||
};
|
||||
};
|
||||
case (isClass (configFile >> "CfgGlasses" >> _x)): {
|
||||
(_cargo select 7) pushBackUnique _x;
|
||||
};
|
||||
};
|
||||
};
|
||||
} foreach _items;
|
||||
};
|
||||
|
||||
_object setVariable [QGVAR(virtualItems), _cargo, _global];
|
92
addons/arsenal/functions/fnc_buttonCargo.sqf
Normal file
92
addons/arsenal/functions/fnc_buttonCargo.sqf
Normal file
@ -0,0 +1,92 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Add or remove item(s) when the + or - button is pressed in the right panel.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Arsenal display <DISPLAY>
|
||||
* 1: Add or remove <SCALAR> (-1: remove, 1: Add)
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["_display", "_addOrRemove"];
|
||||
|
||||
private _load = 0;
|
||||
private _maxLoad = "";
|
||||
private _items = [];
|
||||
private _ctrlList = (_display displayCtrl IDC_rightTabContentListnBox);
|
||||
private _lnbCurSel = lnbCurSelRow _ctrlList;
|
||||
private _item = _ctrlList lnbData [_lnbCurSel, 0];
|
||||
|
||||
if ((_ctrlList lnbValue [_lnbCurSel, 2]) == 1 && {_addOrRemove == 1}) exitWith {};
|
||||
|
||||
// Update item count and currentItems array
|
||||
switch GVAR(currentLeftPanel) do {
|
||||
|
||||
case IDC_buttonUniform : {
|
||||
if (_addOrRemove > 0) then {
|
||||
for "_count" from 1 to ([1, 5] select (GVAR(shiftState))) do {
|
||||
GVAR(center) addItemToUniform _item;
|
||||
};
|
||||
} else {
|
||||
for "_count" from 1 to ([1, 5] select (GVAR(shiftState))) do {
|
||||
GVAR(center) removeItemFromUniform _item;
|
||||
};
|
||||
};
|
||||
|
||||
_load = loadUniform GVAR(center);
|
||||
_maxLoad = gettext (configfile >> "CfgWeapons" >> uniform GVAR(center) >> "ItemInfo" >> "containerClass");
|
||||
_items = uniformItems GVAR(center);
|
||||
GVAR(currentItems) set [15 ,_items];
|
||||
};
|
||||
|
||||
case IDC_buttonVest : {
|
||||
if (_addOrRemove > 0) then {
|
||||
for "_count" from 1 to ([1, 5] select (GVAR(shiftState))) do {
|
||||
GVAR(center) addItemToVest _item;
|
||||
};
|
||||
} else {
|
||||
for "_count" from 1 to ([1, 5] select (GVAR(shiftState))) do {
|
||||
GVAR(center) removeItemFromVest _item;
|
||||
};
|
||||
};
|
||||
|
||||
_load = loadVest GVAR(center);
|
||||
_maxLoad = gettext (configfile >> "CfgWeapons" >> vest GVAR(center) >> "ItemInfo" >> "containerClass");
|
||||
_items = vestItems GVAR(center);
|
||||
GVAR(currentItems) set [16,_items];
|
||||
};
|
||||
|
||||
case IDC_buttonBackpack : {
|
||||
if (_addOrRemove > 0) then {
|
||||
for "_count" from 1 to ([1, 5] select (GVAR(shiftState))) do {
|
||||
GVAR(center) addItemToBackpack _item;
|
||||
};
|
||||
} else {
|
||||
for "_count" from 1 to ([1, 5] select (GVAR(shiftState))) do {
|
||||
GVAR(center) removeItemFromBackpack _item;
|
||||
};
|
||||
};
|
||||
|
||||
_load = loadBackpack GVAR(center);
|
||||
_maxLoad = backpack GVAR(center);
|
||||
_items = backpackItems GVAR(center);
|
||||
GVAR(currentItems) set [17,_items];
|
||||
};
|
||||
};
|
||||
|
||||
// Update progress bar status, weight info
|
||||
private _loadIndicatorBarCtrl = _display displayCtrl IDC_loadIndicatorBar;
|
||||
_loadIndicatorBarCtrl progressSetPosition _load;
|
||||
|
||||
private _value = {_x == _item} count _items;
|
||||
_ctrlList lnbSetText [[_lnbCurSel, 2],str _value];
|
||||
|
||||
[QGVAR(cargoChanged), [_display, _item, _addOrRemove, GVAR(shiftState)]] call CBA_fnc_localEvent;
|
||||
|
||||
[_ctrlList, _maxLoad] call FUNC(updateRightPanel);
|
62
addons/arsenal/functions/fnc_buttonClearAll.sqf
Normal file
62
addons/arsenal/functions/fnc_buttonClearAll.sqf
Normal file
@ -0,0 +1,62 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Clear the current container.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Arsenal display <DISPLAY>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["_display"];
|
||||
|
||||
// Clear container
|
||||
switch (GVAR(currentLeftPanel)) do {
|
||||
case IDC_buttonUniform: {
|
||||
{GVAR(center) removeItemFromUniform _x} foreach (uniformItems GVAR(center));
|
||||
GVAR(currentItems) set [15, []];
|
||||
};
|
||||
case IDC_buttonVest: {
|
||||
{GVAR(center) removeItemFromVest _x} foreach (vestItems GVAR(center));
|
||||
GVAR(currentItems) set [16, []];
|
||||
};
|
||||
case IDC_buttonBackpack: {
|
||||
{GVAR(center) removeItemFromBackpack _x} foreach (backpackItems GVAR(center));
|
||||
GVAR(currentItems) set [17, []];
|
||||
};
|
||||
};
|
||||
|
||||
// Clear number of owned items
|
||||
private _ctrlList = _display displayCtrl IDC_rightTabContentListnBox;
|
||||
|
||||
for "_l" from 0 to (lbSize _ctrlList - 1) do {
|
||||
_ctrlList lnbSetText [[_l, 2], str 0];
|
||||
};
|
||||
|
||||
private _removeAllCtrl = _display displayCtrl IDC_buttonRemoveAll;
|
||||
_removeAllCtrl ctrlSetFade 1;
|
||||
_removeAllCtrl ctrlCommit FADE_DELAY;
|
||||
|
||||
// Update load bar
|
||||
private _loadIndicatorBarCtrl = _display displayCtrl IDC_loadIndicatorBar;
|
||||
_loadIndicatorBarCtrl progressSetPosition 0;
|
||||
|
||||
private _maxLoad = switch (GVAR(currentLeftPanel)) do {
|
||||
case IDC_buttonUniform: {
|
||||
gettext (configfile >> "CfgWeapons" >> uniform GVAR(center) >> "ItemInfo" >> "containerClass")
|
||||
};
|
||||
case IDC_buttonVest: {
|
||||
gettext (configfile >> "CfgWeapons" >> vest GVAR(center) >> "ItemInfo" >> "containerClass")
|
||||
};
|
||||
case IDC_buttonBackpack: {
|
||||
backpack GVAR(center)
|
||||
};
|
||||
};
|
||||
|
||||
private _control = _display displayCtrl IDC_rightTabContentListnBox;
|
||||
[_control, _maxLoad] call FUNC(updateRightPanel);
|
51
addons/arsenal/functions/fnc_buttonExport.sqf
Normal file
51
addons/arsenal/functions/fnc_buttonExport.sqf
Normal file
@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Export current loadout / default loadouts list to clipboard.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Arsenal display <DISPLAY>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_display"];
|
||||
|
||||
if (GVAR(shiftState)) then {
|
||||
|
||||
if (isNil QGVAR(defaultLoadoutsList) || {GVAR(defaultLoadoutsList) isEqualTo []}) exitWith {
|
||||
[_display, localize LSTRING(exportDefaultError)] call FUNC(message);
|
||||
};
|
||||
|
||||
private _listLength = count GVAR(defaultLoadoutsList);
|
||||
for "_index" from -1 to _listLength do {
|
||||
|
||||
switch true do {
|
||||
case (_index == -1): {
|
||||
"ace_clipboard" callExtension (format ["[%1", endl]);
|
||||
};
|
||||
|
||||
case (_index == _listLength): {
|
||||
"ace_clipboard" callExtension "];";
|
||||
};
|
||||
|
||||
default {
|
||||
"ace_clipboard" callExtension ([" ",str (GVAR(defaultLoadoutsList) select _index), [",", ""] select (_index == _listLength - 1), endl] joinString "");
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
"ace_clipboard" callExtension "--COMPLETE--";
|
||||
|
||||
[_display, localize LSTRING(exportDefault)] call FUNC(message);
|
||||
} else {
|
||||
|
||||
private _export = str getUnitLoadout GVAR(center);
|
||||
"ace_clipboard" callExtension (_export + ";");
|
||||
"ace_clipboard" callExtension "--COMPLETE--";
|
||||
|
||||
[_display, localize LSTRING(exportCurrent)] call FUNC(message);
|
||||
};
|
56
addons/arsenal/functions/fnc_buttonHide.sqf
Normal file
56
addons/arsenal/functions/fnc_buttonHide.sqf
Normal file
@ -0,0 +1,56 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Hide / show arsenal interface.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Arsenal display <DISPLAY>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["_display"];
|
||||
|
||||
private _showToggle = !ctrlShown (_display displayCtrl IDC_menuBar);
|
||||
|
||||
if (_showToggle) then {
|
||||
[_display, _display displayCtrl GVAR(currentLeftPanel)] call FUNC(populatePanel)
|
||||
};
|
||||
|
||||
{
|
||||
private _ctrl = _display displayctrl _x;
|
||||
_ctrl ctrlshow _showToggle;
|
||||
_ctrl ctrlcommit 0.15;
|
||||
} foreach [
|
||||
IDC_blockLeftFrame,
|
||||
IDC_blockLeftBackground,
|
||||
IDC_blockRightFrame,
|
||||
IDC_blockRighttBackground,
|
||||
IDC_loadIndicator,
|
||||
IDC_totalWeight,
|
||||
IDC_menuBar,
|
||||
IDC_infoBox,
|
||||
IDC_leftTabContent,
|
||||
IDC_rightTabContent,
|
||||
IDC_rightTabContentListnBox,
|
||||
IDC_sortLeftTab,
|
||||
IDC_sortRightTab,
|
||||
IDC_leftSearchbarButton,
|
||||
IDC_rightSearchbarButton,
|
||||
IDC_leftSearchbar,
|
||||
IDC_rightSearchbar,
|
||||
IDC_tabLeft,
|
||||
RIGHT_PANEL_ACC_BACKGROUND_IDCS,
|
||||
RIGHT_PANEL_ACC_IDCS,
|
||||
RIGHT_PANEL_ITEMS_BACKGROUND_IDCS,
|
||||
RIGHT_PANEL_ITEMS_IDCS,
|
||||
IDC_buttonRemoveAll,
|
||||
IDC_buttonCurrentMag,
|
||||
IDC_buttonCurrentMag2,
|
||||
IDC_iconBackgroundCurrentMag,
|
||||
IDC_iconBackgroundCurrentMag2
|
||||
];
|
111
addons/arsenal/functions/fnc_buttonImport.sqf
Normal file
111
addons/arsenal/functions/fnc_buttonImport.sqf
Normal file
@ -0,0 +1,111 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Import loadout / default loadouts list from clipboard.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Arsenal display <DISPLAY>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["_display"];
|
||||
|
||||
private _data = call (compile copyFromClipboard);
|
||||
|
||||
if (isNil "_data" || {!(_data isEqualType [])}) exitWith {
|
||||
[_display, localize LSTRING(importFormatError)] call FUNC(message);
|
||||
};
|
||||
|
||||
if (GVAR(shiftState) && {is3DEN}) then {
|
||||
|
||||
{
|
||||
if (
|
||||
count _x == 2 &&
|
||||
{_x select 0 isEqualType ""} &&
|
||||
{_x select 0 != ""} &&
|
||||
{_x select 1 isEqualType []} &&
|
||||
{count (_x select 1) == 10}
|
||||
) then {
|
||||
|
||||
_x params ["_loadoutName", "_loadout"];
|
||||
|
||||
private _sameNameLoadoutsList = GVAR(defaultLoadoutsList) select {_x select 0 == _loadoutName};
|
||||
|
||||
if (count _sameNameLoadoutsList == 0) then {
|
||||
GVAR(defaultLoadoutsList) pushBack [_loadoutName, _loadout];
|
||||
} else {
|
||||
GVAR(defaultLoadoutsList) set [GVAR(defaultLoadoutsList) find (_sameNameLoadoutsList select 0), _loadoutName, _loadout];
|
||||
};
|
||||
};
|
||||
} foreach _data;
|
||||
|
||||
[_display, localize LSTRING(importedDefault)] call FUNC(message);
|
||||
set3DENMissionAttributes [[QGVAR(DummyCategory), QGVAR(DefaultLoadoutsListAttribute), GVAR(defaultLoadoutsList)]];
|
||||
|
||||
} else {
|
||||
if (count _data == 10) then {
|
||||
GVAR(center) setUnitLoadout _data;
|
||||
|
||||
GVAR(currentItems) = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", [], [], [], [], [], []];
|
||||
for "_index" from 0 to 15 do {
|
||||
switch (_index) do {
|
||||
case 0;
|
||||
case 1;
|
||||
case 2:{
|
||||
GVAR(currentItems) set [_index, ((LIST_DEFAULTS select 0) select _index)];
|
||||
};
|
||||
case 3;
|
||||
case 4;
|
||||
case 5;
|
||||
case 6;
|
||||
case 7;
|
||||
case 8;
|
||||
case 9: {
|
||||
GVAR(currentItems) set [_index, (LIST_DEFAULTS select _index) select 0];
|
||||
|
||||
};
|
||||
case 10: {
|
||||
{(GVAR(currentItems) select 15) pushBack _x} forEach (uniformItems GVAR(center));
|
||||
};
|
||||
case 11: {
|
||||
{(GVAR(currentItems) select 16) pushBack _x} forEach (vestItems GVAR(center));
|
||||
};
|
||||
case 12: {
|
||||
{(GVAR(currentItems) select 17) pushBack _x} forEach (backpackItems GVAR(center));
|
||||
};
|
||||
case 13: {
|
||||
GVAR(currentItems) set [18, (primaryWeaponItems GVAR(center)) + (primaryWeaponMagazine GVAR(center))];
|
||||
};
|
||||
case 14: {
|
||||
GVAR(currentItems) set [19, (secondaryWeaponItems GVAR(center)) + (secondaryWeaponMagazine GVAR(center))];
|
||||
};
|
||||
case 15: {
|
||||
GVAR(currentItems) set [20, (handgunItems GVAR(center)) + (handgunMagazine GVAR(center))];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
{
|
||||
private _simulationType = getText (configFile >> "CfgWeapons" >> _x >> "simulation");
|
||||
private _index = 10 + (["itemmap", "itemcompass", "itemradio", "itemwatch", "itemgps"] find (tolower _simulationType));
|
||||
|
||||
GVAR(currentItems) set [_index, _x];
|
||||
} foreach (assignedItems GVAR(center));
|
||||
|
||||
call FUNC(updateUniqueItemsList);
|
||||
|
||||
// Reapply insignia
|
||||
[GVAR(center), ""] call bis_fnc_setUnitInsignia;
|
||||
[GVAR(center), GVAR(currentInsignia)] call bis_fnc_setUnitInsignia;
|
||||
|
||||
[_display, _display displayCtrl GVAR(currentLeftPanel)] call FUNC(fillLeftPanel);
|
||||
|
||||
[_display, localize LSTRING(importedCurrent)] call FUNC(message);
|
||||
};
|
||||
};
|
55
addons/arsenal/functions/fnc_buttonLoadoutsDelete.sqf
Normal file
55
addons/arsenal/functions/fnc_buttonLoadoutsDelete.sqf
Normal file
@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Delete / unshare loadout currently selected.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Arsenal display <DISPLAY>
|
||||
* 1: Button control <CONTROL>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["_display", "_control"];
|
||||
|
||||
if !(ctrlEnabled _control) exitWith {};
|
||||
|
||||
private _contentPanelCtrl = _display displayCtrl IDC_contentPanel;
|
||||
private _contentPanelCursSel = lnbCurSelRow _contentPanelCtrl;
|
||||
private _loadoutName = _contentPanelCtrl lnbText [_contentPanelCursSel, 1];
|
||||
|
||||
if (GVAR(currentLoadoutsTab) != IDC_buttonSharedLoadouts) then {
|
||||
|
||||
if (is3DEN && {GVAR(currentLoadoutsTab) == IDC_buttonDefaultLoadouts}) then {
|
||||
GVAR(defaultLoadoutsList) deleteAt (GVAR(defaultLoadoutsList) find ((GVAR(defaultLoadoutsList) select {_x select 0 == _loadoutName}) select 0));
|
||||
set3DENMissionAttributes [[QGVAR(DummyCategory), QGVAR(DefaultLoadoutsListAttribute), GVAR(defaultLoadoutsList)]];
|
||||
} else {
|
||||
private _data = profileNamespace getVariable [QGVAR(saved_loadouts), []];
|
||||
_data deleteAt (_data find ((_data select {_x select 0 == _loadoutName}) select 0));
|
||||
};
|
||||
|
||||
_contentPanelCtrl setVariable [_loadoutName + str GVAR(currentLoadoutsTab), nil];
|
||||
_contentPanelCtrl lnbDeleteRow _contentPanelCursSel;
|
||||
_contentPanelCtrl lnbSetCurSelRow (_contentPanelCursSel);
|
||||
|
||||
[(findDisplay IDD_ace_arsenal), [localize LSTRING(loadoutDeleted), _loadoutName] joinString " "] call FUNC(message);
|
||||
} else {
|
||||
|
||||
private _profileName = profileName; // GVAR(center) could be a remote unit
|
||||
private _loadoutVar = _profileName + _loadoutName;
|
||||
private _sharedLoadoutsVars = GVAR(sharedLoadoutsNamespace) getVariable QGVAR(sharedLoadoutsVars);
|
||||
|
||||
GVAR(sharedLoadoutsNamespace) setVariable [_loadoutVar, nil, true];
|
||||
GVAR(sharedLoadoutsNamespace) setVariable [QGVAR(sharedLoadoutsVars), _sharedLoadoutsVars - [_loadoutVar], true];
|
||||
|
||||
_contentPanelCtrl lnbDeleteRow _contentPanelCursSel;
|
||||
_contentPanelCtrl lnbSetCurSelRow (_contentPanelCursSel);
|
||||
|
||||
[QGVAR(loadoutUnshared), [_contentPanelCtrl, profileName, _loadoutName]] call CBA_fnc_remoteEvent;
|
||||
|
||||
[(findDisplay IDD_ace_arsenal), [localize LSTRING(loadoutUnshared), _loadoutName] joinString " "] call FUNC(message);
|
||||
};
|
90
addons/arsenal/functions/fnc_buttonLoadoutsLoad.sqf
Normal file
90
addons/arsenal/functions/fnc_buttonLoadoutsLoad.sqf
Normal file
@ -0,0 +1,90 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Load selected loadout.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Arsenal display <DISPLAY>
|
||||
* 1: Button control <CONTROL>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["_display", "_control"];
|
||||
|
||||
if !(ctrlEnabled _control) exitWith {};
|
||||
|
||||
private _contentPanelCtrl = _display displayCtrl IDC_contentPanel;
|
||||
private _curSel = lnbCurSelRow _contentPanelCtrl;
|
||||
private _loadoutName = _contentPanelCtrl lnbText [_curSel, 1];
|
||||
|
||||
private _loadout = switch GVAR(currentLoadoutsTab) do {
|
||||
|
||||
case IDC_buttonMyLoadouts;
|
||||
case IDC_buttonDefaultLoadouts:{
|
||||
(_contentPanelCtrl getVariable _loadoutName + str GVAR(currentLoadoutsTab)) select 0
|
||||
};
|
||||
|
||||
case IDC_buttonSharedLoadouts:{
|
||||
(GVAR(sharedLoadoutsNamespace) getVariable ((_contentPanelCtrl lnbText [_curSel, 0]) + (_contentPanelCtrl lnbText [_curSel, 1]))) select 2
|
||||
};
|
||||
};
|
||||
|
||||
GVAR(center) setUnitLoadout [_loadout, true];
|
||||
|
||||
GVAR(currentItems) = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", [], [], [], [], [], []];
|
||||
for "_index" from 0 to 15 do {
|
||||
switch (_index) do {
|
||||
case 0;
|
||||
case 1;
|
||||
case 2:{
|
||||
GVAR(currentItems) set [_index, ((LIST_DEFAULTS select 0) select _index)];
|
||||
};
|
||||
case 3;
|
||||
case 4;
|
||||
case 5;
|
||||
case 6;
|
||||
case 7;
|
||||
case 8;
|
||||
case 9: {
|
||||
GVAR(currentItems) set [_index, (LIST_DEFAULTS select _index) select 0];
|
||||
|
||||
};
|
||||
case 10: {
|
||||
{(GVAR(currentItems) select 15) pushBack _x} forEach (uniformItems GVAR(center));
|
||||
};
|
||||
case 11: {
|
||||
{(GVAR(currentItems) select 16) pushBack _x} forEach (vestItems GVAR(center));
|
||||
};
|
||||
case 12: {
|
||||
{(GVAR(currentItems) select 17) pushBack _x} forEach (backpackItems GVAR(center));
|
||||
};
|
||||
case 13: {
|
||||
GVAR(currentItems) set [18, (primaryWeaponItems GVAR(center)) + (primaryWeaponMagazine GVAR(center))];
|
||||
};
|
||||
case 14: {
|
||||
GVAR(currentItems) set [19, (secondaryWeaponItems GVAR(center)) + (secondaryWeaponMagazine GVAR(center))];
|
||||
};
|
||||
case 15: {
|
||||
GVAR(currentItems) set [20, (handgunItems GVAR(center)) + (handgunMagazine GVAR(center))];
|
||||
};
|
||||
};
|
||||
};
|
||||
{
|
||||
private _simulationType = getText (configFile >> "CfgWeapons" >> _x >> "simulation");
|
||||
private _index = 10 + (["itemmap", "itemcompass", "itemradio", "itemwatch", "itemgps"] find (tolower _simulationType));
|
||||
|
||||
GVAR(currentItems) set [_index, _x];
|
||||
} foreach (assignedItems GVAR(center));
|
||||
|
||||
call FUNC(updateUniqueItemsList);
|
||||
|
||||
// Reapply insignia
|
||||
[GVAR(center), ""] call bis_fnc_setUnitInsignia;
|
||||
[GVAR(center), GVAR(currentInsignia)] call bis_fnc_setUnitInsignia;
|
||||
|
||||
[(findDisplay IDD_ace_arsenal), [localize LSTRING(loadoutLoaded), _loadoutName] joinString " "] call FUNC(message);
|
70
addons/arsenal/functions/fnc_buttonLoadoutsRename.sqf
Normal file
70
addons/arsenal/functions/fnc_buttonLoadoutsRename.sqf
Normal file
@ -0,0 +1,70 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Rename selected loadout.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Arsenal display <DISPLAY>
|
||||
* 1: Button control <CONTROL>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["_display", "_control"];
|
||||
|
||||
if !(ctrlEnabled _control) exitWith {};
|
||||
|
||||
// Retrieve panel data
|
||||
private _contentPanelCtrl = _display displayCtrl IDC_contentPanel;
|
||||
private _curSelRow = lnbCurSelRow _contentPanelCtrl;
|
||||
private _loadoutName = _contentPanelCtrl lnbText [_curSelRow, 1];
|
||||
|
||||
private _editBoxCtrl = _display displayCtrl IDC_textEditBox;
|
||||
private _editBoxContent = ctrlText _editBoxCtrl;
|
||||
|
||||
private _data = [profileNamespace getVariable [QGVAR(saved_loadouts), []], GVAR(defaultLoadoutsList)] select (GVAR(currentLoadoutsTab) == IDC_buttonDefaultLoadouts && {is3DEN});
|
||||
private _similarLoadouts = _data select {_x select 0 == _editBoxContent};
|
||||
|
||||
if (count _similarLoadouts > 0) exitWith {
|
||||
[(findDisplay IDD_ace_arsenal), localize LSTRING(renameExistError)] call FUNC(message);
|
||||
};
|
||||
|
||||
// Update loadout info in profile / 3DEN and list namespaces
|
||||
private _loadoutToRename = (_data select {_x select 0 == _loadoutName}) select 0;
|
||||
(_contentPanelCtrl getVariable (_loadoutName + str GVAR(currentLoadoutsTab))) params ["_loadout", "_nullItemsAmount", "_unavailableItemsAmount", "_nullItemsList", "_unavailableItemsList"];
|
||||
|
||||
_data set [_data find _loadoutToRename, [_editBoxContent, (_loadoutToRename select 1)]];
|
||||
_contentPanelCtrl setVariable [_loadoutName + str GVAR(currentLoadoutsTab), nil];
|
||||
_contentPanelCtrl setVariable [_editBoxContent + str GVAR(currentLoadoutsTab), [_loadout, _nullItemsAmount, _unavailableItemsAmount, _nullItemsList, _unavailableItemsList]];
|
||||
|
||||
// Add new row
|
||||
_contentPanelCtrl lnbDeleteRow _curSelRow;
|
||||
private _newRow = _contentPanelCtrl lnbAddRow ["",_editBoxContent];
|
||||
|
||||
ADD_LOADOUTS_LIST_PICTURES
|
||||
|
||||
if (_nullItemsAmount > 0) then {
|
||||
|
||||
_contentPanelCtrl lnbSetColor [[_newRow, 1], [1, 0, 0, 0.8]];
|
||||
} else {
|
||||
|
||||
if (_unavailableItemsAmount > 0) then {
|
||||
_contentPanelCtrl lnbSetColor [[_newRow, 1], [1, 1, 1, 0.25]];
|
||||
};
|
||||
};
|
||||
|
||||
// Sort and select the current row
|
||||
_contentPanelCtrl lnbSort [1, false];
|
||||
for '_i' from 0 to (((lnbsize _contentPanelCtrl) select 0) - 1) do {
|
||||
if ((_contentPanelCtrl lnbText [_i, 1]) == _editBoxContent) exitwith {_contentPanelCtrl lnbSetCurSelRow _i};
|
||||
};
|
||||
|
||||
if (is3DEN && {GVAR(currentLoadoutsTab) == IDC_buttonDefaultLoadouts}) then {
|
||||
set3DENMissionAttributes [[QGVAR(DummyCategory), QGVAR(DefaultLoadoutsListAttribute), GVAR(defaultLoadoutsList)]];
|
||||
};
|
||||
|
||||
[(findDisplay IDD_ace_arsenal), [_loadoutName, localize LSTRING(loadoutRenamed) ,_editBoxContent] joinString " "] call FUNC(message);
|
288
addons/arsenal/functions/fnc_buttonLoadoutsSave.sqf
Normal file
288
addons/arsenal/functions/fnc_buttonLoadoutsSave.sqf
Normal file
@ -0,0 +1,288 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Save selected loadout.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Arsenal display <DISPLAY>
|
||||
* 1: Button control <CONTROL>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["_display", "_control"];
|
||||
|
||||
if !(ctrlEnabled _control) exitWith {};
|
||||
|
||||
private _editBoxCtrl = _display displayCtrl IDC_textEditBox;
|
||||
private _editBoxContent = ctrlText _editBoxCtrl;
|
||||
|
||||
if (_editBoxContent == "") exitWith {
|
||||
[(findDisplay IDD_ace_arsenal), localize LSTRING(saveEmptyNameBox)] call FUNC(message);
|
||||
};
|
||||
|
||||
private _data = [+(profileNamespace getVariable [QGVAR(saved_loadouts),[]]), +(GVAR(defaultLoadoutsList))] select (GVAR(currentLoadoutsTab) == IDC_buttonDefaultLoadouts && {is3DEN});
|
||||
private _contentPanelCtrl = _display displayCtrl IDC_contentPanel;
|
||||
private _cursSelRow = lnbCurSelRow _contentPanelCtrl;
|
||||
|
||||
private _loadoutName = _contentPanelCtrl lnbText [_cursSelRow, 1];
|
||||
private _curSelLoadout = (_contentPanelCtrl getVariable (_loadoutName + str GVAR(currentLoadoutsTab))) select 0;
|
||||
private _loadout = getUnitLoadout GVAR(center);
|
||||
|
||||
private _sameNameLoadoutsList = _data select {_x select 0 == _editBoxContent};
|
||||
private _sharedLoadoutsVars = GVAR(sharedLoadoutsNamespace) getVariable QGVAR(sharedLoadoutsVars);
|
||||
|
||||
// Make sure the loadout isn't yours (public tab) or being shared (my loadouts tab)
|
||||
private _similarSharedLoadout = (profileName + _editBoxContent) in _sharedLoadoutsVars;
|
||||
if ((_contentPanelCtrl lnbText [_cursSelRow, 0]) == profileName) exitWith {
|
||||
[(findDisplay IDD_ace_arsenal), localize LSTRING(saveAuthorError)] call FUNC(message);
|
||||
};
|
||||
|
||||
if (_similarSharedLoadout) exitWith {
|
||||
[(findDisplay IDD_ace_arsenal), localize LSTRING(saveSharedError)] call FUNC(message);
|
||||
};
|
||||
|
||||
switch (GVAR(currentLoadoutsTab)) do {
|
||||
case IDC_buttonMyLoadouts:{
|
||||
|
||||
for "_dataIndex" from 0 to 10 do {
|
||||
switch (_dataIndex) do {
|
||||
|
||||
case 0;
|
||||
case 1;
|
||||
case 2;
|
||||
case 8: {
|
||||
if (count (_loadout select _dataIndex) > 0) then {
|
||||
|
||||
private _weapon = (_loadout select _dataIndex) select 0;
|
||||
if (_weapon != "") then {
|
||||
|
||||
private _baseWeapon = _weapon call BIS_fnc_baseWeapon;
|
||||
if (_weapon != _baseWeapon) then {
|
||||
(_loadout select _dataIndex) set [0, _baseWeapon];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
case 3;
|
||||
case 4;
|
||||
case 5: {
|
||||
if (count (_loadout select _dataIndex) > 0) then {
|
||||
private _containerContents = (_loadout select _dataIndex) select 1;
|
||||
|
||||
if (count _containerContents > 0) then {
|
||||
|
||||
{
|
||||
if (count _x == 2) then {
|
||||
|
||||
if ((_x select 0) isEqualType "") then {
|
||||
|
||||
private _item = (_x select 0);
|
||||
if (_item != "") then {
|
||||
|
||||
private _uniqueBaseCfgText = getText (configFile >> "CfgWeapons" >> _item >> "ace_arsenal_uniqueBase");
|
||||
if (_uniqueBaseCfgText != "") then {
|
||||
|
||||
_x set [0, _uniqueBaseCfgText];
|
||||
};
|
||||
};
|
||||
} else {
|
||||
private _weapon = (_x select 0) select 0;
|
||||
if (_weapon != "") then {
|
||||
|
||||
private _baseWeapon = _weapon call BIS_fnc_baseWeapon;
|
||||
if (_weapon != _baseWeapon) then {
|
||||
(_x select 0)set [0, _baseWeapon];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
} foreach _containerContents;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
case 9: {
|
||||
for "_subIndex" from 0 to 4 do {
|
||||
private _item = (_loadout select _dataIndex) select _subIndex;
|
||||
|
||||
if (_item != "") then {
|
||||
|
||||
private _uniqueBaseCfgText = getText (configFile >> "CfgWeapons" >> _item >> "ace_arsenal_uniqueBase");
|
||||
if (_uniqueBaseCfgText != "") then {
|
||||
|
||||
(_loadout select _dataIndex) set [_subIndex, _uniqueBaseCfgText];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
if (count _sameNameLoadoutsList == 0) then {
|
||||
_data pushBack [_editBoxContent, _loadout];
|
||||
} else {
|
||||
_data set [_data find (_sameNameLoadoutsList select 0), [[_editBoxContent, _loadoutName] select (_loadoutName isEqualTo _editBoxContent), _loadout]];
|
||||
};
|
||||
|
||||
// Delete "old" loadout row
|
||||
for '_i' from 0 to (((lnbsize _contentPanelCtrl) select 0) - 1) do {
|
||||
if ((_contentPanelCtrl lnbText [_i, 1]) == _editBoxContent) exitwith {_contentPanelCtrl lnbDeleteRow _i};
|
||||
};
|
||||
|
||||
private _newRow = _contentPanelCtrl lnbAddRow ["",_editBoxContent];
|
||||
|
||||
ADD_LOADOUTS_LIST_PICTURES
|
||||
|
||||
_contentPanelCtrl setVariable [_editBoxContent + str GVAR(currentLoadoutsTab), [_loadout] call FUNC(verifyLoadout)];
|
||||
|
||||
_contentPanelCtrl lnbSort [1, false];
|
||||
|
||||
// Select newly saved loadout
|
||||
for '_i' from 0 to (((lnbsize _contentPanelCtrl) select 0) - 1) do {
|
||||
if ((_contentPanelCtrl lnbText [_i, 1]) == _editBoxContent) exitwith {_contentPanelCtrl lnbSetCurSelRow _i};
|
||||
};
|
||||
|
||||
profileNamespace setVariable [QGVAR(saved_loadouts), _data];
|
||||
};
|
||||
|
||||
case IDC_buttonDefaultLoadouts:{
|
||||
|
||||
if (is3DEN) then {
|
||||
|
||||
private _sameNameLoadoutsList = _data select {_x select 0 == _editBoxContent};
|
||||
|
||||
for "_dataIndex" from 0 to 10 do {
|
||||
switch (_dataIndex) do {
|
||||
|
||||
case 0;
|
||||
case 1;
|
||||
case 2;
|
||||
case 8: {
|
||||
if (count (_loadout select _dataIndex) > 0) then {
|
||||
|
||||
private _weapon = (_loadout select _dataIndex) select 0;
|
||||
if (_weapon != "") then {
|
||||
|
||||
private _baseWeapon = _weapon call BIS_fnc_baseWeapon;
|
||||
if (_weapon != _baseWeapon) then {
|
||||
(_loadout select _dataIndex) set [0, _baseWeapon];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
case 3;
|
||||
case 4;
|
||||
case 5: {
|
||||
if (count (_loadout select _dataIndex) > 0) then {
|
||||
private _containerContents = (_loadout select _dataIndex) select 1;
|
||||
|
||||
if (count _containerContents > 0) then {
|
||||
|
||||
{
|
||||
if (count _x == 2) then {
|
||||
|
||||
if ((_x select 0) isEqualType "") then {
|
||||
|
||||
private _item = (_x select 0);
|
||||
if (_item != "") then {
|
||||
|
||||
private _uniqueBaseCfgText = getText (configFile >> "CfgWeapons" >> _item >> "ace_arsenal_uniqueBase");
|
||||
if (_uniqueBaseCfgText != "") then {
|
||||
|
||||
_x set [0, _uniqueBaseCfgText];
|
||||
};
|
||||
};
|
||||
} else {
|
||||
private _weapon = (_x select 0) select 0;
|
||||
if (_weapon != "") then {
|
||||
|
||||
private _baseWeapon = _weapon call BIS_fnc_baseWeapon;
|
||||
if (_weapon != _baseWeapon) then {
|
||||
(_x select 0)set [0, _baseWeapon];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
} foreach _containerContents;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
case 9: {
|
||||
for "_subIndex" from 0 to 4 do {
|
||||
private _item = (_loadout select _dataIndex) select _subIndex;
|
||||
|
||||
if (_item != "") then {
|
||||
|
||||
private _uniqueBaseCfgText = getText (configFile >> "CfgWeapons" >> _item >> "ace_arsenal_uniqueBase");
|
||||
if (_uniqueBaseCfgText != "") then {
|
||||
|
||||
(_loadout select _dataIndex) set [_subIndex, _uniqueBaseCfgText];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
if (count _sameNameLoadoutsList == 0) then {
|
||||
GVAR(defaultLoadoutsList) pushBack [_editBoxContent, _loadout];
|
||||
} else {
|
||||
GVAR(defaultLoadoutsList) set [GVAR(defaultLoadoutsList) find (_sameNameLoadoutsList select 0), [[_editBoxContent, _loadoutName] select (_loadoutName isEqualTo _editBoxContent), _loadout]];
|
||||
};
|
||||
|
||||
for '_i' from 0 to (((lnbsize _contentPanelCtrl) select 0) - 1) do {
|
||||
if ((_contentPanelCtrl lnbText [_i, 1]) == _editBoxContent) exitwith {_contentPanelCtrl lnbDeleteRow _i};
|
||||
};
|
||||
|
||||
private _newRow = _contentPanelCtrl lnbAddRow ["",_editBoxContent];
|
||||
|
||||
ADD_LOADOUTS_LIST_PICTURES
|
||||
|
||||
_contentPanelCtrl setVariable [_editBoxContent + str GVAR(currentLoadoutsTab), [_loadout] call FUNC(verifyLoadout)];
|
||||
|
||||
_contentPanelCtrl lnbSort [1, false];
|
||||
|
||||
// Select newly saved loadout
|
||||
for '_i' from 0 to (((lnbsize _contentPanelCtrl) select 0) - 1) do {
|
||||
if ((_contentPanelCtrl lnbText [_i, 1]) == _editBoxContent) exitwith {_contentPanelCtrl lnbSetCurSelRow _i};
|
||||
};
|
||||
|
||||
set3DENMissionAttributes [[QGVAR(DummyCategory), QGVAR(DefaultLoadoutsListAttribute), GVAR(defaultLoadoutsList)]];
|
||||
} else {
|
||||
|
||||
if (count _sameNameLoadoutsList == 0) then {
|
||||
_data pushBack [_editBoxContent, _curSelLoadout];
|
||||
} else {
|
||||
_data set [_data find (_sameNameLoadoutsList select 0), [[_editBoxContent, _loadoutName] select (_loadoutName isEqualTo _editBoxContent), _curSelLoadout]];
|
||||
_contentPanelCtrl setVariable [_editBoxContent + str IDC_buttonMyLoadouts, [_curSelLoadout] call FUNC(verifyLoadout)];
|
||||
};
|
||||
|
||||
profileNamespace setVariable [QGVAR(saved_loadouts), _data];
|
||||
};
|
||||
};
|
||||
|
||||
case IDC_buttonSharedLoadouts :{
|
||||
|
||||
_loadout = (GVAR(sharedLoadoutsNamespace) getVariable ((_contentPanelCtrl lnbText [_cursSelRow, 0]) + (_contentPanelCtrl lnbText [_cursSelRow, 1]))) select 2;
|
||||
|
||||
if (count _sameNameLoadoutsList == 0) then {
|
||||
_data pushBack [_editBoxContent, _loadout];
|
||||
} else {
|
||||
_data set [_data find (_sameNameLoadoutsList select 0), [[_editBoxContent, _loadoutName] select (_loadoutName isEqualTo _editBoxContent), _loadout]];
|
||||
_contentPanelCtrl setVariable [_editBoxContent + str IDC_buttonMyLoadouts, [_loadout] call FUNC(verifyLoadout)];
|
||||
};
|
||||
|
||||
profileNamespace setVariable [QGVAR(saved_loadouts), _data];
|
||||
};
|
||||
};
|
||||
[(findDisplay IDD_ace_arsenal), [localize LSTRING(loadoutSaved), _editBoxContent] joinString " "] call FUNC(message);
|
||||
private _savedLoadout = (_data select {_x select 0 == _editBoxContent}) select 0;
|
||||
[QGVAR(onLoadoutSave), [_data find _savedLoadout, _savedLoadout]] call CBA_fnc_localEvent;
|
55
addons/arsenal/functions/fnc_buttonLoadoutsShare.sqf
Normal file
55
addons/arsenal/functions/fnc_buttonLoadoutsShare.sqf
Normal file
@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Share selected loadout.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Arsenal display <DISPLAY>
|
||||
* 1: Button control <CONTROL>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["_display", "_control"];
|
||||
|
||||
if !(ctrlEnabled _control) exitWith {};
|
||||
|
||||
private _contentPanelCtrl = _display displayCtrl IDC_contentPanel;
|
||||
private _contentPanelCursSel = lnbCurSelRow _contentPanelCtrl;
|
||||
private _loadoutName = _contentPanelCtrl lnbText [_contentPanelCursSel, 1];
|
||||
private _profileName = profileName; // GVAR(center) could be a remote unit
|
||||
private _loadoutVar = _profileName + _loadoutName;
|
||||
private _sharedLoadoutsVars = +(GVAR(sharedLoadoutsNamespace) getVariable QGVAR(sharedLoadoutsVars));
|
||||
|
||||
private _loadoutIndex = _sharedLoadoutsVars find _loadoutVar;
|
||||
private _loadoutData = (_contentPanelCtrl getVariable (_loadoutName + str GVAR(currentLoadoutsTab))) select 0;
|
||||
|
||||
// Loadout set to private
|
||||
if (_loadoutIndex > -1) then {
|
||||
GVAR(sharedLoadoutsNamespace) setVariable [_loadoutVar, nil, true];
|
||||
GVAR(sharedLoadoutsNamespace) setVariable [QGVAR(sharedLoadoutsVars), _sharedLoadoutsVars - [_loadoutVar], true];
|
||||
|
||||
_contentPanelCtrl lnbSetPicture [[_contentPanelCursSel, 0], QPATHTOF(data\iconPublicBlank.paa)];
|
||||
_contentPanelCtrl lnbSetValue [[_contentPanelCursSel, 0], 0];
|
||||
[QGVAR(loadoutUnshared), [_contentPanelCtrl, profileName, _loadoutName]] call CBA_fnc_remoteEvent;
|
||||
|
||||
// Loadout set to public
|
||||
} else {
|
||||
GVAR(sharedLoadoutsNamespace) setVariable [_loadoutVar, [_profileName ,_loadoutName , _loadoutData], true];
|
||||
_sharedLoadoutsVars pushBackUnique _loadoutVar;
|
||||
GVAR(sharedLoadoutsNamespace) setVariable [QGVAR(sharedLoadoutsVars), _sharedLoadoutsVars, true];
|
||||
|
||||
_contentPanelCtrl lnbSetPicture [[_contentPanelCursSel, 0], QPATHTOF(data\iconPublic.paa)];
|
||||
_contentPanelCtrl lnbSetValue [[_contentPanelCursSel, 0], 1];
|
||||
[QGVAR(loadoutShared), [_contentPanelCtrl, [_profileName ,_loadoutName , _loadoutData]]] call CBA_fnc_remoteEvent;
|
||||
};
|
||||
|
||||
// Update share button text
|
||||
_control ctrlSetText ( [
|
||||
localize LSTRING(buttonSharePrivateText),
|
||||
localize LSTRING(buttonSharePublicText)
|
||||
] select ((_contentPanelCtrl lnbValue [_contentPanelCursSel, 0]) == 1));
|
28
addons/arsenal/functions/fnc_clearSearchbar.sqf
Normal file
28
addons/arsenal/functions/fnc_clearSearchbar.sqf
Normal file
@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Clear the provided searchbar.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Arsenal display <DISPLAY>
|
||||
* 1: Searchbar control <CONTROL>
|
||||
* 2: Right button state <BOOL>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["_display", "_control", "_rightButton"];
|
||||
|
||||
if (_rightButton != 1) exitWith {};
|
||||
|
||||
_control ctrlSetText '';
|
||||
|
||||
if (ctrlIDC _control == IDC_leftSearchbar) then {
|
||||
[_display, _display displayCtrl GVAR(currentLeftPanel)] call FUNC(fillLeftPanel);
|
||||
} else {
|
||||
[_display, _display displayCtrl GVAR(currentRightPanel)] call FUNC(fillRightPanel);
|
||||
};
|
189
addons/arsenal/functions/fnc_fillLeftPanel.sqf
Normal file
189
addons/arsenal/functions/fnc_fillLeftPanel.sqf
Normal file
@ -0,0 +1,189 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Fill left panel.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Arsenal display <DISPLAY>
|
||||
* 1: Tab control <CONTROL>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["_display", "_control"];
|
||||
|
||||
private _ctrlIDC = ctrlIDC _control;
|
||||
|
||||
if !(isNil QGVAR(currentLeftPanel)) then {
|
||||
private _previousCtrlBackground = _display displayCtrl (GVAR(currentLeftPanel) - 1);
|
||||
_previousCtrlBackground ctrlSetFade 1;
|
||||
_previousCtrlBackground ctrlCommit FADE_DELAY;
|
||||
};
|
||||
|
||||
private _ctrlBackground = _display displayCtrl (_ctrlIDC - 1);
|
||||
private _ctrlPanel = _display displayCtrl IDC_leftTabContent;
|
||||
_ctrlBackground ctrlSetFade 0;
|
||||
_ctrlBackground ctrlCommit FADE_DELAY;
|
||||
|
||||
_ctrlPanel lbSetCurSel -1;
|
||||
|
||||
// Handle icons and filling
|
||||
switch true do {
|
||||
case (_ctrlIDC in [IDC_buttonPrimaryWeapon, IDC_buttonHandgun, IDC_buttonSecondaryWeapon]) : {
|
||||
// Purge old data
|
||||
lbClear _ctrlPanel;
|
||||
private _addEmpty = _ctrlPanel lbadd format [" <%1>",localize "str_empty"];
|
||||
_ctrlPanel lbsetvalue [_addEmpty, -1];
|
||||
|
||||
{
|
||||
["CfgWeapons", _x, _ctrlPanel] call FUNC(addListBoxItem);
|
||||
} foreach ((GVAR(virtualItems) select 0) select ([IDC_buttonPrimaryWeapon, IDC_buttonSecondaryWeapon, IDC_buttonHandgun] find _ctrlIDC));
|
||||
};
|
||||
|
||||
case (_ctrlIDC in [IDC_buttonUniform, IDC_buttonVest, IDC_buttonBackpack]) : {
|
||||
|
||||
lbClear _ctrlPanel;
|
||||
private _addEmpty = _ctrlPanel lbadd format [" <%1>",localize "str_empty"];
|
||||
_ctrlPanel lbsetvalue [_addEmpty, -1];
|
||||
|
||||
// Filling
|
||||
switch (_ctrlIDC) do {
|
||||
case IDC_buttonUniform : {
|
||||
{
|
||||
["CfgWeapons", _x, _ctrlPanel] call FUNC(addListBoxItem);
|
||||
} foreach (GVAR(virtualItems) select 4);
|
||||
};
|
||||
|
||||
case IDC_buttonVest : {
|
||||
{
|
||||
["CfgWeapons", _x, _ctrlPanel] call FUNC(addListBoxItem);
|
||||
} foreach (GVAR(virtualItems) select 5);
|
||||
};
|
||||
|
||||
case IDC_buttonBackpack : {
|
||||
{
|
||||
["CfgVehicles", _x, _ctrlPanel] call FUNC(addListBoxItem);
|
||||
} foreach (GVAR(virtualItems) select 6);
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
default {
|
||||
GVAR(currentRightPanel) = nil;
|
||||
|
||||
lbClear _ctrlPanel;
|
||||
|
||||
if !(_ctrlIDC in [IDC_buttonFace, IDC_buttonVoice]) then {
|
||||
private _addEmpty = _ctrlPanel lbadd format [" <%1>",localize "str_empty"];
|
||||
_ctrlPanel lbsetvalue [_addEmpty, -1];
|
||||
};
|
||||
|
||||
switch (_ctrlIDC) do {
|
||||
case IDC_buttonHeadgear: {
|
||||
{
|
||||
["CfgWeapons", _x, _ctrlPanel] call FUNC(addListBoxItem);
|
||||
} foreach (GVAR(virtualItems) select 3);
|
||||
};
|
||||
case IDC_buttonGoggles : {
|
||||
{
|
||||
["CfgGlasses", _x, _ctrlPanel] call FUNC(addListBoxItem);
|
||||
} foreach (GVAR(virtualItems) select 7);
|
||||
};
|
||||
case IDC_buttonNVG : {
|
||||
{
|
||||
["CfgWeapons", _x, _ctrlPanel] call FUNC(addListBoxItem);
|
||||
} foreach (GVAR(virtualItems) select 8);
|
||||
};
|
||||
case IDC_buttonBinoculars : {
|
||||
{
|
||||
["CfgWeapons", _x, _ctrlPanel] call FUNC(addListBoxItem);
|
||||
} foreach (GVAR(virtualItems) select 9);
|
||||
};
|
||||
case IDC_buttonMap : {
|
||||
{
|
||||
["CfgWeapons", _x, _ctrlPanel] call FUNC(addListBoxItem);
|
||||
} foreach (GVAR(virtualItems) select 10);
|
||||
};
|
||||
case IDC_buttonCompass : {
|
||||
{
|
||||
["CfgWeapons", _x, _ctrlPanel] call FUNC(addListBoxItem);
|
||||
} foreach (GVAR(virtualItems) select 11);
|
||||
};
|
||||
case IDC_buttonRadio : {
|
||||
{
|
||||
["CfgWeapons", _x, _ctrlPanel] call FUNC(addListBoxItem);
|
||||
} foreach (GVAR(virtualItems) select 12);
|
||||
};
|
||||
case IDC_buttonWatch : {
|
||||
{
|
||||
["CfgWeapons", _x, _ctrlPanel] call FUNC(addListBoxItem);
|
||||
} foreach (GVAR(virtualItems) select 13);
|
||||
};
|
||||
case IDC_buttonGPS : {
|
||||
{
|
||||
["CfgWeapons", _x, _ctrlPanel] call FUNC(addListBoxItem);
|
||||
} foreach (GVAR(virtualItems) select 14);
|
||||
};
|
||||
case IDC_buttonFace : {
|
||||
{
|
||||
{
|
||||
if (
|
||||
getnumber (_x >> "disabled") == 0 &&
|
||||
{getText (_x >> "head") != ""} &&
|
||||
{configName _x != "Default"}
|
||||
) then {
|
||||
private _configName = configName _x;
|
||||
private _displayName = getText (_x >> "displayName");
|
||||
private _lbAdd = _ctrlPanel lbAdd _displayName;
|
||||
_ctrlPanel lbSetData [_lbAdd, _configName];
|
||||
_ctrlPanel lbSetTooltip [_lbAdd,format ["%1\n%2",_displayName, _configName]];
|
||||
_x call ADDMODICON;
|
||||
};
|
||||
} foreach ("isClass _x" configClasses _x);
|
||||
} foreach ("isClass _x" configClasses (configfile >> "cfgfaces"));
|
||||
};
|
||||
case IDC_buttonVoice : {
|
||||
private _voices = (configProperties [(configFile >> "CfgVoice"), "isClass _x && {getNumber (_x >> 'scope') == 2}", true]) - [(configfile >> "CfgVoice" >> "NoVoice")];
|
||||
{
|
||||
["CfgVoice", configName _x, _ctrlPanel, "icon"] call FUNC(addListBoxItem);
|
||||
} foreach _voices;
|
||||
};
|
||||
case IDC_buttonInsigna : {
|
||||
{
|
||||
["CfgUnitInsignia", configName _x, _ctrlPanel, "texture"] call FUNC(addListBoxItem);
|
||||
} foreach ("true" configClasses (configFile >> "CfgUnitInsignia"));
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
// Done
|
||||
if (GVAR(currentLeftPanel) != _ctrlIDC) then {
|
||||
(_display displayCtrl IDC_leftSearchbar) ctrlSetText "";
|
||||
(_display displayCtrl IDC_rightSearchbar) ctrlSetText "";
|
||||
};
|
||||
|
||||
GVAR(currentLeftPanel) = _ctrlIDC;
|
||||
[QGVAR(leftPanelFilled), [_display, _ctrlIDC, GVAR(currentRightPanel)]] call CBA_fnc_localEvent;
|
||||
|
||||
// Sort
|
||||
private _sortLeftCtrl = _display displayCtrl IDC_sortLeftTab;
|
||||
[_sortLeftCtrl, _sortLeftCtrl lbValue (lbCurSel _sortLeftCtrl)] call FUNC(sortPanel);
|
||||
|
||||
//Select current item
|
||||
private _itemsToCheck = ((GVAR(currentItems) select [0,15]) + [GVAR(currentFace), GVAR(currentVoice), GVAR(currentInsignia)]) apply {tolower _x};
|
||||
|
||||
for "_lbIndex" from 0 to (lbSize _ctrlPanel - 1) do {
|
||||
private _currentData = _ctrlPanel lbData _lbIndex;
|
||||
|
||||
if (!(_currentData isEqualTo "") && {tolower _currentData in _itemsToCheck}) exitWith {
|
||||
_ctrlPanel lbSetCurSel _lbIndex;
|
||||
};
|
||||
};
|
||||
if (lbCurSel _ctrlPanel < 0) then {
|
||||
_ctrlPanel lbSetCurSel 0;
|
||||
};
|
118
addons/arsenal/functions/fnc_fillLoadoutsList.sqf
Normal file
118
addons/arsenal/functions/fnc_fillLoadoutsList.sqf
Normal file
@ -0,0 +1,118 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Fill loadouts list.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Loadouts display <DISPLAY>
|
||||
* 1: Tab control <CONTROL>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["_display", "_control"];
|
||||
|
||||
private _contentPanelCtrl = _display displayCtrl IDC_contentPanel;
|
||||
private _textEditBoxCtrl= _display displayCtrl IDC_textEditBox;
|
||||
_textEditBoxCtrl ctrlSetText "";
|
||||
private _sharingEnabled = (GVAR(allowSharedLoadouts) && {isMultiplayer});
|
||||
private _sharedLoadoutsVars = GVAR(sharedLoadoutsNamespace) getVariable QGVAR(sharedLoadoutsVars);
|
||||
|
||||
_contentPanelCtrl lnbSetCurSelRow -1;
|
||||
lnbClear _contentPanelCtrl;
|
||||
|
||||
private _data = +(profileNamespace getvariable [QGVAR(saved_loadouts),[]]);
|
||||
|
||||
if (GVAR(currentLoadoutsTab) != IDC_buttonSharedLoadouts) then {
|
||||
|
||||
{
|
||||
_x params ["_loadoutName", "_loadoutData"];
|
||||
|
||||
private _loadoutCachedInfo = _contentPanelCtrl getVariable (_loadoutName + str GVAR(currentLoadoutsTab));
|
||||
|
||||
if (isNil "_loadoutCachedInfo") then {
|
||||
[_loadoutData] call FUNC(verifyLoadout)
|
||||
} else {
|
||||
_loadoutCachedInfo
|
||||
} params ["_loadout", "_nullItemsAmount", "_unavailableItemsAmount", "_nullItemsList", "_unavailableItemsList"];
|
||||
|
||||
// Log missing / nil items to RPT
|
||||
if (GVAR(EnableRPTLog) && {isNil "_loadoutCachedInfo"} && {(_nullItemsAmount > 0) || {_unavailableItemsAmount > 0}}) then {
|
||||
|
||||
private _printComponent = "ACE_Arsenal - Loadout:";
|
||||
private _printNullItemsList = ["Missing items:", str _nullItemsList] joinString " ";
|
||||
private _printUnavailableItemsList = ["Unavailable items:", str _unavailableItemsList] joinString " ";
|
||||
|
||||
diag_log text (format ["%1%5 %2%5 %3%5 %4", _printComponent, "Name: " + _loadoutName, _printNullItemsList, _printUnavailableItemsList, endl]);
|
||||
};
|
||||
|
||||
if (GVAR(currentLoadoutsTab) == IDC_buttonDefaultLoadouts || {!_sharingEnabled}) then {
|
||||
_contentPanelCtrl lnbSetColumnsPos [0, 0, 0.40, 0.50, 0.60, 0.70, 0.75, 0.80, 0.85, 0.90];
|
||||
} else {
|
||||
_contentPanelCtrl lnbSetColumnsPos [0, 0.05, 0.40, 0.50, 0.60, 0.70, 0.75, 0.80, 0.85, 0.90];
|
||||
};
|
||||
|
||||
private _newRow = _contentPanelCtrl lnbAddRow ["",_loadoutName];
|
||||
|
||||
ADD_LOADOUTS_LIST_PICTURES
|
||||
|
||||
if (_nullItemsAmount > 0) then {
|
||||
|
||||
_contentPanelCtrl lnbSetColor [[_newRow, 1], [1, 0, 0, 0.8]];
|
||||
} else {
|
||||
|
||||
if (_unavailableItemsAmount > 0) then {
|
||||
_contentPanelCtrl lnbSetColor [[_newRow, 1], [1, 1, 1, 0.25]];
|
||||
};
|
||||
};
|
||||
|
||||
_contentPanelCtrl setVariable [_loadoutName + str GVAR(currentLoadoutsTab), [_loadout, _nullItemsAmount, _unavailableItemsAmount, _nullItemsList, _unavailableItemsList]];
|
||||
|
||||
if ((profileName + _loadoutName) in _sharedLoadoutsVars && {GVAR(currentLoadoutsTab) == IDC_buttonMyLoadouts}) then {
|
||||
_contentPanelCtrl lnbSetPicture [[_newRow, 0], QPATHTOF(data\iconPublic.paa)];
|
||||
_contentPanelCtrl lnbSetValue [[_newRow, 0], 1];
|
||||
};
|
||||
} foreach ([_data, +GVAR(defaultLoadoutsList)] select (ctrlIDC _control == IDC_buttonDefaultLoadouts));
|
||||
} else {
|
||||
|
||||
{
|
||||
_x params ["_playerName", "_loadoutName", "_loadoutData"];
|
||||
|
||||
if ((allPlayers apply {name _x}) find _playerName == -1) then {
|
||||
|
||||
private _loadoutVar = _playerName + _loadoutName;
|
||||
|
||||
GVAR(sharedLoadoutsNamespace) setVariable [_loadoutVar, nil, true];
|
||||
_sharedLoadoutsVars = _sharedLoadoutsVars - [_loadoutVar];
|
||||
GVAR(sharedLoadoutsNamespace) setVariable [QGVAR(sharedLoadoutsNamespace), _sharedLoadoutsVars, true];
|
||||
|
||||
[QGVAR(loadoutUnshared), [_contentPanelCtrl, profileName, _loadoutName]] call CBA_fnc_remoteEvent;
|
||||
} else {
|
||||
|
||||
([_loadoutData] call FUNC(verifyLoadout)) params ["_loadout", "_nullItemsAmount", "_unavailableItemsAmount"];
|
||||
|
||||
_contentPanelCtrl lnbSetColumnsPos [0, 0.15, 0.40, 0.50, 0.60, 0.70, 0.75, 0.80, 0.85, 0.90];
|
||||
private _newRow = _contentPanelCtrl lnbAddRow [_playerName, _loadoutName];
|
||||
|
||||
ADD_LOADOUTS_LIST_PICTURES
|
||||
|
||||
_contentPanelCtrl lnbSetData [[_newRow, 1], _playerName + _loadoutName];
|
||||
|
||||
if (_nullItemsAmount > 0) then {
|
||||
|
||||
_contentPanelCtrl lnbSetColor [[_newRow, 1], [1, 0, 0, 0.8]];
|
||||
} else {
|
||||
|
||||
if (_unavailableItemsAmount > 0) then {
|
||||
_contentPanelCtrl lnbSetColor [[_newRow, 1], [1, 1, 1, 0.25]];
|
||||
};
|
||||
};
|
||||
};
|
||||
} foreach (_sharedLoadoutsVars apply {GVAR(sharedLoadoutsNamespace) getVariable _x});
|
||||
};
|
||||
|
||||
_contentPanelCtrl lnbSort [1, false];
|
361
addons/arsenal/functions/fnc_fillRightPanel.sqf
Normal file
361
addons/arsenal/functions/fnc_fillRightPanel.sqf
Normal file
@ -0,0 +1,361 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Fill right panel.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Arsenal display <DISPLAY>
|
||||
* 1: Tab control <CONTROL>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["_display", "_control"];
|
||||
|
||||
private _ctrlIDC = ctrlIDC _control;
|
||||
|
||||
// Fade old control background
|
||||
if !(isNil QGVAR(currentRightPanel)) then {
|
||||
private _previousCtrlBackground = _display displayCtrl (GVAR(currentRightPanel) - 1);
|
||||
_previousCtrlBackground ctrlSetFade 1;
|
||||
_previousCtrlBackground ctrlCommit FADE_DELAY;
|
||||
};
|
||||
|
||||
// Show new control background
|
||||
private _ctrlBackground = _display displayCtrl (_ctrlIDC - 1);
|
||||
_ctrlBackground ctrlShow true;
|
||||
_ctrlBackground ctrlSetFade 0;
|
||||
_ctrlBackground ctrlCommit FADE_DELAY;
|
||||
|
||||
private _searchbarCtrl = _display displayCtrl IDC_rightSearchbar;
|
||||
|
||||
if (!(ctrlShown _searchbarCtrl) || {ctrlFade _searchbarCtrl > 0}) then {
|
||||
_searchbarCtrl ctrlShow true;
|
||||
_searchbarCtrl ctrlSetFade 0;
|
||||
_searchbarCtrl ctrlCommit 0;
|
||||
};
|
||||
|
||||
private _fnc_fill_right_Container = {
|
||||
params ["_configCategory", "_className", "_isMagazine", ["_isUnique", false, [false]]];
|
||||
|
||||
private _cacheNamespace = _ctrlPanel;
|
||||
private _cachedItemInfo = _cacheNamespace getVariable [_configCategory+_className, []];
|
||||
|
||||
// Not in cache. So get info and put into cache
|
||||
if (_cachedItemInfo isEqualTo []) then {
|
||||
private _configPath = configFile >> _configCategory >> _className;
|
||||
|
||||
_cachedItemInfo set [0, getText (_configPath >> "displayName")];
|
||||
_cachedItemInfo set [1, getText (_configPath >> "picture")];
|
||||
_cachedItemInfo set [2, [getNumber (_configPath >> "itemInfo" >> "mass"), getNumber (_configPath >> "mass")] select _isMagazine];
|
||||
|
||||
_cacheNamespace setVariable [_configCategory+_className, _cachedItemInfo];
|
||||
};
|
||||
|
||||
_cachedItemInfo params ["_displayName","_picture", "_mass"];
|
||||
|
||||
private _lbAdd = _ctrlPanel lnbAddRow ["", _displayName, "0"];
|
||||
private _columns = count lnbGetColumnsPosition _ctrlPanel;
|
||||
|
||||
_ctrlPanel lnbSetData [[_lbAdd, 0], _x];
|
||||
_ctrlPanel lnbSetPicture [[_lbAdd, 0], _picture];
|
||||
_ctrlPanel lnbSetValue [[_lbAdd, 0], _mass];
|
||||
_ctrlPanel setVariable [_x, _mass];
|
||||
_ctrlPanel lnbSetValue [[_lbAdd, 2], [0, 1] select (_isUnique)];
|
||||
_ctrlPanel lbSetTooltip [_lbAdd * _columns,format ["%1\n%2", _displayName, _x]];
|
||||
};
|
||||
|
||||
// Retrieve compatible mags
|
||||
private _compatibleItems = [];
|
||||
private _compatibleMagazines = [[[], []], [[], []], [[], []]];
|
||||
{
|
||||
if (_x != "") then {
|
||||
private _weaponConfig = (configFile >> "CfgWeapons" >> _x);
|
||||
private _index = _forEachIndex;
|
||||
|
||||
{
|
||||
private _subIndex = _forEachIndex;
|
||||
{
|
||||
// Magazine group
|
||||
if !(isClass (configFile >> "CfgMagazines" >> _x)) then {
|
||||
private _magazineGroups = uiNamespace getVariable [QGVAR(magazineGroups),["#CBA_HASH#",[],[],[]]];
|
||||
private _magArray = [_magazineGroups, _x] call CBA_fnc_hashGet;
|
||||
{((_compatibleMagazines select _index) select _subIndex) pushBackUnique _x} forEach _magArray;
|
||||
} else {
|
||||
((_compatibleMagazines select _index) select _subIndex) pushBackUnique _x
|
||||
}
|
||||
} foreach ([getArray (_weaponConfig >> _x >> "magazines"), getArray (_weaponConfig >> "magazines")] select (_x == "this"));
|
||||
} foreach getArray (_weaponConfig >> "muzzles");
|
||||
};
|
||||
} foreach [primaryWeapon GVAR(center), handgunWeapon GVAR(center), secondaryWeapon GVAR(center)];
|
||||
|
||||
private _itemsToCheck = [];
|
||||
private _compatibleMagsPrimaryMuzzle = [];
|
||||
private _compatibleMagsSecondaryMuzzle = [];
|
||||
|
||||
private _allCompatibleMags = [];
|
||||
{
|
||||
_allCompatibleMags append (_x select 0);
|
||||
_allCompatibleMags append (_x select 1);
|
||||
} foreach _compatibleMagazines;
|
||||
|
||||
private _ctrlPanel = _display displayCtrl IDC_rightTabContent;
|
||||
|
||||
switch (GVAR(currentLeftPanel)) do {
|
||||
case IDC_buttonPrimaryWeapon : {
|
||||
_compatibleMagsPrimaryMuzzle = _compatibleMagazines select 0 select 0;
|
||||
_compatibleMagsSecondaryMuzzle = _compatibleMagazines select 0 select 1;
|
||||
_compatibleItems = (primaryWeapon GVAR(center)) call bis_fnc_compatibleItems;
|
||||
_itemsToCheck = GVAR(currentItems) select 18;
|
||||
};
|
||||
|
||||
case IDC_buttonHandgun : {
|
||||
_compatibleMagsPrimaryMuzzle = _compatibleMagazines select 1 select 0;
|
||||
_compatibleMagsSecondaryMuzzle = _compatibleMagazines select 1 select 1;
|
||||
_compatibleItems = (handgunWeapon GVAR(center)) call bis_fnc_compatibleItems;
|
||||
_itemsToCheck = GVAR(currentItems) select 20;
|
||||
};
|
||||
|
||||
case IDC_buttonSecondaryWeapon : {
|
||||
_compatibleMagsPrimaryMuzzle = _compatibleMagazines select 2 select 0;
|
||||
_compatibleMagsSecondaryMuzzle = _compatibleMagazines select 2 select 1;
|
||||
_compatibleItems = (secondaryWeapon GVAR(center)) call bis_fnc_compatibleItems;
|
||||
_itemsToCheck = GVAR(currentItems) select 19;
|
||||
};
|
||||
|
||||
case IDC_buttonUniform;
|
||||
case IDC_buttonVest;
|
||||
case IDC_buttonBackpack : {
|
||||
_ctrlPanel = _display displayCtrl IDC_rightTabContentListnBox;
|
||||
};
|
||||
};
|
||||
|
||||
_itemsToCheck = _itemsToCheck apply {toLower _x};
|
||||
_compatibleItems = _compatibleItems apply {toLower _x};
|
||||
|
||||
lbClear (_display displayCtrl IDC_rightTabContentListnBox);
|
||||
lbClear (_display displayCtrl IDC_rightTabContent);
|
||||
|
||||
(_display displayCtrl IDC_rightTabContentListnBox) lbSetCurSel -1;
|
||||
(_display displayCtrl IDC_rightTabContent) lbSetCurSel -1;
|
||||
|
||||
private _leftPanelState = GVAR(currentLeftPanel) in [IDC_buttonPrimaryWeapon, IDC_buttonHandgun, IDC_buttonSecondaryWeapon];
|
||||
|
||||
if (_ctrlIDC in [RIGHT_PANEL_ACC_IDCS, IDC_buttonCurrentMag, IDC_buttonCurrentMag2] && {_leftPanelState}) then {
|
||||
private _addEmpty = _ctrlPanel lbadd format [" <%1>",localize "str_empty"];
|
||||
_ctrlPanel lbsetvalue [_addEmpty, -1];
|
||||
};
|
||||
|
||||
switch (_ctrlIDC) do {
|
||||
|
||||
case IDC_buttonOptic : {
|
||||
if (_leftPanelState) then {
|
||||
{
|
||||
["CfgWeapons", _x, _ctrlPanel] call FUNC(addListBoxItem);
|
||||
} foreach (_compatibleItems arrayIntersect (((GVAR(virtualItems) select 1) select 0) apply {toLower _x}));
|
||||
} else {
|
||||
{
|
||||
["CfgWeapons", _x, false] call _fnc_fill_right_Container;
|
||||
} foreach ((GVAR(virtualItems) select 1) select 0);
|
||||
{
|
||||
["CfgWeapons", _x, false, true] call _fnc_fill_right_Container;
|
||||
} foreach ((GVAR(virtualItems) select 22) select 0);
|
||||
};
|
||||
};
|
||||
|
||||
case IDC_buttonItemAcc : {
|
||||
if (_leftPanelState) then {
|
||||
{
|
||||
["CfgWeapons", _x, _ctrlPanel] call FUNC(addListBoxItem);
|
||||
} foreach (_compatibleItems arrayIntersect (((GVAR(virtualItems) select 1) select 1) apply {toLower _x}));
|
||||
} else {
|
||||
{
|
||||
["CfgWeapons", _x, false] call _fnc_fill_right_Container;
|
||||
} foreach ((GVAR(virtualItems) select 1) select 1);
|
||||
{
|
||||
["CfgWeapons", _x, false, true] call _fnc_fill_right_Container;
|
||||
} foreach ((GVAR(virtualItems) select 22) select 1);
|
||||
};
|
||||
};
|
||||
|
||||
case IDC_buttonMuzzle : {
|
||||
if (_leftPanelState) then {
|
||||
{
|
||||
["CfgWeapons", _x, _ctrlPanel] call FUNC(addListBoxItem);
|
||||
} foreach (_compatibleItems arrayIntersect (((GVAR(virtualItems) select 1) select 2) apply {toLower _x}));
|
||||
} else {
|
||||
{
|
||||
["CfgWeapons", _x, false] call _fnc_fill_right_Container;
|
||||
} foreach ((GVAR(virtualItems) select 1) select 2);
|
||||
{
|
||||
["CfgWeapons", _x, false, true] call _fnc_fill_right_Container;
|
||||
} foreach ((GVAR(virtualItems) select 22) select 2);
|
||||
};
|
||||
};
|
||||
|
||||
case IDC_buttonBipod : {
|
||||
if (_leftPanelState) then {
|
||||
{
|
||||
["CfgWeapons", _x, _ctrlPanel] call FUNC(addListBoxItem);
|
||||
} foreach (_compatibleItems arrayIntersect (((GVAR(virtualItems) select 1) select 3) apply {toLower _x}));
|
||||
} else {
|
||||
{
|
||||
["CfgWeapons", _x, false] call _fnc_fill_right_Container;
|
||||
} foreach ((GVAR(virtualItems) select 1) select 3);
|
||||
{
|
||||
["CfgWeapons", _x, false, true] call _fnc_fill_right_Container;
|
||||
} foreach ((GVAR(virtualItems) select 22) select 3);
|
||||
};
|
||||
};
|
||||
|
||||
case IDC_buttonCurrentMag : {
|
||||
if (_leftPanelState) then {
|
||||
{
|
||||
["CfgMagazines", _x, _ctrlPanel] call FUNC(addListBoxItem);
|
||||
} foreach ((GVAR(virtualItems) select 2) arrayIntersect _compatibleMagsPrimaryMuzzle);
|
||||
};
|
||||
};
|
||||
|
||||
case IDC_buttonCurrentMag2 : {
|
||||
if (_leftPanelState) then {
|
||||
{
|
||||
["CfgMagazines", _x, _ctrlPanel] call FUNC(addListBoxItem);
|
||||
} foreach ((GVAR(virtualItems) select 2) arrayIntersect _compatibleMagsSecondaryMuzzle);
|
||||
};
|
||||
};
|
||||
|
||||
case IDC_buttonMag : {
|
||||
{
|
||||
["CfgMagazines", _x, true] call _fnc_fill_right_Container;
|
||||
} foreach ((GVAR(virtualItems) select 2) arrayIntersect _allCompatibleMags);
|
||||
{
|
||||
["CfgMagazines", _x, true, true] call _fnc_fill_right_Container;
|
||||
} foreach ((GVAR(virtualItems) select 19) arrayIntersect _allCompatibleMags);
|
||||
};
|
||||
|
||||
case IDC_buttonMagALL : {
|
||||
{
|
||||
["CfgMagazines", _x, true] call _fnc_fill_right_Container;
|
||||
} foreach (GVAR(virtualItems) select 2);
|
||||
{
|
||||
["CfgMagazines", _x, true, true] call _fnc_fill_right_Container;
|
||||
} foreach (GVAR(virtualItems) select 19);
|
||||
};
|
||||
|
||||
case IDC_buttonThrow : {
|
||||
{
|
||||
["CfgMagazines", _x, true] call _fnc_fill_right_Container;
|
||||
} foreach (GVAR(virtualItems) select 15);
|
||||
{
|
||||
["CfgMagazines", _x, true, true] call _fnc_fill_right_Container;
|
||||
} foreach (GVAR(virtualItems) select 20);
|
||||
};
|
||||
|
||||
case IDC_buttonPut : {
|
||||
{
|
||||
["CfgMagazines", _x, true] call _fnc_fill_right_Container;
|
||||
} foreach (GVAR(virtualItems) select 16);
|
||||
{
|
||||
["CfgMagazines", _x, true, true] call _fnc_fill_right_Container;
|
||||
} foreach (GVAR(virtualItems) select 21);
|
||||
};
|
||||
|
||||
case IDC_buttonMisc : {
|
||||
{
|
||||
["CfgWeapons", _x, false] call _fnc_fill_right_Container;
|
||||
} foreach (GVAR(virtualItems) select 17);
|
||||
{
|
||||
["CfgWeapons", _x, false, true] call _fnc_fill_right_Container;
|
||||
} foreach (GVAR(virtualItems) select 18);
|
||||
{
|
||||
["CfgVehicles", _x, false, true] call _fnc_fill_right_Container;
|
||||
} foreach (GVAR(virtualItems) select 23);
|
||||
{
|
||||
["CfgGlasses", _x, false, true] call _fnc_fill_right_Container;
|
||||
} foreach (GVAR(virtualItems) select 24);
|
||||
};
|
||||
};
|
||||
|
||||
if (GVAR(currentRightPanel) != _ctrlIDC) then {
|
||||
(_display displayCtrl IDC_rightSearchbar) ctrlSetText "";
|
||||
};
|
||||
|
||||
GVAR(currentRightPanel) = _ctrlIDC;
|
||||
|
||||
[QGVAR(rightPanelFilled), [_display, GVAR(currentLeftPanel), _ctrlIDC]] call CBA_fnc_localEvent;
|
||||
|
||||
// Add current items and change progress bar
|
||||
if (GVAR(currentLeftPanel) in [IDC_buttonUniform, IDC_buttonVest, IDC_buttonBackpack]) then {
|
||||
|
||||
private _maxLoad = 0;
|
||||
private _container = switch (GVAR(currentLeftPanel)) do {
|
||||
case IDC_buttonUniform : {
|
||||
(_display displayCtrl IDC_loadIndicatorBar) progressSetPosition (loadUniform GVAR(center));
|
||||
_maxLoad = gettext (configfile >> "CfgWeapons" >> uniform GVAR(center) >> "ItemInfo" >> "containerClass");
|
||||
uniformItems GVAR(center)
|
||||
};
|
||||
case IDC_buttonVest : {
|
||||
(_display displayCtrl IDC_loadIndicatorBar) progressSetPosition (loadVest GVAR(center));
|
||||
_maxLoad = gettext (configfile >> "CfgWeapons" >> vest GVAR(center) >> "ItemInfo" >> "containerClass");
|
||||
vestItems GVAR(center)
|
||||
};
|
||||
case IDC_buttonBackpack : {
|
||||
(_display displayCtrl IDC_loadIndicatorBar) progressSetPosition (loadBackpack GVAR(center));
|
||||
_maxLoad = backpack GVAR(center);
|
||||
backpackItems GVAR(center)
|
||||
};
|
||||
};
|
||||
|
||||
for "_l" from 0 to ((lnbsize _ctrlPanel select 0) - 1) do {
|
||||
private _class = _ctrlPanel lnbData [_l, 0];
|
||||
_ctrlPanel lnbSetText [[_l, 2], ["0", str ({_x == _class} count _container)] select (_class in _container)];
|
||||
};
|
||||
|
||||
[_ctrlPanel, _maxLoad] call FUNC(updateRightPanel);
|
||||
};
|
||||
|
||||
// Sorting
|
||||
private _sortRightCtrl = _display displayCtrl IDC_sortRightTab;
|
||||
private _sortRightCurSel = lbCurSel _sortRightCtrl;
|
||||
|
||||
if (lbSize _sortRightCtrl == 3) then {
|
||||
_sortRightCtrl lbDelete 2;
|
||||
};
|
||||
|
||||
if (_leftPanelState) then {
|
||||
_sortRightCtrl lbDelete 1;
|
||||
_sortRightCtrl lbAdd (localize "STR_a3_rscdisplayarsenal_sort_mod");
|
||||
_sortRightCtrl lbSetValue [1, 1];
|
||||
|
||||
_sortRightCtrl lbSetCurSel ([0, _sortRightCurSel] select (_sortRightCurSel != 2));
|
||||
} else {
|
||||
_sortRightCtrl lbDelete 1;
|
||||
_sortRightCtrl lbAdd localize LSTRING(sortByWeightText);
|
||||
_sortRightCtrl lbSetValue [1, 1];
|
||||
|
||||
_sortRightCtrl lbAdd localize LSTRING(sortByAmountText);
|
||||
_sortRightCtrl lbSetValue [2, 2];
|
||||
|
||||
_sortRightCtrl lbSetCurSel _sortRightCurSel;
|
||||
};
|
||||
|
||||
[_sortRightCtrl, _sortRightCtrl lbValue (lbCurSel _sortRightCtrl)] call FUNC(sortPanel);
|
||||
|
||||
// Select current data if not in a container
|
||||
if !(_itemsToCheck isEqualTo []) then {
|
||||
for "_lbIndex" from 0 to (lbSize _ctrlPanel - 1) do {
|
||||
private _currentData = _ctrlPanel lbData _lbIndex;
|
||||
|
||||
if ((_currentData != "") && {tolower _currentData in _itemsToCheck}) exitWith {
|
||||
_ctrlPanel lbSetCurSel _lbIndex;
|
||||
};
|
||||
};
|
||||
|
||||
if (lbCurSel _ctrlPanel < 0) then {
|
||||
_ctrlPanel lbSetCurSel 0;
|
||||
};
|
||||
};
|
73
addons/arsenal/functions/fnc_handleMouse.sqf
Normal file
73
addons/arsenal/functions/fnc_handleMouse.sqf
Normal file
@ -0,0 +1,73 @@
|
||||
/*
|
||||
* Author: Karel Moricky, modified by Alganthe
|
||||
* Update the camera position and pitch/bank.
|
||||
* Modernized a bit, modified to fit the rewrite.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Not used
|
||||
* 1: Arguments <ARRAY>
|
||||
* 1.1: Mouse area control <CONTROL>
|
||||
* 1.2: Mouse X position <SCALAR>
|
||||
* 1.3: Mouse Y position <SCALAR>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["", "_args"];
|
||||
|
||||
_args params ["_control", "_mouseX", "_mouseY"];
|
||||
GVAR(cameraPosition) params ["_distance", "_dirH", "_dirV", "_helperPos"];
|
||||
GVAR(mouseButtonState) params ["_LMB", "_RMB"];
|
||||
|
||||
if (count _LMB > 0) then {
|
||||
_LMB params ["_LMBcursorX", "_LMBcursorY"];
|
||||
private _dX = [(_mouseX - _LMBcursorX), (_LMBcursorX - _mouseX)] select GVAR(camInverted);
|
||||
private _dY = [(_mouseY -_LMBcursorY), (_LMBcursorY - _mouseY)] select GVAR(camInverted);
|
||||
GVAR(mouseButtonState) set [0,[_mouseX,_mouseY]];
|
||||
|
||||
private _centerBox = boundingboxreal GVAR(center);
|
||||
private _centerSizeBottom = _centerBox select 0 select 2;
|
||||
private _centerSizeUp = _centerBox select 1 select 2;
|
||||
private _centerSize = sqrt ([_centerBox select 0 select 0,_centerBox select 0 select 1] distance [_centerBox select 1 select 0,_centerBox select 1 select 1]);
|
||||
|
||||
_helperPos = [_helperPos, _dX * _centerSize, _dirH - 90] call bis_fnc_relpos;
|
||||
_helperPos = [
|
||||
[0,0,((_helperPos select 2) - _dY * _centerSize) max _centerSizeBottom min _centerSizeUp],
|
||||
([0,0,0] distance2D _helperPos) min _centerSize,
|
||||
[0,0,0] getDir _helperPos
|
||||
] call bis_fnc_relpos;
|
||||
|
||||
_helperPos set [2,(_helperPos select 2) max ((boundingboxreal GVAR(center) select 0 select 2) + 0.2)];
|
||||
|
||||
//--- Do not let target go below ground
|
||||
private _posZmin = 0.1;
|
||||
private _targetWorldPosZ = (GVAR(center) modeltoworldvisual _helperPos) select 2;
|
||||
if (_targetWorldPosZ < _posZmin) then {_helperPos set [2,(_helperPos select 2) - _targetWorldPosZ + _posZmin];};
|
||||
|
||||
GVAR(cameraPosition) set [3,_helperPos];
|
||||
};
|
||||
|
||||
if (count _RMB > 0) then {
|
||||
_RMB params ["_RMBcursorX", "_RMBcursorY"];
|
||||
private _dX = (_RMBcursorX - _mouseX) * 0.75;
|
||||
private _dY = (_RMBcursorY - _mouseY) * 0.75;
|
||||
_helperPos = [
|
||||
[0,0,_helperPos select 2],
|
||||
[0,0,0] distance2D _helperPos,
|
||||
([0,0,0] getDir _helperPos) - _dX * 360
|
||||
] call bis_fnc_relpos;
|
||||
|
||||
GVAR(cameraPosition) set [1,(_dirH - _dX * 360)];
|
||||
GVAR(cameraPosition) set [2,(_dirV - _dY * 100) max -89 min 89];
|
||||
GVAR(cameraPosition) set [3,_helperPos];
|
||||
GVAR(mouseButtonState) set [1,[_mouseX,_mouseY]];
|
||||
};
|
||||
|
||||
if (!alive (GVAR(center)) || isnull GVAR(center)) then {
|
||||
(ctrlParent _control) closeDisplay 2;
|
||||
};
|
25
addons/arsenal/functions/fnc_handleScrollWheel.sqf
Normal file
25
addons/arsenal/functions/fnc_handleScrollWheel.sqf
Normal file
@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Handle the mouse wheel.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Not used
|
||||
* 1: Mousewheel Z position <SCALAR>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["", "_args"];
|
||||
_args params ["", "_zPos"];
|
||||
|
||||
private _distanceMax = ((boundingboxreal GVAR(center) select 0) vectordistance (boundingboxreal GVAR(center) select 1)) * 1.5;
|
||||
private _distanceMin = _distanceMax * 0.15;
|
||||
private _distance = GVAR(cameraPosition) select 0;
|
||||
|
||||
_distance = (_distance - (_zPos / 10)) max _distanceMin min _distanceMax;
|
||||
GVAR(cameraPosition) set [0, _distance];
|
92
addons/arsenal/functions/fnc_handleSearchbar.sqf
Normal file
92
addons/arsenal/functions/fnc_handleSearchbar.sqf
Normal file
@ -0,0 +1,92 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Handles keyboard inputs inside the searchbars text boxes.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Arsenal display <DISPLAY>
|
||||
* 1: Searchbar control <CONTROL>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["_display", "_control"];
|
||||
|
||||
private _textString = ctrlText _control;
|
||||
|
||||
if ((ctrlIDC _control) == IDC_rightSearchbar) then {
|
||||
if !(GVAR(lastSearchTextRight) isEqualTo "" || {(_textString find GVAR(lastSearchTextRight)) == 0}) then {//don't refill if there is no need
|
||||
[_display, _display displayCtrl GVAR(currentRightPanel)] call FUNC(fillRightPanel);
|
||||
};
|
||||
GVAR(lastSearchTextRight) = _textString;
|
||||
if (count _textString == 0) exitWith {};
|
||||
|
||||
private _rightPanelState = GVAR(currentLeftPanel) in [IDC_buttonPrimaryWeapon, IDC_buttonHandgun, IDC_buttonSecondaryWeapon];
|
||||
private _rightPanelCtrl = [_display displayCtrl IDC_rightTabContentListnBox, _display displayCtrl IDC_rightTabContent] select (_rightPanelState);
|
||||
|
||||
if (_rightPanelState) then {
|
||||
|
||||
private _itemsToGo = lbSize _rightPanelCtrl;
|
||||
private _lbIndex = 0;
|
||||
while {_itemsToGo > 0} do {
|
||||
private _currentData = _rightPanelCtrl lbText _lbIndex;
|
||||
private _currentClassname = _rightPanelCtrl lbData _lbIndex;
|
||||
|
||||
if ((_currentData isEqualTo "") || {(((toUpper _currentData) find (toUpper _textString)) == -1) && {((toUpper _currentClassname) find (toUpper _textString)) == -1}}) then {
|
||||
_rightPanelCtrl lbDelete _lbIndex;
|
||||
} else {
|
||||
_lbIndex = _lbIndex + 1;
|
||||
};
|
||||
_itemsToGo = _itemsToGo - 1;
|
||||
};
|
||||
_rightPanelCtrl lbSetCurSel -1;
|
||||
} else {
|
||||
|
||||
private _itemsToGo = (lnbSize _rightPanelCtrl) select 0;
|
||||
private _lbIndex = 0;
|
||||
while {_itemsToGo > 0} do {
|
||||
private _currentData = _rightPanelCtrl lnbText [_lbIndex, 1];
|
||||
private _currentClassname = _rightPanelCtrl lnbData [_lbIndex, 0];
|
||||
|
||||
if ((_currentData isEqualTo "") || {(((toUpper _currentData) find (toUpper _textString)) == -1) && {((toUpper _currentClassname) find (toUpper _textString)) == -1}}) then {
|
||||
_rightPanelCtrl lnbDeleteRow _lbIndex;
|
||||
} else {
|
||||
_lbIndex = _lbIndex + 1;
|
||||
};
|
||||
_itemsToGo = _itemsToGo - 1;
|
||||
};
|
||||
_rightPanelCtrl lnbSetCurSelRow -1;
|
||||
};
|
||||
|
||||
[_display, nil, nil, configNull] call FUNC(itemInfo);
|
||||
} else {
|
||||
|
||||
if !(GVAR(lastSearchTextLeft) isEqualTo "" || {(_textString find GVAR(lastSearchTextLeft)) == 0}) then {//don't refill if there is no need
|
||||
[_display, _display displayCtrl GVAR(currentLeftPanel)] call FUNC(fillLeftPanel);
|
||||
};
|
||||
GVAR(lastSearchTextLeft) = _textString;
|
||||
if (count _textString == 0) exitWith {};
|
||||
|
||||
private _leftPanelCtrl = _display displayCtrl IDC_leftTabContent;
|
||||
|
||||
|
||||
private _itemsToGo = (lbSize _leftPanelCtrl);
|
||||
private _lbIndex = 0;
|
||||
while {_itemsToGo > 0} do {
|
||||
private _currentData = _leftPanelCtrl lbText _lbIndex;
|
||||
private _currentClassname = _leftPanelCtrl lbData _lbIndex;
|
||||
|
||||
if ((_currentData isEqualTo "") || {(((toUpper _currentData) find (toUpper _textString)) == -1) && {((toUpper _currentClassname) find (toUpper _textString)) == -1}}) then {
|
||||
_leftPanelCtrl lbDelete _lbIndex;
|
||||
} else {
|
||||
_lbIndex = _lbIndex + 1;
|
||||
};
|
||||
_itemsToGo = _itemsToGo - 1;
|
||||
};
|
||||
_leftPanelCtrl lbSetCurSel -1;
|
||||
[_display, nil, nil, configNull] call FUNC(itemInfo);
|
||||
};
|
61
addons/arsenal/functions/fnc_initBox.sqf
Normal file
61
addons/arsenal/functions/fnc_initBox.sqf
Normal file
@ -0,0 +1,61 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Initialize a box / object for arsenal.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Target <OBJECT>
|
||||
* 1: Items <BOOL> or <ARRAY>
|
||||
* 2: Initialize globally <BOOL>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [_box, ["MyItem1", "MyItem2", "MyItemN"]] call ace_arsenal_fnc_initBox
|
||||
* [_box, true] call ace_arsenal_fnc_initBox
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params [["_object", objNull, [objNull]], ["_items", true, [[], true]], ["_global", true, [true]]];
|
||||
|
||||
if (isNull _object) exitWith {};
|
||||
|
||||
if (isNil QGVAR(EHIDArray)) then {
|
||||
GVAR(EHIDArray) = [];
|
||||
};
|
||||
|
||||
if (_global && {isMultiplayer} && {{_object in _x} count GVAR(EHIDArray) == 0}) then {
|
||||
|
||||
private _ID = [QGVAR(initBox), [_object, _items, false]] call CBA_fnc_globalEventJIP;
|
||||
[_ID, _object] call CBA_fnc_removeGlobalEventJIP;
|
||||
|
||||
GVAR(EHIDArray) pushBack [_ID, _object];
|
||||
publicVariable QGVAR(EHIDArray);
|
||||
} else {
|
||||
|
||||
if ({(_x select 0) select 0 isEqualTo QGVAR(interaction)} count (_object getVariable [QEGVAR(interact_menu,actions), []]) == 0) then {
|
||||
|
||||
private _action = [
|
||||
QGVAR(interaction),
|
||||
localize "STR_A3_Arsenal",
|
||||
"",
|
||||
{
|
||||
params ["_target", "_player"];
|
||||
|
||||
[{[_this select 0, _this select 1] call FUNC(openBox)}, [_target, _player]] call CBA_fnc_execNextFrame;
|
||||
},
|
||||
{
|
||||
params ["_target", "_player"];
|
||||
|
||||
[_player, _target, ["isNotSwimming", "isNotCarrying", "isNotDragging", "notOnMap", "isNotEscorting", "isNotOnLadder"]] call EFUNC(common,canInteractWith)
|
||||
},
|
||||
{},
|
||||
[]
|
||||
] call EFUNC(interact_menu,createAction);
|
||||
[_object, 0, ["ACE_MainActions"], _action] call EFUNC(interact_menu,addActionToObject);
|
||||
|
||||
[_object, _items, false] call FUNC(addVirtualItems);
|
||||
};
|
||||
};
|
75
addons/arsenal/functions/fnc_itemInfo.sqf
Normal file
75
addons/arsenal/functions/fnc_itemInfo.sqf
Normal file
@ -0,0 +1,75 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Update arsenal's info box.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Arsenal display <DISPLAY>
|
||||
* 1: Current panel control <CONTROL>
|
||||
* 2: Current panel selection <SCALAR>
|
||||
* 3: Item config entry <CONFIG>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["_display", "_control", "_curSel" ,"_itemCfg"];
|
||||
|
||||
private _ctrlInfo = _display displayCtrl IDC_infoBox;
|
||||
|
||||
if (isClass _itemCfg) then {
|
||||
|
||||
_ctrlInfo ctrlSetFade 0;
|
||||
_ctrlInfo ctrlCommit FADE_DELAY;
|
||||
|
||||
// Name + author
|
||||
private _ctrlInfoName = _display displayCtrl IDC_infoName;
|
||||
_ctrlInfoName ctrlSetText ([_control lbText _curSel, _control lnbText [_curSel, 1]] select (ctrlType _control == 102));
|
||||
|
||||
private _ctrlInfoAuthor = _display displayctrl IDC_infoAuthor;
|
||||
_ctrlInfoAuthor ctrlSetText "";
|
||||
|
||||
private _itemAuthor = getText (_itemCfg >> "author");
|
||||
_ctrlInfoAuthor ctrlSetText ([localize "STR_AUTHOR_UNKNOWN", format [localize "STR_FORMAT_AUTHOR_SCRIPTED",_itemAuthor]] select (_itemAuthor != ""));
|
||||
|
||||
// DLC / mod icon
|
||||
private _ctrlDLC = _display displayctrl IDC_DLCIcon;
|
||||
private _ctrlDLCBackground = _display displayctrl IDC_DLCBackground;
|
||||
private _dlc = _itemCfg call GETDLC;
|
||||
if (_dlc != "") then {
|
||||
|
||||
private _dlcParams = modParams [_dlc, ["name", "logo", "logoOver"]];
|
||||
_dlcParams params ["_name", "_logo", "_logoOver"];
|
||||
private _appId = getnumber (configfile >> "CfgMods" >> _dlc >> "appId");
|
||||
|
||||
_ctrlDLC ctrlsettooltip _name;
|
||||
_ctrlDLC ctrlsettext _logo;
|
||||
_ctrlDLCBackground ctrlsetfade 0;
|
||||
_ctrlDLC ctrlsetfade 0;
|
||||
if (_appId > 0) then {
|
||||
_ctrlDLC ctrlseteventhandler ["mouseexit",format ["(_this select 0) ctrlsettext '%1';",_logo]];
|
||||
_ctrlDLC ctrlseteventhandler ["mouseenter",format ["(_this select 0) ctrlsettext '%1';",_logoOver]];
|
||||
_ctrlDLC ctrlseteventhandler [
|
||||
"buttonclick",
|
||||
format ["uiNamespace setvariable ['RscDisplayDLCPreview_dlc','%1']; ctrlparent (_this select 0) createDisplay 'RscDisplayDLCPreview';", _dlc]
|
||||
];
|
||||
} else {
|
||||
_ctrlDLC ctrlRemoveAllEventHandlers "buttonclick";
|
||||
_ctrlDLC ctrlRemoveAllEventHandlers "mouseexit";
|
||||
_ctrlDLC ctrlRemoveAllEventHandlers "mouseenter";
|
||||
};
|
||||
} else {
|
||||
_ctrlDLC ctrlsetfade 1;
|
||||
_ctrlDLCBackground ctrlsetfade 1;
|
||||
};
|
||||
|
||||
_ctrlDLC ctrlcommit 0;
|
||||
_ctrlDLCBackground ctrlcommit 0;
|
||||
|
||||
} else {
|
||||
_ctrlInfo ctrlSetFade 1;
|
||||
_ctrlInfo ctrlCommit FADE_DELAY;
|
||||
};
|
77
addons/arsenal/functions/fnc_loadoutsChangeTab.sqf
Normal file
77
addons/arsenal/functions/fnc_loadoutsChangeTab.sqf
Normal file
@ -0,0 +1,77 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Handles tab changing for the loadouts display.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Arsenal display <DISPLAY>
|
||||
* 1: Tab control <CONTROL>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["_display", "_control"];
|
||||
|
||||
if !(ctrlEnabled _control || {GVAR(currentLoadoutsTab) == ctrlIDC _control}) exitWith {};
|
||||
|
||||
private _centerBoxTitleCtrl = _display displayCtrl IDC_centerTitle;
|
||||
private _shareButtonCtrl = _display displayCtrl IDC_buttonShare;
|
||||
private _saveButtonCtrl = _display displayCtrl IDC_buttonSave;
|
||||
private _loadButtonCtrl = _display displayCtrl IDC_buttonLoad;
|
||||
private _deleteButtonCtrl = _display displayCtrl IDC_buttonDelete;
|
||||
private _renameButtonCtrl = _display displayCtrl IDC_buttonRename;
|
||||
|
||||
// Update UI visual elements
|
||||
if (GVAR(currentLoadoutsTab) != -1) then {
|
||||
|
||||
private _previousCtrlBackground = _display displayCtrl (GVAR(currentLoadoutsTab) - 1);
|
||||
_previousCtrlBackground ctrlSetBackgroundColor [0, 0, 0, 0.8];
|
||||
_previousCtrlBackground ctrlCommit 0;
|
||||
|
||||
private _previousCtrl = _display displayCtrl GVAR(currentLoadoutsTab);
|
||||
_previousCtrl ctrlSetTextColor [1, 1, 1, 1];
|
||||
_previousCtrl ctrlCommit 0;
|
||||
};
|
||||
|
||||
private _ctrlBackground = _display displayCtrl ((ctrlIDC _control) - 1);
|
||||
_ctrlBackground ctrlSetBackgroundColor [1, 1, 1, 0.8];
|
||||
_ctrlBackground ctrlCommit 0;
|
||||
|
||||
_control ctrlSetTextColor [0, 0, 0, 1];
|
||||
_control ctrlCommit 0;
|
||||
|
||||
switch (ctrlIDC _control) do {
|
||||
case IDC_buttonMyLoadouts: {
|
||||
_centerBoxTitleCtrl ctrlSetText (localize LSTRING(tabMyLoadoutsText));
|
||||
|
||||
_saveButtonCtrl ctrlEnable true;
|
||||
_saveButtonCtrl ctrlCommit 0;
|
||||
};
|
||||
|
||||
case IDC_buttonDefaultLoadouts: {
|
||||
_centerBoxTitleCtrl ctrlSetText (localize LSTRING(tabDefaultLoadoutsText));
|
||||
|
||||
_saveButtonCtrl ctrlEnable (is3DEN);
|
||||
_saveButtonCtrl ctrlCommit 0;
|
||||
};
|
||||
|
||||
case IDC_buttonSharedLoadouts: {
|
||||
_centerBoxTitleCtrl ctrlSetText (localize LSTRING(tabSharedLoadoutsText));
|
||||
|
||||
_saveButtonCtrl ctrlEnable false;
|
||||
_saveButtonCtrl ctrlCommit 0;
|
||||
};
|
||||
};
|
||||
|
||||
{
|
||||
_x ctrlEnable false;
|
||||
_x ctrlCommit 0;
|
||||
} foreach [_shareButtonCtrl, _loadButtonCtrl, _deleteButtonCtrl, _renameButtonCtrl];
|
||||
|
||||
GVAR(currentLoadoutsTab) = ctrlIDC _control;
|
||||
|
||||
[_display, _control] call FUNC(fillLoadoutsList);
|
54
addons/arsenal/functions/fnc_message.sqf
Normal file
54
addons/arsenal/functions/fnc_message.sqf
Normal file
@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Displays messages in arsenal.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Arsenal display <DISPLAY>
|
||||
* 1: Message <STRING>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["_display", "_message"];
|
||||
|
||||
private _messageBoxCtrl = _display displayCtrl IDC_message;
|
||||
private _handle = _messageBoxCtrl getVariable QGVAR(messageBoxHandle);
|
||||
|
||||
if !(isNil "_handle") then {
|
||||
terminate _handle;
|
||||
};
|
||||
|
||||
_handle = [_display, _messageBoxCtrl, time + 5, _message, FADE_DELAY] spawn {
|
||||
disableSerialization;
|
||||
|
||||
_this params ["_display", "_control", "_timer", "_message", "_delay"];
|
||||
|
||||
while {_timer >= time} do {
|
||||
switch true do {
|
||||
case (_display isEqualTo displayNull): {
|
||||
terminate _thisScript;
|
||||
};
|
||||
|
||||
case (round (_timer - time) == 5): {
|
||||
_control ctrlSetText _message;
|
||||
_control ctrlSetFade 1;
|
||||
_control ctrlCommit 0;
|
||||
|
||||
_control ctrlSetFade 0;
|
||||
_control ctrlCommit _delay;
|
||||
};
|
||||
};
|
||||
|
||||
uiSleep 1;
|
||||
};
|
||||
|
||||
_control ctrlSetFade 1;
|
||||
_control ctrlCommit _delay;
|
||||
terminate _thisScript;
|
||||
};
|
||||
_messageBoxCtrl setVariable [QGVAR(messageBoxHandle), _handle];
|
101
addons/arsenal/functions/fnc_onArsenalClose.sqf
Normal file
101
addons/arsenal/functions/fnc_onArsenalClose.sqf
Normal file
@ -0,0 +1,101 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* onUnLoad EH for arsenal.
|
||||
*
|
||||
* Arguments:
|
||||
* None
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
GVAR(camera) cameraEffect ["terminate", "back"];
|
||||
private _cameraData = [getposAtl GVAR(camera), (getposAtl GVAR(camera)) vectorFromTo (getposAtl GVAR(cameraHelper))];
|
||||
|
||||
[QGVAR(displayClosed), []] call CBA_fnc_localEvent;
|
||||
|
||||
removeMissionEventHandler ["draw3D", GVAR(camPosUpdateHandle)];
|
||||
|
||||
camDestroy GVAR(camera);
|
||||
GVAR(center) switchCamera GVAR(cameraView);
|
||||
deleteVehicle GVAR(cameraHelper);
|
||||
|
||||
if (is3DEN) then {
|
||||
|
||||
private _centerOriginParent = objectParent GVAR(centerOrigin);
|
||||
|
||||
if !(isNull _centerOriginParent) then {
|
||||
_centerOriginParent hideObject false;
|
||||
};
|
||||
|
||||
GVAR(centerOrigin) hideObject false;
|
||||
|
||||
// Apply the loadout from the dummy to all selected units
|
||||
{
|
||||
_x setUnitLoadout (getUnitLoadout GVAR(center));
|
||||
_x setFace GVAR(currentFace);
|
||||
_x setSpeaker GVAR(currentVoice);
|
||||
} foreach (get3DENSelected "object");
|
||||
|
||||
save3DENInventory (get3DENSelected "object");
|
||||
|
||||
deleteVehicle GVAR(light);
|
||||
deleteVehicle GVAR(center);
|
||||
|
||||
GVAR(centerOrigin) = nil;
|
||||
GVAR(light) = nil;
|
||||
|
||||
get3DENCamera cameraEffect ["internal","back"];
|
||||
["ShowInterface",true] call bis_fnc_3DENInterface;
|
||||
GVAR(visionMode) call bis_fnc_3DENVisionMode;
|
||||
} else {
|
||||
// Select correct weapon
|
||||
switch GVAR(selectedWeaponType) do {
|
||||
case 0: {GVAR(center) selectWeapon primaryWeapon GVAR(center);};
|
||||
case 1: {GVAR(center) selectWeapon secondaryWeapon GVAR(center);};
|
||||
case 2: {GVAR(center) selectWeapon handgunWeapon GVAR(center);};
|
||||
};
|
||||
};
|
||||
|
||||
if (isMultiplayer) then {
|
||||
|
||||
[QGVAR(broadcastFace), [GVAR(center), GVAR(currentFace)], QGVAR(center) + "_face"] call CBA_fnc_globalEventJIP;
|
||||
[QGVAR(center) + "_face", GVAR(center)] call CBA_fnc_removeGlobalEventJIP;
|
||||
|
||||
[QGVAR(broadcastVoice), [GVAR(center), GVAR(currentVoice)], QGVAR(center) + "_voice"] call CBA_fnc_globalEventJIP;
|
||||
[QGVAR(center) + "_voice", GVAR(center)] call CBA_fnc_removeGlobalEventJIP;
|
||||
};
|
||||
|
||||
if !(isnull curatorCamera) then {
|
||||
curatorcamera setPosAtl (_cameraData select 0);
|
||||
curatorcamera setVectorDir (_cameraData select 1);
|
||||
curatorcamera cameraEffect ["internal","back"];
|
||||
};
|
||||
|
||||
GVAR(camera) = nil;
|
||||
GVAR(cameraHelper) = nil;
|
||||
|
||||
GVAR(mouseButtonState) = nil;
|
||||
GVAR(currentLeftPanel) = nil;
|
||||
GVAR(currentRightPanel) = nil;
|
||||
GVAR(leftSearchbarFocus) = nil;
|
||||
GVAR(rightSearchbarFocus) = nil;
|
||||
GVAR(shiftState) = nil;
|
||||
GVAR(leftTabFocus) = nil;
|
||||
GVAR(rightTabFocus) = nil;
|
||||
GVAR(rightTabLnBFocus) = nil;
|
||||
|
||||
GVAR(selectedWeaponType) = nil;
|
||||
GVAR(virtualItems) = nil;
|
||||
GVAR(currentItems) = nil;
|
||||
GVAR(currentFace) = nil;
|
||||
GVAR(currentVoice) = nil;
|
||||
GVAR(currentInsignia) = nil;
|
||||
GVAR(currentAction) = nil;
|
||||
|
||||
GVAR(center) = nil;
|
||||
|
||||
showHUD true;
|
287
addons/arsenal/functions/fnc_onArsenalOpen.sqf
Normal file
287
addons/arsenal/functions/fnc_onArsenalOpen.sqf
Normal file
@ -0,0 +1,287 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* onLoad EH for arsenal.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Ignored
|
||||
* 1: Arguments <ARRAY>
|
||||
* 1.1: Arsenal display <DISPLAY>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["", "_args"];
|
||||
_args params ["_display"];
|
||||
|
||||
//--------------- General vars
|
||||
if (isNil QGVAR(center)) then {
|
||||
GVAR(center) = player;
|
||||
};
|
||||
|
||||
GVAR(mouseButtonState) = [[],[]];
|
||||
|
||||
if (isNil QGVAR(sharedLoadoutsNamespace)) then {
|
||||
GVAR(sharedLoadoutsNamespace) = true call CBA_fnc_createNamespace;
|
||||
publicVariable QGVAR(sharedLoadoutsNamespace);
|
||||
};
|
||||
|
||||
if (isNil {GVAR(sharedLoadoutsNamespace) getVariable QGVAR(sharedLoadoutsVars)}) then {
|
||||
GVAR(sharedLoadoutsNamespace) setVariable [QGVAR(sharedLoadoutsVars), [], true];
|
||||
};
|
||||
|
||||
if (isNil QGVAR(defaultLoadoutsList)) then {
|
||||
if (is3DEN) then {
|
||||
GVAR(defaultLoadoutsList) = (QGVAR(DummyCategory) get3DENMissionAttribute QGVAR(DefaultLoadoutsListAttribute));
|
||||
} else {
|
||||
GVAR(defaultLoadoutsList) = [];
|
||||
};
|
||||
};
|
||||
|
||||
if (isNil QGVAR(virtualItems)) then {
|
||||
GVAR(virtualItems) = [[[], [], []], [[], [], [], []], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], []];
|
||||
};
|
||||
|
||||
GVAR(currentItems) = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", [], [], [], [], [], []];
|
||||
|
||||
GVAR(currentFace) = face GVAR(center);
|
||||
GVAR(currentVoice) = speaker GVAR(center);
|
||||
GVAR(currentInsignia) = GVAR(center) param [0, objNull, [objNull]] getVariable ["BIS_fnc_setUnitInsignia_class", ""];
|
||||
|
||||
GVAR(currentAction) = "Stand";
|
||||
GVAR(shiftState) = false;
|
||||
|
||||
// Add the items the player has to virtualItems
|
||||
for "_index" from 0 to 10 do {
|
||||
switch (_index) do {
|
||||
// primary, secondary, handgun weapons
|
||||
case 0: {
|
||||
private _array = LIST_DEFAULTS select _index;
|
||||
|
||||
if !((_array select 0) isEqualTo "") then {
|
||||
((GVAR(virtualItems) select _index) select 0) pushBackUnique (_array select 0);
|
||||
};
|
||||
|
||||
if !((_array select 1) isEqualTo "") then {
|
||||
((GVAR(virtualItems) select _index) select 1) pushBackUnique (_array select 1);
|
||||
};
|
||||
|
||||
if !((_array select 2) isEqualTo "") then {
|
||||
((GVAR(virtualItems) select _index) select 2) pushBackUnique (_array select 2);
|
||||
};
|
||||
};
|
||||
|
||||
// Accs for the weapons above
|
||||
case 1: {
|
||||
private _array = LIST_DEFAULTS select _index;
|
||||
_array params ["_accsArray", "_magsArray"];
|
||||
|
||||
{
|
||||
private _subIndex = _forEachIndex;
|
||||
|
||||
{
|
||||
if (_x != "") then {
|
||||
(GVAR(virtualItems) select _index) select ([2, 1, 0, 3] select _forEachIndex) pushBackUnique _x;
|
||||
};
|
||||
} foreach _x;
|
||||
} foreach _accsArray;
|
||||
|
||||
{
|
||||
if !(_x isEqualTo []) then {
|
||||
|
||||
if (_x select 0 != "") then {
|
||||
(GVAR(virtualItems) select 2) pushBackUnique (_x select 0);
|
||||
};
|
||||
|
||||
if (count _x > 1 && {_x select 1 != ""}) then {
|
||||
(GVAR(virtualItems) select 2) pushBackUnique (_x select 1);
|
||||
};
|
||||
};
|
||||
} foreach _magsArray;
|
||||
};
|
||||
|
||||
// Inventory items
|
||||
case 2: {
|
||||
call FUNC(updateUniqueItemsList);
|
||||
};
|
||||
|
||||
// The rest
|
||||
default {
|
||||
private _array = (LIST_DEFAULTS select _index) select {!(_x isEqualTo "")};
|
||||
if !(_array isEqualTo []) then {
|
||||
{(GVAR(virtualItems) select _index) pushBackUnique _x} foreach _array;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
// Fill current items
|
||||
for "_index" from 0 to 15 do {
|
||||
switch (_index) do {
|
||||
case 0;
|
||||
case 1;
|
||||
case 2:{
|
||||
GVAR(currentItems) set [_index, ((LIST_DEFAULTS select 0) select _index)];
|
||||
};
|
||||
case 3;
|
||||
case 4;
|
||||
case 5;
|
||||
case 6;
|
||||
case 7;
|
||||
case 8;
|
||||
case 9: {
|
||||
GVAR(currentItems) set [_index, (LIST_DEFAULTS select _index) select 0];
|
||||
|
||||
};
|
||||
case 10: {
|
||||
{(GVAR(currentItems) select 15) pushBack _x} forEach (uniformItems GVAR(center));
|
||||
};
|
||||
case 11: {
|
||||
{(GVAR(currentItems) select 16) pushBack _x} forEach (vestItems GVAR(center));
|
||||
};
|
||||
case 12: {
|
||||
{(GVAR(currentItems) select 17) pushBack _x} forEach (backpackItems GVAR(center));
|
||||
};
|
||||
case 13: {
|
||||
GVAR(currentItems) set [18, (primaryWeaponItems GVAR(center)) + (primaryWeaponMagazine GVAR(center))];
|
||||
};
|
||||
case 14: {
|
||||
GVAR(currentItems) set [19, (secondaryWeaponItems GVAR(center)) + (secondaryWeaponMagazine GVAR(center))];
|
||||
};
|
||||
case 15: {
|
||||
GVAR(currentItems) set [20, (handgunItems GVAR(center)) + (handgunMagazine GVAR(center))];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
{
|
||||
private _simulationType = getText (configFile >> "CfgWeapons" >> _x >> "simulation");
|
||||
private _index = 10 + (["itemmap", "itemcompass", "itemradio", "itemwatch", "itemgps"] find (tolower _simulationType));
|
||||
|
||||
GVAR(currentItems) set [_index, _x];
|
||||
} foreach (assignedItems GVAR(center));
|
||||
|
||||
GVAR(currentWeaponType) = switch true do {
|
||||
case (currentWeapon GVAR(center) == GVAR(currentItems) select 0): {0};
|
||||
case (currentWeapon GVAR(center) == GVAR(currentItems) select 1): {1};
|
||||
case (currentWeapon GVAR(center) == GVAR(currentItems) select 2): {2};
|
||||
default {-1};
|
||||
};
|
||||
|
||||
[QGVAR(displayOpened), []] call CBA_fnc_localEvent;
|
||||
|
||||
//--------------- Fade out unused elements
|
||||
private _mouseBlockCtrl = _display displayCtrl IDC_mouseBlock;
|
||||
_mouseBlockCtrl ctrlEnable false;
|
||||
|
||||
{
|
||||
_x = _display displayCtrl _x;
|
||||
|
||||
_x ctrlSetFade 1;
|
||||
_x ctrlShow false;
|
||||
_x ctrlCommit 0;
|
||||
} foreach [
|
||||
IDC_blockRightFrame,
|
||||
IDC_blockRighttBackground,
|
||||
IDC_loadIndicator,
|
||||
IDC_rightTabContent,
|
||||
IDC_rightTabContentListnBox,
|
||||
IDC_sortRightTab,
|
||||
RIGHT_PANEL_ACC_BACKGROUND_IDCS,
|
||||
RIGHT_PANEL_ACC_IDCS,
|
||||
RIGHT_PANEL_ITEMS_BACKGROUND_IDCS,
|
||||
RIGHT_PANEL_ITEMS_IDCS,
|
||||
IDC_buttonRemoveAll,
|
||||
IDC_rightSearchbar
|
||||
];
|
||||
|
||||
//--------------- Camera prep
|
||||
cutText ["","plain"];
|
||||
showCommandingMenu "";
|
||||
|
||||
GVAR(cameraView) = cameraView;
|
||||
GVAR(center) switchCamera "internal";
|
||||
showHUD false;
|
||||
|
||||
private _mouseAreaCtrl = _display displayCtrl IDC_mouseArea;
|
||||
ctrlSetFocus _mouseAreaCtrl;
|
||||
|
||||
// 3DEN support, lifted from BIS_fnc_arsenal
|
||||
if (is3DEN) then {
|
||||
|
||||
GVAR(centerOrigin) = GVAR(center);
|
||||
GVAR(centerOrigin) hideObject true;
|
||||
|
||||
private _centerOriginParent = objectParent GVAR(centerOrigin);
|
||||
if !(isNull _centerOriginParent) then {
|
||||
_centerOriginParent hideObject true;
|
||||
};
|
||||
|
||||
private _centerPos = position GVAR(centerOrigin);
|
||||
|
||||
GVAR(center) = createAgent [typeOf GVAR(centerOrigin), position GVAR(centerOrigin), [], 0, "none"];
|
||||
GVAR(center) setPosAtl getPosAtl GVAR(centerOrigin);
|
||||
GVAR(center) setDir (getDir GVAR(centerOrigin));
|
||||
GVAR(center) switchMove animationState GVAR(centerOrigin);
|
||||
GVAR(center) switchAction "playerstand";
|
||||
GVAR(center) enableSimulation false;
|
||||
|
||||
GVAR(center) setUnitLoadout (getUnitLoadout GVAR(centerOrigin));
|
||||
GVAR(center) setFace GVAR(currentFace);
|
||||
GVAR(center) setSpeaker GVAR(currentVoice);
|
||||
|
||||
//--- Create light for night editing (code based on BIS_fnc_3DENFlashlight)
|
||||
private _intensity = 1;
|
||||
GVAR(light) = "#lightpoint" createVehicle _centerPos;
|
||||
GVAR(light) setLightBrightness _intensity;
|
||||
GVAR(light) setLightAmbient [1,1,1];
|
||||
GVAR(light) setLightColor [0,0,0];
|
||||
GVAR(light) lightAttachObject [GVAR(centerOrigin), [0, 0, -_intensity * 7]];
|
||||
|
||||
//--- Use the same vision mode as in Eden
|
||||
GVAR(visionMode)= -2 call bis_fnc_3DENVisionMode;
|
||||
["ShowInterface",false] spawn bis_fnc_3DENInterface;
|
||||
if (get3denactionstate "togglemap" > 0) then {do3DENAction "togglemap";};
|
||||
};
|
||||
|
||||
//--------------- Prepare the left panel
|
||||
GVAR(currentLeftPanel) = nil;
|
||||
GVAR(currentRightPanel) = nil;
|
||||
GVAR(leftSearchbarFocus) = false;
|
||||
GVAR(rightSearchbarFocus) = false;
|
||||
GVAR(leftTabFocus) = false;
|
||||
GVAR(rightTabFocus) = false;
|
||||
GVAR(rightTabLnBFocus) = false;
|
||||
|
||||
{
|
||||
private _panel = _display displayCtrl _x;
|
||||
_panel ctrlSetFontHeight (GVAR(fontHeight) * GRID_H);
|
||||
_panel ctrlCommit 0;
|
||||
} foreach [IDC_leftTabContent, IDC_rightTabContent, IDC_rightTabContentListnBox];
|
||||
|
||||
[_display, _display displayCtrl IDC_buttonPrimaryWeapon] call FUNC(fillLeftPanel);
|
||||
|
||||
//--------------- Init camera
|
||||
if (isNil QGVAR(cameraPosition)) then {
|
||||
GVAR(cameraPosition) = [5,0,0,[0,0,0.85]];
|
||||
};
|
||||
|
||||
GVAR(cameraHelper) = createAgent ["Logic", position GVAR(center) ,[] ,0 ,"none"];
|
||||
GVAR(cameraHelper) attachTo [GVAR(center), GVAR(cameraPosition) select 3, ""];
|
||||
|
||||
GVAR(camera) = "camera" camCreate position GVAR(center);
|
||||
GVAR(camera) cameraEffect ["internal","back"];
|
||||
GVAR(camera) camPrepareFocus [-1,-1];
|
||||
GVAR(camera) camPrepareFov 0.35;
|
||||
GVAR(camera) camCommitPrepared 0;
|
||||
|
||||
showCinemaBorder false;
|
||||
["#(argb,8,8,3)color(0,0,0,1)",false,nil,0,[0,0.5]] call bis_fnc_textTiles;
|
||||
|
||||
//--------------- Reset camera pos
|
||||
[nil, [controlNull,0,0]] call FUNC(handleMouse);
|
||||
GVAR(camPosUpdateHandle) = addMissionEventHandler ["draw3D",{ [] call FUNC(updateCamPos) }];
|
121
addons/arsenal/functions/fnc_onKeyDown.sqf
Normal file
121
addons/arsenal/functions/fnc_onKeyDown.sqf
Normal file
@ -0,0 +1,121 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Handles keyboard inputs in arsenal.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Arsenal display <DISPLAY>
|
||||
* 1: Key being pressed <SCALAR>
|
||||
* 2: Shift state <BOOL>
|
||||
* 3: Ctrl state <BOOL>
|
||||
* 4: Alt state <BOOL>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
#include "\A3\ui_f\hpp\defineDIKCodes.inc"
|
||||
|
||||
params ["", "_args"];
|
||||
_args params ["_display", "_keyPressed", "_shiftState", "_ctrlState", "_altState"];
|
||||
|
||||
if !((findDisplay IDD_loadouts_display) isEqualTo displayNull) exitWith {};
|
||||
|
||||
GVAR(shiftState) = _shiftState;
|
||||
|
||||
private _return = true;
|
||||
|
||||
if (!GVAR(leftSearchbarFocus) && {!GVAR(rightSearchbarFocus)}) then {
|
||||
|
||||
switch true do {
|
||||
// Close button
|
||||
case (_keyPressed == DIK_ESCAPE): {
|
||||
_display closeDisplay 2;
|
||||
};
|
||||
// Hide button
|
||||
case (_keyPressed == DIK_BACKSPACE): {
|
||||
[_display] call FUNC(buttonHide);
|
||||
};
|
||||
// Export button
|
||||
case (_keyPressed == DIK_C && {_ctrlState}): {
|
||||
[_display] call FUNC(buttonExport);
|
||||
};
|
||||
// Import button
|
||||
case (_keyPressed == DIK_V && {_ctrlState}): {
|
||||
[_display] call FUNC(buttonImport);
|
||||
};
|
||||
// Switch vision mode
|
||||
case (_keyPressed in (actionkeys "nightvision")): {
|
||||
if (isNil QGVAR(visionMode)) then {
|
||||
GVAR(visionMode) = 0;
|
||||
};
|
||||
GVAR(visionMode) = (GVAR(visionMode) + 1) % 3;
|
||||
|
||||
switch GVAR(visionMode) do {
|
||||
//--- Normal
|
||||
case 0: {
|
||||
camusenvg false;
|
||||
false setCamUseTi 0;
|
||||
};
|
||||
//--- NVG
|
||||
case 1: {
|
||||
camusenvg true;
|
||||
false setCamUseTi 0;
|
||||
};
|
||||
//--- TI
|
||||
default {
|
||||
camusenvg false;
|
||||
true setCamUseTi 0;
|
||||
};
|
||||
};
|
||||
|
||||
playsound ["RscDisplayCurator_visionMode",true];
|
||||
};
|
||||
};
|
||||
} else {
|
||||
switch true do {
|
||||
case (_keyPressed == DIK_ESCAPE): {
|
||||
_display closeDisplay 2;
|
||||
};
|
||||
case (_keyPressed == DIK_BACKSPACE): {
|
||||
_return = false;
|
||||
};
|
||||
case (_keyPressed == DIK_RETURN): {
|
||||
if (GVAR(leftSearchbarFocus)) then {
|
||||
[_display, _display displayCtrl IDC_leftSearchbar] call FUNC(handleSearchBar);
|
||||
};
|
||||
if (GVAR(rightSearchbarFocus)) then {
|
||||
[_display, _display displayCtrl IDC_rightSearchbar] call FUNC(handleSearchBar);
|
||||
};
|
||||
};
|
||||
case (_keyPressed in [DIK_LEFT, DIK_RIGHT]): {
|
||||
_return = false;
|
||||
};
|
||||
case (_keyPressed == DIK_C && {_ctrlState}): {
|
||||
_return = false;
|
||||
};
|
||||
case (_keyPressed == DIK_V && {_ctrlState}): {
|
||||
_return = false;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
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
|
29
addons/arsenal/functions/fnc_onLoadoutsClose.sqf
Normal file
29
addons/arsenal/functions/fnc_onLoadoutsClose.sqf
Normal file
@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* onUnLoad EH for arsenal loadouts display.
|
||||
*
|
||||
* Arguments:
|
||||
* None
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
GVAR(currentLoadoutsTab) = nil;
|
||||
|
||||
private _arsenalDisplay = findDisplay IDD_ace_arsenal;
|
||||
private _mouseBlockCtrl = _arsenalDisplay displayCtrl IDC_mouseBlock;
|
||||
|
||||
GVAR(cameraPosition) = GVAR(previousCameraPos);
|
||||
GVAR(previousCameraPos) = nil;
|
||||
|
||||
_mouseBlockCtrl ctrlEnable false;
|
||||
_mouseBlockCtrl ctrlCommit 0;
|
||||
|
||||
[_arsenalDisplay] call FUNC(buttonHide);
|
||||
|
||||
[_arsenalDisplay , _arsenalDisplay displayCtrl GVAR(currentLeftPanel)] call FUNC(fillLeftPanel);
|
58
addons/arsenal/functions/fnc_onLoadoutsOpen.sqf
Normal file
58
addons/arsenal/functions/fnc_onLoadoutsOpen.sqf
Normal file
@ -0,0 +1,58 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* onLoad EH for arsenal loadouts display.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Ignored
|
||||
* 1: Arguments <ARRAY>
|
||||
* 1.1: Loadouts display <DISPLAY>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["", "_args"];
|
||||
_args params ["_display"];
|
||||
|
||||
private _arsenalDisplay = findDisplay IDD_ace_arsenal;
|
||||
private _mouseBlockCtrl = _arsenalDisplay displayCtrl IDC_mouseBlock;
|
||||
|
||||
_mouseBlockCtrl ctrlEnable true;
|
||||
_mouseBlockCtrl ctrlCommit 0;
|
||||
|
||||
[_arsenalDisplay] call FUNC(buttonHide);
|
||||
|
||||
GVAR(currentLoadoutsTab) = -1;
|
||||
|
||||
GVAR(previousCameraPos) = GVAR(cameraPosition);
|
||||
GVAR(cameraPosition) = [5,0,20,[-0.85,0,0.85]];
|
||||
|
||||
private _panelContentCtrl = _display displayCtrl IDC_contentPanel;
|
||||
_panelContentCtrl ctrlSetFontHeight (4.5 * GRID_H);
|
||||
_panelContentCtrl ctrlCommit 0;
|
||||
|
||||
if !(GVAR(allowDefaultLoadouts)) then {
|
||||
private _buttonDefaultLoadoutsCtrl = _display displayCtrl IDC_buttonDefaultLoadouts;
|
||||
_buttonDefaultLoadoutsCtrl ctrlEnable false;
|
||||
_buttonDefaultLoadoutsCtrl ctrlCommit 0;
|
||||
|
||||
private _buttonDefaultLoadoutsBackgroundCtrl = _display displayCtrl IDC_buttonDefaultLoadoutsBackground;
|
||||
_buttonDefaultLoadoutsBackgroundCtrl ctrlShow false;
|
||||
_buttonDefaultLoadoutsBackgroundCtrl ctrlCommit 0;
|
||||
};
|
||||
|
||||
if !(GVAR(allowSharedLoadouts) && {isMultiplayer}) then {
|
||||
private _buttonShareLoadoutsCtrl = _display displayCtrl IDC_buttonSharedLoadouts;
|
||||
_buttonShareLoadoutsCtrl ctrlEnable false;
|
||||
_buttonShareLoadoutsCtrl ctrlCommit 0;
|
||||
|
||||
private _buttonShareLoadoutsBackgroundCtrl = _display displayCtrl IDC_buttonSharedLoadoutsBackground;
|
||||
_buttonShareLoadoutsBackgroundCtrl ctrlShow false;
|
||||
_buttonShareLoadoutsBackgroundCtrl ctrlCommit 0;
|
||||
};
|
||||
|
||||
[_display, _display displayCtrl IDC_buttonMyLoadouts] call FUNC(loadoutsChangeTab);
|
6
addons/arsenal/functions/fnc_onMouseButtonDown.sqf
Normal file
6
addons/arsenal/functions/fnc_onMouseButtonDown.sqf
Normal file
@ -0,0 +1,6 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["", "_args"];
|
||||
_args params ["", "_buttonPressed", "_xPos", "_yPos"];
|
||||
|
||||
GVAR(mouseButtonState) set [_buttonPressed, [_xPos, _yPos]];
|
6
addons/arsenal/functions/fnc_onMouseButtonUp.sqf
Normal file
6
addons/arsenal/functions/fnc_onMouseButtonUp.sqf
Normal file
@ -0,0 +1,6 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["", "_args"];
|
||||
_args params ["", "_buttonPressed"];
|
||||
|
||||
GVAR(mouseButtonState) set [_buttonPressed, []];
|
413
addons/arsenal/functions/fnc_onSelChangedLeft.sqf
Normal file
413
addons/arsenal/functions/fnc_onSelChangedLeft.sqf
Normal file
@ -0,0 +1,413 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Handles selection changes on the left panel.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Left panel control <CONTROL>
|
||||
* 1: Left panel selection <SCALAR>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["_control", "_curSel"];
|
||||
|
||||
if (_curSel < 0) exitwith {};
|
||||
|
||||
private _ctrlIDC = ctrlIDC _control;
|
||||
private _display = ctrlParent _control;
|
||||
private _item = [_control lnbData [_curSel, 0], _control lbData _curSel] select !(ctrlType _control == 102);
|
||||
|
||||
private _weaponDefaultRightPanel = _display displayCtrl IDC_buttonOptic;
|
||||
private _selectCorrectPanelWeapon = [_weaponDefaultRightPanel, _display displayCtrl GVAR(currentRightPanel)] select (!(isNil QGVAR(currentRightPanel)) && {GVAR(currentRightPanel) in [RIGHT_PANEL_ACC_IDCS, IDC_buttonCurrentMag, IDC_buttonCurrentMag2]});
|
||||
|
||||
private _containerDefaultRightPanel = _display displayCtrl IDC_buttonMisc;
|
||||
private _selectCorrectPanelContainer = [_containerDefaultRightPanel, _display displayCtrl GVAR(currentRightPanel)] select (!(isNil QGVAR(currentRightPanel)) && {GVAR(currentRightPanel) in [RIGHT_PANEL_ITEMS_IDCS]});
|
||||
|
||||
switch (GVAR(currentLeftPanel)) do {
|
||||
|
||||
case IDC_buttonPrimaryWeapon : {
|
||||
private _baseWeapon = ((GVAR(currentItems) select 0) call bis_fnc_baseWeapon);
|
||||
|
||||
if ((GVAR(currentItems) select 0) != _item && {_baseWeapon != _item}) then {
|
||||
|
||||
private _compatibleMags = getArray (configfile >> "cfgweapons" >> _baseWeapon >> "magazines");
|
||||
{
|
||||
GVAR(center) removeMagazines _x;
|
||||
} foreach _compatibleMags;
|
||||
|
||||
GVAR(currentItems) set [15, uniformItems GVAR(center)];
|
||||
GVAR(currentItems) set [16, vestItems GVAR(center)];
|
||||
GVAR(currentItems) set [17, backpackItems GVAR(center)];
|
||||
|
||||
if (_item == "") then {
|
||||
|
||||
GVAR(center) removeWeapon (primaryWeapon GVAR(center));
|
||||
GVAR(currentItems) set [18, ["", "", "", "", "", ""]];
|
||||
GVAR(currentItems) set [0, _item];
|
||||
} else {
|
||||
|
||||
private _compatibleItems = (_item call bis_fnc_compatibleItems) apply {tolower _x};
|
||||
GVAR(center) addWeapon _item;
|
||||
GVAR(center) addWeaponItem [_item, [(getArray (configfile >> "cfgweapons" >> _item >> "magazines")) select 0]];
|
||||
|
||||
{
|
||||
if (tolower _x in _compatibleItems || {_x in _compatibleMags}) then {
|
||||
GVAR(center) addPrimaryWeaponItem _x;
|
||||
};
|
||||
} foreach (GVAR(currentItems) select 18);
|
||||
|
||||
private _primaryMags = primaryWeaponMagazine GVAR(center);
|
||||
GVAR(currentItems) set [18, (primaryWeaponItems GVAR(center)) + ([_primaryMags + [""], _primaryMags] select (count _primaryMags > 1))];
|
||||
GVAR(currentItems) set [0, _item];
|
||||
};
|
||||
};
|
||||
|
||||
if (_item == "") then {
|
||||
TOGGLE_RIGHT_PANEL_HIDE
|
||||
} else {
|
||||
TOGGLE_RIGHT_PANEL_WEAPON
|
||||
[_display, _selectCorrectPanelWeapon] call FUNC(fillRightPanel);
|
||||
};
|
||||
|
||||
call FUNC(showItem);
|
||||
[_display, _control, _curSel, (configFile >> "CfgWeapons" >> _item)] call FUNC(itemInfo);
|
||||
};
|
||||
|
||||
case IDC_buttonHandgun : {
|
||||
private _baseWeapon = ((GVAR(currentItems) select 2) call bis_fnc_baseWeapon);
|
||||
|
||||
if ((GVAR(currentItems) select 2) != _item && {_baseWeapon != _item}) then {
|
||||
|
||||
private _compatibleMags = getArray (configfile >> "cfgweapons" >> _baseWeapon >> "magazines");
|
||||
{
|
||||
GVAR(center) removeMagazines _x;
|
||||
} foreach _compatibleMags;
|
||||
|
||||
GVAR(currentItems) set [15, uniformItems GVAR(center)];
|
||||
GVAR(currentItems) set [16, vestItems GVAR(center)];
|
||||
GVAR(currentItems) set [17, backpackItems GVAR(center)];
|
||||
|
||||
if (_item == "") then {
|
||||
|
||||
GVAR(center) removeWeapon (handgunWeapon GVAR(center));
|
||||
GVAR(currentItems) set [18, ["", "", "", "", "", ""]];
|
||||
GVAR(currentItems) set [2, _item];
|
||||
} else {
|
||||
|
||||
private _compatibleItems = (_item call bis_fnc_compatibleItems) apply {tolower _x};
|
||||
GVAR(center) addWeapon _item;
|
||||
GVAR(center) addWeaponItem [_item, [(getArray (configfile >> "cfgweapons" >> _item >> "magazines")) select 0]];
|
||||
|
||||
{
|
||||
if (tolower _x in _compatibleItems || {_x in _compatibleMags}) then {
|
||||
GVAR(center) addHandgunItem _x;
|
||||
};
|
||||
} foreach (GVAR(currentItems) select 20);
|
||||
|
||||
private _handgunMags = handgunMagazine GVAR(center);
|
||||
GVAR(currentItems) set [20, (handgunItems GVAR(center)) + ([_handgunMags + [""], _handgunMags] select (count _handgunMags > 1))];
|
||||
GVAR(currentItems) set [2, _item];
|
||||
};
|
||||
};
|
||||
|
||||
if (_item == "") then {
|
||||
TOGGLE_RIGHT_PANEL_HIDE
|
||||
} else {
|
||||
TOGGLE_RIGHT_PANEL_WEAPON
|
||||
[_display, [_selectCorrectPanelWeapon, _weaponDefaultRightPanel] select (GVAR(currentRightPanel) == IDC_buttonCurrentMag2)] call FUNC(fillRightPanel);
|
||||
};
|
||||
|
||||
call FUNC(showItem);
|
||||
[_display, _control, _curSel, (configFile >> "CfgWeapons" >> _item)] call FUNC(itemInfo);
|
||||
};
|
||||
|
||||
case IDC_buttonSecondaryWeapon : {
|
||||
private _baseWeapon = ((GVAR(currentItems) select 1) call bis_fnc_baseWeapon);
|
||||
|
||||
if ((GVAR(currentItems) select 1) != _item && {_baseWeapon != _item}) then {
|
||||
|
||||
private _compatibleMags = getArray (configfile >> "cfgweapons" >> _baseWeapon >> "magazines");
|
||||
{
|
||||
GVAR(center) removeMagazines _x;
|
||||
} foreach _compatibleMags;
|
||||
|
||||
GVAR(currentItems) set [15, uniformItems GVAR(center)];
|
||||
GVAR(currentItems) set [16, vestItems GVAR(center)];
|
||||
GVAR(currentItems) set [17, backpackItems GVAR(center)];
|
||||
|
||||
if (_item == "") then {
|
||||
|
||||
GVAR(center) removeWeapon (secondaryWeapon GVAR(center));
|
||||
GVAR(currentItems) set [18, ["", "", "", "", "", ""]];
|
||||
GVAR(currentItems) set [1, _item];
|
||||
} else {
|
||||
|
||||
private _compatibleItems = (_item call bis_fnc_compatibleItems) apply {tolower _x};
|
||||
GVAR(center) addWeapon _item;
|
||||
GVAR(center) addWeaponItem [_item, [(getArray (configfile >> "cfgweapons" >> _item >> "magazines")) select 0]];
|
||||
|
||||
{
|
||||
if (tolower _x in _compatibleItems || {_x in _compatibleMags}) then {
|
||||
GVAR(center) addSecondaryWeaponItem _x;
|
||||
};
|
||||
} foreach (GVAR(currentItems) select 19);
|
||||
|
||||
private _secondaryMags = secondaryWeaponMagazine GVAR(center);
|
||||
GVAR(currentItems) set [19, (secondaryWeaponItems GVAR(center)) + ([_secondaryMags + [""], _secondaryMags] select (count _secondaryMags > 1))];
|
||||
GVAR(currentItems) set [1, _item];
|
||||
};
|
||||
};
|
||||
|
||||
if (_item == "") then {
|
||||
TOGGLE_RIGHT_PANEL_HIDE
|
||||
} else {
|
||||
TOGGLE_RIGHT_PANEL_WEAPON
|
||||
[_display, [_selectCorrectPanelWeapon, _weaponDefaultRightPanel] select (GVAR(currentRightPanel) == IDC_buttonCurrentMag2)] call FUNC(fillRightPanel);
|
||||
};
|
||||
|
||||
call FUNC(showItem);
|
||||
[_display, _control, _curSel, (configFile >> "CfgWeapons" >> _item)] call FUNC(itemInfo);
|
||||
};
|
||||
|
||||
case IDC_buttonHeadgear : {
|
||||
if (_item == "") then {
|
||||
removeHeadgear GVAR(center);
|
||||
GVAR(currentItems) set [3, _item];
|
||||
} else {
|
||||
GVAR(center) addHeadgear _item;
|
||||
GVAR(currentItems) set [3, _item];
|
||||
};
|
||||
call FUNC(showItem);
|
||||
TOGGLE_RIGHT_PANEL_HIDE
|
||||
[_display, _control, _curSel, (configFile >> "CfgWeapons" >> _item)] call FUNC(itemInfo);
|
||||
};
|
||||
|
||||
case IDC_buttonUniform : {
|
||||
if (_item == "") then {
|
||||
|
||||
removeuniform GVAR(center);
|
||||
GVAR(currentItems) set [15, []];
|
||||
GVAR(currentItems) set [4, _item];
|
||||
TOGGLE_RIGHT_PANEL_HIDE
|
||||
} else {
|
||||
|
||||
GVAR(center) forceAddUniform _item;
|
||||
|
||||
while {count uniformItems GVAR(center) > 0} do {
|
||||
GVAR(center) removeItemFromUniform (uniformItems GVAR(center) select 0);
|
||||
}; //--- Remove default config contents
|
||||
|
||||
{GVAR(center) addItemtoUniform _x} foreach (GVAR(currentItems) select 15);
|
||||
GVAR(currentItems) set [4, _item];
|
||||
|
||||
[GVAR(center), ""] call bis_fnc_setUnitInsignia;
|
||||
[GVAR(center), GVAR(currentInsignia)] call bis_fnc_setUnitInsignia;
|
||||
|
||||
TOGGLE_RIGHT_PANEL_CONTAINER
|
||||
[_display, _selectCorrectPanelContainer] call FUNC(fillRightPanel);
|
||||
};
|
||||
|
||||
call FUNC(showItem);
|
||||
[_display, _control, _curSel, (configFile >> "CfgWeapons" >> _item)] call FUNC(itemInfo);
|
||||
};
|
||||
|
||||
case IDC_buttonVest: {
|
||||
if (_item == "") then {
|
||||
|
||||
removeVest GVAR(center);
|
||||
GVAR(currentItems) set [16, []];
|
||||
GVAR(currentItems) set [5, _item];
|
||||
TOGGLE_RIGHT_PANEL_HIDE
|
||||
} else {
|
||||
|
||||
GVAR(center) addVest _item;
|
||||
while {count vestItems GVAR(center) > 0} do {
|
||||
GVAR(center) removeItemFromVest (VestItems GVAR(center) select 0);
|
||||
}; //--- Remove default config contents
|
||||
{GVAR(center) addItemToVest _x} foreach (GVAR(currentItems) select 16);
|
||||
|
||||
GVAR(currentItems) set [5, _item];
|
||||
|
||||
TOGGLE_RIGHT_PANEL_CONTAINER
|
||||
[_display, _selectCorrectPanelContainer] call FUNC(fillRightPanel);
|
||||
};
|
||||
|
||||
call FUNC(showItem);
|
||||
[_display, _control, _curSel, (configFile >> "CfgWeapons" >> _item)] call FUNC(itemInfo);
|
||||
};
|
||||
|
||||
case IDC_buttonBackpack : {
|
||||
if (_item == "") then {
|
||||
|
||||
removeBackpack GVAR(center);
|
||||
GVAR(currentItems) set [17, []];
|
||||
GVAR(currentItems) set [6, _item];
|
||||
TOGGLE_RIGHT_PANEL_HIDE
|
||||
} else {
|
||||
|
||||
removeBackpack GVAR(center);
|
||||
GVAR(center) addBackpack _item;
|
||||
while {count backpackItems GVAR(center) > 0} do {
|
||||
GVAR(center) removeItemFromBackpack (backpackItems GVAR(center) select 0);
|
||||
}; //--- Remove default config contents
|
||||
{GVAR(center) addItemToBackpack _x} foreach (GVAR(currentItems) select 17);
|
||||
|
||||
GVAR(currentItems) set [6, _item];
|
||||
|
||||
TOGGLE_RIGHT_PANEL_CONTAINER
|
||||
[_display, _selectCorrectPanelContainer] call FUNC(fillRightPanel);
|
||||
};
|
||||
|
||||
call FUNC(showItem);
|
||||
[_display, _control, _curSel, (configFile >> "CfgVehicles" >> _item)] call FUNC(itemInfo);
|
||||
};
|
||||
|
||||
case IDC_buttonGoggles : {
|
||||
if (_item == "") then {
|
||||
removeGoggles GVAR(center);
|
||||
GVAR(currentItems) set [7, _item];
|
||||
} else {
|
||||
GVAR(center) addGoggles _item;
|
||||
GVAR(currentItems) set [7, _item];
|
||||
};
|
||||
|
||||
call FUNC(showItem);
|
||||
TOGGLE_RIGHT_PANEL_HIDE
|
||||
[_display, _control, _curSel, (configFile >> "CfgGlasses" >> _item)] call FUNC(itemInfo);
|
||||
};
|
||||
|
||||
case IDC_buttonNVG : {
|
||||
if (_item == "") then {
|
||||
GVAR(center) unlinkItem (GVAR(currentItems) select 8);
|
||||
GVAR(currentItems) set [8, _item];
|
||||
} else {
|
||||
GVAR(center) linkItem _item;
|
||||
GVAR(currentItems) set [8, _item];
|
||||
};
|
||||
|
||||
call FUNC(showItem);
|
||||
TOGGLE_RIGHT_PANEL_HIDE
|
||||
[_display, _control, _curSel, (configFile >> "CfgWeapons" >> _item)] call FUNC(itemInfo);
|
||||
};
|
||||
|
||||
case IDC_buttonBinoculars : {
|
||||
if (_item == "") then {
|
||||
GVAR(center) removeWeapon (binocular GVAR(center));
|
||||
GVAR(currentItems) set [9, _item];
|
||||
} else {
|
||||
GVAR(center) addWeapon _item;
|
||||
GVAR(currentItems) set [9, _item];
|
||||
call FUNC(showItem);
|
||||
ADDBINOCULARSMAG
|
||||
};
|
||||
call FUNC(showItem);
|
||||
TOGGLE_RIGHT_PANEL_HIDE
|
||||
[_display, _control, _curSel, (configFile >> "CfgWeapons" >> _item)] call FUNC(itemInfo);
|
||||
};
|
||||
|
||||
case IDC_buttonMap : {
|
||||
if (_item == "") then {
|
||||
GVAR(center) unlinkItem (GVAR(currentItems) select 10) select 0;
|
||||
GVAR(currentItems) set [10, _item];
|
||||
} else {
|
||||
GVAR(center) linkItem _item;
|
||||
GVAR(currentItems) set [10, _item];
|
||||
};
|
||||
|
||||
call FUNC(showItem);
|
||||
TOGGLE_RIGHT_PANEL_HIDE
|
||||
[_display, _control, _curSel, (configFile >> "CfgWeapons" >> _item)] call FUNC(itemInfo);
|
||||
};
|
||||
|
||||
case IDC_buttonCompass : {
|
||||
if (_item == "") then {
|
||||
GVAR(center) unlinkItem (GVAR(currentItems) select 11) select 0;
|
||||
GVAR(currentItems) set [11, _item];
|
||||
} else {
|
||||
GVAR(center) linkItem _item;
|
||||
GVAR(currentItems) set [11, _item];
|
||||
};
|
||||
|
||||
call FUNC(showItem);
|
||||
TOGGLE_RIGHT_PANEL_HIDE
|
||||
[_display, _control, _curSel, (configFile >> "CfgWeapons" >> _item)] call FUNC(itemInfo);
|
||||
};
|
||||
|
||||
case IDC_buttonRadio : {
|
||||
if (_item == "") then {
|
||||
GVAR(center) unlinkItem (GVAR(currentItems) select 12) select 0;
|
||||
GVAR(currentItems) set [12, _item];
|
||||
} else {
|
||||
GVAR(center) linkItem _item;
|
||||
GVAR(currentItems) set [12, _item];
|
||||
};
|
||||
|
||||
call FUNC(showItem);
|
||||
TOGGLE_RIGHT_PANEL_HIDE
|
||||
[_display, _control, _curSel, (configFile >> "CfgWeapons" >> _item)] call FUNC(itemInfo);
|
||||
};
|
||||
|
||||
case IDC_buttonWatch : {
|
||||
if (_item == "") then {
|
||||
GVAR(center) unlinkItem (GVAR(currentItems) select 13);
|
||||
GVAR(currentItems) set [13, _item];
|
||||
} else {
|
||||
GVAR(center) linkItem _item;
|
||||
GVAR(currentItems) set [13, _item];
|
||||
};
|
||||
|
||||
call FUNC(showItem);
|
||||
TOGGLE_RIGHT_PANEL_HIDE
|
||||
[_display, _control, _curSel, (configFile >> "CfgWeapons" >> _item)] call FUNC(itemInfo);
|
||||
};
|
||||
|
||||
case IDC_buttonGPS : {
|
||||
if (_item == "") then {
|
||||
GVAR(center) unlinkItem (GVAR(currentItems) select 14) select 0;
|
||||
GVAR(currentItems) set [14, _item];
|
||||
} else {
|
||||
GVAR(center) linkItem _item;
|
||||
GVAR(currentItems) set [14, _item];
|
||||
};
|
||||
|
||||
call FUNC(showItem);
|
||||
TOGGLE_RIGHT_PANEL_HIDE
|
||||
[_display, _control, _curSel, (configFile >> "CfgWeapons" >> _item)] call FUNC(itemInfo);
|
||||
};
|
||||
|
||||
case IDC_buttonFace : {
|
||||
private _face = [_item, "Default"] select (_item == "");
|
||||
|
||||
GVAR(center) setFace _face;
|
||||
GVAR(currentFace) = _face;
|
||||
|
||||
call FUNC(showItem);
|
||||
TOGGLE_RIGHT_PANEL_HIDE
|
||||
[_display, _control, _curSel, (configFile >> "CfgFaces" >> _item)] call FUNC(itemInfo);
|
||||
};
|
||||
|
||||
case IDC_buttonVoice : {
|
||||
GVAR(center) setSpeaker _item;
|
||||
GVAR(currentVoice) = _item;
|
||||
|
||||
call FUNC(showItem);
|
||||
TOGGLE_RIGHT_PANEL_HIDE
|
||||
[_display, _control, _curSel, (configFile >> "CfgVoice" >> _item)] call FUNC(itemInfo);
|
||||
};
|
||||
|
||||
case IDC_buttonInsigna : {
|
||||
[GVAR(center), _item] call bis_fnc_setUnitInsignia;
|
||||
GVAR(currentInsignia) = _item;
|
||||
|
||||
call FUNC(showItem);
|
||||
TOGGLE_RIGHT_PANEL_HIDE
|
||||
[_display, _control, _curSel, (configFile >> "CfgUnitInsignia" >> _item)] call FUNC(itemInfo);
|
||||
};
|
||||
};
|
||||
|
||||
(_display displayCtrl IDC_totalWeightText) ctrlSetText ([[GVAR(center), 1] call EFUNC(common,getWeight), [GVAR(center), 2] call EFUNC(common,getWeight)] joinString " / ");
|
103
addons/arsenal/functions/fnc_onSelChangedLoadouts.sqf
Normal file
103
addons/arsenal/functions/fnc_onSelChangedLoadouts.sqf
Normal file
@ -0,0 +1,103 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Handles selection changes on loadouts panel.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Loadouts panel control <CONTROL>
|
||||
* 1: Loadouts panel selection <SCALAR>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["_display", "_control", "_curSel"];
|
||||
|
||||
private _shareButtonCtrl = _display displayCtrl IDC_buttonShare;
|
||||
private _saveButtonCtrl = _display displayCtrl IDC_buttonSave;
|
||||
private _loadButtonCtrl = _display displayCtrl IDC_buttonLoad;
|
||||
private _deleteButtonCtrl = _display displayCtrl IDC_buttonDelete;
|
||||
private _renameButtonCtrl = _display displayCtrl IDC_buttonRename;
|
||||
private _textEditBoxCtrl= _display displayCtrl IDC_textEditBox;
|
||||
|
||||
if (_curSel == -1) exitWith {
|
||||
|
||||
if (GVAR(currentLoadoutsTab) == IDC_buttonSharedLoadouts) then {
|
||||
_saveButtonCtrl ctrlEnable false;
|
||||
_saveButtonCtrl ctrlCommit 0;
|
||||
};
|
||||
|
||||
_shareButtonCtrl ctrlSetText (localize LSTRING(buttonSharePrivateText));
|
||||
|
||||
{
|
||||
_x ctrlEnable false;
|
||||
_x ctrlCommit 0;
|
||||
} foreach [_shareButtonCtrl, _loadButtonCtrl, _deleteButtonCtrl, _renameButtonCtrl];
|
||||
};
|
||||
|
||||
switch (GVAR(currentLoadoutsTab)) do {
|
||||
|
||||
case IDC_buttonMyLoadouts: {
|
||||
|
||||
_shareButtonCtrl ctrlEnable (GVAR(allowSharedLoadouts) && {isMultiplayer});
|
||||
_shareButtonCtrl ctrlCommit 0;
|
||||
|
||||
_loadButtonCtrl ctrlEnable true;
|
||||
_loadButtonCtrl ctrlCommit 0;
|
||||
|
||||
_shareButtonCtrl ctrlSetText ( [
|
||||
localize LSTRING(buttonSharePrivateText),
|
||||
localize LSTRING(buttonSharePublicText)
|
||||
] select ((_control lnbValue [_curSel, 0]) == 1));
|
||||
|
||||
{
|
||||
_x ctrlEnable true;
|
||||
_x ctrlCommit 0;
|
||||
} foreach [_renameButtonCtrl, _deleteButtonCtrl];
|
||||
|
||||
_textEditBoxCtrl ctrlSetText (_control lnbText [_curSel, 1]);
|
||||
};
|
||||
|
||||
case IDC_buttonDefaultLoadouts: {
|
||||
|
||||
{
|
||||
_x ctrlEnable true;
|
||||
_x ctrlCommit 0;
|
||||
} foreach [_saveButtonCtrl, _loadButtonCtrl];
|
||||
|
||||
_shareButtonCtrl ctrlEnable false;
|
||||
_shareButtonCtrl ctrlCommit 0;
|
||||
|
||||
{
|
||||
_x ctrlEnable (is3DEN);
|
||||
_x ctrlCommit 0;
|
||||
} foreach [_deleteButtonCtrl, _renameButtonCtrl];
|
||||
|
||||
_textEditBoxCtrl ctrlSetText (_control lnbText [_curSel, 1]);
|
||||
};
|
||||
|
||||
case IDC_buttonSharedLoadouts: {
|
||||
|
||||
{
|
||||
_x ctrlEnable true;
|
||||
_x ctrlCommit 0;
|
||||
} foreach [_saveButtonCtrl, _loadButtonCtrl];
|
||||
|
||||
_shareButtonCtrl ctrlEnable false;
|
||||
_shareButtonCtrl ctrlCommit 0;
|
||||
|
||||
if ((serverCommandAvailable "#logout") || {(_control lnbText [_curSel, 0]) == profileName}) then {
|
||||
|
||||
_deleteButtonCtrl ctrlEnable true;
|
||||
_deleteButtonCtrl ctrlCommit 0;
|
||||
} else {
|
||||
_deleteButtonCtrl ctrlEnable false;
|
||||
_deleteButtonCtrl ctrlCommit 0;
|
||||
};
|
||||
|
||||
_textEditBoxCtrl ctrlSetText (_control lnbText [_curSel, 1]);
|
||||
};
|
||||
};
|
77
addons/arsenal/functions/fnc_onSelChangedRight.sqf
Normal file
77
addons/arsenal/functions/fnc_onSelChangedRight.sqf
Normal file
@ -0,0 +1,77 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Handles selection changes on the right panel.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Right panel control <CONTROL>
|
||||
* 1: Right panel selection <SCALAR>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["_control", "_curSel"];
|
||||
|
||||
if (_curSel < 0) exitwith {};
|
||||
|
||||
private _ctrlIDC = ctrlIDC _control;
|
||||
private _display = ctrlParent _control;
|
||||
private _item = _control lbData _curSel;
|
||||
|
||||
|
||||
private _fnc_selectItem = {
|
||||
params ["_item", "_currentItemsIndex", "_itemIndex"];
|
||||
|
||||
switch (_currentItemsIndex) do {
|
||||
case 18: {
|
||||
if (_item == "") then {
|
||||
GVAR(center) removePrimaryWeaponItem ((GVAR(currentItems) select 18) select _itemIndex);
|
||||
private _primaryMags = primaryWeaponMagazine GVAR(center);
|
||||
GVAR(currentItems) set [18, (primaryWeaponItems GVAR(center)) + ([_primaryMags + [""], _primaryMags] select (count _primaryMags > 1))];
|
||||
} else {
|
||||
GVAR(center) addPrimaryWeaponItem _item;
|
||||
private _primaryMags = primaryWeaponMagazine GVAR(center);
|
||||
GVAR(currentItems) set [18, (primaryWeaponItems GVAR(center)) + ([_primaryMags + [""], _primaryMags] select (count _primaryMags > 1))];
|
||||
};
|
||||
[_display, _control, _curSel, (configFile >> (["CfgWeapons", "CfgMagazines"] select (_itemIndex in [4, 5]))>> _item)] call FUNC(itemInfo);
|
||||
};
|
||||
|
||||
case 19: {
|
||||
if (_item == "") then {
|
||||
GVAR(center) removeSecondaryWeaponItem ((GVAR(currentItems) select 19) select _itemIndex);
|
||||
private _secondaryMags = secondaryWeaponMagazine GVAR(center);
|
||||
GVAR(currentItems) set [19, (secondaryWeaponItems GVAR(center)) + ([_secondaryMags + [""], _secondaryMags] select (count _secondaryMags > 1))];
|
||||
} else {
|
||||
GVAR(center) addSecondaryWeaponItem _item;
|
||||
private _secondaryMags = secondaryWeaponMagazine GVAR(center);
|
||||
GVAR(currentItems) set [19, (secondaryWeaponItems GVAR(center)) + ([_secondaryMags + [""], _secondaryMags] select (count _secondaryMags > 1))];
|
||||
};
|
||||
[_display, _control, _curSel, (configFile >> (["CfgWeapons", "CfgMagazines"] select (_itemIndex in [4, 5]))>> _item)] call FUNC(itemInfo);
|
||||
};
|
||||
|
||||
case 20: {
|
||||
if (_item == "") then {
|
||||
GVAR(center) removeHandgunItem ((GVAR(currentItems) select 20) select _itemIndex);
|
||||
private _handgunMags = handgunMagazine GVAR(center);
|
||||
GVAR(currentItems) set [20, (handgunItems GVAR(center)) + ([_handgunMags + [""], _handgunMags] select (count _handgunMags > 1))];
|
||||
} else {
|
||||
GVAR(center) addHandgunItem _item;
|
||||
private _handgunMags = handgunMagazine GVAR(center);
|
||||
GVAR(currentItems) set [20, (handgunItems GVAR(center)) + ([_handgunMags + [""], _handgunMags] select (count _handgunMags > 1))];
|
||||
};
|
||||
[_display, _control, _curSel, (configFile >> (["CfgWeapons", "CfgMagazines"] select (_itemIndex in [4, 5]))>> _item)] call FUNC(itemInfo);
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
[
|
||||
_item,
|
||||
18 + ([IDC_buttonPrimaryWeapon, IDC_buttonSecondaryWeapon, IDC_buttonHandgun] find GVAR(currentLeftPanel)),
|
||||
[IDC_buttonMuzzle, IDC_buttonItemAcc, IDC_buttonOptic, IDC_buttonBipod, IDC_buttonCurrentMag, IDC_buttonCurrentMag2] find GVAR(currentRightPanel)
|
||||
] call _fnc_selectItem;
|
||||
|
||||
(_display displayCtrl IDC_totalWeightText) ctrlSetText ([[GVAR(center), 1] call EFUNC(common,getWeight), [GVAR(center), 2] call EFUNC(common,getWeight)] joinString " / ");
|
51
addons/arsenal/functions/fnc_onSelChangedRightListnBox.sqf
Normal file
51
addons/arsenal/functions/fnc_onSelChangedRightListnBox.sqf
Normal file
@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Handles selection changes on the right panel (listnbox).
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Right panel control <CONTROL>
|
||||
* 1: Right panel selection <SCALAR>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["_control", "_curSel"];
|
||||
|
||||
if (_curSel < 0) exitwith {};
|
||||
|
||||
private _ctrlIDC = ctrlIDC _control;
|
||||
private _display = ctrlParent _control;
|
||||
private _item = [_control lnbData [_curSel, 0], _control lbData _curSel] select !(ctrlType _control == 102);
|
||||
|
||||
private _fnc_selectRight = {
|
||||
params ["_item", "_cfgEntry"];
|
||||
|
||||
// Load remaining
|
||||
private _maxLoad = switch (GVAR(currentLeftPanel)) do {
|
||||
case IDC_buttonUniform: {
|
||||
gettext (configfile >> "CfgWeapons" >> uniform GVAR(center) >> "ItemInfo" >> "containerClass")
|
||||
};
|
||||
case IDC_buttonVest: {
|
||||
gettext (configfile >> "CfgWeapons" >> vest GVAR(center) >> "ItemInfo" >> "containerClass")
|
||||
};
|
||||
case IDC_buttonBackpack: {
|
||||
backpack GVAR(center)
|
||||
};
|
||||
};
|
||||
|
||||
[_control, _maxLoad] call FUNC(updateRightPanel);
|
||||
[_display, _control, _curSel, (configFile >> _cfgEntry >> _item)] call FUNC(itemInfo);
|
||||
};
|
||||
|
||||
if (GVAR(currentLeftPanel) in [IDC_buttonUniform, IDC_buttonVest, IDC_buttonBackpack]) then {
|
||||
|
||||
[
|
||||
_item,
|
||||
["CfgWeapons", "CfgMagazines"] select (GVAR(currentRightPanel) in [IDC_buttonMag, IDC_buttonMagALL, IDC_buttonThrow, IDC_buttonPut])
|
||||
] call _fnc_selectRight;
|
||||
};
|
17
addons/arsenal/functions/fnc_open3DEN.sqf
Normal file
17
addons/arsenal/functions/fnc_open3DEN.sqf
Normal file
@ -0,0 +1,17 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Replace the 3DEN "edit loadout" menu action
|
||||
*
|
||||
* Arguments:
|
||||
* None
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private _entity = (uinamespace getvariable ["bis_fnc_3DENEntityMenu_data",[]]) param [1, objnull];
|
||||
[_entity, _entity, true] call FUNC(openBox);
|
53
addons/arsenal/functions/fnc_openBox.sqf
Normal file
53
addons/arsenal/functions/fnc_openBox.sqf
Normal file
@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Open arsenal.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Box <OBJECT>
|
||||
* 1: Unit to open the arsenal on <OBJECT>
|
||||
* 2: Ignore virtual items and fill arsenal <BOOL>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [_box, player] call ace_arsenal_fnc_openBox
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params [["_object", objNull, [objNull]], ["_center", objNull, [objNull]], ["_mode", false, [false]]];
|
||||
|
||||
if (
|
||||
isNull _object ||
|
||||
{isNull _center} ||
|
||||
{!(_center isKindOf "Man")} ||
|
||||
{!(isNull objectParent _center) && {!is3DEN}}
|
||||
) exitWith {};
|
||||
|
||||
if (isNil {_object getVariable [QGVAR(virtualItems), nil]} && {!_mode}) exitWith {
|
||||
[localize LSTRING(noVirtualItems), false, 5, 1] call EFUNC(common,displayText);
|
||||
};
|
||||
|
||||
if (canSuspend) exitWith {
|
||||
[{_this call FUNC(openBox)}, _this] call CBA_fnc_directCall;
|
||||
};
|
||||
|
||||
private _displayToUse = [findDisplay 46, findDIsplay 312] select (!isNull findDisplay 312);
|
||||
_displayToUse = [_displayToUse, findDisplay 313] select (is3DEN);
|
||||
|
||||
if (isNil "_displayToUse" || {!isnil QGVAR(camera)}) exitWith {
|
||||
[localize LSTRING(CantOpenDisplay), false, 5, 1] call EFUNC(common,displayText);
|
||||
};
|
||||
|
||||
if (_mode) then {
|
||||
GVAR(virtualItems) = uiNamespace getVariable QGVAR(configItems);
|
||||
} else {
|
||||
GVAR(virtualItems) = +(_object getVariable [QGVAR(virtualItems), [
|
||||
[[], [], []], [[], [], [], []], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], []
|
||||
]]);
|
||||
};
|
||||
|
||||
GVAR(center) = _center;
|
||||
_displayToUse createDisplay QGVAR(display);
|
35
addons/arsenal/functions/fnc_removeBox.sqf
Normal file
35
addons/arsenal/functions/fnc_removeBox.sqf
Normal file
@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Remove arsenal from target.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Target <OBJECT>
|
||||
* 1: Remove globally <BOOL>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [_box, true] call ace_arsenal_fnc_removeBox
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params [["_object", objNull, [objNull]], ["_global", true, [true]]];
|
||||
|
||||
if (isNull _object || {isNil QGVAR(EHIDArray)}) exitWith {};
|
||||
|
||||
if (_global && {isMultiplayer}) then {
|
||||
private _ID = (GVAR(EHIDArray) select {_x select 1 == _object}) select 0;
|
||||
|
||||
if !(isNil "_ID") then {
|
||||
[_ID select 0] call CBA_fnc_removeGlobalEventJIP;
|
||||
GVAR(EHIDArray) deleteAt (GVAR(EHIDArray) find _ID);
|
||||
publicVariable QGVAR(EHIDArray);
|
||||
[QGVAR(removeBox), [_object, false]] call CBA_fnc_globalEvent;
|
||||
};
|
||||
} else {
|
||||
_object setVariable [QGVAR(virtualItems), nil, false];
|
||||
[_object, 0, ["ACE_MainActions", QGVAR(interaction)]] call EFUNC(interact_menu,removeActionFromObject);
|
||||
};
|
80
addons/arsenal/functions/fnc_removeVirtualItems.sqf
Normal file
80
addons/arsenal/functions/fnc_removeVirtualItems.sqf
Normal file
@ -0,0 +1,80 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Remove virtual items to the provided target.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Target <OBJECT>
|
||||
* 1: Items <ARRAY of strings> <BOOL>
|
||||
* 2: Add globally <BOOL>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [_box, ["item1", "item2", "itemN"]] call ace_arsenal_fnc_removeVirtualItems
|
||||
* [_box, true, false] call ace_arsenal_fnc_removeVirtualItems
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params [ ["_object", objNull, [objNull]], ["_items", [], [true, [""]]], ["_global", false, [false]] ];
|
||||
|
||||
if (_object == objNull) exitWith {};
|
||||
if (_items isEqualType [] && {count _items == 0}) exitWith {};
|
||||
|
||||
private _cargo = _object getVariable [QGVAR(virtualItems), [
|
||||
[[], [], []], // Weapons 0, primary, handgun, secondary
|
||||
[[], [], [], []], // WeaponAccessories 1, optic,side,muzzle,bipod
|
||||
[ ], // Magazines 2
|
||||
[ ], // Headgear 3
|
||||
[ ], // Uniform 4
|
||||
[ ], // Vest 5
|
||||
[ ], // Backpacks 6
|
||||
[ ], // Goggles 7
|
||||
[ ], // NVGs 8
|
||||
[ ], // Binoculars 9
|
||||
[ ], // Map 10
|
||||
[ ], // Compass 11
|
||||
[ ], // Radio slot 12
|
||||
[ ], // Watch slot 13
|
||||
[ ], // Comms slot 14
|
||||
[ ], // WeaponThrow 15
|
||||
[ ], // WeaponPut 16
|
||||
[ ] // InventoryItems 17
|
||||
]];
|
||||
|
||||
if (_items isEqualType true && {_items}) then {
|
||||
[_object, _global] call FUNC(removeBox);
|
||||
_object setVariable [QGVAR(virtualItems), nil, _global];
|
||||
} else {
|
||||
|
||||
// Make sure all items are in string form
|
||||
_items = _items select {_x isEqualType "" && {_x != ""}};
|
||||
|
||||
{
|
||||
if (_forEachIndex isEqualTo 0) then {
|
||||
_cargo set [_forEachIndex, [(_x select 0) - _items, (_x select 1) - _items, (_x select 2) - _items]];
|
||||
} else {
|
||||
if (_forEachIndex isEqualTo 1) then {
|
||||
_cargo set [_forEachIndex, [(_x select 0) - _items, (_x select 1) - _items, (_x select 2) - _items, (_x select 3) - _items]];
|
||||
} else {
|
||||
_cargo set [_cargo find _x, _x - _items];
|
||||
};
|
||||
};
|
||||
} foreach _cargo;
|
||||
|
||||
private _itemCount = {
|
||||
if (_x isEqualTo (_cargo select 0) || {_x isEqualTo (_cargo select 1)}) then {
|
||||
!(_x isEqualTo [[],[],[]] || {_x isEqualTo [[],[],[],[]]})
|
||||
} else {
|
||||
!(_x isEqualTo [])
|
||||
};
|
||||
} count _cargo;
|
||||
|
||||
if (_itemCount == 0) then {
|
||||
[_object, _global] call FUNC(removeBox);
|
||||
} else {
|
||||
_object setVariable [QGVAR(virtualItems), _cargo, _global];
|
||||
};
|
||||
};
|
184
addons/arsenal/functions/fnc_scanConfig.sqf
Normal file
184
addons/arsenal/functions/fnc_scanConfig.sqf
Normal file
@ -0,0 +1,184 @@
|
||||
/*
|
||||
* Author: Dedmen
|
||||
* Cache an array of all the compatible items for arsenal.
|
||||
*
|
||||
* Arguments:
|
||||
* None
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private _cargo = [
|
||||
[[], [], []], // Weapons 0, primary, secondary, handgun
|
||||
[[], [], [], []], // WeaponAccessories 1, optic,side,muzzle,bipod
|
||||
[ ], // Magazines 2
|
||||
[ ], // Headgear 3
|
||||
[ ], // Uniform 4
|
||||
[ ], // Vest 5
|
||||
[ ], // Backpacks 6
|
||||
[ ], // Goggles 7
|
||||
[ ], // NVGs 8
|
||||
[ ], // Binoculars 9
|
||||
[ ], // Map 10
|
||||
[ ], // Compass 11
|
||||
[ ], // Radio slot 12
|
||||
[ ], // Watch slot 13
|
||||
[ ], // Comms slot 14
|
||||
[ ], // WeaponThrow 15
|
||||
[ ], // WeaponPut 16
|
||||
[ ] // InventoryItems 17
|
||||
];
|
||||
|
||||
private _configCfgWeapons = configFile >> "CfgWeapons"; //Save this lookup in variable for perf improvement
|
||||
private _magazineGroups = [[],[]] call CBA_fnc_hashCreate;
|
||||
|
||||
{
|
||||
private _configItemInfo = _x >> "ItemInfo";
|
||||
private _simulationType = getText (_x >> "simulation");
|
||||
private _className = configName _x;
|
||||
private _hasItemInfo = isClass (_configItemInfo);
|
||||
private _itemInfoType = if (_hasItemInfo) then {getNumber (_configItemInfo >> "type")} else {0};
|
||||
|
||||
switch true do {
|
||||
/* Weapon acc */
|
||||
case (
|
||||
_hasItemInfo &&
|
||||
{_itemInfoType in [101, 201, 301, 302]} &&
|
||||
{!(configName _x isKindOf ["CBA_MiscItem", (_configCfgWeapons)])}
|
||||
): {
|
||||
|
||||
//Convert type to array index
|
||||
(_cargo select 1) select ([201,301,101,302] find _itemInfoType) pushBackUnique _className;
|
||||
};
|
||||
/* Headgear */
|
||||
case (_hasItemInfo && {_itemInfoType == 605}): {
|
||||
(_cargo select 3) pushBackUnique _className;
|
||||
};
|
||||
/* Uniform */\
|
||||
case (_hasItemInfo && {_itemInfoType == 801}): {
|
||||
(_cargo select 4) pushBackUnique _className;
|
||||
};
|
||||
/* Vest */
|
||||
case (_hasItemInfo && {_itemInfoType == 701}): {
|
||||
(_cargo select 5) pushBackUnique _className;
|
||||
};
|
||||
/* NVgs */
|
||||
case (_simulationType == "NVGoggles"): {
|
||||
(_cargo select 8) pushBackUnique _className;
|
||||
};
|
||||
/* Binos */
|
||||
case (_simulationType == "Binocular" ||
|
||||
((_simulationType == 'Weapon') && {(getNumber (_x >> 'type') == 4096)})): {
|
||||
(_cargo select 9) pushBackUnique _className;
|
||||
};
|
||||
/* Map */
|
||||
case (_simulationType == "ItemMap"): {
|
||||
(_cargo select 10) pushBackUnique _className;
|
||||
};
|
||||
/* Compass */
|
||||
case (_simulationType == "ItemCompass"): {
|
||||
(_cargo select 11) pushBackUnique _className;
|
||||
};
|
||||
/* Radio */
|
||||
case (_simulationType == "ItemRadio"): {
|
||||
(_cargo select 12) pushBackUnique _className;
|
||||
};
|
||||
/* Watch */
|
||||
case (_simulationType == "ItemWatch"): {
|
||||
(_cargo select 13) pushBackUnique _className;
|
||||
};
|
||||
/* GPS */
|
||||
case (_simulationType == "ItemGPS"): {
|
||||
(_cargo select 14) pushBackUnique _className;
|
||||
};
|
||||
/* UAV terminals */
|
||||
case (_hasItemInfo && {_itemInfoType == 621}): {
|
||||
(_cargo select 14) pushBackUnique _className;
|
||||
};
|
||||
/* Weapon, at the bottom to avoid adding binos */
|
||||
case (isClass (_x >> "WeaponSlotsInfo") &&
|
||||
{getNumber (_x >> 'type') != 4096}): {
|
||||
switch (getNumber (_x >> "type")) do {
|
||||
case 1: {
|
||||
(_cargo select 0) select 0 pushBackUnique (_className call bis_fnc_baseWeapon);
|
||||
};
|
||||
case 2: {
|
||||
(_cargo select 0) select 2 pushBackUnique (_className call bis_fnc_baseWeapon);
|
||||
};
|
||||
case 4: {
|
||||
(_cargo select 0) select 1 pushBackUnique (_className call bis_fnc_baseWeapon);
|
||||
};
|
||||
};
|
||||
};
|
||||
/* Misc items */
|
||||
case (
|
||||
_hasItemInfo &&
|
||||
(_itemInfoType in [101, 201, 301, 302] &&
|
||||
{(_className isKindOf ["CBA_MiscItem", (_configCfgWeapons)])}) ||
|
||||
{_itemInfoType in [401, 619, 620]} ||
|
||||
{(getText ( _x >> "simulation")) == "ItemMineDetector"}
|
||||
): {
|
||||
(_cargo select 17) pushBackUnique _className;
|
||||
};
|
||||
};
|
||||
} foreach configProperties [_configCfgWeapons, "isClass _x && {getNumber (_x >> 'scope') == 2} && {getNumber (_x >> 'ace_arsenal_hide') != 1}", true];
|
||||
|
||||
{
|
||||
private _className = configName _x;
|
||||
private _grenadeList = [];
|
||||
{
|
||||
_grenadeList append getArray (_configCfgWeapons >> "Throw" >> _x >> "magazines");
|
||||
false
|
||||
} count getArray (_configCfgWeapons >> "Throw" >> "muzzles");
|
||||
|
||||
private _putList = [];
|
||||
{
|
||||
_putList append getArray (_configCfgWeapons >> "Put" >> _x >> "magazines");
|
||||
false
|
||||
} count getArray (_configCfgWeapons >> "Put" >> "muzzles");
|
||||
|
||||
|
||||
switch true do {
|
||||
// Rifle, handgun, secondary weapons mags
|
||||
case (
|
||||
(getNumber (_x >> "type") in [256,512,1536,16]) &&
|
||||
{!(_className in _grenadeList)} &&
|
||||
{!(_className in _putList)}
|
||||
): {
|
||||
(_cargo select 2) pushBackUnique _className;
|
||||
};
|
||||
// Grenades
|
||||
case (_className in _grenadeList): {
|
||||
(_cargo select 15) pushBackUnique _className;
|
||||
};
|
||||
// Put
|
||||
case (_className in _putList): {
|
||||
(_cargo select 16) pushBackUnique _className;
|
||||
};
|
||||
};
|
||||
|
||||
if (isArray (_x >> "magazineGroup")) then {
|
||||
{
|
||||
private _entry = [_magazineGroups, _x] call CBA_fnc_hashGet;
|
||||
_entry pushBackUnique _className;
|
||||
[_magazineGroups, _x, _entry] call CBA_fnc_hashSet;
|
||||
} forEach getArray (_x >> "magazineGroup")
|
||||
};
|
||||
} foreach configProperties [(configFile >> "CfgMagazines"), "isClass _x && {getNumber (_x >> 'scope') == 2} && {getNumber (_x >> 'ace_arsenal_hide') != 1}", true];
|
||||
|
||||
{
|
||||
if (getText (_x >> "vehicleClass") == "Backpacks") then {
|
||||
(_cargo select 6) pushBackUnique (configName _x);
|
||||
};
|
||||
} foreach configProperties [(configFile >> "CfgVehicles"), "isClass _x && {getNumber (_x >> 'scope') == 2} && {getNumber (_x >> 'ace_arsenal_hide') != 1}", true];
|
||||
|
||||
{
|
||||
(_cargo select 7) pushBackUnique (configName _x);
|
||||
} foreach configProperties [(configFile >> "CfgGlasses"), "isClass _x && {getNumber (_x >> 'scope') == 2} && {getNumber (_x >> 'ace_arsenal_hide') != 1}", true];
|
||||
|
||||
uiNamespace setVariable [QGVAR(configItems), _cargo];
|
||||
uiNamespace setVariable [QGVAR(magazineGroups), _magazineGroups];
|
75
addons/arsenal/functions/fnc_showItem.sqf
Normal file
75
addons/arsenal/functions/fnc_showItem.sqf
Normal file
@ -0,0 +1,75 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Change unit animation / play sound preview.
|
||||
*
|
||||
* Arguments:
|
||||
* None
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
|
||||
|
||||
private _nextAction = switch (GVAR(currentLeftPanel)) do {
|
||||
|
||||
case IDC_buttonPrimaryWeapon : {
|
||||
["Civil", "PrimaryWeapon"] select ((GVAR(currentItems) select 0) != "")
|
||||
};
|
||||
case IDC_buttonSecondaryWeapon : {
|
||||
["Civil", "SecondaryWeapon"] select (GVAR(currentItems) select 1 != "")
|
||||
};
|
||||
case IDC_buttonHandgun : {
|
||||
["Civil", "HandGunOn"] select (GVAR(currentItems) select 2 != "")
|
||||
};
|
||||
case IDC_buttonHeadgear;
|
||||
case IDC_buttonUniform;
|
||||
case IDC_buttonVest;
|
||||
case IDC_buttonBackpack;
|
||||
case IDC_buttonGoggles;
|
||||
case IDC_buttonMap;
|
||||
case IDC_buttonGPS;
|
||||
case IDC_buttonRadio;
|
||||
case IDC_buttonCompass;
|
||||
case IDC_buttonWatch;
|
||||
case IDC_buttonFace;
|
||||
case IDC_buttonNVG : {
|
||||
"Civil"
|
||||
};
|
||||
case IDC_buttonBinoculars : {
|
||||
["Civil", "Binoculars"] select (GVAR(currentItems) select 9 != "")
|
||||
};
|
||||
case IDC_buttonInsigna : {
|
||||
"Salute"
|
||||
};
|
||||
case IDC_buttonVoice : {
|
||||
GVAR(center) directSay "CuratorObjectPlaced";
|
||||
"Civil"
|
||||
};
|
||||
};
|
||||
|
||||
if (_nextAction != GVAR(currentAction)) then {
|
||||
switch (_nextAction) do {
|
||||
case "PrimaryWeapon": {
|
||||
GVAR(selectedWeaponType) = 0;
|
||||
};
|
||||
case "SecondaryWeapon": {
|
||||
GVAR(selectedWeaponType) = 1;
|
||||
};
|
||||
case "HandGunOn": {
|
||||
GVAR(selectedWeaponType) = 2;
|
||||
};
|
||||
};
|
||||
|
||||
if (simulationEnabled GVAR(center)) then {
|
||||
GVAR(center) playActionNow _nextAction;
|
||||
} else {
|
||||
GVAR(center) switchAction _nextAction;
|
||||
};
|
||||
|
||||
GVAR(currentAction) = _nextAction;
|
||||
};
|
64
addons/arsenal/functions/fnc_sortPanel.sqf
Normal file
64
addons/arsenal/functions/fnc_sortPanel.sqf
Normal file
@ -0,0 +1,64 @@
|
||||
/*
|
||||
* Author: Alganthe, Dedmen
|
||||
* Sort arsenal panel.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Panel's control to sort <CONTROL>
|
||||
* 1: Sorting mode <SCALAR>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["_control", "_mode"];
|
||||
|
||||
private _display = ctrlParent _control;
|
||||
private ["_panel", "_curSel", "_selected"];
|
||||
|
||||
// Right panel
|
||||
if (ctrlIDC _control == 17 && {GVAR(currentLeftPanel) in [IDC_buttonUniform ,IDC_buttonVest, IDC_buttonBackpack]}) then {
|
||||
_panel = _display displayCtrl IDC_rightTabContentListnBox;
|
||||
_curSel = lnbCurSelRow _panel;
|
||||
_selected = _panel lnbData [_curSel, 0];
|
||||
|
||||
switch (_mode) do {
|
||||
case 0: {
|
||||
_panel lnbSort [1, false];
|
||||
};
|
||||
|
||||
case 1: {
|
||||
_panel lnbSortByValue [0, false];
|
||||
};
|
||||
|
||||
case 2: {
|
||||
_panel lnbSort [2, true];
|
||||
};
|
||||
};
|
||||
|
||||
if (_cursel >= 0) then {
|
||||
for '_i' from 0 to (((lnbsize _panel) select 0) - 1) do {
|
||||
if ((_panel lnbdata [_i, 0]) == _selected) exitwith {_panel lnbSetCurSelRow _i};
|
||||
};
|
||||
};
|
||||
// Left panel
|
||||
} else {
|
||||
_panel = _display displayCtrl ([IDC_leftTabContent, IDC_rightTabContent] select (ctrlIDC _control == 17));
|
||||
_curSel = lbCurSel _panel;
|
||||
_selected = _panel lbData _curSel;
|
||||
|
||||
if (_mode > 0) then {
|
||||
lbSortByValue _panel;
|
||||
} else {
|
||||
lbsort _panel;
|
||||
};
|
||||
|
||||
if (_cursel >= 0) then {
|
||||
for '_i' from 0 to (lbsize _panel - 1) do {
|
||||
if ((_panel lbdata _i) == _selected) exitwith {_panel lbSetCurSel _i};
|
||||
};
|
||||
};
|
||||
};
|
27
addons/arsenal/functions/fnc_updateCamPos.sqf
Normal file
27
addons/arsenal/functions/fnc_updateCamPos.sqf
Normal file
@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Author: Karel Moricky, modified by Alganthe
|
||||
* Update camera position
|
||||
* Modernized a bit, modified vars to fit arsenal rewrite.
|
||||
*
|
||||
* Arguments:
|
||||
* None
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
GVAR(cameraPosition) params ["_distance", "_dirH", "_dirV"];
|
||||
[GVAR(cameraHelper), [_dirH + 180, - _dirV, 0]] call bis_fnc_setobjectrotation;
|
||||
GVAR(cameraHelper) attachTo [GVAR(center), GVAR(cameraPosition) select 3, ""]; //--- Reattach for smooth movement
|
||||
|
||||
GVAR(camera) setPos (GVAR(cameraHelper) modelToWorld [0, -_distance, 0]);
|
||||
GVAR(camera) setVectorDirAndUp [vectorDir GVAR(cameraHelper), vectorUp GVAR(cameraHelper)];
|
||||
|
||||
//--- Make sure the camera is not underground
|
||||
if ((getPosAsl GVAR(camera) select 2) < (getPosAsl GVAR(center) select 2)) then {
|
||||
private _disCoef = ((getPosAsl GVAR(cameraHelper) select 2) - (getPosAsl GVAR(center) select 2)) / ((getPosAsl GVAR(cameraHelper) select 2) - (getPosAsl GVAR(camera) select 2) + 0.001);
|
||||
GVAR(camera) setPos (GVAR(cameraHelper) modelToWorldVisual [0, -_distance * _disCoef, 0]);
|
||||
};
|
57
addons/arsenal/functions/fnc_updateRightPanel.sqf
Normal file
57
addons/arsenal/functions/fnc_updateRightPanel.sqf
Normal file
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Update the right panel (listnbox).
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Right panel control <CONTROL>
|
||||
* 1: Max load of the current container <STRING>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["_control", "_maxLoad"];
|
||||
|
||||
private _loadIndicatorBarCtrl = _display displayCtrl IDC_loadIndicatorBar;
|
||||
private _curSel = lnbCurSelRow _control;
|
||||
|
||||
(lnbSize _control) params ["_rows"];
|
||||
|
||||
_maxLoad = getnumber (configfile >> "CfgVehicles" >> _maxLoad >> "maximumLoad");
|
||||
_maxLoad = _maxLoad * (1 - (progressPosition _loadIndicatorBarCtrl));
|
||||
_maxLoad = parseNumber (_maxLoad toFixed 2); // Required to avoid an issue where even though the typename returns "SCALAR" it doesn't act as one.
|
||||
|
||||
// Grey out items too big
|
||||
for "_r" from 0 to (_rows - 1) do {
|
||||
private _mass = _control getVariable (_control lnbData [_r, 0]);
|
||||
private _class = _control lnbText [_r, 1];
|
||||
|
||||
private _alpha = [0.25, 1.0] select (_mass <= _maxLoad);
|
||||
private _color = [1, 1, 1, _alpha];
|
||||
_control lnbSetColor [[_r, 1],_color];
|
||||
_control lnbSetColor [[_r, 2],_color];
|
||||
};
|
||||
|
||||
// Remove all from container show / hide
|
||||
private _removeAllCtrl = _display displayCtrl IDC_buttonRemoveAll;
|
||||
|
||||
if (progressPosition _loadIndicatorBarCtrl > 0) then {
|
||||
|
||||
_removeAllCtrl ctrlSetFade 0;
|
||||
_removeAllCtrl ctrlShow true;
|
||||
_removeAllCtrl ctrlEnable true;
|
||||
_removeAllCtrl ctrlCommit FADE_DELAY;
|
||||
};
|
||||
|
||||
(_display displayCtrl IDC_totalWeightText) ctrlSetText ([[GVAR(center), 1] call EFUNC(common,getWeight), [GVAR(center), 2] call EFUNC(common,getWeight)] joinString " / ");
|
||||
|
||||
// change button color if unique or too big
|
||||
if (_curSel != -1) then {
|
||||
private _plusButtonCtrl = _display displayCtrl IDC_arrowPlus;
|
||||
_plusButtonCtrl ctrlEnable !((_control lnbValue [_curSel, 2]) == 1 || {(_control getVariable (_control lnbData [_curSel, 0])) > _maxLoad});
|
||||
_plusButtonCtrl ctrlCommit FADE_DELAY;
|
||||
};
|
118
addons/arsenal/functions/fnc_updateUniqueItemsList.sqf
Normal file
118
addons/arsenal/functions/fnc_updateUniqueItemsList.sqf
Normal file
@ -0,0 +1,118 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Update the list of unique items.
|
||||
*
|
||||
* Arguments:
|
||||
* None
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
GVAR(virtualItems) set [18, []];
|
||||
GVAR(virtualItems) set [19, []];
|
||||
GVAR(virtualItems) set [20, []];
|
||||
GVAR(virtualItems) set [21, []];
|
||||
GVAR(virtualItems) set [22, [[], [], [], []]];
|
||||
GVAR(virtualItems) set [23, []];
|
||||
GVAR(virtualItems) set [24, []];
|
||||
|
||||
private _array = LIST_DEFAULTS select 2;
|
||||
private _itemsCache = uiNamespace getVariable QGVAR(configItems);
|
||||
|
||||
private _configCfgWeapons = configFile >> "CfgWeapons";
|
||||
private _configMagazines = configFile >> "CfgMagazines";
|
||||
private _configVehicles = configFile >> "CfgVehicles";
|
||||
private _configGlasses = configFile >> "CfgGlasses";
|
||||
|
||||
{
|
||||
switch true do {
|
||||
// Weapon mag
|
||||
case (
|
||||
isClass (_configMagazines >> _x) &&
|
||||
{_x in (_itemsCache select 2)} &&
|
||||
{!(_x in (GVAR(virtualItems) select 2))}
|
||||
): {
|
||||
(GVAR(virtualItems) select 19) pushBackUnique _x;
|
||||
};
|
||||
|
||||
// Mag throw
|
||||
case (
|
||||
isClass (_configMagazines >> _x) &&
|
||||
{_x in (_itemsCache select 15)} &&
|
||||
{!(_x in (GVAR(virtualItems) select 15))}
|
||||
): {
|
||||
(GVAR(virtualItems) select 20) pushBackUnique _x;
|
||||
};
|
||||
|
||||
// Mag put
|
||||
case (
|
||||
isClass (_configMagazines >> _x) &&
|
||||
{_x in (_itemsCache select 16)} &&
|
||||
{!(_x in (GVAR(virtualItems) select 16))}
|
||||
): {
|
||||
(GVAR(virtualItems) select 21) pushBackUnique _x;
|
||||
};
|
||||
|
||||
// acc
|
||||
case (
|
||||
isClass (_configCfgWeapons >> _x) &&
|
||||
{!(_x in ((GVAR(virtualItems) select 1) select 0))} &&
|
||||
{_x in ((_itemsCache select 1) select 0)}
|
||||
): {
|
||||
((GVAR(virtualItems) select 22) select 0) pushBackUnique _x;
|
||||
};
|
||||
|
||||
// acc
|
||||
case (
|
||||
isClass (_configCfgWeapons >> _x) &&
|
||||
{!(_x in ((GVAR(virtualItems) select 1) select 1))} &&
|
||||
{_x in ((_itemsCache select 1) select 1)}
|
||||
): {
|
||||
((GVAR(virtualItems) select 22) select 1) pushBackUnique _x;
|
||||
};
|
||||
|
||||
// acc
|
||||
case (
|
||||
isClass (_configCfgWeapons >> _x) &&
|
||||
{!(_x in ((GVAR(virtualItems) select 1) select 2))} &&
|
||||
{_x in ((_itemsCache select 1) select 2)}
|
||||
): {
|
||||
((GVAR(virtualItems) select 22) select 2) pushBackUnique _x;
|
||||
};
|
||||
// acc
|
||||
case (
|
||||
isClass (_configCfgWeapons >> _x) &&
|
||||
{!(_x in ((GVAR(virtualItems) select 1) select 3))} &&
|
||||
{_x in ((_itemsCache select 1) select 3)}
|
||||
): {
|
||||
((GVAR(virtualItems) select 22) select 3) pushBackUnique _x;
|
||||
};
|
||||
|
||||
// Misc
|
||||
case (
|
||||
isClass (_configCfgWeapons >> _x) &&
|
||||
{!(_x in (GVAR(virtualItems) select 17))} &&
|
||||
{!(_x in ((_itemsCache select 1) select 0))} &&
|
||||
{!(_x in ((_itemsCache select 1) select 1))} &&
|
||||
{!(_x in ((_itemsCache select 1) select 2))} &&
|
||||
{!(_x in ((_itemsCache select 1) select 3))}
|
||||
): {
|
||||
(GVAR(virtualItems) select 18) pushBackUnique _x;
|
||||
};
|
||||
|
||||
// Backpacks
|
||||
case (isClass (_configVehicles >> _x)): {
|
||||
(GVAR(virtualItems) select 23) pushBackUnique _x;
|
||||
};
|
||||
|
||||
// Facewear
|
||||
case (isClass (_configGlasses >> _x)): {
|
||||
(GVAR(virtualItems) select 24) pushBackUnique _x;
|
||||
};
|
||||
};
|
||||
} foreach _array;
|
239
addons/arsenal/functions/fnc_verifyLoadout.sqf
Normal file
239
addons/arsenal/functions/fnc_verifyLoadout.sqf
Normal file
@ -0,0 +1,239 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Verify the provided loadout.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Loadout <ARRAY> (getUnitLoadout format)
|
||||
*
|
||||
* Return Value:
|
||||
* Verified loadout and missing / unavailable items list and count <ARRAY>
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["_loadout"];
|
||||
|
||||
private _weaponCfg = configFile >> "CfgWeapons";
|
||||
private _magCfg = configFile >> "CfgMagazines";
|
||||
private _vehcCfg = configFile >> "CfgVehicles";
|
||||
private _glassesCfg = configFile >> "CfgGlasses";
|
||||
private _weaponsArray = GVAR(virtualItems) select 0;
|
||||
private _accsArray = GVAR(virtualItems) select 1;
|
||||
|
||||
private _nullItemsAmount = 0;
|
||||
private _unavailableItemsAmount = 0;
|
||||
private _nullItemsList = [];
|
||||
private _unavailableItemsList = [];
|
||||
|
||||
private _fnc_weaponCheck = {
|
||||
params ["_dataPath"];
|
||||
|
||||
if (count _dataPath != 0) then {
|
||||
{
|
||||
if (_x isEqualType "") then {
|
||||
|
||||
private _item = _x;
|
||||
|
||||
if (_item != "") then {
|
||||
if (isClass (_weaponCfg >> _item)) then {
|
||||
if !(CHECK_WEAPON_OR_ACC) then {
|
||||
|
||||
_unavailableItemsList pushBackUnique _item;
|
||||
_dataPath set [_forEachIndex, ""];
|
||||
_unavailableItemsAmount = _unavailableItemsAmount + 1;
|
||||
};
|
||||
} else {
|
||||
|
||||
_nullItemsList pushBackUnique _item;
|
||||
_dataPath set [_forEachIndex, ""];
|
||||
_nullItemsAmount = _nullItemsAmount + 1;
|
||||
};
|
||||
};
|
||||
|
||||
} else {
|
||||
|
||||
if (count _x != 0) then {
|
||||
private _mag = _x select 0;
|
||||
|
||||
if (isClass (_magCfg >> _mag)) then {
|
||||
if !(_mag in (GVAR(virtualItems) select 2)) then {
|
||||
|
||||
_unavailableItemsList pushBackUnique _item;
|
||||
_dataPath set [_forEachIndex, []];
|
||||
_unavailableItemsAmount = _unavailableItemsAmount + 1;
|
||||
};
|
||||
} else {
|
||||
|
||||
_nullItemsList pushBackUnique _item;
|
||||
_dataPath set [_forEachIndex, []];
|
||||
_nullItemsAmount = _nullItemsAmount + 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
} foreach _dataPath;
|
||||
};
|
||||
};
|
||||
|
||||
for "_dataIndex" from 0 to 9 do {
|
||||
switch (_dataIndex) do {
|
||||
case 0;
|
||||
case 1;
|
||||
case 2;
|
||||
case 8: {
|
||||
[_loadout select _dataIndex] call _fnc_weaponCheck;
|
||||
};
|
||||
|
||||
case 3;
|
||||
case 4;
|
||||
case 5: {
|
||||
private _containerArray = (_loadout select _dataIndex);
|
||||
|
||||
if (count _containerArray != 0) then {
|
||||
|
||||
_containerArray params ["_item", "_containerItems"];
|
||||
|
||||
if (isClass (_vehcCfg >> _item) || {isClass (_weaponCfg >> _item)}) then {
|
||||
if !(CHECK_CONTAINER) then {
|
||||
|
||||
_unavailableItemsList pushBackUnique _item;
|
||||
_loadout set [_dataIndex, []];
|
||||
_unavailableItemsAmount = _unavailableItemsAmount + 1;
|
||||
} else {
|
||||
|
||||
if (count _containerItems != 0) then {
|
||||
{
|
||||
private _currentIndex = _forEachIndex;
|
||||
|
||||
switch (count _x) do {
|
||||
case 2: {
|
||||
|
||||
if ((_x select 0) isEqualType "") then {
|
||||
|
||||
private _item = _x select 0;
|
||||
|
||||
if (CLASS_CHECK_ITEM) then {
|
||||
if !(CHECK_CONTAINER_ITEMS) then {
|
||||
|
||||
_unavailableItemsList pushBackUnique _item;
|
||||
((_loadout select _dataIndex) select 1) set [_currentIndex, []];
|
||||
_unavailableItemsAmount = _unavailableItemsAmount + 1;
|
||||
};
|
||||
} else {
|
||||
|
||||
_nullItemsList pushBackUnique _item;
|
||||
((_loadout select _dataIndex) select 1) set [_currentIndex, []];
|
||||
_nullItemsAmount = _nullItemsAmount + 1;
|
||||
};
|
||||
} else {
|
||||
|
||||
[(((_loadout select _dataIndex) select 1) select _currentIndex) select 0] call _fnc_weaponCheck;
|
||||
};
|
||||
};
|
||||
|
||||
case 3: {
|
||||
private _item = _x select 0;
|
||||
|
||||
if (isClass (_magCfg >> _item)) then {
|
||||
if !(
|
||||
_item in (GVAR(virtualItems) select 2) ||
|
||||
_item in (GVAR(virtualItems) select 15) ||
|
||||
_item in (GVAR(virtualItems) select 16)
|
||||
) then {
|
||||
|
||||
_unavailableItemsList pushBackUnique _item;
|
||||
((_loadout select _dataIndex) select 1) set [_currentIndex, []];
|
||||
_unavailableItemsAmount = _unavailableItemsAmount + 1;
|
||||
};
|
||||
} else {
|
||||
|
||||
_nullItemsList pushBackUnique _item;
|
||||
((_loadout select _dataIndex) select 1) set [_currentIndex, []];
|
||||
_nullItemsAmount = _nullItemsAmount + 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
} foreach _containerItems;
|
||||
};
|
||||
};
|
||||
} else {
|
||||
|
||||
_nullItemsList pushBackUnique _item;
|
||||
_loadout set [_dataIndex, []];
|
||||
_nullItemsAmount = _nullItemsAmount + 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
case 6: {
|
||||
private _item = _loadout select _dataIndex;
|
||||
|
||||
if (_item != "") then {
|
||||
|
||||
if (isClass (_weaponCfg >> _item)) then {
|
||||
|
||||
if !(_item in (GVAR(virtualItems) select 3)) then {
|
||||
|
||||
_unavailableItemsList pushBackUnique _item;
|
||||
_loadout set [_dataIndex, ""];
|
||||
_unavailableItemsAmount = _unavailableItemsAmount + 1;
|
||||
};
|
||||
} else {
|
||||
|
||||
_nullItemsList pushBackUnique _item;
|
||||
_loadout set [_dataIndex, ""];
|
||||
_nullItemsAmount = _nullItemsAmount + 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
case 7: {
|
||||
private _item = _loadout select _dataIndex;
|
||||
|
||||
if (_item != "") then {
|
||||
|
||||
if (isClass (_glassesCfg >> _item)) then {
|
||||
|
||||
if !(_item in (GVAR(virtualItems) select 7)) then {
|
||||
|
||||
_unavailableItemsList pushBackUnique _item;
|
||||
_loadout set [_dataIndex, ""];
|
||||
_unavailableItemsAmount = _unavailableItemsAmount + 1;
|
||||
};
|
||||
} else {
|
||||
|
||||
_nullItemsList pushBackUnique _item;
|
||||
_loadout set [_dataIndex, ""];
|
||||
_nullItemsAmount = _nullItemsAmount + 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
case 9: {
|
||||
for "_subIndex" from 0 to 4 do {
|
||||
private _item = (_loadout select _dataIndex) select _subIndex;
|
||||
|
||||
if (_item != "") then {
|
||||
|
||||
if (isClass (_weaponCfg >> _item)) then {
|
||||
|
||||
if !(CHECK_ASSIGNED_ITEMS) then {
|
||||
|
||||
_unavailableItemsList pushBackUnique _item;
|
||||
(_loadout select _dataIndex) set [_subIndex, ""];
|
||||
_unavailableItemsAmount = _unavailableItemsAmount + 1;
|
||||
};
|
||||
} else {
|
||||
|
||||
_nullItemsList pushBackUnique _item;
|
||||
(_loadout select _dataIndex) set [_subIndex, ""];
|
||||
_nullItemsAmount = _nullItemsAmount + 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
[_loadout, _nullItemsAmount, _unavailableItemsAmount, _nullItemsList, _unavailableItemsList]
|
1
addons/arsenal/functions/script_component.hpp
Normal file
1
addons/arsenal/functions/script_component.hpp
Normal file
@ -0,0 +1 @@
|
||||
#include "\z\ace\addons\arsenal\script_component.hpp"
|
17
addons/arsenal/script_component.hpp
Normal file
17
addons/arsenal/script_component.hpp
Normal file
@ -0,0 +1,17 @@
|
||||
#define COMPONENT arsenal
|
||||
#define COMPONENT_BEAUTIFIED Arsenal
|
||||
#include "\z\ace\addons\main\script_mod.hpp"
|
||||
|
||||
// #define DEBUG_MODE_FULL
|
||||
// #define DISABLE_COMPILE_CACHE
|
||||
// #define ENABLE_PERFORMANCE_COUNTERS
|
||||
|
||||
#ifdef DEBUG_ENABLED_ARSENAL
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_SETTINGS_ARSENAL
|
||||
#define DEBUG_SETTINGS DEBUG_SETTINGS_ARSENAL
|
||||
#endif
|
||||
|
||||
#include "\z\ace\addons\main\script_macros.hpp"
|
322
addons/arsenal/stringtable.xml
Normal file
322
addons/arsenal/stringtable.xml
Normal file
@ -0,0 +1,322 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project name="ACE">
|
||||
<Package name="Arsenal">
|
||||
<Key ID="STR_ACE_Arsenal_buttonHideText">
|
||||
<English>Hide</English>
|
||||
<French>Cacher</French>
|
||||
<German>Verstecken</German>
|
||||
<Polish>Ukryj</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonHideTooltip">
|
||||
<English>Hide interface</English>
|
||||
<French>Cache l'interface</French>
|
||||
<German>Oberfläche verstecken</German>
|
||||
<Polish>Ukryj interfejs</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonLoadoutsText">
|
||||
<English>Loadouts</English>
|
||||
<French>Équipements</French>
|
||||
<German>Ausrüstungen</German>
|
||||
<Polish>Zestawy wyposażenia</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonExportText">
|
||||
<English>Export</English>
|
||||
<French>Exporter</French>
|
||||
<German>Exportieren</German>
|
||||
<Polish>Eksportuj</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonImportText">
|
||||
<English>Import</English>
|
||||
<French>Importer</French>
|
||||
<German>Importieren</German>
|
||||
<Polish>Importuj</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonCloseText">
|
||||
<English>Close</English>
|
||||
<French>Fermer</French>
|
||||
<German>Schließen</German>
|
||||
<Polish>Zamknij</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_noVirtualItems">
|
||||
<English>No virtual item available</English>
|
||||
<French>Aucun objet virtuel disponible</French>
|
||||
<German>Kein virtuelles Objekt verfügbar</German>
|
||||
<Polish>Brak dostępnych przedmiotów wirtualnych</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonSaveText">
|
||||
<English>Save</English>
|
||||
<French>Enregister</French>
|
||||
<German>Speichern</German>
|
||||
<Polish>Zapisz</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonSaveTooltip">
|
||||
<English>Save the current loadout</English>
|
||||
<French>Enregistre l'équipement actuel</French>
|
||||
<German>Ausgewählte Ausrüstung speichern</German>
|
||||
<Polish>Zapisz obecny zestaw</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonRenameText">
|
||||
<English>Rename</English>
|
||||
<French>Renommer</French>
|
||||
<German>Umbenennen</German>
|
||||
<Polish>Zmień nazwę</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonRenameTooltip">
|
||||
<English>Rename the selected loadout</English>
|
||||
<French>Renomme l'équipement sélectionné</French>
|
||||
<German>Ausgewählte Ausrüstung umbenennen</German>
|
||||
<Polish>Zmień nazwę wybranego zestawu</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonLoadText">
|
||||
<English>Load</English>
|
||||
<French>Charger</French>
|
||||
<German>Laden</German>
|
||||
<Polish>Wczytaj</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonLoadTooltip">
|
||||
<English>Load the selected loadout</English>
|
||||
<French>Charger l'équipement sélectionné</French>
|
||||
<German>Ausgewählte Ausrüstung laden</German>
|
||||
<Polish>Wczytaj wybrany zestaw</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonDeleteText">
|
||||
<English>Delete</English>
|
||||
<French>Supprimer</French>
|
||||
<German>Entfernen</German>
|
||||
<Polish>Skasuj</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonDeleteTooltip">
|
||||
<English>Delete the selected loadout</English>
|
||||
<French>Supprimer l'équipement sélectionné</French>
|
||||
<German>Ausgewählte Ausrüstung entfernen</German>
|
||||
<Polish>Skasuj wybrany zestaw</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_tabMyLoadoutsText">
|
||||
<English>My loadouts</English>
|
||||
<French>Mes équipements</French>
|
||||
<German>Meine Ausrüstungen</German>
|
||||
<Polish>Moje zestawy</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_tabMyLoadoutsTooltip">
|
||||
<English>Loadouts saved in your profile</English>
|
||||
<French>Équipements enregistrés dans votre profil</French>
|
||||
<German>Ausrüstungen, die in deinem Profil gespeichert sind</German>
|
||||
<Polish>Zestawy zapisane w Twoim profilu</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_tabDefaultLoadoutsText">
|
||||
<English>Default loadouts</English>
|
||||
<French>Équipements de base</French>
|
||||
<German>Standard-Ausrüstungen</German>
|
||||
<Polish>Domyślne zestawy</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_tabDefaultLoadoutsTooltip">
|
||||
<English>Loadouts made available by the mission maker</English>
|
||||
<French>Équipements faits par l'auteur de la mission</French>
|
||||
<German>Ausrüstungen, die durch den Missionsersteller zur Verfügung gestellt worden sind</German>
|
||||
<Polish>Zestawy udostępnione przez twórcę misji</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_tabSharedLoadoutsText">
|
||||
<English>Public loadouts</English>
|
||||
<French>Équipements publics</French>
|
||||
<German>Veröffentlichte Ausrüstungen</German>
|
||||
<Polish>Publiczne zestawy</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_tabSharedLoadoutsTooltip">
|
||||
<English>Loadouts shared by you and other players</English>
|
||||
<French>Équipements mis à disposition par vous ou les autres joueurs</French>
|
||||
<German>Ausrüstungen, die von dir und anderen Spielern geteilt wurden</German>
|
||||
<Polish>Zestawy udostępnione przez Ciebie i innych graczy</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_sortByWeightText">
|
||||
<English>Sort by weight</English>
|
||||
<French>Trier par poids</French>
|
||||
<German>Nach Gewicht sortieren</German>
|
||||
<Polish>Sortuj wg wagi</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_sortByAmountText">
|
||||
<English>Sort by amount</English>
|
||||
<French>Trier par quantité</French>
|
||||
<German>Nach Menge sortieren</German>
|
||||
<Polish>Sortuj wg ilości</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonShareTooltip">
|
||||
<English>Share or stop sharing the selected loadout</English>
|
||||
<French>Partager ou arrêter de partager cet équipement</French>
|
||||
<German>Ausgewählte Ausrüstung teilen oder nicht mehr teilen</German>
|
||||
<Polish>Udostępnij lub przestań udostępniać wybrany zestaw</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonSharePrivateText">
|
||||
<English>Private</English>
|
||||
<French>Privé</French>
|
||||
<German>Privat</German>
|
||||
<Polish>Prywatny</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonSharePublicText">
|
||||
<English>Public</English>
|
||||
<French>Public</French>
|
||||
<German>Öffentlich</German>
|
||||
<Polish>Publiczny</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_exportDefaultError">
|
||||
<English>The default loadouts list is empty!</English>
|
||||
<French>La liste d'équipements de base est vide !</French>
|
||||
<German>Die Standard-Ausrüstungen-Liste ist leer!</German>
|
||||
<Polish>Lista domyślnych zestawów jest pusta!</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_exportDefault">
|
||||
<English>Default loadouts list exported to clipboard</English>
|
||||
<French>Liste d'équipements de base exportée dans le presse papier</French>
|
||||
<German>Standard-Ausrüstungen-Liste in die Zwischenablage exportiert</German>
|
||||
<Polish>Lista domyślnych zestawów została eksportowana do schowka</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_exportCurrent">
|
||||
<English>Current loadout exported to clipboard</English>
|
||||
<French>Équipement actuel exporté dans le presse papier</French>
|
||||
<German>Derzeitige Ausrüstung in die Zwischenablage exportiert</German>
|
||||
<Polish>Obecny zestaw został eksportowany do schowka</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_importFormatError">
|
||||
<English>Wrong format provided</English>
|
||||
<French>Mauvais format fourni</French>
|
||||
<German>Falsches Format verwendet</German>
|
||||
<Polish>Podano zły format</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_importedDefault">
|
||||
<English>Default loadouts list imported from clipboard</English>
|
||||
<French>Liste d'équipements de base importée depuis le presse papier</French>
|
||||
<German>Standard-Ausrüstungen-Liste aus der Zwischenablage importiert</German>
|
||||
<Polish>Lista domyślnych zestawów została importowana ze schowka</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_importedCurrent">
|
||||
<English>Loadout imported from clipboard</English>
|
||||
<French>Équipement importé depuis le presse papier</French>
|
||||
<German>Ausrüstung aus der Zwischenablage importiert</German>
|
||||
<Polish>Zestaw został importowany ze schowka</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_loadoutDeleted">
|
||||
<English>The following loadout was deleted:</English>
|
||||
<French>L'équipement suivant fut supprimé:</French>
|
||||
<German>Folgende Ausrüstung wurde entfernt:</German>
|
||||
<Polish>Następujący zestaw został skasowany:</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_loadoutUnshared">
|
||||
<English>The following loadout is not public anymore:</English>
|
||||
<French>L'équipement suivant n'est plus public:</French>
|
||||
<German>Folgende Ausrüstung ist nicht mehr öffentlich:</German>
|
||||
<Polish>Następujący zestaw nie jest już publiczny:</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_saveEmptyNameBox">
|
||||
<English>The name field is empty!</English>
|
||||
<French>Le champ nom est vide !</French>
|
||||
<German>Das Feld "Name" ist leer!</German>
|
||||
<Polish>Pole nazwy jest puste!</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_saveAuthorError">
|
||||
<English>You are the author of this loadout</English>
|
||||
<French>Vous êtes l'auteur de cet équipement</French>
|
||||
<German>Du bist der Ersteller dieser Ausrüstung</German>
|
||||
<Polish>Jesteś autorem tego zestawu</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_saveSharedError">
|
||||
<English>A loadout of yours with the same name is public</English>
|
||||
<French>Un de vos équipements avec le même nom est public</French>
|
||||
<German>Eine deiner Ausrüstungen mit dem gleichen Namen ist öffentlich</German>
|
||||
<Polish>Jeden z Twoich zestawów nazwany tak samo jest już publiczny</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_loadoutSaved">
|
||||
<English>The following loadout was saved:</English>
|
||||
<French>L'équipement suivant fut enregistré:</French>
|
||||
<German>Folgende Ausrüstung wurde gespeichert:</German>
|
||||
<Polish>Następujący zestaw został zapisany:</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_loadoutLoaded">
|
||||
<English>The following loadout was loaded:</English>
|
||||
<French>L'équipement suivant fut chargé:</French>
|
||||
<German>Folgene Ausrüstung wurde geladen:</German>
|
||||
<Polish>Następujący zestaw został wczytany:</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_renameExistError">
|
||||
<English>A loadout with the same name already exist!</English>
|
||||
<French>Un équipement avec le même nom existe déjà !</French>
|
||||
<German>Eine Ausrüstung mit dem gleichen Namen existiert bereits!</German>
|
||||
<Polish>Zestaw z tą nazwą już istnieje!</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_loadoutRenamed">
|
||||
<English>was renamed to</English>
|
||||
<French>fut renommé en</French>
|
||||
<German>wurde umbenannt in</German>
|
||||
<Polish>zmienił nazwę na</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_invertCameraSetting">
|
||||
<English>Invert camera controls</English>
|
||||
<French>Inverser les contrôles de la caméra</French>
|
||||
<German>Kamerasteuerung invertieren</German>
|
||||
<Polish>Odwróć sterowanie kamerą</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_modIconsSetting">
|
||||
<English>Enable mod icons</English>
|
||||
<French>Afficher les icônes de mod</French>
|
||||
<German>Aktiviert Mod-Icons</German>
|
||||
<Polish>Włącz ikony modów</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_fontHeightSetting">
|
||||
<English>Panel font height</English>
|
||||
<French>taille de police des panneaux</French>
|
||||
<German>Schrifthöhe für die linke und rechte Liste</German>
|
||||
<Polish>Wysokość czcionki</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_allowDefaultLoadoutsSetting">
|
||||
<English>Allow default loadouts</English>
|
||||
<French>Activer l'onglet équipement de base</French>
|
||||
<German>Erlaubt die Benutzung des Standard-Ausrüstungen-Reiters</German>
|
||||
<Polish>Zezwól na użycie domyślnych zestawów</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_allowSharingSetting">
|
||||
<English>Allow loadout sharing</English>
|
||||
<French>Autoriser le partage d'équipement</French>
|
||||
<German>Erlaubt das Teilen von Ausrüstungen</German>
|
||||
<Polish>Zezwól na udostępnianie zestawów</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_printToRPTSetting">
|
||||
<English>Log missing / unavailable items</English>
|
||||
<French>Enregistrer les objets manquants</French>
|
||||
<German>Aktiviert die Aufzeichnung fehlender Gegenstände in der RPT</German>
|
||||
<Polish>Rejestruj brakujące / niedostępne przedmioty</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonCurrentMagTooltip">
|
||||
<English>Primary magazine</English>
|
||||
<French>Chargeur principal </French>
|
||||
<Polish>Główny magazynek</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonCurrentMag2Tooltip">
|
||||
<English>Secondary magazine</English>
|
||||
<French>Chargeur secondaire</French>
|
||||
<Polish>Dodatkowy magazynek</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_settingCategory">
|
||||
<English>ACE - Arsenal</English>
|
||||
<French>ACE - Arsenal</French>
|
||||
<Polish>ACE - Arsenał</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_defaultLoadoutsTooltip">
|
||||
<English>Allow the use of the default loadouts tab</English>
|
||||
<French>Autorise l'usage de l'onglet équipements de base</French>
|
||||
<Polish>Zezwól na użycie zakładki domyślnych zestawów</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_modIconsTooltip">
|
||||
<English>Show / hide mod icons for the left panel</English>
|
||||
<French>Montrer / cacher les icones de mod pour le panneau de gauche</French>
|
||||
<Polish>Pokaż / ukryj ikony modów w lewym panelu</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_fontHeightTooltip">
|
||||
<English>Change the font height for text in the left / right panels</English>
|
||||
<French>Change la taille de police du texte des panneaux gauche / droite</French>
|
||||
<Polish>Zmień wysokość czcionki dla tekstu lewego i prawego panelu</Polish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_printToRPTTooltip">
|
||||
<English>Log missing / unavailable items in the RPT</English>
|
||||
<French>Enregistre les objets manquants / indisponibles dans le RPT</French>
|
||||
<Polish>Rejestruj brakujące / niedostępne przedmioty do pliku RPT</Polish>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
898
addons/arsenal/ui/RscAttributes.hpp
Normal file
898
addons/arsenal/ui/RscAttributes.hpp
Normal file
@ -0,0 +1,898 @@
|
||||
#include "RscCommon.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
class GVAR(display) {
|
||||
idd = IDD_ace_arsenal;
|
||||
enableSimulation=1;
|
||||
onLoad = QUOTE([ARR_3('onLoad', _this, QQGVAR(display))] call FUNC(onArsenalOpen));
|
||||
onUnload = QUOTE([ARR_3('onUnload', _this, QQGVAR(display))] call FUNC(onArsenalClose));
|
||||
onKeyDown = QUOTE([ARR_3('onKeyDown', _this, QQGVAR(display))] call FUNC(onKeyDown));
|
||||
onKeyUp = QUOTE(GVAR(shiftState) = _this select 2);
|
||||
onMouseButtonDown = QUOTE([ARR_3('onMouseButtonDown', _this, QQGVAR(display))] call FUNC(onMouseButtonDown));
|
||||
onMouseButtonUp = QUOTE([ARR_3('onMouseButtonUp', _this, QQGVAR(display))] call FUNC(onMouseButtonUp));
|
||||
icon="\A3\Ui_f\data\Logos\a_64_ca.paa";
|
||||
logo="\A3\Ui_f\data\Logos\arsenal_1024_ca.paa";
|
||||
class ControlsBackground {
|
||||
class blackLeft: ctrlStatic {
|
||||
colorBackground[]={0,0,0,1};
|
||||
x = QUOTE(safezoneXAbs);
|
||||
y = QUOTE(safezoneY);
|
||||
w = QUOTE(safezoneXAbs - safezoneX);
|
||||
h = QUOTE(safezoneH);
|
||||
};
|
||||
|
||||
class blackRight: blackLeft {
|
||||
x = QUOTE(safezoneX + safezoneW);
|
||||
};
|
||||
|
||||
class mouseArea: ctrlStatic {
|
||||
idc = IDC_mouseArea;
|
||||
style = 16;
|
||||
onMouseMoving = QUOTE([ARR_3('onMouseMoving', _this, GVAR(display))] call FUNC(handleMouse));
|
||||
onMouseHolding = QUOTE([ARR_3('onMouseHolding', _this, GVAR(display))] call FUNC(handleMouse));
|
||||
onMouseZChanged = QUOTE([ARR_3('onMouseZChanged', _this, GVAR(display))] call FUNC(handleScrollWheel));
|
||||
x = QUOTE(safezoneX);
|
||||
y = QUOTE(safezoneY);
|
||||
w = QUOTE(safezoneW);
|
||||
h = QUOTE(safezoneH);
|
||||
};
|
||||
};
|
||||
class controls {
|
||||
class ArrowLeft: ctrlButton {
|
||||
idc = IDC_arrowMinus;
|
||||
text = "-";
|
||||
colorBackground[]={0,0,0,0.8};
|
||||
onButtonClick = QUOTE([ARR_2(ctrlparent (_this select 0), -1)] call FUNC(buttonCargo));
|
||||
fade = 1;
|
||||
enable = 0;
|
||||
x = 0.5;
|
||||
y = 0.5;
|
||||
w = QUOTE(1 * GRID_W);
|
||||
h = QUOTE(1 * GRID_H);
|
||||
sizeEx = QUOTE(7 * GRID_H);
|
||||
};
|
||||
class ArrowRight: ArrowLeft {
|
||||
idc = IDC_arrowPlus;
|
||||
onButtonClick = QUOTE([ARR_2(ctrlparent (_this select 0), 1)] call FUNC(buttonCargo));
|
||||
text="+";
|
||||
};
|
||||
class blockLeftFrame: RscFrame {
|
||||
idc = IDC_blockLeftFrame;
|
||||
x = QUOTE(safezoneX + 13 * GRID_W);
|
||||
y = QUOTE(safezoneY + 14 * GRID_H);
|
||||
w = QUOTE(80 * GRID_W);
|
||||
h = QUOTE(safezoneH - 24 * GRID_H);
|
||||
colorText[] = {0,0,0,1};
|
||||
};
|
||||
class blockLeftBackground: ctrlStaticBackground {
|
||||
idc = IDC_blockLeftBackground;
|
||||
x = QUOTE(safezoneX + 13 * GRID_W);
|
||||
y = QUOTE(safezoneY + 14 * GRID_H);
|
||||
w = QUOTE(80 * GRID_W);
|
||||
h = QUOTE(safezoneH - 24 * GRID_H);
|
||||
colorBackground[] = {0,0,0,0.5};
|
||||
};
|
||||
class blockRightFrame: blockLeftFrame {
|
||||
idc = IDC_blockRightFrame;
|
||||
x = QUOTE(safezoneX + safezoneW - 93 * GRID_W);
|
||||
h = QUOTE(safezoneH - 34 * GRID_H);
|
||||
};
|
||||
class blockRighttBackground: blockLeftBackground {
|
||||
idc = IDC_blockRighttBackground;
|
||||
x = QUOTE(safezoneX + safezoneW - 93 * GRID_W);
|
||||
h = QUOTE(safezoneH - 34 * GRID_H);
|
||||
};
|
||||
class loadIndicator: RscControlsGroupNoScrollbars {
|
||||
idc = IDC_loadIndicator;
|
||||
x = QUOTE(safezoneX + safezoneW - 93 * GRID_W);
|
||||
y = QUOTE(safeZoneH + safezoneY - 20 * GRID_H);
|
||||
w = QUOTE(80 * GRID_W);
|
||||
h = QUOTE(6 * GRID_H);
|
||||
class controls {
|
||||
class loadIndicatorBackground: ctrlStaticBackground {
|
||||
idc = -1;
|
||||
colorBackground[] = {0,0,0,0.5};
|
||||
x = 0;
|
||||
y = 0;
|
||||
w = QUOTE(80 * GRID_W);
|
||||
h = QUOTE(6 * GRID_H);
|
||||
};
|
||||
class loadIndicatorBar: ctrlProgress {
|
||||
idc = IDC_loadIndicatorBar;
|
||||
style = 0;
|
||||
texture = "#(argb,8,8,3)color(1,1,1,1)";
|
||||
colorBar[] = {1,1,1,1};
|
||||
colorFrame[] = {0,0,0,1};
|
||||
x = 0;
|
||||
y = 0;
|
||||
w = QUOTE(80 * GRID_W);
|
||||
h = QUOTE(6 * GRID_H);
|
||||
};
|
||||
};
|
||||
};
|
||||
class totalWeight: RscControlsGroupNoScrollbars {
|
||||
idc = IDC_totalWeight;
|
||||
x = QUOTE(safezoneX + 13 * GRID_W);
|
||||
y = QUOTE(safeZoneH + safezoneY - 10 * GRID_H);
|
||||
w = QUOTE(80 * GRID_W);
|
||||
h = QUOTE(8 * GRID_H);
|
||||
class controls {
|
||||
class totalWeightBackground: ctrlStaticBackground {
|
||||
idc = -1;
|
||||
colorBackground[] = {0,0,0,0.8};
|
||||
x = 0;
|
||||
y = 0;
|
||||
w = QUOTE(80 * GRID_W);
|
||||
h = QUOTE(8 * GRID_H);
|
||||
};
|
||||
class totalWeightTitle: RscText {
|
||||
idc = -1;
|
||||
text = ECSTRING(common,Weight);
|
||||
x = 0;
|
||||
y = 0;
|
||||
w = QUOTE(40 * GRID_W);
|
||||
h = QUOTE(8 * GRID_H);
|
||||
sizeEx = QUOTE(7 * GRID_H);
|
||||
};
|
||||
class totalWeightText: RscText {
|
||||
idc = IDC_totalWeightText;
|
||||
style = ST_RIGHT;
|
||||
text = "";
|
||||
x = QUOTE(40 * GRID_W);
|
||||
y = 0;
|
||||
w = QUOTE(40 * GRID_W);
|
||||
h = QUOTE(8 * GRID_H);
|
||||
sizeEx = QUOTE(7 * GRID_H);
|
||||
};
|
||||
};
|
||||
};
|
||||
class message: RscText {
|
||||
idc = IDC_message;
|
||||
fade = 1;
|
||||
style=2;
|
||||
shadow=0;
|
||||
colorBackground[]={0,0,0,0.69999999};
|
||||
text="";
|
||||
x = QUOTE(safezoneX + safezoneW * 0.50 - 80 * GRID_W);
|
||||
y = QUOTE(safeZoneH + safezoneY - 25 * GRID_H);
|
||||
w = QUOTE(160 * GRID_W);
|
||||
h = QUOTE(10 * GRID_H);
|
||||
sizeEx = QUOTE(5 * GRID_H);
|
||||
};
|
||||
class menuBar: RscControlsGroupNoScrollbars {
|
||||
idc = IDC_menuBar;
|
||||
x = QUOTE((safezoneX + safezoneW * 0.50) - (105 * GRID_W));
|
||||
y = QUOTE(safezoneH + safezoneY - 9 * GRID_H);
|
||||
w = QUOTE(210 * GRID_W);
|
||||
h = QUOTE(7 * GRID_H);
|
||||
class controls {
|
||||
class buttonHide: ctrlButton {
|
||||
idc = -1;
|
||||
colorBackground[] = {0,0,0,0.8};
|
||||
x = QUOTE(0 * GRID_W);
|
||||
y = QUOTE(0);
|
||||
w = QUOTE(40 * GRID_W);
|
||||
h = QUOTE(7 * GRID_H);
|
||||
text = CSTRING(buttonHideText);
|
||||
shortcuts[] = {"0x0E"};
|
||||
tooltip = CSTRING(buttonHideTooltip);
|
||||
onButtonClick = QUOTE([ctrlparent (_this select 0)] call FUNC(buttonHide));
|
||||
};
|
||||
class buttonLoadouts: buttonHide {
|
||||
idc = -1;
|
||||
x = QUOTE(42.5 * GRID_W);
|
||||
text = CSTRING(buttonLoadoutsText);
|
||||
onButtonClick = QUOTE(createDialog QQGVAR(loadoutsDisplay));
|
||||
};
|
||||
class buttonExport: buttonHide {
|
||||
idc = -1;
|
||||
x = QUOTE(85 * GRID_W);
|
||||
text = CSTRING(buttonExportText);
|
||||
onButtonClick = QUOTE([ctrlparent (_this select 0)] call FUNC(buttonExport));
|
||||
};
|
||||
class buttonImport: buttonHide {
|
||||
idc = -1;
|
||||
x = QUOTE(127.5 * GRID_W);
|
||||
text = CSTRING(buttonImportText);
|
||||
onButtonClick = QUOTE([ctrlparent (_this select 0)] call FUNC(buttonImport));
|
||||
};
|
||||
class buttonClose: ctrlButtonClose {
|
||||
idc = -1;
|
||||
colorBackground[] = {0,0,0,0.8};
|
||||
x = QUOTE(170 * GRID_W);
|
||||
y = QUOTE(0);
|
||||
w = QUOTE(40 * GRID_W);
|
||||
h = QUOTE(7 * GRID_H);
|
||||
text = CSTRING(buttonCloseText);
|
||||
shortcuts[]= {"0x01"};
|
||||
onButtonClick = QUOTE(ctrlparent (_this select 0) closeDisplay 2);
|
||||
};
|
||||
};
|
||||
};
|
||||
class infoBox: RscControlsGroupNoScrollbars {
|
||||
idc = IDC_infoBox;
|
||||
fade = 1;
|
||||
x = QUOTE(safezoneX + safezoneW - 93 * GRID_W);
|
||||
y = QUOTE(safeZoneH + safezoneY - 14 * GRID_H);
|
||||
w = QUOTE(92 * GRID_W);
|
||||
h = QUOTE(12 * GRID_H);
|
||||
class controls {
|
||||
class infoBackground: ctrlStaticBackground {
|
||||
idc = IDC_infoBackground;
|
||||
x = QUOTE(0 * GRID_W);
|
||||
y = QUOTE(0);
|
||||
w = QUOTE(80 * GRID_W);
|
||||
h = QUOTE(12 * GRID_H);
|
||||
colorBackground[] = {0,0,0,0.8};
|
||||
};
|
||||
class infoName: RscText {
|
||||
idc = IDC_infoName;
|
||||
x = QUOTE(0 * GRID_W);
|
||||
y = QUOTE(0);
|
||||
w = QUOTE(80 * GRID_W);
|
||||
h = QUOTE(7 * GRID_H);
|
||||
sizeEx = QUOTE(5.5 * GRID_H);
|
||||
};
|
||||
class infoAuthor: RscText {
|
||||
idc = IDC_infoAuthor;
|
||||
colorText[] = {1,1,1,0.5};
|
||||
x = QUOTE(0 * GRID_W);
|
||||
y = QUOTE(6 * GRID_H);
|
||||
w = QUOTE(80 * GRID_W);
|
||||
h = QUOTE(5 * GRID_H);
|
||||
sizeEx = QUOTE(5 * GRID_H);
|
||||
};
|
||||
class DLCBackground: ctrlStaticBackground {
|
||||
idc = IDC_DLCBackground;
|
||||
fade = 1;
|
||||
x = QUOTE(80 * GRID_W);
|
||||
y = QUOTE(0);
|
||||
w = QUOTE(12 * GRID_W);
|
||||
h = QUOTE(12 * GRID_H);
|
||||
};
|
||||
class DLCIcon: RscActivePicture {
|
||||
idc = IDC_DLCIcon;
|
||||
enabled = 0;
|
||||
fade = 1;
|
||||
color[] = {1,1,1,1};
|
||||
colorActive[] = {1,1,1,1};
|
||||
text="#(argb,8,8,3)color(1,1,1,1)";
|
||||
x = QUOTE(80 * GRID_W);
|
||||
y = QUOTE(0);
|
||||
w = QUOTE(12 * GRID_W);
|
||||
h = QUOTE(12 * GRID_H);
|
||||
};
|
||||
};
|
||||
};
|
||||
class mouseBlock: RscText {
|
||||
idc = IDC_mouseBlock;
|
||||
style = 16;
|
||||
x = QUOTE(safezoneX);
|
||||
y = QUOTE(safezoneY);
|
||||
w = QUOTE(safezoneW);
|
||||
h = QUOTE(safezoneH);
|
||||
};
|
||||
class leftTabContent: RscListBox {
|
||||
idc = IDC_leftTabContent;
|
||||
colorBackground[]={0,0,0,0};
|
||||
colorSelectBackground[]={1,1,1,0.5};
|
||||
colorSelectBackground2[]={1,1,1,0.5};
|
||||
colorPictureSelected[]={1,1,1,1};
|
||||
colorSelect[]={1,1,1,1};
|
||||
colorSelect2[]={1,1,1,1};
|
||||
colorPictureRightSelected[]={1,1,1,1};
|
||||
onLBSelChanged = QUOTE(_this call FUNC(onSelChangedLeft));
|
||||
onSetFocus = QUOTE(GVAR(leftTabFocus) = true);
|
||||
onKillFocus = QUOTE(GVAR(leftTabFocus) = false);
|
||||
x = QUOTE(safezoneX + 13 * GRID_W);
|
||||
y = QUOTE(safezoneY + 14 * GRID_H);
|
||||
w = QUOTE(80 * GRID_W);
|
||||
h = QUOTE(safezoneH - 24.5 * GRID_H);
|
||||
sizeEx = QUOTE(7 * GRID_H);
|
||||
};
|
||||
class rightTabContent: leftTabContent {
|
||||
idc = IDC_rightTabContent;
|
||||
drawSideArrows=1;
|
||||
disableOverflow=1;
|
||||
onLBSelChanged = QUOTE(_this call FUNC(onSelChangedRight));
|
||||
onSetFocus = QUOTE(GVAR(rightTabFocus) = true);
|
||||
onKillFocus = QUOTE(GVAR(rightTabFocus) = false);
|
||||
x = QUOTE(safezoneX + safezoneW - 93 * GRID_W);
|
||||
h = QUOTE(safezoneH - 34.5 * GRID_H);
|
||||
};
|
||||
class rightTabContentListnBox : RscListNBox {
|
||||
idc = IDC_rightTabContentListnBox;
|
||||
colorBackground[]={0,0,0,0};
|
||||
colorSelectBackground[]={1,1,1,0.5};
|
||||
colorSelectBackground2[]={1,1,1,0.5};
|
||||
colorPictureSelected[]={1,1,1,1};
|
||||
colorSelect[]={1,1,1,1};
|
||||
colorSelect2[]={1,1,1,1};
|
||||
colorPictureRightSelected[]={1,1,1,1};
|
||||
columns[]={0.07, 0.15, 0.75};
|
||||
idcLeft = IDC_arrowMinus;
|
||||
idcRIght = IDC_arrowPlus;
|
||||
drawSideArrows=1;
|
||||
disableOverflow=1;
|
||||
onLBSelChanged = QUOTE(_this call FUNC(onSelChangedRightListnBox));
|
||||
onSetFocus = QUOTE(GVAR(rightTabLnBFocus) = true);
|
||||
onKillFocus = QUOTE(GVAR(rightTabLnBFocus) = false);
|
||||
x = QUOTE(safezoneX + safezoneW - 93 * GRID_W);
|
||||
y = QUOTE(safezoneY + 14 * GRID_H);
|
||||
w = QUOTE(80 * GRID_W);
|
||||
h = QUOTE(safezoneH - 34.5 * GRID_H);
|
||||
sizeEx = QUOTE(7 * GRID_H);
|
||||
};
|
||||
class sortLeftTab: RscCombo {
|
||||
idc = IDC_sortLeftTab;
|
||||
x = QUOTE(safezoneX + 13 * GRID_W);
|
||||
y = QUOTE(safezoneY + 8 * GRID_H);
|
||||
w = QUOTE(80 * GRID_W);
|
||||
h = QUOTE(6 * GRID_H);
|
||||
onLBSelChanged = QUOTE(_this call FUNC(sortPanel));
|
||||
class Items {
|
||||
class Alphabet {
|
||||
text="$STR_a3_rscdisplayarsenal_sort_alphabet";
|
||||
default=1;
|
||||
value= 0;
|
||||
};
|
||||
class Mod {
|
||||
text="$STR_a3_rscdisplayarsenal_sort_mod";
|
||||
value= 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
class sortRightTab: sortLeftTab {
|
||||
idc = IDC_sortRightTab;
|
||||
x = QUOTE(safezoneX + safezoneW - 93 * GRID_W);
|
||||
class Items {
|
||||
class Alphabet {
|
||||
text="$STR_a3_rscdisplayarsenal_sort_alphabet";
|
||||
default=1;
|
||||
value= 0;
|
||||
};
|
||||
class Weight {
|
||||
text="$STR_a3_rscdisplayarsenal_sort_mod";
|
||||
value= 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
class leftSearchbar: ctrlEdit {
|
||||
idc = IDC_leftSearchbar;
|
||||
onSetFocus = QUOTE(GVAR(leftSearchbarFocus) = true);
|
||||
onKillFocus = QUOTE(GVAR(leftSearchbarFocus) = false);
|
||||
onMouseButtonClick = QUOTE([ARR_3(ctrlParent (_this select 0), _this select 0, _this select 1)] call FUNC(clearSearchbar));
|
||||
x = QUOTE(safezoneX + 13 * GRID_W);
|
||||
y = QUOTE(safezoneY + 1.8 * GRID_H);
|
||||
w = QUOTE(74 * GRID_W);
|
||||
h = QUOTE(6 * GRID_H);
|
||||
};
|
||||
class leftSearchbarButton: ctrlButtonPicture {
|
||||
idc = IDC_leftSearchbarButton;
|
||||
text = "\a3\Ui_f\data\GUI\RscCommon\RscButtonSearch\search_start_ca.paa";
|
||||
colorBackground[]={0,0,0,0.5};
|
||||
onButtonClick = QUOTE([ARR_2(ctrlparent (_this select 0), ctrlparent (_this select 0) displayCtrl IDC_leftSearchbar)] call FUNC(handleSearchbar));
|
||||
x = QUOTE(safezoneX + 87 * GRID_W);
|
||||
y = QUOTE(safezoneY + 1.8 * GRID_H);
|
||||
w = QUOTE(6 * GRID_W);
|
||||
h = QUOTE(6 * GRID_H);
|
||||
};
|
||||
class rightSearchbar: leftSearchBar {
|
||||
idc = IDC_rightSearchbar;
|
||||
onSetFocus = QUOTE(GVAR(rightSearchbarFocus) = true);
|
||||
onKillFocus = QUOTE(GVAR(rightSearchbarFocus) = false);
|
||||
x = QUOTE(safezoneX + safezoneW - 87 * GRID_W);
|
||||
};
|
||||
class rightSearchbarButton: leftSearchbarButton {
|
||||
idc = IDC_rightSearchbarButton;
|
||||
onButtonClick = QUOTE([ARR_2(ctrlparent (_this select 0), ctrlparent (_this select 0) displayCtrl IDC_rightSearchbar)] call FUNC(handleSearchbar));
|
||||
x = QUOTE(safezoneX + safezoneW - 93 * GRID_W);
|
||||
};
|
||||
class tabLeft: RscControlsGroupNoScrollbars {
|
||||
idc = IDC_tabLeft;
|
||||
x = QUOTE(safezoneX + 1 * GRID_W);
|
||||
y = QUOTE(safezoneY + 8 * GRID_H);
|
||||
w = QUOTE(12 * GRID_W);
|
||||
h = QUOTE(200 * GRID_H);
|
||||
class controls {
|
||||
class iconBackgroundPrimaryWeapon: ctrlStaticBackground {
|
||||
idc = IDC_iconBackgroundPrimaryWeapon;
|
||||
fade=1;
|
||||
enable=0;
|
||||
colorBackground[]={0,0,0,1};
|
||||
x = QUOTE(0);
|
||||
y = QUOTE(0 * GRID_H);
|
||||
w = QUOTE(12 * GRID_W);
|
||||
h = QUOTE(9 * GRID_H);
|
||||
};
|
||||
class buttonPrimaryWeapon: RscButtonArsenal {
|
||||
idc = IDC_buttonPrimaryWeapon;
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\PrimaryWeapon_ca.paa";
|
||||
tooltip="$STR_A3_RscDisplayArsenal_tab_PrimaryWeapon";
|
||||
onButtonClick = QUOTE([ARR_2(ctrlparent (_this select 0), _this select 0)] call FUNC(fillLeftPanel));
|
||||
colorBackground[]={0,0,0,0.5};
|
||||
x = QUOTE(0 * GRID_W);
|
||||
y = QUOTE(0 * GRID_H);
|
||||
w = QUOTE(9 * GRID_W);
|
||||
h = QUOTE(9 * GRID_H);
|
||||
};
|
||||
class iconBackgroundHandgun: IconBackgroundPrimaryWeapon {
|
||||
idc = IDC_iconBackgroundHandgun;
|
||||
y = QUOTE(10 * GRID_H);
|
||||
};
|
||||
class buttonHandgun: buttonPrimaryWeapon {
|
||||
idc = IDC_buttonHandgun;
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Handgun_ca.paa";
|
||||
tooltip="$STR_A3_RscDisplayArsenal_tab_Handgun";
|
||||
y = QUOTE(10 * GRID_H);
|
||||
};
|
||||
class iconBackgroundSecondaryWeapon: IconBackgroundPrimaryWeapon {
|
||||
idc = IDC_iconBackgroundSecondaryWeapon;
|
||||
y = QUOTE(20 * GRID_H);
|
||||
};
|
||||
class buttonSecondaryWeapon: buttonPrimaryWeapon {
|
||||
idc = IDC_buttonSecondaryWeapon;
|
||||
tooltip="$STR_A3_RscDisplayArsenal_tab_SecondaryWeapon";
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\SecondaryWeapon_ca.paa";
|
||||
y = QUOTE(20 * GRID_H);
|
||||
};
|
||||
class iconBackgroundHeadgear: IconBackgroundPrimaryWeapon {
|
||||
idc = IDC_iconBackgroundHeadgear;
|
||||
y = QUOTE(30 * GRID_H);
|
||||
};
|
||||
class buttonHeadgear: buttonPrimaryWeapon {
|
||||
idc = IDC_buttonHeadgear;
|
||||
tooltip="$STR_A3_RscDisplayArsenal_tab_Headgear";
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Headgear_ca.paa";
|
||||
y = QUOTE(30 * GRID_H);
|
||||
};
|
||||
class iconBackgroundUniform: IconBackgroundPrimaryWeapon {
|
||||
idc = IDC_iconBackgroundUniform;
|
||||
y = QUOTE(40 * GRID_H);
|
||||
};
|
||||
class buttonUniform: buttonPrimaryWeapon {
|
||||
idc = IDC_buttonUniform;
|
||||
tooltip="$STR_A3_RscDisplayArsenal_tab_Uniform";
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Uniform_ca.paa";
|
||||
y = QUOTE(40 * GRID_H);
|
||||
};
|
||||
class iconBackgroundVest: IconBackgroundPrimaryWeapon {
|
||||
idc = IDC_iconBackgroundVest;
|
||||
y = QUOTE(50 * GRID_H);
|
||||
};
|
||||
class buttonVest: buttonPrimaryWeapon {
|
||||
idc = IDC_buttonVest;
|
||||
tooltip="$STR_A3_RscDisplayArsenal_tab_Vest";
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Vest_ca.paa";
|
||||
y = QUOTE(50 * GRID_H);
|
||||
};
|
||||
class iconBackgroundBackpack: IconBackgroundPrimaryWeapon {
|
||||
idc = IDC_iconBackgroundBackpack;
|
||||
y = QUOTE(60 * GRID_H);
|
||||
};
|
||||
class buttonBackpack: buttonPrimaryWeapon {
|
||||
idc = IDC_buttonBackpack;
|
||||
tooltip="$STR_A3_RscDisplayArsenal_tab_Backpack";
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Backpack_ca.paa";
|
||||
y = QUOTE(60 * GRID_H);
|
||||
};
|
||||
class iconBackgroundGoggles: IconBackgroundPrimaryWeapon {
|
||||
idc = IDC_iconBackgroundGoggles;
|
||||
y = QUOTE(70 * GRID_H);
|
||||
};
|
||||
class buttonGoggles: buttonPrimaryWeapon {
|
||||
idc = IDC_buttonGoggles;
|
||||
tooltip="$STR_A3_RscDisplayArsenal_tab_Goggles";
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Goggles_ca.paa";
|
||||
y = QUOTE(70 * GRID_H);
|
||||
};
|
||||
class iconBackgroundNVG: IconBackgroundPrimaryWeapon {
|
||||
idc = IDC_iconBackgroundNVG;
|
||||
y = QUOTE(80 * GRID_H);
|
||||
};
|
||||
class buttonNVG: buttonPrimaryWeapon {
|
||||
idc = IDC_buttonNVG;
|
||||
tooltip="$STR_A3_RscDisplayArsenal_tab_NVGs";
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\NVGs_ca.paa";
|
||||
y = QUOTE(80 * GRID_H);
|
||||
};
|
||||
class iconBackgroundBinoculars: IconBackgroundPrimaryWeapon {
|
||||
idc = IDC_iconBackgroundBinoculars;
|
||||
y = QUOTE(90 * GRID_H);
|
||||
};
|
||||
class buttonBinoculars: buttonPrimaryWeapon {
|
||||
idc = IDC_buttonBinoculars;
|
||||
tooltip="$STR_A3_RscDisplayArsenal_tab_Binoculars";
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Binoculars_ca.paa";
|
||||
y = QUOTE(90 * GRID_H);
|
||||
};
|
||||
class iconBackgroundMap: IconBackgroundPrimaryWeapon {
|
||||
idc = IDC_iconBackgroundMap;
|
||||
y = QUOTE(100 * GRID_H);
|
||||
};
|
||||
class buttonMap: buttonPrimaryWeapon {
|
||||
idc = IDC_buttonMap;
|
||||
tooltip="$STR_A3_RscDisplayArsenal_tab_Map";
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Map_ca.paa";
|
||||
y = QUOTE(100 * GRID_H);
|
||||
};
|
||||
class iconBackgroundGPS: IconBackgroundPrimaryWeapon {
|
||||
idc = IDC_iconBackgroundGPS;
|
||||
y = QUOTE(110 * GRID_H);
|
||||
};
|
||||
class buttonGPS: buttonPrimaryWeapon {
|
||||
idc = IDC_buttonGPS;
|
||||
tooltip="$STR_A3_RscDisplayArsenal_tab_GPS";
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\GPS_ca.paa";
|
||||
y = QUOTE(110 * GRID_H);
|
||||
};
|
||||
class iconBackgroundRadio: IconBackgroundPrimaryWeapon {
|
||||
idc = IDC_iconBackgroundRadio;
|
||||
y = QUOTE(120 * GRID_H);
|
||||
};
|
||||
class buttonRadio: buttonPrimaryWeapon {
|
||||
idc = IDC_buttonRadio;
|
||||
tooltip="$STR_A3_RscDisplayArsenal_tab_Radio";
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Radio_ca.paa";
|
||||
y = QUOTE(120 * GRID_H);
|
||||
};
|
||||
class iconBackgroundCompass: IconBackgroundPrimaryWeapon {
|
||||
idc = IDC_iconBackgroundCompass;
|
||||
y = QUOTE(130 * GRID_H);
|
||||
};
|
||||
class buttonCompass: buttonPrimaryWeapon {
|
||||
idc = IDC_buttonCompass;
|
||||
tooltip="$STR_A3_RscDisplayArsenal_tab_Compass";
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Compass_ca.paa";
|
||||
y = QUOTE(130 * GRID_H);
|
||||
};
|
||||
class iconBackgroundWatch: IconBackgroundPrimaryWeapon {
|
||||
idc = IDC_iconBackgroundWatch;
|
||||
y = QUOTE(140 * GRID_H);
|
||||
};
|
||||
class buttonWatch: buttonPrimaryWeapon {
|
||||
idc = IDC_buttonWatch;
|
||||
tooltip="$STR_A3_RscDisplayArsenal_tab_Watch";
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Watch_ca.paa";
|
||||
y = QUOTE(140 * GRID_H);
|
||||
};
|
||||
class iconBackgroundFace: IconBackgroundPrimaryWeapon {
|
||||
idc = IDC_iconBackgroundFace;
|
||||
y = QUOTE(150 * GRID_H);
|
||||
};
|
||||
class buttonFace: buttonPrimaryWeapon {
|
||||
idc = IDC_buttonFace;
|
||||
tooltip="$STR_A3_RscDisplayArsenal_tab_Face";
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Face_ca.paa";
|
||||
y = QUOTE(150 * GRID_H);
|
||||
};
|
||||
class iconBackgroundVoice: IconBackgroundPrimaryWeapon {
|
||||
idc = IDC_iconBackgroundVoice;
|
||||
y = QUOTE(160 * GRID_H);
|
||||
};
|
||||
class buttonVoice: buttonPrimaryWeapon {
|
||||
idc = IDC_buttonVoice;
|
||||
tooltip="$STR_A3_RscDisplayArsenal_tab_Voice";
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Voice_ca.paa";
|
||||
y = QUOTE(160 * GRID_H);
|
||||
};
|
||||
class iconBackgroundInsigna: IconBackgroundPrimaryWeapon {
|
||||
idc = IDC_iconBackgroundInsigna;
|
||||
y = QUOTE(170 * GRID_H);
|
||||
};
|
||||
class buttonInsigna: buttonPrimaryWeapon {
|
||||
idc = IDC_buttonInsigna;
|
||||
tooltip="$STR_A3_RscDisplayArsenal_tab_Insignia";
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Insignia_ca.paa";
|
||||
y = QUOTE(170 * GRID_H);
|
||||
};
|
||||
};
|
||||
};
|
||||
class iconBackgroundOptic: ctrlStaticBackground {
|
||||
idc = IDC_iconBackgroundOptic;
|
||||
colorBackground[]={0,0,0,1};
|
||||
fade=1;
|
||||
enable=0;
|
||||
x = QUOTE(safezoneW + safezoneX - 13 * GRID_W);
|
||||
y = QUOTE(safezoneY + 8 * GRID_H);
|
||||
w = QUOTE(12 * GRID_W);
|
||||
h = QUOTE(9 * GRID_H);
|
||||
};
|
||||
class buttonOptic: RscButtonArsenal {
|
||||
idc = IDC_buttonOptic;
|
||||
tooltip="$STR_A3_RscDisplayArsenal_tab_ItemOptic";
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\ItemOptic_ca.paa";
|
||||
onButtonClick = QUOTE([ARR_2(ctrlparent (_this select 0), _this select 0)] call FUNC(fillRightPanel));
|
||||
colorBackground[]={0,0,0,0.5};
|
||||
x = QUOTE(safezoneW + safezoneX - 10 * GRID_W);
|
||||
y = QUOTE(safezoneY + 8 * GRID_H);
|
||||
w = QUOTE(9 * GRID_W);
|
||||
h = QUOTE(9 * GRID_H);
|
||||
};
|
||||
class iconBackgroundItemAcc: iconBackgroundOptic {
|
||||
idc = IDC_iconBackgroundItemAcc;
|
||||
y = QUOTE(safezoneY + 18 * GRID_H);
|
||||
};
|
||||
class buttonItemAcc: buttonOptic {
|
||||
idc = IDC_buttonItemAcc;
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\ItemAcc_ca.paa";
|
||||
tooltip="$STR_A3_RscDisplayArsenal_tab_ItemAcc";
|
||||
y = QUOTE(safezoneY + 18 * GRID_H);
|
||||
};
|
||||
class iconBackgroundMuzzle: iconBackgroundOptic {
|
||||
idc = IDC_iconBackgroundMuzzle;
|
||||
y = QUOTE(safezoneY + 28 * GRID_H);
|
||||
};
|
||||
class buttonMuzzle: buttonOptic {
|
||||
idc = IDC_buttonMuzzle;
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\ItemMuzzle_ca.paa";
|
||||
tooltip="$STR_A3_RscDisplayArsenal_tab_ItemMuzzle";
|
||||
y = QUOTE(safezoneY + 28 * GRID_H);
|
||||
};
|
||||
class iconBackgroundBipod: iconBackgroundOptic {
|
||||
idc = IDC_iconBackgroundBipod;
|
||||
y = QUOTE(safezoneY + 38 * GRID_H);
|
||||
};
|
||||
class buttonBipod: buttonOptic {
|
||||
idc = IDC_buttonBipod;
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\ItemBipod_ca.paa";
|
||||
tooltip="$STR_A3_RscDisplayArsenal_tab_ItemBipod";
|
||||
y = QUOTE(safezoneY + 38 * GRID_H);
|
||||
};
|
||||
class iconBackgroundCurrentMag: iconBackgroundOptic {
|
||||
idc = IDC_iconBackgroundCurrentMag;
|
||||
y = QUOTE(safezoneY + 48 * GRID_H);
|
||||
};
|
||||
class buttonCurrentMag: buttonOptic {
|
||||
idc = IDC_buttonCurrentMag;
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\CargoMag_ca.paa";
|
||||
tooltip= CSTRING(buttonCurrentMagTooltip);
|
||||
y = QUOTE(safezoneY + 48 * GRID_H);
|
||||
};
|
||||
class iconBackgroundCurrentMag2: iconBackgroundOptic {
|
||||
idc = IDC_iconBackgroundCurrentMag2;
|
||||
y = QUOTE(safezoneY + 58 * GRID_H);
|
||||
};
|
||||
class buttonCurrentMag2: buttonOptic {
|
||||
idc = IDC_buttonCurrentMag2;
|
||||
text= QPATHTOF(data\iconSecondaryMuzzle);
|
||||
tooltip= CSTRING(buttonCurrentMag2Tooltip);
|
||||
y = QUOTE(safezoneY + 58 * GRID_H);
|
||||
};
|
||||
class iconBackgroundMag: iconBackgroundOptic {
|
||||
idc = IDC_iconBackgroundMag;
|
||||
y = QUOTE(safezoneY + 48 * GRID_H);
|
||||
};
|
||||
class buttonMag: buttonOptic {
|
||||
idc = IDC_buttonMag;
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\CargoMag_ca.paa";
|
||||
tooltip="$STR_A3_RscDisplayArsenal_tab_CargoMag";
|
||||
y = QUOTE(safezoneY + 48 * GRID_H);
|
||||
};
|
||||
class iconBackgroundMagALL: iconBackgroundOptic {
|
||||
idc = IDC_iconBackgroundMagALL;
|
||||
y = QUOTE(safezoneY + 58 * GRID_H);
|
||||
};
|
||||
class buttonMagALL: buttonOptic {
|
||||
idc = IDC_buttonMagALL;
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\CargoMagAll_ca.paa";
|
||||
tooltip="$STR_A3_RscDisplayArsenal_tab_CargoMagAll";
|
||||
y = QUOTE(safezoneY + 58 * GRID_H);
|
||||
};
|
||||
class iconBackgroundThrow: iconBackgroundOptic {
|
||||
idc = IDC_iconBackgroundThrow;
|
||||
y = QUOTE(safezoneY + 68 * GRID_H);
|
||||
};
|
||||
class buttonThrow: buttonOptic {
|
||||
idc = IDC_buttonThrow;
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\CargoThrow_ca.paa";
|
||||
tooltip="$STR_A3_RscDisplayArsenal_tab_CargoThrow";
|
||||
y = QUOTE(safezoneY + 68 * GRID_H);
|
||||
};
|
||||
class iconBackgroundPut: iconBackgroundOptic {
|
||||
idc = IDC_iconBackgroundPut;
|
||||
y = QUOTE(safezoneY + 78 * GRID_H);
|
||||
};
|
||||
class buttonPut: buttonOptic {
|
||||
idc = IDC_buttonPut;
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\CargoPut_ca.paa";
|
||||
tooltip="$STR_A3_RscDisplayArsenal_tab_CargoPut";
|
||||
y = QUOTE(safezoneY + 78 * GRID_H);
|
||||
};
|
||||
class iconBackgroundMisc: iconBackgroundOptic {
|
||||
idc = IDC_iconBackgroundMisc;
|
||||
y = QUOTE(safezoneY + 88 * GRID_H);
|
||||
};
|
||||
class buttonMisc: buttonOptic {
|
||||
idc = IDC_buttonMisc;
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\CargoMisc_ca.paa";
|
||||
tooltip="$STR_A3_RscDisplayArsenal_tab_CargoMisc";
|
||||
y = QUOTE(safezoneY + 88 * GRID_H);
|
||||
};
|
||||
class buttonRemoveAll: ctrlButtonPicture {
|
||||
idc = IDC_buttonRemoveAll;
|
||||
text = QPATHTOF(data\iconClearContainer.paa);
|
||||
colorBackground[]={0,0,0,0.5};
|
||||
onButtonClick = QUOTE(ctrlParent (_this select 0) call FUNC(buttonClearAll));
|
||||
fade=1;
|
||||
enable=0;
|
||||
x = QUOTE(safezoneW + safezoneX - 11 * GRID_W);
|
||||
y = QUOTE(safeZoneH + safezoneY - 29 * GRID_H);
|
||||
w = QUOTE(9 * GRID_W);
|
||||
h = QUOTE(9 * GRID_H);
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class GVAR(loadoutsDisplay) {
|
||||
idd = IDD_loadouts_display;
|
||||
onLoad = QUOTE([ARR_3('onLoad', _this, QQGVAR(loadoutsDisplay))] call FUNC(onLoadoutsOpen));
|
||||
onUnload = QUOTE([ARR_3('onUnload', _this, QQGVAR(loadoutsDisplay))] call FUNC(onLoadoutsClose));
|
||||
class controls {
|
||||
class centerBox: ctrlControlsGroupNoScrollbars {
|
||||
idc = IDC_centerBox;
|
||||
x = QUOTE(safezoneW + safezoneX - (180 * GRID_W));
|
||||
y = QUOTE(safezoneY + (5 * GRID_H));
|
||||
w = QUOTE(160 * GRID_W);
|
||||
h = QUOTE(safezoneH - (34 * GRID_H));
|
||||
class controls {
|
||||
class centerFrame: RscFrame {
|
||||
idc = -1;
|
||||
x = QUOTE(0 * GRID_W);
|
||||
y = QUOTE(0 * GRID_H);
|
||||
w = QUOTE(160 * GRID_W);
|
||||
h = QUOTE(safezoneH - (45 * GRID_H));
|
||||
colorText[] = {0,0,0,1};
|
||||
};
|
||||
class centerBackground: ctrlStaticBackground {
|
||||
idc = -1;
|
||||
x = QUOTE(0);
|
||||
y = QUOTE(0);
|
||||
w = QUOTE(160 * GRID_W);
|
||||
h = QUOTE(safezoneH - (45 * GRID_H));
|
||||
colorBackground[] = {0.13,0.13,0.13,0.9};
|
||||
};
|
||||
class centerTitle: ctrlStaticTitle {
|
||||
idc = IDC_centerTitle;
|
||||
style = ST_CENTER;
|
||||
text = "";
|
||||
x = QUOTE(0);
|
||||
y = QUOTE(0);
|
||||
w = QUOTE(160 * GRID_W);
|
||||
h = QUOTE(5 * GRID_H);
|
||||
};
|
||||
class contentPanel: RscListnBox {
|
||||
idc = IDC_contentPanel;
|
||||
columns[]={0, 0.05, 0.40, 0.50, 0.60, 0.70, 0.75, 0.80, 0.85, 0.90};
|
||||
drawSideArrows=0;
|
||||
disableOverflow=1;
|
||||
onLBSelChanged = QUOTE([ARR_3(ctrlParent (_this select 0), _this select 0, _this select 1)] call FUNC(onSelChangedLoadouts));
|
||||
onLBDblClick = QUOTE([ARR_2(ctrlparent (_this select 0), (ctrlParent (_this select 0)) displayCtrl IDC_buttonLoad)] call FUNC(buttonLoadoutsLoad));
|
||||
x = QUOTE(0);
|
||||
y = QUOTE(5 * GRID_H);
|
||||
w = QUOTE(160 * GRID_W);
|
||||
h = QUOTE(safezoneH - (57 * GRID_H));
|
||||
sizeEx = QUOTE(7 * GRID_H);
|
||||
};
|
||||
class textTitle: RscText {
|
||||
idc= -1;
|
||||
text="$STR_DISP_GAME_NAME";
|
||||
x = QUOTE(1 * GRID_W);
|
||||
y = QUOTE(safezoneH - (51 * GRID_H));
|
||||
w = QUOTE(15 * GRID_W);
|
||||
h = QUOTE(5 * GRID_H);
|
||||
colorBackground[]={0,0,0,0.2};
|
||||
};
|
||||
class textEditBox: ctrlEdit {
|
||||
idc= IDC_textEditBox;
|
||||
x = QUOTE(16 * GRID_W);
|
||||
y = QUOTE(safezoneH - (51 * GRID_H));
|
||||
w = QUOTE(80 * GRID_W);
|
||||
h = QUOTE(5 * GRID_H);
|
||||
};
|
||||
class buttonSave: ctrlButton {
|
||||
idc = IDC_buttonSave;
|
||||
x = QUOTE(0 * GRID_W);
|
||||
y = QUOTE(safezoneH - (44 * GRID_H));
|
||||
w = QUOTE(30 * GRID_W);
|
||||
h = QUOTE(10 * GRID_H);
|
||||
text= CSTRING(buttonSaveText);
|
||||
tooltip= CSTRING(buttonSaveTooltip);
|
||||
onButtonClick = QUOTE([ARR_2(ctrlparent (_this select 0), _this select 0)] call FUNC(buttonLoadoutsSave));
|
||||
colorBackground[] = {0,0,0,0.8};
|
||||
};
|
||||
class buttonRename: buttonSave {
|
||||
idc = IDC_buttonRename;
|
||||
x = QUOTE(32.5 * GRID_W);
|
||||
text= CSTRING(buttonRenameText);
|
||||
tooltip= CSTRING(buttonRenameTooltip);
|
||||
onButtonClick = QUOTE([ARR_2(ctrlparent (_this select 0), _this select 0)] call FUNC(buttonLoadoutsRename));
|
||||
};
|
||||
class buttonLoad: buttonSave {
|
||||
idc = IDC_buttonLoad;
|
||||
x = QUOTE(65 * GRID_W);
|
||||
text= CSTRING(buttonLoadText);
|
||||
tooltip= CSTRING(buttonLoadTooltip);
|
||||
onButtonClick = QUOTE([ARR_2(ctrlparent (_this select 0), _this select 0)] call FUNC(buttonLoadoutsLoad));
|
||||
};
|
||||
class buttonShare: buttonSave {
|
||||
idc = IDC_buttonShare;
|
||||
x = QUOTE(97.5 * GRID_W);
|
||||
text= CSTRING(buttonSharePrivateText);
|
||||
tooltip= CSTRING(buttonShareTooltip);
|
||||
onButtonClick = QUOTE([ARR_2(ctrlparent (_this select 0), _this select 0)] call FUNC(buttonLoadoutsShare));
|
||||
};
|
||||
class buttonDelete: buttonSave {
|
||||
idc = IDC_buttonDelete;
|
||||
x = QUOTE(130 * GRID_W);
|
||||
text= CSTRING(buttonDeleteText);
|
||||
tooltip= CSTRING(buttonDeleteTooltip);
|
||||
colorBackgroundActive[] = {0.5,0,0,1};
|
||||
onButtonClick = QUOTE([ARR_2(ctrlparent (_this select 0), _this select 0)] call FUNC(buttonLoadoutsDelete));
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class buttonClose: ctrlButton {
|
||||
idc = -1;
|
||||
x = QUOTE(safezoneW + safezoneX - 32 * GRID_W);
|
||||
y = QUOTE(safezoneH + safezoneY - 9 * GRID_H);
|
||||
w = QUOTE(30 * GRID_W);
|
||||
h = QUOTE(7 * GRID_H);
|
||||
sizeEx = QUOTE(4 * GRID_H);
|
||||
text= CSTRING(buttonCloseText);
|
||||
shortcuts[]= {"0x01"};
|
||||
tooltip= "";
|
||||
onButtonClick = QUOTE(ctrlparent (_this select 0) closeDisplay 2);
|
||||
};
|
||||
class buttonBar: ctrlControlsGroupNoScrollbars {
|
||||
idc = -1;
|
||||
x = QUOTE((safezoneW * 0.5) + safezoneX - (80.5 * GRID_W));
|
||||
y = QUOTE(safezoneH + safezoneY - 9 * GRID_H);
|
||||
w = QUOTE(161 * GRID_W);
|
||||
h = QUOTE(7 * GRID_H);
|
||||
class controls {
|
||||
class buttonMyLoadoutsBackground: ctrlStaticBackground {
|
||||
idc = IDC_buttonMyLoadoutsBackground;
|
||||
x = QUOTE(0);
|
||||
y = QUOTE(0);
|
||||
w = QUOTE(52 * GRID_W);
|
||||
h = QUOTE(7 * GRID_H);
|
||||
colorBackground[] = {0,0,0,0.7};
|
||||
};
|
||||
class buttonMyLoadouts: ctrlButton {
|
||||
idc = IDC_buttonMyLoadouts;
|
||||
colorBackground[] = {0,0,0,0};
|
||||
x = QUOTE(0 * GRID_W);
|
||||
y = QUOTE(0 * GRID_H);
|
||||
w = QUOTE(52 * GRID_W);
|
||||
h = QUOTE(7 * GRID_H);
|
||||
sizeEx = QUOTE(4 * GRID_H);
|
||||
text= CSTRING(tabMyLoadoutsText);
|
||||
tooltip= CSTRING(tabMyLoadoutsTooltip);
|
||||
onButtonClick = QUOTE([ARR_2(ctrlparent (_this select 0), _this select 0)] call FUNC(loadoutsChangeTab));
|
||||
};
|
||||
class buttonDefaultLoadoutsBackground: buttonMyLoadoutsBackground {
|
||||
idc = IDC_buttonDefaultLoadoutsBackground;
|
||||
x = QUOTE(54.5 * GRID_W);
|
||||
};
|
||||
class buttonDefaultLoadouts: buttonMyLoadouts {
|
||||
idc = IDC_buttonDefaultLoadouts;
|
||||
x = QUOTE(54.5 * GRID_W);
|
||||
text= CSTRING(tabDefaultLoadoutsText);
|
||||
tooltip= CSTRING(tabDefaultLoadoutsTooltip);
|
||||
};
|
||||
class buttonSharedLoadoutsBackground: buttonMyLoadoutsBackground {
|
||||
idc = IDC_buttonSharedLoadoutsBackground;
|
||||
x = QUOTE(109 * GRID_W);
|
||||
};
|
||||
class buttonSharedLoadouts: buttonMyLoadouts {
|
||||
idc = IDC_buttonSharedLoadouts;
|
||||
x = QUOTE(109 * GRID_W);
|
||||
text= CSTRING(tabSharedLoadoutsText);
|
||||
tooltip= CSTRING(tabSharedLoadoutsTooltip);
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
278
addons/arsenal/ui/RscCommon.hpp
Normal file
278
addons/arsenal/ui/RscCommon.hpp
Normal file
@ -0,0 +1,278 @@
|
||||
// Control types
|
||||
#define CT_STATIC 0
|
||||
#define CT_BUTTON 1
|
||||
#define CT_EDIT 2
|
||||
#define CT_SLIDER 3
|
||||
#define CT_COMBO 4
|
||||
#define CT_LISTBOX 5
|
||||
#define CT_TOOLBOX 6
|
||||
#define CT_CHECKBOXES 7
|
||||
#define CT_PROGRESS 8
|
||||
#define CT_HTML 9
|
||||
#define CT_STATIC_SKEW 10
|
||||
#define CT_ACTIVETEXT 11
|
||||
#define CT_TREE 12
|
||||
#define CT_STRUCTURED_TEXT 13
|
||||
#define CT_CONTEXT_MENU 14
|
||||
#define CT_CONTROLS_GROUP 15
|
||||
#define CT_SHORTCUTBUTTON 16
|
||||
#define CT_HITZONES 17
|
||||
#define CT_XKEYDESC 40
|
||||
#define CT_XBUTTON 41
|
||||
#define CT_XLISTBOX 42
|
||||
#define CT_XSLIDER 43
|
||||
#define CT_XCOMBO 44
|
||||
#define CT_ANIMATED_TEXTURE 45
|
||||
#define CT_OBJECT 80
|
||||
#define CT_OBJECT_ZOOM 81
|
||||
#define CT_OBJECT_CONTAINER 82
|
||||
#define CT_OBJECT_CONT_ANIM 83
|
||||
#define CT_LINEBREAK 98
|
||||
#define CT_USER 99
|
||||
#define CT_MAP 100
|
||||
#define CT_MAP_MAIN 101
|
||||
#define CT_LISTNBOX 102
|
||||
#define CT_ITEMSLOT 103
|
||||
#define CT_CHECKBOX 77
|
||||
|
||||
// Static styles
|
||||
#define ST_POS 0x0F
|
||||
#define ST_HPOS 0x03
|
||||
#define ST_VPOS 0x0C
|
||||
#define ST_LEFT 0x00
|
||||
#define ST_RIGHT 0x01
|
||||
#define ST_CENTER 0x02
|
||||
#define ST_DOWN 0x04
|
||||
#define ST_UP 0x08
|
||||
#define ST_VCENTER 0x0C
|
||||
|
||||
#define ST_TYPE 0xF0
|
||||
#define ST_SINGLE 0x00
|
||||
#define ST_MULTI 0x10
|
||||
#define ST_TITLE_BAR 0x20
|
||||
#define ST_PICTURE 0x30
|
||||
#define ST_FRAME 0x40
|
||||
#define ST_BACKGROUND 0x50
|
||||
#define ST_GROUP_BOX 0x60
|
||||
#define ST_GROUP_BOX2 0x70
|
||||
#define ST_HUD_BACKGROUND 0x80
|
||||
#define ST_TILE_PICTURE 0x90
|
||||
#define ST_WITH_RECT 0xA0
|
||||
#define ST_LINE 0xB0
|
||||
#define ST_UPPERCASE 0xC0
|
||||
#define ST_LOWERCASE 0xD0
|
||||
|
||||
#define ST_SHADOW 0x100
|
||||
#define ST_NO_RECT 0x200
|
||||
#define ST_KEEP_ASPECT_RATIO 0x800
|
||||
|
||||
// Slider styles
|
||||
#define SL_DIR 0x400
|
||||
#define SL_VERT 0
|
||||
#define SL_HORZ 0x400
|
||||
|
||||
#define SL_TEXTURES 0x10
|
||||
|
||||
// progress bar
|
||||
#define ST_VERTICAL 0x01
|
||||
#define ST_HORIZONTAL 0
|
||||
|
||||
// Listbox styles
|
||||
#define LB_TEXTURES 0x10
|
||||
#define LB_MULTI 0x20
|
||||
|
||||
// Tree styles
|
||||
#define TR_SHOWROOT 1
|
||||
#define TR_AUTOCOLLAPSE 2
|
||||
|
||||
// Default grid
|
||||
#define GUI_GRID_WAbs ((safezoneW / safezoneH) min 1.2)
|
||||
#define GUI_GRID_HAbs (GUI_GRID_WAbs / 1.2)
|
||||
#define GUI_GRID_W (GUI_GRID_WAbs / 40)
|
||||
#define GUI_GRID_H (GUI_GRID_HAbs / 25)
|
||||
#define GUI_GRID_X (safezoneX)
|
||||
#define GUI_GRID_Y (safezoneY + safezoneH - GUI_GRID_HAbs)
|
||||
|
||||
// Default text sizes
|
||||
#define GUI_TEXT_SIZE_SMALL (GUI_GRID_H * 0.8)
|
||||
#define GUI_TEXT_SIZE_MEDIUM (GUI_GRID_H * 1)
|
||||
#define GUI_TEXT_SIZE_LARGE (GUI_GRID_H * 1.2)
|
||||
|
||||
class ScrollBar;
|
||||
class RscObject;
|
||||
class RscText;
|
||||
class RscTextSmall;
|
||||
class RscTitle;
|
||||
class RscProgress;
|
||||
class RscProgressNotFreeze;
|
||||
class RscPicture;
|
||||
class RscLadderPicture;
|
||||
class RscPictureKeepAspect;
|
||||
class RscHTML;
|
||||
class RscButton;
|
||||
class RscShortcutButton;
|
||||
class RscButtonSmall;
|
||||
class RscEdit;
|
||||
class RscCombo;
|
||||
class RscListBox;
|
||||
class RscListNBox;
|
||||
class RscXListBox;
|
||||
class RscTree;
|
||||
class RscSlider;
|
||||
class RscSliderH;
|
||||
class RscXSliderH;
|
||||
class RscActiveText;
|
||||
class RscStructuredText;
|
||||
class RscControlsGroup;
|
||||
class RscToolbox;
|
||||
class RscMapControl;
|
||||
class RscCheckBox;
|
||||
class RscFrame;
|
||||
class ctrlDefault;
|
||||
class ctrlControlsGroup;
|
||||
class ctrlDefaultText;
|
||||
class ctrlDefaultButton;
|
||||
class RscBackgroundStripeTop;
|
||||
class RscBackgroundStripeBottom;
|
||||
class RscIGText;
|
||||
class RscIGProgress;
|
||||
class RscListBoxKeys;
|
||||
class RscControlsGroupNoScrollbars;
|
||||
class RscControlsGroupNoHScrollbars;
|
||||
class RscControlsGroupNoVScrollbars;
|
||||
class RscLine;
|
||||
class RscActivePicture;
|
||||
class RscButtonTextOnly;
|
||||
class RscShortcutButtonMain;
|
||||
class RscButtonEditor;
|
||||
class RscIGUIShortcutButton;
|
||||
class RscGearShortcutButton;
|
||||
class RscButtonMenu;
|
||||
class RscButtonMenuOK;
|
||||
class RscButtonMenuCancel;
|
||||
class RscButtonMenuSteam;
|
||||
class RscLoadingText;
|
||||
class RscIGUIListBox;
|
||||
class RscIGUIListNBox;
|
||||
class RscBackground;
|
||||
class RscBackgroundGUI;
|
||||
class RscBackgroundGUILeft;
|
||||
class RscBackgroundGUIRight;
|
||||
class RscBackgroundGUIBottom;
|
||||
class RscBackgroundGUITop;
|
||||
class RscBackgroundGUIDark;
|
||||
class RscBackgroundLogo;
|
||||
class RscMapControlEmpty;
|
||||
class RscVignette;
|
||||
class CA_Mainback;
|
||||
class CA_Back;
|
||||
class CA_Title_Back;
|
||||
class CA_Black_Back;
|
||||
class CA_Title;
|
||||
class CA_Logo;
|
||||
class CA_Logo_Small;
|
||||
class CA_RscButton;
|
||||
class CA_RscButton_dialog;
|
||||
class CA_Ok;
|
||||
class CA_Ok_image;
|
||||
class CA_Ok_image2;
|
||||
class CA_Ok_text;
|
||||
class ctrlCheckbox;
|
||||
class ctrlCheckboxBaseline;
|
||||
class ctrlStatic;
|
||||
class ctrlControlsGroupNoScrollbars;
|
||||
class ctrlStructuredText;
|
||||
class RscTextMulti;
|
||||
class RscTreeSearch;
|
||||
class RscVideo;
|
||||
class RscVideoKeepAspect;
|
||||
class RscActivePictureKeepAspect;
|
||||
class RscEditMulti;
|
||||
class RscMapSignalBackground;
|
||||
class RscMapSignalPicture;
|
||||
class RscMapSignalText;
|
||||
class RscColorPicker;
|
||||
class RscInterlacingScreen;
|
||||
class RscFeedback;
|
||||
class RscTrafficLight;
|
||||
class RscButtonSearch;
|
||||
class RscIGUIText;
|
||||
class RscOpticsText;
|
||||
class RscOpticsValue;
|
||||
class RscIGUIValue;
|
||||
class RscButtonMenuMain;
|
||||
class RscButtonTestCentered;
|
||||
class RscDisplaySingleMission_ChallengeOverviewGroup;
|
||||
class RscDisplayDebriefing_RscTextMultiline;
|
||||
class RscDisplayDebriefing_ListGroup;
|
||||
class RscButtonArsenal;
|
||||
class RscTextNoShadow;
|
||||
class RscButtonNoColor;
|
||||
class RscToolboxButton;
|
||||
class ctrlStaticPicture;
|
||||
class ctrlStaticPictureKeepAspect;
|
||||
class ctrlStaticPictureTile;
|
||||
class ctrlStaticFrame;
|
||||
class ctrlStaticLine;
|
||||
class ctrlStaticMulti;
|
||||
class ctrlStaticBackground;
|
||||
class ctrlStaticOverlay;
|
||||
class ctrlStaticTitle;
|
||||
class ctrlStaticFooter;
|
||||
class ctrlStaticBackgroundDisable;
|
||||
class ctrlStaticBackgroundDisableTiles;
|
||||
class ctrlButton;
|
||||
class ctrlButtonPicture;
|
||||
class ctrlButtonPictureKeepAspect;
|
||||
class ctrlButtonOK;
|
||||
class ctrlButtonCancel;
|
||||
class ctrlButtonClose;
|
||||
class ctrlButtonToolbar;
|
||||
class ctrlButtonSearch;
|
||||
class ctrlButtonExpandAll;
|
||||
class ctrlButtonCollapseAll;
|
||||
class ctrlButtonFilter;
|
||||
class ctrlEdit;
|
||||
class ctrlEditMulti;
|
||||
class ctrlSliderV;
|
||||
class ctrlSliderH;
|
||||
class ctrlCombo;
|
||||
class ctrlComboToolbar;
|
||||
class ctrlListbox;
|
||||
class ctrlToolbox;
|
||||
class ctrlToolboxPicture;
|
||||
class ctrlToolboxPictureKeepAspect;
|
||||
class ctrlCheckboxes;
|
||||
class ctrlCheckboxesCheckbox;
|
||||
class ctrlProgress;
|
||||
class ctrlHTML;
|
||||
class ctrlActiveText;
|
||||
class ctrlActivePicture;
|
||||
class ctrlActivePictureKeepAspect;
|
||||
class ctrlTree;
|
||||
class ctrlControlsGroupNoHScrollbars;
|
||||
class ctrlControlsGroupNoVScrollbars;
|
||||
class ctrlShortcutButton;
|
||||
class ctrlShortcutButtonOK;
|
||||
class ctrlShortcutButtonCancel;
|
||||
class ctrlShortcutButtonSteam;
|
||||
class ctrlXListbox;
|
||||
class ctrlXSliderV;
|
||||
class ctrlXSliderH;
|
||||
class ctrlMenu;
|
||||
class ctrlMenuStrip;
|
||||
class ctrlMap;
|
||||
class ctrlMapEmpty;
|
||||
class ctrlMapMain;
|
||||
class ctrlListNBox;
|
||||
class ctrlCheckboxToolbar;
|
||||
|
||||
class Display3DEN {
|
||||
class ContextMenu :ctrlMenu {
|
||||
class Items {
|
||||
class Arsenal {
|
||||
action= QUOTE(call FUNC(open3DEN));
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
1
addons/arsenal/ui/script_component.hpp
Normal file
1
addons/arsenal/ui/script_component.hpp
Normal file
@ -0,0 +1 @@
|
||||
#include "\z\ace\addons\arsenal\script_component.hpp"
|
@ -48,6 +48,7 @@ if (_unit == _attachToVehicle) then { //Self Attachment
|
||||
GVAR(placeAction) = PLACE_WAITING;
|
||||
|
||||
[_unit, "forceWalk", "ACE_Attach", true] call EFUNC(common,statusEffect_set);
|
||||
[_unit, "blockThrow", "ACE_Attach", true] call EFUNC(common,statusEffect_set);
|
||||
|
||||
[{[localize LSTRING(PlaceAction), ""] call EFUNC(interaction,showMouseHint)}, []] call CBA_fnc_execNextFrame;
|
||||
_unit setVariable [QGVAR(placeActionEH), [_unit, "DefaultAction", {true}, {GVAR(placeAction) = PLACE_APPROVE;}] call EFUNC(common,AddActionEventHandler)];
|
||||
@ -85,6 +86,7 @@ if (_unit == _attachToVehicle) then { //Self Attachment
|
||||
|
||||
[_idPFH] call CBA_fnc_removePerFrameHandler;
|
||||
[_unit, "forceWalk", "ACE_Attach", false] call EFUNC(common,statusEffect_set);
|
||||
[_unit, "blockThrow", "ACE_Attach", false] call EFUNC(common,statusEffect_set);
|
||||
[] call EFUNC(interaction,hideMouseHint);
|
||||
[_unit, "DefaultAction", (_unit getVariable [QGVAR(placeActionEH), -1])] call EFUNC(common,removeActionEventHandler);
|
||||
_unit removeAction _actionID;
|
||||
|
@ -462,7 +462,7 @@ class CfgAmmo {
|
||||
airFriction=-0.00055706;
|
||||
typicalSpeed=826;
|
||||
ACE_caliber=8.585;
|
||||
ACE_bulletLength=43.18;
|
||||
ACE_bulletLength=44.0182;
|
||||
ACE_bulletMass=19.44;
|
||||
ACE_muzzleVelocityVariationSD=0.3;
|
||||
ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19};
|
||||
|
@ -1978,52 +1978,50 @@
|
||||
<Chinesesimp>口径: 6.5x47mm Creedmor 狙击专用弹<br />发数: 30<br />使用于: MXM</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Ballistics_10Rnd_338_300gr_HPBT_Mag_Name">
|
||||
<English>.338 10Rnd Mag (300gr Sierra MatchKing HPBT)</English>
|
||||
<French>Ch. .338 10 Cps (300gr Sierra MatchKing HPBT)</French>
|
||||
<Spanish>Cargador de 10 balas de 8.6x70mm (300gr Sierra MatchKing HPBT)</Spanish>
|
||||
<Polish>Magazynek .338 10rd (300gr Sierra MatchKing HPBT)</Polish>
|
||||
<Russian>Магазин из 10-ти .338 (300 гран Sierra MatchKing экспансивные)</Russian>
|
||||
<German>.338 10-Patronen-Magazin (300gr Sierra MatchKing HPBT)</German>
|
||||
<Italian>.338 10Munizioni Mag (300gr Sierra MatchKing HPBT)</Italian>
|
||||
<Czech>.338 10náb. Zásobník (300gr Sierra MatchKing HPBT)</Czech>
|
||||
<Portuguese>Carregador .338 (300gr Sierra MatchKing HPBT) com 10 cartuchos </Portuguese>
|
||||
<Hungarian>.338 10-lövedékes tár (300gr Sierra MatchKing HPBT)</Hungarian>
|
||||
<Japanese>.338 10発入り 弾倉 (300gr Sierra MatchKing HPBT)</Japanese>
|
||||
<Korean>10발들이 .338 탄창 (300gr Sierra MatchKing HPBT)</Korean>
|
||||
<Chinese>.338 10發 彈匣 (300公克 Sierra MatchKing 空尖艇尾比賽專用彈)</Chinese>
|
||||
<Chinesesimp>.338 10发 弹匣 (300公克 Sierra MatchKing 空尖艇尾比赛专用弹)</Chinesesimp>
|
||||
<English>.338 10Rnd Mag (300gr Lapua Scenar)</English>
|
||||
<French>Ch. .338 10 Cps (300gr Lapua Scenar)</French>
|
||||
<Spanish>Cargador de 10 balas de 8.6x70mm (300gr Lapua Scenar)</Spanish>
|
||||
<Polish>Magazynek .338 10rd (300gr Lapua Scenar)</Polish>
|
||||
<Russian>Магазин из 10-ти .338 (300 гран Lapua Scenar)</Russian>
|
||||
<German>.338 10-Patronen-Magazin (300gr Lapua Scenar)</German>
|
||||
<Italian>.338 10Munizioni Mag (300gr Lapua Scenar)</Italian>
|
||||
<Czech>.338 10náb. Zásobník (300gr Lapua Scenar)</Czech>
|
||||
<Portuguese>Carregador .338 (300gr Lapua Scenar) com 10 cartuchos </Portuguese>
|
||||
<Hungarian>.338 10-lövedékes tár (300gr Lapua Scenar)</Hungarian>
|
||||
<Japanese>.338 10発入り 弾倉 (300gr Lapua Scenar)</Japanese>
|
||||
<Korean>10발들이 .338 탄창 (300gr Lapua Scenar)</Korean>
|
||||
<Chinese>.338 10發 彈匣 (300公克 Lapua Scenar)</Chinese>
|
||||
<Chinesesimp>.338 10发 弹匣 (300公克 Lapua Scenar)</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Ballistics_10Rnd_338_300gr_HPBT_Mag_NameShort">
|
||||
<English>.338 HPBT</English>
|
||||
<French>.338 HPBT</French>
|
||||
<Spanish>.338 HPBT</Spanish>
|
||||
<Polish>.338 HPBT</Polish>
|
||||
<Russian>.338 экспансивные</Russian>
|
||||
<German>.338 HPBT</German>
|
||||
<Italian>.338 HPBT</Italian>
|
||||
<Czech>.338 HPBT</Czech>
|
||||
<Portuguese>.338 HPBT</Portuguese>
|
||||
<Hungarian>.338 HPBT</Hungarian>
|
||||
<Japanese>338 HPBT</Japanese>
|
||||
<Korean>.338 HPBT</Korean>
|
||||
<Chinese>.338 空尖艇尾比賽專用彈</Chinese>
|
||||
<Chinesesimp>.338 空尖艇尾比赛专用弹</Chinesesimp>
|
||||
<English>.338 Scenar</English>
|
||||
<French>.338 Scenar</French>
|
||||
<Spanish>.338 Scenar</Spanish>
|
||||
<Polish>.338 Scenar</Polish>
|
||||
<Russian>.338 Scenar</Russian>
|
||||
<German>.338 Scenar</German>
|
||||
<Italian>.338 Scenar</Italian>
|
||||
<Czech>.338 Scenar</Czech>
|
||||
<Portuguese>.338 Scenar</Portuguese>
|
||||
<Hungarian>.338 Scenar</Hungarian>
|
||||
<Japanese>338 Scenar</Japanese>
|
||||
<Korean>.338 Scenar</Korean>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Ballistics_10Rnd_338_300gr_HPBT_Mag_Description">
|
||||
<English>Caliber: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Rounds: 10</English>
|
||||
<French>Calibre: 8,6x70mm (300gr Sierra MatchKing HPBT)<br />Cartouches: 10</French>
|
||||
<Spanish>Calibre: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Balas: 10</Spanish>
|
||||
<Polish>Kaliber: 8,6x70mm (300gr Sierra MatchKing HPBT)<br />Pociski: 10</Polish>
|
||||
<Russian>Калибр: 8,6x70mm (300 гран Sierra MatchKing экспансивные)<br />Патронов: 10</Russian>
|
||||
<German>Kaliber: 8,6x70mm (300gr Sierra MatchKing HPBT)<br />Patronen: 10</German>
|
||||
<Italian>Calibro: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Munizioni: 10</Italian>
|
||||
<Czech>Ráže: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Nábojů: 10</Czech>
|
||||
<Portuguese>Calibre: 8.6x70mm (300gr Sierra MatchKing HPBT)<br/>Cartuchos: 10</Portuguese>
|
||||
<Hungarian>Kaliber: 8,6x70mm (300gr Sierra MatchKing HPBT)<br />Lövedékek: 10</Hungarian>
|
||||
<Japanese>口径: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />装填数: 10</Japanese>
|
||||
<Korean>구경: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />장탄수: 10</Korean>
|
||||
<Chinese>口徑: 8.6x70mm (300公克 Sierra MatchKing 空尖艇尾比賽專用彈)<br />發數: 10</Chinese>
|
||||
<Chinesesimp>口径: 8.6x70mm (300公克 Sierra MatchKing 空尖艇尾比赛专用弹)<br />发数: 10</Chinesesimp>
|
||||
<English>Caliber: 8.6x70mm (300gr Lapua Scenar)<br />Rounds: 10</English>
|
||||
<French>Calibre: 8,6x70mm (300gr Lapua Scenar)<br />Cartouches: 10</French>
|
||||
<Spanish>Calibre: 8.6x70mm (300gr Lapua Scenar)<br />Balas: 10</Spanish>
|
||||
<Polish>Kaliber: 8,6x70mm (300gr Lapua Scenar)<br />Pociski: 10</Polish>
|
||||
<Russian>Калибр: 8,6x70mm (300 гран Lapua Scenar)<br />Патронов: 10</Russian>
|
||||
<German>Kaliber: 8,6x70mm (300gr Lapua Scenar)<br />Patronen: 10</German>
|
||||
<Italian>Calibro: 8.6x70mm (300gr Lapua Scenar)<br />Munizioni: 10</Italian>
|
||||
<Czech>Ráže: 8.6x70mm (300gr Lapua Scenar)<br />Nábojů: 10</Czech>
|
||||
<Portuguese>Calibre: 8.6x70mm (300gr Lapua Scenar)<br/>Cartuchos: 10</Portuguese>
|
||||
<Hungarian>Kaliber: 8,6x70mm (300gr Lapua Scenar)<br />Lövedékek: 10</Hungarian>
|
||||
<Japanese>口径: 8.6x70mm (300gr Lapua Scenar)<br />装填数: 10</Japanese>
|
||||
<Korean>구경: 8.6x70mm (300gr Lapua Scenar)<br />장탄수: 10</Korean>
|
||||
<Chinese>口徑: 8.6x70mm (300公克 Lapua Scenar)<br />發數: 10</Chinese>
|
||||
<Chinesesimp>口径: 8.6x70mm (300公克 Lapua Scenar)<br />发数: 10</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Ballistics_10Rnd_338_API526_Mag_Name">
|
||||
<English>.338 10Rnd Mag (API526)</English>
|
||||
|
@ -57,6 +57,7 @@ class CfgWeapons {
|
||||
descriptionShort = CSTRING(Shield_Green_DescriptionShort);
|
||||
model = "\A3\weapons_F\ammo\mag_univ.p3d";
|
||||
picture = QPATHTOF(UI\ace_chemlight_shield_green_x_ca.paa);
|
||||
ace_arsenal_uniqueBase = "ACE_Chemlight_Shield";
|
||||
scope = 1;
|
||||
class ItemInfo: CBA_MiscItem_ItemInfo {
|
||||
mass = 1;
|
||||
|
@ -87,6 +87,7 @@ PREP(getVersion);
|
||||
PREP(getWeaponAzimuthAndInclination);
|
||||
PREP(getWeaponIndex);
|
||||
PREP(getWeaponState);
|
||||
PREP(getWeight);
|
||||
PREP(getWindDirection);
|
||||
PREP(getZoom);
|
||||
PREP(goKneeling);
|
||||
|
@ -19,11 +19,12 @@
|
||||
|
||||
//Status Effect EHs:
|
||||
[QGVAR(setStatusEffect), {_this call FUNC(statusEffect_set)}] call CBA_fnc_addEventHandler;
|
||||
["forceWalk", false, ["ACE_SwitchUnits", "ACE_Attach", "ACE_dragging", "ACE_Explosives", "ACE_Ladder", "ACE_Sandbag", "ACE_refuel", "ACE_rearm", "ACE_dragging"]] call FUNC(statusEffect_addType);
|
||||
["forceWalk", false, ["ACE_SwitchUnits", "ACE_Attach", "ACE_dragging", "ACE_Explosives", "ACE_Ladder", "ACE_Sandbag", "ACE_refuel", "ACE_rearm", "ACE_Trenches"]] call FUNC(statusEffect_addType);
|
||||
["blockSprint", false, []] call FUNC(statusEffect_addType);
|
||||
["setCaptive", true, [QEGVAR(captives,Handcuffed), QEGVAR(captives,Surrendered)]] call FUNC(statusEffect_addType);
|
||||
["blockDamage", false, ["fixCollision", "ACE_cargo"]] call FUNC(statusEffect_addType);
|
||||
["blockEngine", false, ["ACE_Refuel"]] call FUNC(statusEffect_addType);
|
||||
["blockThrow", false, ["ACE_Attach", "ACE_concertina_wire", "ACE_dragging", "ACE_Explosives", "ACE_Ladder", "ACE_rearm", "ACE_refuel", "ACE_Sandbag", "ACE_Trenches", "ACE_tripod"]] call FUNC(statusEffect_addType);
|
||||
["setHidden", true, ["ace_unconscious"]] call FUNC(statusEffect_addType);
|
||||
|
||||
[QGVAR(forceWalk), {
|
||||
@ -63,7 +64,7 @@
|
||||
params ["_object", "_set"];
|
||||
if ((_object isKindOf "CAManBase") && {(["ace_medical"] call FUNC(isModLoaded))}) then {
|
||||
TRACE_2("blockDamage EH (using medical)",_object,_set);
|
||||
_object setvariable [QEGVAR(medical,allowDamage), (_set == 0), true];
|
||||
_object setVariable [QEGVAR(medical,allowDamage), (_set == 0), true];
|
||||
} else {
|
||||
TRACE_2("blockDamage EH (using allowDamage)",_object,_set);
|
||||
_object allowDamage (_set == 0);
|
||||
|
40
addons/common/functions/fnc_getWeight.sqf
Normal file
40
addons/common/functions/fnc_getWeight.sqf
Normal file
@ -0,0 +1,40 @@
|
||||
/*
|
||||
* Author: commy2
|
||||
* Returns the weight (from the loadAbs command) in lbs/kg (based on user option)
|
||||
*
|
||||
* Arguments:
|
||||
* 0: The Unit (usually the player) <OBJECT>
|
||||
* 0: Force a return type <SCALAR> (0: useImperial setting; 1: Metric; 2: Imperial)
|
||||
*
|
||||
* Return Value:
|
||||
* The return value <NUMBER>
|
||||
*
|
||||
* Example:
|
||||
* [player] call ace_common_fnc_getWeight
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_unit", ["_returnFormat", 0, [0]]];
|
||||
|
||||
private _virtualLoad = 0;
|
||||
private _useImperial = (!isNil QEGVAR(movement,useImperial) && {EGVAR(movement,useImperial)});
|
||||
|
||||
{
|
||||
_virtualLoad = _virtualLoad + (_x getVariable [QEGVAR(movement,vLoad), 0]);
|
||||
} forEach [
|
||||
_unit,
|
||||
uniformContainer _unit,
|
||||
vestContainer _unit,
|
||||
backpackContainer _unit
|
||||
];
|
||||
|
||||
private _weight = (loadAbs _unit + _virtualLoad) * 0.1;
|
||||
|
||||
//Return
|
||||
if ([_useImperial, (_returnFormat == 1)] select (_returnFormat != 0)) then {
|
||||
format ["%1lb", (round (_weight * 100)) / 100]
|
||||
} else {
|
||||
format ["%1kg", (round (_weight * (1/2.2046) * 100)) / 100]
|
||||
};
|
@ -5,6 +5,7 @@
|
||||
* - Curator
|
||||
* - ACE Spectator
|
||||
* - Arsenal camera (BIS_fnc_arsenal)
|
||||
* - Nexus Spectator (BIS_fnc_EGSpectator)
|
||||
* - Establishing shot (BIS_fnc_establishingShot)
|
||||
* - Splendid camera (BIS_fnc_camera)
|
||||
* - Animation viewer (BIS_fnc_animViewer)
|
||||
@ -26,6 +27,7 @@
|
||||
!(
|
||||
isNull curatorCamera && // Curator
|
||||
{!(GETMVAR(EGVAR(spectator,isSet),false))} && // ACE Spectator
|
||||
{isNull (GETMVAR(BIS_EGSpectatorCamera_camera, objNull))} && // BIS Nexus Spectator
|
||||
{isNull (GETUVAR(BIS_fnc_arsenal_cam, objNull))} && // Arsenal camera
|
||||
{isNull (GETMVAR(BIS_fnc_establishingShot_fakeUAV, objNull))} && // Establishing shot camera
|
||||
{isNull (GETMVAR(BIS_fnc_camera_cam, objNull))} && // Splendid camera
|
||||
|
@ -16,7 +16,6 @@
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
// #define DEBUG_MODE_FULL
|
||||
#include "script_component.hpp"
|
||||
|
||||
params [["_object", objNull, [objNull]], ["_effectName", "", [""]], ["_ID", "", [""]], ["_set", true, [false]]];
|
||||
@ -32,7 +31,7 @@ if (isNull _object) exitWith {TRACE_1("null",_object);};
|
||||
|
||||
[_object, true] call FUNC(statusEffect_resetVariables); //Check for mismatch, and set object ref
|
||||
|
||||
//check ID case and set globaly if not already set:
|
||||
//check ID case and set globally if not already set:
|
||||
_ID = toLower _ID;
|
||||
private _statusReasons = missionNamespace getVariable [(format [QGVAR(statusEffects_%1), _effectName]), []];
|
||||
private _statusIndex = _statusReasons find _ID;
|
||||
@ -62,9 +61,13 @@ if (_set isEqualTo (_effectBoolArray select _statusIndex)) exitWith {
|
||||
|
||||
TRACE_2("Setting to new value",_set,_effectBoolArray select _statusIndex);
|
||||
_effectBoolArray set [_statusIndex, _set];
|
||||
_effectNumber = _effectBoolArray call FUNC(toBitmask); //Convert array back to number
|
||||
private _newEffectNumber = _effectBoolArray call FUNC(toBitmask); //Convert array back to number
|
||||
|
||||
TRACE_2("Saving globaly",_effectVarName,_effectNumber);
|
||||
_object setVariable [_effectVarName, _effectNumber, true];
|
||||
TRACE_2("Saving globally",_effectVarName,_newEffectNumber);
|
||||
_object setVariable [_effectVarName, _newEffectNumber, true];
|
||||
|
||||
[_object, _effectName] call FUNC(statusEffect_sendEffects);
|
||||
if (_effectNumber == 0 || {_newEffectNumber == 0}) then {
|
||||
[_object, _effectName] call FUNC(statusEffect_sendEffects);
|
||||
} else {
|
||||
LOG("not sending more than once");
|
||||
};
|
||||
|
@ -1131,5 +1131,21 @@
|
||||
<Chinese>切換</Chinese>
|
||||
<Chinesesimp>切换</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_Weight">
|
||||
<English>Weight:</English>
|
||||
<German>Gewicht:</German>
|
||||
<Spanish>Peso:</Spanish>
|
||||
<French>Poids :</French>
|
||||
<Polish>Waga:</Polish>
|
||||
<Czech>Váha:</Czech>
|
||||
<Italian>Peso:</Italian>
|
||||
<Portuguese>Peso:</Portuguese>
|
||||
<Hungarian>Súly:</Hungarian>
|
||||
<Russian>Вес:</Russian>
|
||||
<Japanese>重量:</Japanese>
|
||||
<Korean>무게:</Korean>
|
||||
<Chinesesimp>重量:</Chinesesimp>
|
||||
<Chinese>重量:</Chinese>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -65,6 +65,7 @@ GVAR(deployPFH) = [{
|
||||
}, 0, [_wireNoGeo, _wire, _anim, _dir, _wireNoGeoPos]] call CBA_fnc_addPerFrameHandler;
|
||||
|
||||
[_unit, "DefaultAction", _unit getVariable [QGVAR(Deploy), -1]] call EFUNC(Common,removeActionEventHandler);
|
||||
[_unit, "blockThrow", QUOTE(ADDON), false] call EFUNC(common,statusEffect_set);
|
||||
call EFUNC(interaction,hideMouseHint);
|
||||
|
||||
[_idPFH] call CBA_fnc_removePerFrameHandler;
|
||||
@ -78,6 +79,8 @@ GVAR(deployPFH) = [{
|
||||
|
||||
[localize "STR_ACE_ROLLWIRE", "", ""] call EFUNC(interaction,showMouseHint);
|
||||
|
||||
[_unit, "blockThrow", QUOTE(ADDON), true] call EFUNC(common,statusEffect_set);
|
||||
|
||||
GVAR(placer) setVariable [QGVAR(Deploy),
|
||||
[GVAR(placer), "DefaultAction",
|
||||
{GVAR(deployPFH) != -1},
|
||||
|
@ -11,8 +11,18 @@ class Cfg3DEN {
|
||||
tooltip = CSTRING(enable_tooltip);
|
||||
expression = QUOTE(if !(_value) then {_this setVariable [ARR_3('%s',_value,true)];};);
|
||||
typeName = "BOOL";
|
||||
condition = "objectVehicle";
|
||||
defaultValue = QUOTE(GETMVAR(QGVAR(enable),true));
|
||||
};
|
||||
class GVAR(enableAmmoCookoff) {
|
||||
property = QGVAR(enableAmmoCookoff);
|
||||
control = "Checkbox";
|
||||
displayName = CSTRING(enableAmmoCookoff_name);
|
||||
tooltip = CSTRING(enableAmmoCookoff_tooltip);
|
||||
expression = QUOTE(if !(_value) then {_this setVariable [ARR_3('%s',_value,true)];};);
|
||||
typeName = "BOOL";
|
||||
condition = "objectHasInventoryCargo";
|
||||
defaultValue = "(true)"; // fix pbo project preprocessing bug
|
||||
defaultValue = QUOTE(if (_this isKindOf 'ReammoBox_F') then { GETMVAR(QGVAR(enableAmmobox),true) } else { GETMVAR(QGVAR(enableAmmoCookoff),true) };);
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -71,7 +71,7 @@ GVAR(cacheTankDuplicates) = call CBA_fnc_createNamespace;
|
||||
|
||||
["ReammoBox_F", "init", {
|
||||
(_this select 0) addEventHandler ["HandleDamage", {
|
||||
if ((_this select 0) getVariable [QGVAR(enable), GVAR(enableAmmobox)]) then {
|
||||
if ((_this select 0) getVariable [QGVAR(enableAmmoCookoff), GVAR(enableAmmobox)]) then {
|
||||
["box", _this] call FUNC(handleDamage);
|
||||
};
|
||||
}];
|
||||
|
@ -44,11 +44,9 @@ if (local _box) then {
|
||||
|
||||
// These functions are smart and do all the cooking off work
|
||||
if (local _box) then {
|
||||
if (_box getVariable [QGVAR(enableAmmoCookoff), GVAR(enableAmmoCookoff)]) then {
|
||||
if (GVAR(ammoCookoffDuration) == 0) exitWith {};
|
||||
([_box] call FUNC(getVehicleAmmo)) params ["_mags", "_total"];
|
||||
[_box, _mags, _total] call FUNC(detonateAmmunition);
|
||||
};
|
||||
if (GVAR(ammoCookoffDuration) == 0) exitWith {};
|
||||
([_box] call FUNC(getVehicleAmmo)) params ["_mags", "_total"];
|
||||
[_box, _mags, _total] call FUNC(detonateAmmunition);
|
||||
|
||||
// This shit is busy being on fire, magazines aren't accessible/usable
|
||||
clearMagazineCargoGlobal _box;
|
||||
|
@ -46,5 +46,35 @@ if (["ACE_Medical"] call EFUNC(common,isModLoaded)) then {
|
||||
};
|
||||
};
|
||||
|
||||
if (["ACE_Arsenal"] call EFUNC(common,isModLoaded)) then {
|
||||
[QEGVAR(arsenal,rightPanelFilled), {
|
||||
|
||||
params ["_display", "_leftPanelIDC", "_rightPanelIDC"];
|
||||
|
||||
if (_leftPanelIDC in [2010, 2012, 2014] && {_rightPanelIDC == 38}) then {
|
||||
LOG("passed");
|
||||
private _rightPanel = _display displayCtrl 15;
|
||||
(lnbSize _rightPanel) params ["_rows", "_columns"];
|
||||
|
||||
private _allDogtags = missionNameSpace getVariable [QGVAR(allDogtags), []];
|
||||
private _allDogtagDatas = missionNameSpace getVariable [QGVAR(allDogtagDatas), []];
|
||||
|
||||
for "_r" from 0 to (_rows - 1) do {
|
||||
private _data = _rightPanel lnbData [_r, 0];
|
||||
|
||||
if (_data isKindOf ["ACE_dogtag", (configFile >> "CfgWeapons")]) then {
|
||||
|
||||
private _dogtagData = [];
|
||||
private _index = _allDogtags find _data;
|
||||
_dogtagData = _allDogtagDatas select _index;
|
||||
private _dogtagString = [localize LSTRING(itemName), ": ", (_dogtagData select 0)] joinString "";
|
||||
|
||||
_rightPanel lnbSetText [[_r, 1], _dogtagString];
|
||||
};
|
||||
};
|
||||
};
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
};
|
||||
|
||||
// disable dogtags for civilians
|
||||
"CIV_F" call FUNC(disableFactionDogtags);
|
||||
|
@ -46,6 +46,8 @@ if (_target isKindOf "CAManBase") then {
|
||||
|
||||
_unit removeWeapon "ACE_FakePrimaryWeapon";
|
||||
|
||||
[_unit, "blockThrow", "ACE_dragging", false] call EFUNC(common,statusEffect_set);
|
||||
|
||||
// prevent object from flipping inside buildings
|
||||
if (_inBuilding) then {
|
||||
_target setPosASL (getPosASL _target vectorAdd [0, 0, 0.05]);
|
||||
|
@ -51,6 +51,7 @@ _unit removeWeapon "ACE_FakePrimaryWeapon";
|
||||
_unit selectWeapon primaryWeapon _unit;
|
||||
|
||||
[_unit, "forceWalk", "ACE_dragging", false] call EFUNC(common,statusEffect_set);
|
||||
[_unit, "blockThrow", "ACE_dragging", false] call EFUNC(common,statusEffect_set);
|
||||
|
||||
// prevent object from flipping inside buildings
|
||||
if (_inBuilding) then {
|
||||
|
@ -58,6 +58,8 @@ if (_target isKindOf "CAManBase") then {
|
||||
|
||||
};
|
||||
|
||||
[_unit, "blockThrow", "ACE_dragging", true] call EFUNC(common,statusEffect_set);
|
||||
|
||||
// prevent multiple players from accessing the same object
|
||||
[_unit, _target, true] call EFUNC(common,claim);
|
||||
|
||||
|
@ -35,6 +35,8 @@ if (primaryWeapon _unit == "") then {
|
||||
// select primary, otherwise the drag animation actions don't work.
|
||||
_unit selectWeapon primaryWeapon _unit;
|
||||
|
||||
[_unit, "blockThrow", "ACE_dragging", true] call EFUNC(common,statusEffect_set);
|
||||
|
||||
// prevent multiple players from accessing the same object
|
||||
[_unit, _target, true] call EFUNC(common,claim);
|
||||
|
||||
|
@ -31,6 +31,7 @@ private _p3dModel = getText (configFile >> "CfgVehicles" >> _setupObjectClass >>
|
||||
if (_p3dModel == "") exitWith {ERROR("No Model");}; //"" - will crash game!
|
||||
|
||||
[_unit, "forceWalk", "ACE_Explosives", true] call EFUNC(common,statusEffect_set);
|
||||
[_unit, "blockThrow", "ACE_Explosives", true] call EFUNC(common,statusEffect_set);
|
||||
|
||||
//Show mouse buttons:
|
||||
[localize LSTRING(PlaceAction), localize LSTRING(CancelAction), localize LSTRING(ScrollAction)] call EFUNC(interaction,showMouseHint);
|
||||
@ -149,6 +150,7 @@ GVAR(TweakedAngle) = 0;
|
||||
GVAR(pfeh_running) = false;
|
||||
|
||||
[_unit, "forceWalk", "ACE_Explosives", false] call EFUNC(common,statusEffect_set);
|
||||
[_unit, "blockThrow", "ACE_Explosives", false] call EFUNC(common,statusEffect_set);
|
||||
[] call EFUNC(interaction,hideMouseHint);
|
||||
[_unit, "DefaultAction", (_unit getVariable [QGVAR(placeActionEH), -1])] call EFUNC(common,removeActionEventHandler);
|
||||
[_unit, "zoomtemp", (_unit getVariable [QGVAR(cancelActionEH), -1])] call EFUNC(common,removeActionEventHandler);
|
||||
|
@ -169,7 +169,10 @@ if (isServer) then {
|
||||
_x setDamage 1;
|
||||
};
|
||||
if (_x isKindOf "ReammoBox_F") then {
|
||||
if ("ace_cookoff" call EFUNC(common,isModLoaded) && {EGVAR(cookoff,enable)}) then {
|
||||
if (
|
||||
"ace_cookoff" call EFUNC(common,isModLoaded) &&
|
||||
{GETVAR(_x,EGVAR(cookoff,enableAmmoCookoff),EGVAR(cookoff,enableAmmobox))}
|
||||
) then {
|
||||
_x call EFUNC(cookoff,cookOffBox);
|
||||
} else {
|
||||
_x setDamage 1;
|
||||
|
@ -8,12 +8,14 @@ class CfgWeapons {
|
||||
// ITEMS
|
||||
class FirstAidKit: ItemCore {
|
||||
type = 0;
|
||||
ace_arsenal_hide = 1;
|
||||
class ItemInfo: InventoryFirstAidKitItem_Base_F {
|
||||
mass = 4;
|
||||
};
|
||||
};
|
||||
class Medikit: ItemCore {
|
||||
type = 0;
|
||||
ace_arsenal_hide = 1;
|
||||
class ItemInfo: MedikitItem {
|
||||
mass = 60;
|
||||
};
|
||||
|
@ -305,3 +305,9 @@ if (hasInterface) then {
|
||||
[player] call FUNC(init);
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
};
|
||||
|
||||
if (["ACE_Arsenal"] call EFUNC(common,isModLoaded)) then {
|
||||
[QEGVAR(arsenal,displayOpened), {
|
||||
EGVAR(arsenal,virtualItems) set [17, (EGVAR(arsenal,virtualItems) select 17) - ["FirstAidKit", "Medikit"]];
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
};
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
PREP(addLoadToUnitContainer);
|
||||
PREP(getWeight);
|
||||
PREP(canClimb);
|
||||
PREP(climb);
|
||||
PREP(handleClimb);
|
||||
|
@ -1,39 +0,0 @@
|
||||
/*
|
||||
* Author: commy2
|
||||
* Returns the weight (from the loadAbs command) in lbs/kg (based on user option)
|
||||
*
|
||||
* Arguments:
|
||||
* 0: The Unit (usually the player) <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* The return value <NUMBER>
|
||||
*
|
||||
* Example:
|
||||
* [player] call ace_movement_fnc_getWeight
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_unit"];
|
||||
|
||||
private _virtualLoad = 0;
|
||||
|
||||
{
|
||||
_virtualLoad = _virtualLoad + (_x getVariable [QGVAR(vLoad), 0]);
|
||||
} forEach [
|
||||
_unit,
|
||||
uniformContainer _unit,
|
||||
vestContainer _unit,
|
||||
backpackContainer _unit
|
||||
];
|
||||
|
||||
private _weight = (loadAbs _unit + _virtualLoad) * 0.1;
|
||||
|
||||
if (GVAR(useImperial)) then {
|
||||
_weight = format ["%1lb", (round (_weight * 100)) / 100];
|
||||
} else {
|
||||
_weight = format ["%1kg", (round (_weight * FACTOR_POUND_TO_KILOGRAMM * 100)) / 100];
|
||||
};
|
||||
|
||||
_weight
|
@ -25,5 +25,5 @@ disableSerialization;
|
||||
[_this select 1] call CBA_fnc_removePerFrameHandler;
|
||||
};
|
||||
|
||||
(_dialog displayCtrl 111) ctrlSetText format ["%1 - %2 %3", [ACE_player, false, true] call EFUNC(common,getName), localize LSTRING(Weight), [ACE_player] call FUNC(getWeight)];
|
||||
(_dialog displayCtrl 111) ctrlSetText format ["%1 - %2 %3", [ACE_player, false, true] call EFUNC(common,getName), localize ELSTRING(common,Weight), [ACE_player] call EFUNC(common,getWeight)];
|
||||
}, 0, _this select 0] call CBA_fnc_addPerFrameHandler;
|
||||
|
@ -17,22 +17,6 @@
|
||||
<Chinesesimp>使用磅来显示重量</Chinesesimp>
|
||||
<Chinese>使用磅來顯示重量</Chinese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Movement_Weight">
|
||||
<English>Weight:</English>
|
||||
<German>Gewicht:</German>
|
||||
<Spanish>Peso:</Spanish>
|
||||
<French>Poids :</French>
|
||||
<Polish>Waga:</Polish>
|
||||
<Czech>Váha:</Czech>
|
||||
<Italian>Peso:</Italian>
|
||||
<Portuguese>Peso:</Portuguese>
|
||||
<Hungarian>Súly:</Hungarian>
|
||||
<Russian>Вес:</Russian>
|
||||
<Japanese>重量:</Japanese>
|
||||
<Korean>무게:</Korean>
|
||||
<Chinesesimp>重量:</Chinesesimp>
|
||||
<Chinese>重量:</Chinese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Movement_Climb">
|
||||
<English>Climb</English>
|
||||
<French>Grimper</French>
|
||||
|
@ -1,8 +1,23 @@
|
||||
class ACE_Settings {
|
||||
class GVAR(disableNVGsWithSights) {
|
||||
category = CSTRING(Category);
|
||||
displayName = CSTRING(DisableNVGsWithSights_DisplayName);
|
||||
description = CSTRING(DisableNVGsWithSights_description);
|
||||
typeName = "BOOL";
|
||||
value = 0;
|
||||
};
|
||||
class GVAR(fogScaling) {
|
||||
category = CSTRING(Category);
|
||||
displayName = CSTRING(fogScaling_DisplayName);
|
||||
description = CSTRING(fogScaling_Description);
|
||||
typeName = "SCALAR";
|
||||
value = 1;
|
||||
};
|
||||
class GVAR(effectScaling) {
|
||||
category = CSTRING(Category);
|
||||
displayName = CSTRING(effectScaling_DisplayName);
|
||||
description = CSTRING(effectScaling_Description);
|
||||
typeName = "SCALAR";
|
||||
value = 1;
|
||||
};
|
||||
};
|
||||
|
@ -1,30 +1,15 @@
|
||||
|
||||
class Extended_PreStart_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preStart));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preInit) );
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preInit));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_PostInit_EventHandlers {
|
||||
class ADDON {
|
||||
clientInit = QUOTE(call COMPILE_FILE(XEH_postInitClient));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_DisplayLoad_EventHandlers {
|
||||
class RscDisplayCurator {
|
||||
ADDON = QUOTE(_this call FUNC(updatePPEffects));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_DisplayUnload_EventHandlers {
|
||||
class RscDisplayCurator {
|
||||
ADDON = QUOTE(displayNull call FUNC(updatePPEffects)); // emulate zeus display being deleted
|
||||
init = QUOTE(call COMPILE_FILE(XEH_postInit));
|
||||
};
|
||||
};
|
||||
|
@ -1,9 +1,4 @@
|
||||
class CfgVehicles {
|
||||
class All {
|
||||
ACE_NightVision_grain = 0.75;
|
||||
ACE_NightVision_blur = 0.055;
|
||||
};
|
||||
|
||||
class Box_NATO_Support_F;
|
||||
class ACE_Box_Misc: Box_NATO_Support_F {
|
||||
class TransportItems {
|
||||
|
@ -2,55 +2,85 @@ class CfgWeapons {
|
||||
class Binocular;
|
||||
class NVGoggles: Binocular {
|
||||
displayName = CSTRING(NVG_Gen3_brown);
|
||||
ACE_NightVision_grain = 0.75;
|
||||
ACE_NightVision_blur = 0.055;
|
||||
ACE_NightVision_radBlur = 0.001;
|
||||
modelOptics = "";
|
||||
GVAR(border) = QPATHTOF(data\nvg_mask_binos_4096.paa);
|
||||
GVAR(bluRadius) = 0.15;
|
||||
};
|
||||
class O_NVGoggles_hex_F: NVGoggles { // APEX NVG with multiple lenses (spider eyes)
|
||||
modelOptics = "";
|
||||
GVAR(border) = QPATHTOF(data\nvg_mask_quad_4096.paa); // Use quad tube mask
|
||||
GVAR(bluRadius) = 0.26;
|
||||
};
|
||||
class NVGogglesB_grn_F: NVGoggles { // APEX NVG/Thermal
|
||||
modelOptics = "\A3\weapons_f\reticle\optics_night"; // use vanilla modelOptics so it will show in IR mode
|
||||
};
|
||||
class NVGoggles_OPFOR: NVGoggles {
|
||||
modelOptics = "";
|
||||
displayName = CSTRING(NVG_Gen3_black);
|
||||
};
|
||||
class NVGoggles_INDEP: NVGoggles {
|
||||
modelOptics = "";
|
||||
displayName = CSTRING(NVG_Gen3_green);
|
||||
};
|
||||
|
||||
class ACE_NVG_Gen1: NVGoggles_OPFOR {
|
||||
author = ECSTRING(common,ACETeam);
|
||||
modelOptics = "\A3\weapons_f\reticle\optics_night";
|
||||
displayName = CSTRING(NVG_Gen1);
|
||||
ACE_NightVision_grain = 2.25;
|
||||
ACE_NightVision_blur = 0.22;
|
||||
ACE_NightVision_radBlur = 0.004;
|
||||
GVAR(generation) = 1;
|
||||
};
|
||||
class ACE_NVG_Gen2: NVGoggles_INDEP {
|
||||
author = ECSTRING(common,ACETeam);
|
||||
modelOptics = "\A3\weapons_f\reticle\optics_night";
|
||||
displayName = CSTRING(NVG_Gen2);
|
||||
ACE_NightVision_grain = 1.5;
|
||||
ACE_NightVision_blur = 0.11;
|
||||
ACE_NightVision_radBlur = 0.002;
|
||||
GVAR(generation) = 2;
|
||||
};
|
||||
/*class ACE_NVG_Gen3: NVGoggles {
|
||||
author = ECSTRING(common,ACETeam);
|
||||
modelOptics = "\A3\weapons_f\reticle\optics_night";
|
||||
displayName = CSTRING(NVG_Gen3);
|
||||
ACE_NightVision_grain = 0.75;
|
||||
ACE_NightVision_blur = 0.055;
|
||||
ACE_NightVision_radBlur = 0.001;
|
||||
};*/
|
||||
class ACE_NVG_Gen4: NVGoggles {
|
||||
author = ECSTRING(common,ACETeam);
|
||||
modelOptics = "\A3\weapons_f\reticle\optics_night";
|
||||
displayName = CSTRING(NVG_Gen4);
|
||||
ACE_NightVision_grain = 0.0;
|
||||
ACE_NightVision_blur = 0.0;
|
||||
ACE_NightVision_radBlur = 0.0;
|
||||
GVAR(generation) = 4;
|
||||
};
|
||||
class ACE_NVG_Wide: NVGoggles {
|
||||
author = ECSTRING(common,ACETeam);
|
||||
modelOptics = QPATHTOF(models\ACE_nvg_wide_optics);
|
||||
displayName = CSTRING(NVG_FullScreen);
|
||||
ACE_NightVision_grain = 0.75;
|
||||
ACE_NightVision_blur = 0.055;
|
||||
ACE_NightVision_radBlur = 0.001;
|
||||
};
|
||||
|
||||
|
||||
// Examples of different goggle effect types (scope=1)
|
||||
// These all function differently, but we have no models to go with them
|
||||
class ACE_NVG_Biocular: NVGoggles {
|
||||
scope = 1;
|
||||
modelOptics = "";
|
||||
author = ECSTRING(common,ACETeam);
|
||||
descriptionShort = "Biocular nightvision goggles";
|
||||
displayName = "NV Goggles (Bio)";
|
||||
GVAR(border) = QPATHTOF(data\nvg_mask_4096.paa);
|
||||
GVAR(bluRadius) = 0.13;
|
||||
GVAR(eyeCups) = 1;
|
||||
};
|
||||
class ACE_NVG_Monocular: NVGoggles {
|
||||
scope = 1;
|
||||
modelOptics = "";
|
||||
author = ECSTRING(common,ACETeam);
|
||||
descriptionShort = "Monocular nightvision goggles";
|
||||
displayName = "NV Goggles (Mono)";
|
||||
GVAR(border) = QPATHTOF(data\nvg_mask_4096.paa);
|
||||
GVAR(bluRadius) = 0.13;
|
||||
};
|
||||
class ACE_NVG_Binocular: NVGoggles {
|
||||
scope = 1;
|
||||
modelOptics = "";
|
||||
author = ECSTRING(common,ACETeam);
|
||||
descriptionShort = "Binocular nightvision goggles";
|
||||
displayName = "NV Goggles (Bino)";
|
||||
GVAR(border) = QPATHTOF(data\nvg_mask_binos_4096.paa);
|
||||
GVAR(bluRadius) = 0.15;
|
||||
};
|
||||
class ACE_NVG_Quadocular: NVGoggles {
|
||||
scope = 1;
|
||||
modelOptics = "";
|
||||
author = ECSTRING(common,ACETeam);
|
||||
descriptionShort = "Quadocular nightvision goggles";
|
||||
displayName = "NV Goggles (Quad)";
|
||||
GVAR(border) = QPATHTOF(data\nvg_mask_quad_4096.paa);
|
||||
GVAR(bluRadius) = 0.26;
|
||||
};
|
||||
};
|
||||
|
41
addons/nightvision/RscTitles.hpp
Normal file
41
addons/nightvision/RscTitles.hpp
Normal file
@ -0,0 +1,41 @@
|
||||
class RscPicture;
|
||||
class RscText;
|
||||
|
||||
class RscTitles {
|
||||
class GVAR(title) {
|
||||
idd = 10777;
|
||||
movingEnable = 1;
|
||||
enableSimulation = 1;
|
||||
enableDisplay = 1;
|
||||
|
||||
onLoad = QUOTE(with uiNamespace do {GVAR(titleDisplay) = _this select 0};);
|
||||
onunLoad = "";
|
||||
|
||||
duration = 999999;
|
||||
fadein = 0;
|
||||
fadeout = 0;
|
||||
|
||||
class controls {
|
||||
class Hexes: RscPicture {
|
||||
idc = 1000;
|
||||
};
|
||||
class Mask: RscPicture {
|
||||
idc = 1001;
|
||||
};
|
||||
|
||||
// Add blinders for side monitors for tripple monitors (mask won't cover them)
|
||||
class trippleHeadLeft: RscPicture {
|
||||
idc = 1002;
|
||||
text = "#(argb,8,8,3)color(0,0,0,1)";
|
||||
x = "safeZoneXAbs";
|
||||
Y = "safezoneY";
|
||||
W = "(safezoneX - safeZoneXAbs) * ((getResolution select 4)/(16/3))";
|
||||
H = "safeZoneH";
|
||||
};
|
||||
class trippleHeadRight: trippleHeadLeft {
|
||||
idc = 1003;
|
||||
x = "safeZoneXAbs + safeZoneWAbs - (safezoneX - safeZoneXABS) * ((getResolution select 4)/(16/3))";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
@ -1,7 +1,12 @@
|
||||
|
||||
PREP(blending);
|
||||
PREP(changeNVGBrightness);
|
||||
PREP(initModule);
|
||||
PREP(nonDedicatedFix);
|
||||
PREP(onCameraViewChanged);
|
||||
PREP(onFiredPlayer);
|
||||
PREP(onLoadoutChanged);
|
||||
PREP(onVisionModeChanged);
|
||||
PREP(updatePPEffects);
|
||||
PREP(pfeh);
|
||||
PREP(refreshGoggleType);
|
||||
PREP(scaleCtrl);
|
||||
PREP(setupDisplayEffects);
|
||||
|
94
addons/nightvision/XEH_postInit.sqf
Normal file
94
addons/nightvision/XEH_postInit.sqf
Normal file
@ -0,0 +1,94 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
if (!hasInterface) exitWith {};
|
||||
|
||||
GVAR(PFID) = -1;
|
||||
GVAR(running) = false;
|
||||
GVAR(nextEffectsUpdate) = -1;
|
||||
|
||||
GVAR(playerHMD) = "#";
|
||||
|
||||
GVAR(priorFog) = nil;
|
||||
GVAR(nvgFog) = [0,0,0];
|
||||
|
||||
GVAR(nvgBlurRadius) = -1;
|
||||
GVAR(nvgGeneration) = -1;
|
||||
GVAR(defaultPositionBorder) = [];
|
||||
GVAR(defaultPositionHex) = [];
|
||||
|
||||
GVAR(ppeffectGrain) = -1;
|
||||
GVAR(ppeffectRadialBlur) = -1;
|
||||
GVAR(ppeffectColorCorrect) = -1;
|
||||
GVAR(ppeffectBlur) = -1;
|
||||
GVAR(ppEffectCCMuzzleFlash) = -1;
|
||||
|
||||
|
||||
["ace_settingsInitialized", {
|
||||
TRACE_3("settingsInitialized",GVAR(disableNVGsWithSights),GVAR(fogScaling),GVAR(effectScaling));
|
||||
|
||||
// Disable ALL effects if ace_nightvision_effectScaling is zero
|
||||
if (GVAR(effectScaling) == 0) exitWith {};
|
||||
|
||||
["loadout", LINKFUNC(onLoadoutChanged), true] call CBA_fnc_addPlayerEventHandler;
|
||||
["visionMode", LINKFUNC(onVisionModeChanged), false] call CBA_fnc_addPlayerEventHandler;
|
||||
["cameraView", LINKFUNC(onCameraViewChanged), true] call CBA_fnc_addPlayerEventHandler;
|
||||
["vehicle", LINKFUNC(refreshGoggleType), false] call CBA_fnc_addPlayerEventHandler;
|
||||
["turret", LINKFUNC(refreshGoggleType), true] call CBA_fnc_addPlayerEventHandler;
|
||||
|
||||
["ace_firedPlayer", LINKFUNC(onFiredPlayer)] call CBA_fnc_addEventHandler;
|
||||
["ace_firedPlayerVehicle", LINKFUNC(onFiredPlayer)] call CBA_fnc_addEventHandler;
|
||||
|
||||
|
||||
addMissionEventHandler ["Loaded", { // Restart UI vars on mission load
|
||||
if (GVAR(running)) then {
|
||||
TRACE_1("restarting effects",CBA_missionTime);
|
||||
[false] call FUNC(setupDisplayEffects);
|
||||
[true] call FUNC(setupDisplayEffects);
|
||||
};
|
||||
}];
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
|
||||
|
||||
// Handle an edge case for non-dedicated servers were the server running the fog effect would sync fog to other clients
|
||||
[QGVAR(nonDedicatedFix), LINKFUNC(nonDedicatedFix)] call CBA_fnc_addEventHandler;
|
||||
if (!isNil QGVAR(serverPriorFog)) then {[] call FUNC(nonDedicatedFix);}; // If var is defined, run it now (we must be a jip)
|
||||
|
||||
|
||||
// Add keybinds
|
||||
["ACE3 Equipment", QGVAR(IncreaseNVGBrightness), localize LSTRING(IncreaseNVGBrightness), {
|
||||
// Conditions: canInteract
|
||||
if !([ACE_player, objNull, ["isNotEscorting", "isNotInside", "isNotSitting", "isNotRefueling"]] call EFUNC(common,canInteractWith)) exitWith {false};
|
||||
// Conditions: specific
|
||||
if ((currentVisionMode ACE_player != 1)) exitWith {false};
|
||||
|
||||
// Statement
|
||||
[ACE_player, 1] call FUNC(changeNVGBrightness);
|
||||
true
|
||||
}, {false}, [201, [false, false, true]], false] call CBA_fnc_addKeybind; //PageUp + ALT
|
||||
|
||||
["ACE3 Equipment", QGVAR(DecreaseNVGBrightness), localize LSTRING(DecreaseNVGBrightness), {
|
||||
// Conditions: canInteract
|
||||
if !([ACE_player, objNull, ["isNotEscorting", "isNotInside", "isNotSitting", "isNotRefueling"]] call EFUNC(common,canInteractWith)) exitWith {false};
|
||||
// Conditions: specific
|
||||
if ((currentVisionMode ACE_player != 1)) exitWith {false};
|
||||
|
||||
// Statement
|
||||
[ACE_player, -1] call FUNC(changeNVGBrightness);
|
||||
true
|
||||
}, {false}, [209, [false, false, true]], false] call CBA_fnc_addKeybind; //PageDown + ALT
|
||||
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
WARNING("Debug mouse wheel action enabled, this should NOT be in a final release");
|
||||
["MouseZChanged", {
|
||||
GVAR(nextEffectsUpdate) = 0;
|
||||
if (cba_events_shift) then {
|
||||
GVAR(effectScaling) = ((GVAR(effectScaling) + ((_this select 1) / 20)) max 0) min 1;
|
||||
systemChat format ["%1: %2", QGVAR(effectScaling), GVAR(effectScaling)];
|
||||
};
|
||||
if (cba_events_control) then {
|
||||
GVAR(fogScaling) = ((GVAR(fogScaling) + ((_this select 1) / 20)) max 0) min 1;
|
||||
systemChat format ["%1: %2", QGVAR(fogScaling), GVAR(fogScaling)];
|
||||
};
|
||||
}] call CBA_fnc_addDisplayHandler;
|
||||
#endif
|
||||
|
@ -1,65 +0,0 @@
|
||||
// by commy2
|
||||
#include "script_component.hpp"
|
||||
|
||||
if (!hasInterface) exitWith {};
|
||||
|
||||
GVAR(ppEffectBlur) = ppEffectCreate ["dynamicBlur", 1234];
|
||||
GVAR(ppEffectBlur) ppEffectForceInNVG true;
|
||||
GVAR(ppEffectBlur) ppEffectAdjust [0];
|
||||
GVAR(ppEffectBlur) ppEffectCommit 0;
|
||||
|
||||
GVAR(ppEffectRadialBlur) = ppEffectCreate ["radialBlur", 1238];
|
||||
GVAR(ppEffectRadialBlur) ppEffectForceInNVG true;
|
||||
GVAR(ppEffectRadialBlur) ppEffectAdjust [0, 0, 0, 0];
|
||||
GVAR(ppEffectRadialBlur) ppEffectCommit 0;
|
||||
|
||||
GVAR(ppEffectFilmGrain) = ppEffectCreate ["FilmGrain", 1235];
|
||||
GVAR(ppEffectFilmGrain) ppEffectAdjust [0.25, 2.5, 2.5, 2.5*0.3, 2.5*0.3, false];
|
||||
GVAR(ppEffectFilmGrain) ppEffectCommit 0;
|
||||
|
||||
GVAR(ppEffectNVGBrightness) = ppEffectCreate ["ColorCorrections", 1236];
|
||||
GVAR(ppEffectNVGBrightness) ppEffectForceInNVG true;
|
||||
GVAR(ppEffectNVGBrightness) ppEffectAdjust [1, 1, 0, [0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 0, 1]];
|
||||
GVAR(ppEffectNVGBrightness) ppEffectCommit 0;
|
||||
|
||||
GVAR(ppEffectMuzzleFlash) = ppEffectCreate ["ColorCorrections", 1237];
|
||||
GVAR(ppEffectMuzzleFlash) ppEffectEnable true;
|
||||
GVAR(ppEffectMuzzleFlash) ppEffectForceInNVG true;
|
||||
GVAR(ppEffectMuzzleFlash) ppEffectAdjust [1, 1, 0, [0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 0, 1]];
|
||||
GVAR(ppEffectMuzzleFlash) ppEffectCommit 0;
|
||||
|
||||
// Setup the event handlers
|
||||
["loadout", FUNC(updatePPEffects)] call CBA_fnc_addPlayerEventHandler;
|
||||
["visionMode", FUNC(updatePPEffects)] call CBA_fnc_addPlayerEventHandler;
|
||||
["visionMode", FUNC(onVisionModeChanged)] call CBA_fnc_addPlayerEventHandler;
|
||||
["cameraView", FUNC(updatePPEffects)] call CBA_fnc_addPlayerEventHandler;
|
||||
["cameraView", FUNC(onCameraViewChanged)] call CBA_fnc_addPlayerEventHandler;
|
||||
["vehicle", FUNC(updatePPEffects)] call CBA_fnc_addPlayerEventHandler;
|
||||
["turret", FUNC(updatePPEffects)] call CBA_fnc_addPlayerEventHandler;
|
||||
|
||||
// Add keybinds
|
||||
["ACE3 Equipment", QGVAR(IncreaseNVGBrightness), localize LSTRING(IncreaseNVGBrightness), {
|
||||
// Conditions: canInteract
|
||||
if !([ACE_player, objNull, ["isNotEscorting", "isNotInside", "isNotSitting", "isNotRefueling"]] call EFUNC(common,canInteractWith)) exitWith {false};
|
||||
// Conditions: specific
|
||||
if ((currentVisionMode ACE_player != 1)) exitWith {false};
|
||||
|
||||
// Statement
|
||||
[ACE_player, 1] call FUNC(changeNVGBrightness);
|
||||
true
|
||||
}, {false}, [201, [false, false, true]], false] call CBA_fnc_addKeybind; //PageUp + ALT
|
||||
|
||||
["ACE3 Equipment", QGVAR(DecreaseNVGBrightness), localize LSTRING(DecreaseNVGBrightness), {
|
||||
// Conditions: canInteract
|
||||
if !([ACE_player, objNull, ["isNotEscorting", "isNotInside", "isNotSitting", "isNotRefueling"]] call EFUNC(common,canInteractWith)) exitWith {false};
|
||||
// Conditions: specific
|
||||
if ((currentVisionMode ACE_player != 1)) exitWith {false};
|
||||
|
||||
// Statement
|
||||
[ACE_player, -1] call FUNC(changeNVGBrightness);
|
||||
true
|
||||
}, {false}, [209, [false, false, true]], false] call CBA_fnc_addKeybind; //PageDown + ALT
|
||||
|
||||
// Register fire event handler
|
||||
["ace_firedPlayer", DFUNC(blending)] call CBA_fnc_addEventHandler;
|
||||
["ace_firedPlayerVehicle", DFUNC(blending)] call CBA_fnc_addEventHandler;
|
@ -18,3 +18,4 @@ class CfgPatches {
|
||||
#include "CfgVehicles.hpp"
|
||||
#include "CfgWeapons.hpp"
|
||||
#include "ACE_Settings.hpp"
|
||||
#include "RscTitles.hpp"
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user