diff --git a/addons/fieldmanual/CfgHints.hpp b/addons/fieldmanual/CfgHints.hpp
index 6f5b0c8efef..f915ba71e83 100644
--- a/addons/fieldmanual/CfgHints.hpp
+++ b/addons/fieldmanual/CfgHints.hpp
@@ -106,6 +106,14 @@ class CfgHints {
description = CSTRING(Items_EarPlugs_Description);
tip = "Hearing Wiki";
};
+ class ACE_EHP: ACE_FieldManual_Base {
+ logicalOrder = 10;
+ arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_EHP' call FUNC(getItemName))};
+ displayName = "%14";
+ displayNameShort = CSTRING(Items_EHP_ShortName);
+ description = CSTRING(Items_EHP_Description);
+ tip = "Hearing Wiki";
+ };
class ACE_EntrenchingTool: ACE_FieldManual_Base {
logicalOrder = 11;
arguments[] = {BASE_ARGUMENTS, QUOTE('ACE_EntrenchingTool' call FUNC(getItemName))};
diff --git a/addons/hearing/CfgVehicles.hpp b/addons/hearing/CfgVehicles.hpp
index 7a9bff695a2..182c0ccb46f 100644
--- a/addons/hearing/CfgVehicles.hpp
+++ b/addons/hearing/CfgVehicles.hpp
@@ -48,60 +48,70 @@ class CfgVehicles {
class Box_NATO_Support_F: NATO_Box_Base {
class TransportItems {
MACRO_ADDITEM(ACE_EarPlugs,12);
+ MACRO_ADDITEM(ACE_EHP,12);
};
};
class B_supplyCrate_F: ReammoBox_F {
class TransportItems {
MACRO_ADDITEM(ACE_EarPlugs,12);
+ MACRO_ADDITEM(ACE_EHP,12);
};
};
class Box_East_Support_F: EAST_Box_Base {
class TransportItems {
MACRO_ADDITEM(ACE_EarPlugs,12);
+ MACRO_ADDITEM(ACE_EHP,12);
};
};
class O_supplyCrate_F: B_supplyCrate_F {
class TransportItems {
MACRO_ADDITEM(ACE_EarPlugs,12);
+ MACRO_ADDITEM(ACE_EHP,12);
};
};
class Box_IND_Support_F: IND_Box_Base {
class TransportItems {
MACRO_ADDITEM(ACE_EarPlugs,12);
+ MACRO_ADDITEM(ACE_EHP,12);
};
};
class Box_FIA_Support_F: FIA_Box_Base_F {
class TransportItems {
MACRO_ADDITEM(ACE_EarPlugs,12);
+ MACRO_ADDITEM(ACE_EHP,12);
};
};
class I_supplyCrate_F: B_supplyCrate_F {
class TransportItems {
MACRO_ADDITEM(ACE_EarPlugs,12);
+ MACRO_ADDITEM(ACE_EHP,12);
};
};
class IG_supplyCrate_F: ReammoBox_F {
class TransportItems {
MACRO_ADDITEM(ACE_EarPlugs,12);
+ MACRO_ADDITEM(ACE_EHP,12);
};
};
class C_supplyCrate_F: ReammoBox_F {
class TransportItems {
MACRO_ADDITEM(ACE_EarPlugs,12);
+ MACRO_ADDITEM(ACE_EHP,12);
};
};
class ACE_Box_Misc: Box_NATO_Support_F {
class TransportItems {
MACRO_ADDITEM(ACE_EarPlugs,12);
+ MACRO_ADDITEM(ACE_EHP,12);
};
};
diff --git a/addons/hearing/XEH_preInit.sqf b/addons/hearing/XEH_preInit.sqf
index eb9636a12c2..36d2159e8c9 100644
--- a/addons/hearing/XEH_preInit.sqf
+++ b/addons/hearing/XEH_preInit.sqf
@@ -19,6 +19,15 @@ PREP_RECOMPILE_END;
[QGVAR(updateVolume), true, _unit] call CBA_fnc_targetEvent;
};
};
+
+ if (_extendedInfo getOrDefault ["ace_ehp", false]) then {
+ _unit setVariable ["ACE_hasEHP", true, true];
+
+ // Only force update volume if unit is a player (including remote controlled)
+ if (_unit call EFUNC(common,isPlayer)) then {
+ [QGVAR(updateVolume), true, _unit] call CBA_fnc_targetEvent;
+ };
+ };
}] call CBA_fnc_addEventHandler;
["CBA_loadoutGet", {
@@ -27,6 +36,10 @@ PREP_RECOMPILE_END;
if (_unit getVariable ["ACE_hasEarPlugsIn", false]) then {
_extendedInfo set ["ace_earplugs", true]
};
+
+ if (_unit getVariable ["ACE_hasEHP", false]) then {
+ _extendedInfo set ["ace_ehp", true]
+ };
}] call CBA_fnc_addEventHandler;
ADDON = true;
diff --git a/addons/hearing/config.cpp b/addons/hearing/config.cpp
index ba6674b9db0..fcdef40324b 100644
--- a/addons/hearing/config.cpp
+++ b/addons/hearing/config.cpp
@@ -4,7 +4,7 @@ class CfgPatches {
class ADDON {
name = COMPONENT_NAME;
units[] = {};
- weapons[] = {"ACE_EarPlugs"};
+ weapons[] = {"ACE_EarPlugs", "ACE_EHP"};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_interaction"};
author = ECSTRING(common,ACETeam);
diff --git a/addons/hearing/initKeybinds.inc.sqf b/addons/hearing/initKeybinds.inc.sqf
index 51bd55f421a..b8c3d5f5dc5 100644
--- a/addons/hearing/initKeybinds.inc.sqf
+++ b/addons/hearing/initKeybinds.inc.sqf
@@ -16,3 +16,22 @@
false // return
}] call CBA_fnc_addKeybind; // UNBOUND
+
+["ACE3 Equipment", QGVAR(putOrRemoveEHP), LLSTRING(PutOrRemoveEHP), {
+ // Conditions: specific
+ if !([ACE_player, objNull, ["isNotSwimming", "isNotInside", "isNotSitting"]] call EFUNC(common,canInteractWith)) exitWith {false};
+
+ if ([ACE_player] call FUNC(canPutOnEHP)) exitWith {
+ [ACE_player, true] call FUNC(putOnEHP);
+
+ true // return
+ };
+
+ if (GVAR(enableCombatDeafness) && {ACE_player getVariable ["ACE_hasEHP", false]}) exitWith {
+ [ACE_player, true] call FUNC(removeEHP);
+
+ true // return
+ };
+
+ false // return
+}] call CBA_fnc_addKeybind; // UNBOUND
diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml
index a667e783fe2..8fa692be8ab 100644
--- a/addons/hearing/stringtable.xml
+++ b/addons/hearing/stringtable.xml
@@ -367,6 +367,10 @@
Electronic Hearing Protection taken off
Elektronischer Gehörschutz abgesetzt
+
+ Put on/take off Electronic Hearing Protection
+ Elektronischer Gehörschutz aufsetzen/absetzen
+
Unconscious Volume
Lautstärke Bewusstlosigkeit
diff --git a/docs/wiki/class-names.md b/docs/wiki/class-names.md
index 0dcf014da16..7d3b425a58b 100644
--- a/docs/wiki/class-names.md
+++ b/docs/wiki/class-names.md
@@ -161,6 +161,7 @@ ACE_gunbag_Tan | Gunbag | Backpack |
Class Name | In-Game Name | Type |
---------- | --------- | ---------
ACE_EarPlugs | Earplugs | ACE_ItemCore |
+ACE_EHP | Electronic Hearing Protection | ACE_ItemCore |
### HuntIR
`Added in 3.1.1`