Added cse_sys_combatdeaf source

This commit is contained in:
Thomas Kooi 2015-01-12 23:24:51 +01:00
parent 2c276ecf50
commit abf2e534c8
32 changed files with 721 additions and 0 deletions

View File

@ -0,0 +1,18 @@
class CfgFunctions {
class CSE {
class combatdeaf {
file = "cse\cse_sys_combatdeaf\functions";
class handleFiredNear_DEAF { recompile = 1; };
class handleFired_DEAF { recompile = 1; };
class getAttenuation_DEAF { recompile = 1; };
class applyEletronicEarProtection_DEAF { recompile = 1; };
class explosion_DEAF { recompile = 1; };
class handlePressureWave_DEAF { recompile = 1; };
class getIn_DEAF { recompile = 1; };
class getOut_DEAF { recompile = 1; };
class register_ear_protection_actions_DEAF { recompile = 1; };
class getMuzzleAccessory_DEAF { recompile = 1; };
class hasMuzzleAccessory_DEAF { recompile = 1; };
};
};
};

View File

@ -0,0 +1,9 @@
class CfgSounds
{
class cse_combatdeaf_ear_ringing
{
name="cse_combatdeaf_ear_ringing";
sound[]={"\cse\cse_sys_combatdeaf\sound\ear_ringing.ogg",1,1};
titles[]={};
};
};

View File

@ -0,0 +1,85 @@
class CfgVehicles {
class Logic;
class Module_F: Logic {
class ArgumentsBaseUnits {
};
};
class cse_sys_combatdeaf: Module_F {
scope = 2;
displayName = "Combat Deafness [CSE]";
icon = "\cse\cse_main\data\cse_earmuffs_module.paa";
category = "cseModules";
function = "cse_fnc_initalizeModule_F";
functionPriority = 1;
isGlobal = 1;
isTriggerActivated = 0;
class Arguments {
class DEAFNESS_EFFECT_INTENSITY {
displayName = "Deafness effect intensity";
description = "Allows to tune down the deafness effect (2.0 - dual intensity, 1.0 - default intensity, 0.5 - half intensity)";
typeName = "NUMBER";
defaultValue = 1;
};
class DISABLE_EAR_RINGING {
displayName = "Disable ear ringing";
description = "Disables the ear ringing effect";
typeName = "BOOL";
defaultValue = 0;
};
};
class ModuleDescription {
description = "Combat deafness";
};
};
class Item_Base_F;
class cse_earplugsItem: Item_Base_F
{
scope = 2;
scopeCurator = 2;
displayName = "Earplugs";
author = "Combat Space Enhancement";
vehicleClass = "Items";
class TransportItems
{
class cse_earplugs
{
name = "cse_earplugs";
count = 1;
};
};
};
class cse_earplugs_electronicItem: cse_earplugsItem
{
class TransportItems
{
class cse_earplugs_electronic
{
name = "cse_earplugs_electronic";
count = 1;
};
};
};
class NATO_Box_Base;
class cse_crateCombatDeafness: NATO_Box_Base
{
scope = 2;
displayName = "Earplugs Crate [CSE]";
author = "Combat Space Enhancement";
model = "\A3\weapons_F\AmmoBoxes\AmmoBox_F";
class TransportWeapons
{
class _xx_cse_earplugs
{
weapon="cse_earplugs";
count=50;
};
class _xx_cse_earplugs_electronic
{
weapon="cse_earplugs_electronic";
count=10;
};
};
};
};

View File

@ -0,0 +1,27 @@
class CfgWeapons {
class ItemCore;
class InventoryItem_Base_F;
class cse_earplugs: ItemCore
{
scope=2;
value = 1;
count = 1;
type = 16;
displayName="Earplugs";
model="\cse\cse_sys_combatdeaf\equipment\earplugs_simple.p3d";
picture="\cse\cse_sys_combatdeaf\equipment\icons\earplugs_simple_icon.paa";
descriptionShort="Earplugs";
class ItemInfo: InventoryItem_Base_F
{
mass=0.01;
type=201;
};
};
class cse_earplugs_electronic: cse_earplugs
{
displayName="Electronic earplugs";
model="\cse\cse_sys_combatdeaf\equipment\earplugs_electronic.p3d";
picture="\cse\cse_sys_combatdeaf\equipment\icons\earplugs_electronic_icon.paa";
descriptionShort="Eletronic earplugs";
};
};

View File

@ -0,0 +1,14 @@
class Combat_Space_Enhancement {
class CfgModules {
class cse_sys_combatdeaf {
init = "call compile preprocessFile 'cse\cse_sys_combatdeaf\init_sys_combatdeaf.sqf';";
name = "Combat Deafness";
class EventHandlers {
class AllVehicles {
GetIn = "call cse_fnc_getIn_DEAF; false";
GetOut = "call cse_fnc_getOut_DEAF; false";
};
};
};
};
};

View File

@ -0,0 +1,26 @@
class CfgPatches {
class cse_sys_combatdeaf {
units[] = {"cse_crateCombatDeafness", "cse_earplugsItem", "cse_earplugs_electronicItem"};
weapons[] = {};
requiredVersion = 1.0;
requiredAddons[] = {"cse_f_eh","cse_main"};
versionDesc = "CSE Combat Deafness";
version = "0.10.0_rc";
author[] = {"Combat Space Enhancement"};
authorUrl = "http://csemod.com";
};
};
class cse_sys_combatdeaf {
class PreloadAddons {
class cse_sys_combatdeaf {
list[] = {"cse_sys_combatdeaf"};
};
};
};
#include "CfgVehicles.h"
#include "CfgWeapons.h"
#include "CfgSounds.h"
#include "CfgFunctions.h"
#include "Combat_Space_Enhancement.h"

View File

@ -0,0 +1,92 @@
ambient[]={1.000000,1.000000,1.000000,1.000000};
diffuse[]={1.000000,1.000000,1.000000,1.000000};
forcedDiffuse[]={0.000000,0.000000,0.000000,0.000000};
emmisive[]={0.000000,0.000000,0.000000,1.000000};
specular[]={0.703999,0.703999,0.703999,0.000000};
specularPower=70.000000;
PixelShaderID="Super";
VertexShaderID="Super";
class Stage1
{
texture="cse\cse_sys_combatdeaf\equipment\data\earplugs_electronic_nohq.paa";
uvSource="tex";
class uvTransform
{
aside[]={1.000000,0.000000,0.000000};
up[]={0.000000,1.000000,0.000000};
dir[]={0.000000,0.000000,0.000000};
pos[]={0.000000,0.000000,0.000000};
};
};
class Stage2
{
texture="#(argb,8,8,3)color(0.5,0.5,0.5,1,DT)";
uvSource="tex";
class uvTransform
{
aside[]={1.000000,0.000000,0.000000};
up[]={0.000000,1.000000,0.000000};
dir[]={0.000000,0.000000,0.000000};
pos[]={0.000000,0.000000,0.000000};
};
};
class Stage3
{
texture="#(argb,8,8,3)color(0,0,0,0,MC)";
uvSource="tex";
class uvTransform
{
aside[]={1.000000,0.000000,0.000000};
up[]={0.000000,1.000000,0.000000};
dir[]={0.000000,0.000000,0.000000};
pos[]={0.000000,0.000000,0.000000};
};
};
class Stage4
{
texture="#(argb,8,8,3)color(1,1,1,1,AS)";
uvSource="tex";
class uvTransform
{
aside[]={1.000000,0.000000,0.000000};
up[]={0.000000,1.000000,0.000000};
dir[]={0.000000,0.000000,0.000000};
pos[]={0.000000,0.000000,0.000000};
};
};
class Stage5
{
texture="#(argb,8,8,3)color(0,0.05,1,1,SMDI)";
uvSource="tex";
class uvTransform
{
aside[]={1.000000,0.000000,0.000000};
up[]={0.000000,1.000000,0.000000};
dir[]={0.000000,0.000000,0.000000};
pos[]={0.000000,0.000000,0.000000};
};
};
class Stage6
{
texture="#(ai,32,128,1)fresnel(0.98,1.02)";
uvSource="tex";
class uvTransform
{
aside[]={1.000000,0.000000,0.000000};
up[]={0.000000,1.000000,0.000000};
dir[]={0.000000,0.000000,0.000000};
pos[]={0.000000,0.000000,0.000000};
};
};
class Stage7
{
texture="cse\cse_sys_medical\equipment\data\env_co.tga";
uvSource="tex";
class uvTransform
{
aside[]={1.000000,0.000000,0.000000};
up[]={0.000000,1.000000,0.000000};
dir[]={0.000000,0.000000,0.000000};
pos[]={0.000000,0.000000,0.000000};
};
};

View File

@ -0,0 +1,92 @@
ambient[]={1.000000,1.000000,1.000000,1.000000};
diffuse[]={1.000000,1.000000,1.000000,1.000000};
forcedDiffuse[]={0.000000,0.000000,0.000000,0.000000};
emmisive[]={0.000000,0.000000,0.000000,1.000000};
specular[]={0.703999,0.703999,0.703999,0.000000};
specularPower=70.000000;
PixelShaderID="Super";
VertexShaderID="Super";
class Stage1
{
texture="cse\cse_sys_combatdeaf\equipment\data\earplugs_simple_nohq.paa";
uvSource="tex";
class uvTransform
{
aside[]={1.000000,0.000000,0.000000};
up[]={0.000000,1.000000,0.000000};
dir[]={0.000000,0.000000,0.000000};
pos[]={0.000000,0.000000,0.000000};
};
};
class Stage2
{
texture="#(argb,8,8,3)color(0.5,0.5,0.5,1,DT)";
uvSource="tex";
class uvTransform
{
aside[]={1.000000,0.000000,0.000000};
up[]={0.000000,1.000000,0.000000};
dir[]={0.000000,0.000000,0.000000};
pos[]={0.000000,0.000000,0.000000};
};
};
class Stage3
{
texture="#(argb,8,8,3)color(0,0,0,0,MC)";
uvSource="tex";
class uvTransform
{
aside[]={1.000000,0.000000,0.000000};
up[]={0.000000,1.000000,0.000000};
dir[]={0.000000,0.000000,0.000000};
pos[]={0.000000,0.000000,0.000000};
};
};
class Stage4
{
texture="#(argb,8,8,3)color(1,1,1,1,AS)";
uvSource="tex";
class uvTransform
{
aside[]={1.000000,0.000000,0.000000};
up[]={0.000000,1.000000,0.000000};
dir[]={0.000000,0.000000,0.000000};
pos[]={0.000000,0.000000,0.000000};
};
};
class Stage5
{
texture="#(argb,8,8,3)color(0,0.05,1,1,SMDI)";
uvSource="tex";
class uvTransform
{
aside[]={1.000000,0.000000,0.000000};
up[]={0.000000,1.000000,0.000000};
dir[]={0.000000,0.000000,0.000000};
pos[]={0.000000,0.000000,0.000000};
};
};
class Stage6
{
texture="#(ai,32,128,1)fresnel(0.98,1.02)";
uvSource="tex";
class uvTransform
{
aside[]={1.000000,0.000000,0.000000};
up[]={0.000000,1.000000,0.000000};
dir[]={0.000000,0.000000,0.000000};
pos[]={0.000000,0.000000,0.000000};
};
};
class Stage7
{
texture="cse\cse_sys_medical\equipment\data\env_co.tga";
uvSource="tex";
class uvTransform
{
aside[]={1.000000,0.000000,0.000000};
up[]={0.000000,1.000000,0.000000};
dir[]={0.000000,0.000000,0.000000};
pos[]={0.000000,0.000000,0.000000};
};
};

View File

@ -0,0 +1,4 @@
#define EARPLUGS_ID 18312
#define NO_EARPLUGS 0
#define STANDARD_EARPLUGS 1
#define ELECTRONIC_EARPLUGS 2

View File

@ -0,0 +1,34 @@
#include "defines.h"
private ["_audibleFire", "_attenuation", "_totalAttenuation", "_ID"];
_audibleFire = _this;
if (_audibleFire < 1) exitWith {};
_totalAttenuation = 1;
if (_audibleFire > 1) then {
// TODO: Use a headgear config entry instead
if (headgear player == "H_Cap_headphones") then {
_attenuation = 0.25 max (1 / _audibleFire) min 1; // max. -20 dB
_totalAttenuation = _totalAttenuation * _attenuation;
_audibleFire = _audibleFire * _attenuation;
};
};
if (_audibleFire > 1) then {
if (player getVariable ["cse_combatdeaf_earplugs", NO_EARPLUGS] == ELECTRONIC_EARPLUGS) then {
_attenuation = 0.125 max (1 / _audibleFire) min 1; // max. -30 dB
_totalAttenuation = _totalAttenuation * _attenuation;
_audibleFire = _audibleFire * _attenuation;
};
};
if (_totalAttenuation < 1) then {
_ID = floor(random 1000000);
[format["electronicHearingProtection_%1", _ID], _totalAttenuation, true] call cse_fnc_setHearingCapability;
_ID spawn {
sleep 2;
[format["electronicHearingProtection_%1", _this], 1, false] call cse_fnc_setHearingCapability;
};
};

View File

@ -0,0 +1,8 @@
private ["_unit", "_damage", "_attenuation", "_sp"];
_unit = _this select 0;
_damage = _this select 1;
_attenuation = player call cse_fnc_getAttenuation_DEAF;
_sp = _attenuation * _damage * 500;
_sp call cse_fnc_handlePressureWave_DEAF;

View File

@ -0,0 +1,16 @@
#include "defines.h"
private ["_unit", "_attenuation"];
_unit = _this;
_attenuation = 1;
if (player getVariable ["cse_combatdeaf_earplugs", NO_EARPLUGS] != NO_EARPLUGS) then {
_attenuation = _attenuation * 0.125; // -30 dB
};
// TODO: Use a headgear config entry instead
if (headgear player == "H_Cap_headphones") then {
_attenuation = _attenuation * 0.25; // -20 dB
};
_attenuation

View File

@ -0,0 +1,9 @@
private ["_vehicle", "_position", "_unit", "_handle"];
_vehicle = _this select 0;
_position = _this select 1;
_unit = _this select 2;
if (_unit != player) exitWith {};
_handle = _vehicle addEventHandler ["Fired", {_this call cse_fnc_handleFired_DEAF}];
_vehicle setVariable ["cse_combat_deaf_fired_event_handler", _handle];

View File

@ -0,0 +1,20 @@
/**
* fn_getMuzzleAccessory_DEAF.sqf
* @Descr: N/A Throws exception NO_WEAPON_UNIT
* @Author: Glowbal
*
* @Arguments: [unit OBJECT]
* @Return: STRING classname. Empty string if no assescory for Muzzle
* @PublicAPI: false
*/
private ["_unit"];
_unit = _this select 0;
_accessories = [_unit] call cse_fnc_getWeaponItems_F;
_items = switch (currentWeapon _unit) do {
case (primaryWeapon _unit): { _accessories select 0 };
case (secondaryWeapon _unit): { _accessories select 1 };
case (handgunWeapon _unit): { _accessories select 2 };
default { throw "NO_WEAPON_UNIT"; };
};
(_items select 0);

View File

@ -0,0 +1,12 @@
private ["_vehicle", "_position", "_unit", "_handle"];
_vehicle = _this select 0;
_position = _this select 1;
_unit = _this select 2;
if (_unit != player) exitWith {};
_handle = _vehicle getVariable "cse_combat_deaf_fired_event_handler";
if (!isNil "_handle") then {
_vehicle removeEventHandler ["Fired", _handle];
_vehicle setVariable ["cse_combat_deaf_fired_event_handler", nil];
};

View File

@ -0,0 +1,85 @@
/**
* fn_handleFiredNear_DEAF.sqf
* @Descr: N/A
* @Author: Ruthberg
*
* @Arguments: []
* @Return:
* @PublicAPI: false
*/
#define MAX_DISTANCE 10
#define BLUR_DELAY 0.1
#define SPEED_OF_SOUND 340.29
private ["_unit", "_firer", "_distance", "_weapon", "_ammo", "_pressureRatio", "_audibleFire", "_audibleFireToSPL", "_audibleFireDistanceCorrected", "_accessoryConfig", "_sp"];
_unit = _this select 0;
_firer = _this select 1;
_distance = _this select 2;
_weapon = _this select 3;
_ammo = _this select 6;
if (_distance > MAX_DISTANCE) exitWith {};
if (_weapon in ["Throw", "Put"]) exitWith {};
if (getNumber (configFile >> "CfgWeapons" >> _weapon >> "type") == 0) exitWith {
[format["Weapon type was 0. Exiting (%1)", _weapon]] call cse_fnc_debug;
};
_pressureRatio = 1 / 3;
if ([_unit] call cse_fnc_isInBuilding && [_firer] call cse_fnc_isInBuilding) then {
_pressureRatio = 1.0;
} else {
if (_unit != _firer) then {
// calculate direction deviation (shotdirection - (firer -> unit direction))
_shotDirection = _firer weaponDirection currentWeapon _firer;
_hearerDirection = (getPosASL _firer) vectorFromTo (getPosASL _unit);
_cosOfAngle = _shotDirection vectorCos _hearerDirection; // -1 .. +1
_pressureRatio = (1 / 3) * (2 + _cosOfAngle); // 0.333 .. 1
if (lineIntersects [eyePos _firer, eyePos _unit, _firer, _unit]) then {
_pressureRatio = _pressureRatio / 2;
};
};
};
try {
_audibleFire = getNumber(configFile >> "CfgAmmo" >> _ammo >> "audibleFire");
_accessoryConfig = (configFile >> "CfgWeapons" >> ([_firer] call cse_fnc_getMuzzleAccessory_DEAF));
if (isClass _accessoryConfig) then {
_audibleFire = (getNumber (_accessoryConfig >> "ItemInfo" >> "AmmoCoef" >> "audibleFire")) * _audibleFire;
};
_distance = 1 max _distance;
_audibleFireToSPL = abs(10 * log(1 / (4 * PI * _distance^2)));
_audibleFireDistanceCorrected = 0 max (_audibleFire / 2^(_audibleFireToSPL / 10));
_sp = _pressureRatio * (_unit call cse_fnc_getAttenuation_DEAF) * _audibleFireDistanceCorrected / 3;
hintSilent format["%1, %2, %3, %4, %5, %6", _distance, _pressureRatio, (_unit call cse_fnc_getAttenuation_DEAF), _sp, _audibleFire, _audibleFireDistanceCorrected];
_sp call cse_fnc_handlePressureWave_DEAF;
_audibleFireDistanceCorrected call cse_fnc_applyEletronicEarProtection_DEAF;
if (_sp > 1 && goggles _unit == "" && _unit != _firer) then {
[_distance, _sp] spawn {
private ["_distance", "_blur"];
_distance = _this select 0;
_blur = (sqrt(_this select 1) / 5) min 2;
sleep (_distance / SPEED_OF_SOUND);
cse_sys_combatdeaf_blurEffect ppEffectEnable true;
cse_sys_combatdeaf_blurEffect ppEffectAdjust [_blur / (_distance^2)];
cse_sys_combatdeaf_blurEffect ppEffectCommit BLUR_DELAY;
sleep BLUR_DELAY;
for "_i" from floor(_distance) to MAX_DISTANCE do {
cse_sys_combatdeaf_blurEffect ppEffectAdjust [_blur * (MAX_DISTANCE - _i)];
cse_sys_combatdeaf_blurEffect ppEffectCommit (_blur * (BLUR_DELAY / 2));
sleep (_blur * (BLUR_DELAY / 2));
};
cse_sys_combatdeaf_blurEffect ppEffectEnable false;
};
};
}catch {
// This should never happen.
if (_exception == "NO_WEAPON_UNIT") then {
[format["Unit (%1) that fired has no weapon. Cannot retrieve silencer accessory", _firer]] call cse_fnc_debug;
} else {
[_exception] call cse_fnc_debug;
};
};

View File

@ -0,0 +1,8 @@
private ["_unit", "_weapon", "_muzzle", "_mode", "_ammo"];
_unit = _this select 0;
_weapon = _this select 1;
_muzzle = _this select 2;
_mode = _this select 3;
_ammo = _this select 4;
[_unit, _unit, 0, _weapon, _muzzle, _mode, _ammo] call cse_fnc_handleFiredNear_DEAF;

View File

@ -0,0 +1,46 @@
#define PAIN_THRESHOLD 5
#define DAMAGE_THRESHOLD 40
#define HEARING_CAPABILITY_MAP_ID 1713
private ["_sp", "_deafness"];
_sp = _this;
if !(alive player) exitWith {};
if (_sp > 0.5 && cse_DeafnessIntensity > 0.0) then {
_deafness = ((player getVariable ["cse_combatdeaf_deafness", 0]) + _sp) min (DAMAGE_THRESHOLD / cse_DeafnessIntensity);
player setVariable ["cse_combatdeaf_deafness", _deafness, false];
if (!cse_sys_combatdeaf_deafness_running) then {
[] spawn {
private ["_deafness", "_ringing", "_ringingStart", "_img", "_volume"];
cse_sys_combatdeaf_deafness_running = true;
_deafness = player getVariable ["cse_combatdeaf_deafness", 0];
_ringing = false;
_ringingStart = time - 120;
while {alive player && _deafness > 0.01} do {
if (_deafness > DAMAGE_THRESHOLD / cse_DeafnessIntensity) then {
["cse_sys_combatdeaf_deafIcon", true, "cse\cse_sys_combatdeaf\data\cse_combatdeaf_deafness.paa", [1,1,1,1]] call cse_fnc_gui_displayIcon;
} else {
["cse_sys_combatdeaf_deafIcon", false, "", [1,1,1,1]] call cse_fnc_gui_displayIcon;
if (!cse_DisableEarRinging && _deafness > PAIN_THRESHOLD / cse_DeafnessIntensity) then {
if (!_ringing || time - _ringingStart > 120) then {
playSound "cse_combatdeaf_ear_ringing";
_ringingStart = time;
_ringing = true;
};
} else {
_ringing = false;
};
};
_deafness = player getVariable ["cse_combatdeaf_deafness", 0];
_volume = 0 max (1 - (_deafness / (DAMAGE_THRESHOLD / cse_DeafnessIntensity)));
[format["hearingCapability_%1", HEARING_CAPABILITY_MAP_ID], _volume, true] call cse_fnc_setHearingCapability;
player setVariable ["cse_combatdeaf_deafness", 0 max (_deafness - 0.5 / (1 max _deafness min (DAMAGE_THRESHOLD / cse_DeafnessIntensity))), false];
sleep 1;
};
cse_sys_combatdeaf_deafness_running = false;
[format["hearingCapability_%1", HEARING_CAPABILITY_MAP_ID], 1, false] call cse_fnc_setHearingCapability;
};
};
};

View File

@ -0,0 +1,20 @@
/**
* fn_hasMuzzleAccessory_DEAF.sqf
* @Descr: N/A
* @Author: Glowbal
*
* @Arguments: []
* @Return:
* @PublicAPI: false
*/
private ["_unit"];
_unit = _this select 0;
_accessories = [_unit] call cse_fnc_getWeaponItems_F;
_items = switch (currentWeapon _unit) do {
case (primaryWeapon _unit): { _accessories select 0 };
case (secondaryWeapon _unit): { _accessories select 1 };
case (handgunWeapon _unit): { _accessories select 2 };
default { throw "NO_WEAPON_UNIT"; };
};
(_items select 0) != "";

View File

@ -0,0 +1,60 @@
#include "defines.h"
if (isDedicated) exitwith{};
CSE_ICON_PATH = "cse\cse_gui\radialmenu\data\icons\";
cse_hearingProtectionDisplaySubMenu = {
[_this] call cse_fnc_Debug;
private ["_subMenus"];
_subMenus = [];
// Put on standard earplugs
if (player getVariable ["cse_combatdeaf_earplugs", NO_EARPLUGS] == NO_EARPLUGS && [player, "cse_earplugs"] call cse_fnc_hasItem) then {
_subMenus pushBack ["Use earplugs", CSE_ICON_PATH + "icon_earplugs_standard.paa", {
closeDialog 0;
player setVariable ["cse_combatdeaf_earplugs", STANDARD_EARPLUGS, false];
player removeItem "cse_earplugs";
[format["earplugsAttenuation_ID_%1", EARPLUGS_ID], 0.125] call cse_fnc_setHearingCapability;
}, true, "Use standard earplugs"];
};
// Put on electronic earplugs
if (player getVariable ["cse_combatdeaf_earplugs", NO_EARPLUGS] == NO_EARPLUGS && [player, "cse_earplugs_electronic"] call cse_fnc_hasItem) then {
_subMenus pushBack ["Use earplugs", CSE_ICON_PATH + "icon_earplugs_electronic.paa", {
closeDialog 0;
player setVariable ["cse_combatdeaf_earplugs", ELECTRONIC_EARPLUGS, false];
player removeItem "cse_earplugs_electronic";
}, true, "Use electronic earplugs"];
};
// Remove earplugs
if (player getVariable ["cse_combatdeaf_earplugs", NO_EARPLUGS] != NO_EARPLUGS) then {
switch (player getVariable ["cse_combatdeaf_earplugs", NO_EARPLUGS]) do {
case STANDARD_EARPLUGS: {
_subMenus pushBack ["Earplugs out", CSE_ICON_PATH + "icon_earplugs_remove.paa", {
closeDialog 0;
player setVariable ["cse_combatdeaf_earplugs", NO_EARPLUGS, false];
player addItem "cse_earplugs";
[format["earplugsAttenuation_ID_%1", EARPLUGS_ID], 1, false] call cse_fnc_setHearingCapability;
}, true, "Remove standard earplugs"];
};
case ELECTRONIC_EARPLUGS: {
_subMenus pushBack ["Earplugs out", CSE_ICON_PATH + "icon_earplugs_remove.paa", {
closeDialog 0;
player setVariable ["cse_combatdeaf_earplugs", NO_EARPLUGS, false];
player addItem "cse_earplugs_electronic";
}, true, "Remove electronic earplugs"];
};
};
};
[_this select 3, _subMenus, _this select 1, CSE_SELECTED_RADIAL_OPTION_N_GUI, true] call cse_fnc_openRadialSecondRing_GUI;
};
_entries = [
["Hearing", {((player getVariable ["cse_combatdeaf_earplugs", NO_EARPLUGS] != NO_EARPLUGS) || (([player, "cse_earplugs_electronic"] call cse_fnc_hasItem) || ([player, "cse_earplugs"] call cse_fnc_hasItem)))}, CSE_ICON_PATH + "icon_ear_protection.paa", cse_hearingProtectionDisplaySubMenu, "Show available hearing protections"]
];
["ActionMenu","equipment", _entries ] call cse_fnc_addMultipleEntriesToRadialCategory_F;

View File

@ -0,0 +1,29 @@
#include "functions\defines.h"
if (!hasInterface) exitwith {};
waituntil{!isnil "cse_gui" && !isnil "cse_main"};
waitUntil {!isNull player};
private ["_args"];
_args = _this;
{
_varName = "cse_"+(_x select 0);
missionNamespace setVariable[_varName, _x select 1];
} forEach _args;
if (isNil "cse_DeafnessIntensity") then { cse_DeafnessIntensity = cse_DEAFNESS_EFFECT_INTENSITY };
if (isNil "cse_DisableEarRinging") then { cse_DisableEarRinging = cse_DISABLE_EAR_RINGING };
["cse_combatdeaf_deafness", 0, false, "cd"] call cse_fnc_defineVariable;
["cse_combatdeaf_earplugs", NO_EARPLUGS, false, "cd"] call cse_fnc_defineVariable;
call cse_fnc_register_ear_protection_actions_DEAF;
player addEventHandler ["FiredNear", {_this call cse_fnc_handleFiredNear_DEAF}];
player addEventHandler ["Explosion", {_this call cse_fnc_explosion_DEAF}];
cse_sys_combatdeaf_blurEffect = ppEffectCreate ["dynamicBlur", -11723];
cse_sys_combatdeaf_deafness_running = false;
cse_sys_combatdeaf = true;

Binary file not shown.

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8" ?>
<Project name="Combat Space Enhancement">
<Package name="cse_sys_combatdeaf">
<Container ID="CombatDeaf">
</Container>
</Package>
</Project>