Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Chemical - Change Chemical Detector Sound #659

Merged
56 changes: 55 additions & 1 deletion addons/chemical/CfgSounds.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,5 +58,59 @@ class CfgSounds {
};
titles[] = {};
};

class GVAR(chemSlowChime) {
name = QGVAR(chemSlowChime);
sound[] =
{
QPATHTOF(audio\slowChime.ogg),
2,
1.0,
5
};
titles[] = {};
};
class GVAR(chemNormalChime) {
name = QGVAR(chemNormalChime);
sound[] =
{
QPATHTOF(audio\normalChime.ogg),
2,
1.0,
5
};
titles[] = {};
};
class GVAR(chemFastChime) {
name = QGVAR(chemFastChime);
sound[] =
{
QPATHTOF(audio\fastChime.ogg),
2,
1.0,
5
};
titles[] = {};
};
class GVAR(chemRapidChime) {
name = QGVAR(chemRapidChime);
sound[] =
{
QPATHTOF(audio\rapidChime.ogg),
2,
1.0,
5
};
titles[] = {};
};
class GVAR(chemTone) {
name = QGVAR(chemTone);
sound[] =
{
QPATHTOF(audio\tone.ogg),
2,
1.0,
5
};
titles[] = {};
};
};
39 changes: 35 additions & 4 deletions addons/chemical/CfgVehicles.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,35 +6,66 @@ class CfgVehicles {
class KAT_CheckGasMaskDur {
displayName = CSTRING(CheckGasMaskDurability);
condition = QUOTE([_player] call FUNC(hasGasMaskOn));
exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting"};
exceptions[] = {"isNotSwimming"};
statement = QUOTE(_this call FUNC(checkGasMaskDur));
showDisabled = 0;
icon = QPATHTOF(ui\Gasmask_icon.paa);
};
class KAT_ChangeGasMaskFilter {
displayName = CSTRING(ChangeGasMaskFilter);
condition = QUOTE([_player] call FUNC(canReplaceFilter));
exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting"};
exceptions[] = {"isNotSwimming"};
statement = QUOTE(_this call FUNC(changeGasMaskFilter));
showDisabled = 0;
icon = QPATHTOF(ui\gasmaskfilter_ca.paa);
};
class KAT_PutOnGasMask {
displayName = CSTRING(PutOnGasMask);
condition = QUOTE([_player] call FUNC(canPutOnGasMask));
exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting"};
exceptions[] = {"isNotSwimming"};
statement = QUOTE([_player] call FUNC(putOnGasMask));
showDisabled = 0;
icon = QPATHTOF(ui\Gasmask_icon.paa);
};
class KAT_TakeOffGasMask {
displayName = CSTRING(TakeOffGasMask);
condition = QUOTE([_player] call FUNC(canTakeOffGasMask));
exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting"};
exceptions[] = {"isNotSwimming"};
statement = QUOTE([_player] call FUNC(takeOffGasMask));
showDisabled = 0;
icon = QPATHTOF(ui\Gasmask_icon.paa);
};

class KAT_ChemicalDetector {
displayName = CSTRING(ChemicalDetector_Menu);
icon = QPATHTOF(ui\kat_chemicalDet_icon.paa);
exceptions[] = {"isNotSwimming"};

class KAT_ChemicalDetector_Enable {
displayName = CSTRING(EnableDetector);
condition = QUOTE(([_player] call FUNC(hasDetector)) && !(_player getVariable [ARR_2(QQGVAR(detectorEnabled),false)]));
exceptions[] = {"isNotSwimming"};
statement = QUOTE([_player] call FUNC(enableChemDetector));
showDisabled = 0;
icon = QPATHTOF(ui\kat_chemicalDet_icon.paa);
};
class KAT_ChemicalDetector_SoundOn {
displayName = CSTRING(EnableDetectorSound);
condition = QUOTE(!(_player getVariable [ARR_2(QQGVAR(detectorSound),false)]) && ([_player] call FUNC(hasDetector)));
exceptions[] = {"isNotSwimming"};
statement = QUOTE(_player setVariable [ARR_3(QQGVAR(detectorSound),true,true)]);
showDisabled = 0;
icon = QPATHTOF(ui\kat_chemicalDet_icon.paa);
};
class KAT_ChemicalDetector_SoundOff {
displayName = CSTRING(DisableDetectorSound);
condition = QUOTE((_player getVariable [ARR_2(QQGVAR(detectorSound),false)]) && ([_player] call FUNC(hasDetector)));
exceptions[] = {"isNotSwimming"};
statement = QUOTE(_player setVariable [ARR_3(QQGVAR(detectorSound),false,true)]);
showDisabled = 0;
icon = QPATHTOF(ui\kat_chemicalDet_icon.paa);
};
};
};
};
};
Expand Down
2 changes: 2 additions & 0 deletions addons/chemical/XEH_PREP.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ PREP(checkGasMaskDur);
PREP(createSealAction);
PREP(csGrenade);
PREP(displayGasMaskDur);
PREP(enableChemDetector);
PREP(fullHealLocal);
PREP(gasManagerPFH);
PREP(gasmodule);
Expand All @@ -21,6 +22,7 @@ PREP(gui_updateInjuryListGeneral);
PREP(handleFired);
PREP(handleGasMaskDur);
PREP(handleRespawn);
PREP(hasDetector);
PREP(hasGasmask);
PREP(hasGasMaskON);
PREP(hideChemDetector);
Expand Down
5 changes: 5 additions & 0 deletions addons/chemical/XEH_postInit.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@
[QGVAR(handleGasMaskDur), LINKFUNC(handleGasMaskDur)] call CBA_fnc_addEventHandler;
[QGVAR(addSealAction), LINKFUNC(createSealAction)] call CBA_fnc_addEventHandler;

[QGVAR(playTone), {
params ["_unit", "_tone"];
_unit say3D [_tone, 5];
}] call CBA_fnc_addEventHandler;

// ACE Events
[QACEGVAR(medical_gui,updateInjuryListGeneral), LINKFUNC(gui_updateInjuryListGeneral)] call CBA_fnc_addEventHandler;
[QACEGVAR(medical_gui,updateBodyImage), LINKFUNC(gui_updateBodyImage)] call CBA_fnc_addEventHandler;
Expand Down
Binary file added addons/chemical/audio/fastChime.ogg
Binary file not shown.
Binary file added addons/chemical/audio/normalChime.ogg
Binary file not shown.
Binary file added addons/chemical/audio/rapidChime.ogg
Binary file not shown.
Binary file added addons/chemical/audio/slowChime.ogg
Binary file not shown.
Binary file added addons/chemical/audio/tone.ogg
Binary file not shown.
49 changes: 49 additions & 0 deletions addons/chemical/functions/fnc_enableChemDetector.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
#include "..\script_component.hpp"
/*
* Author: Mazinski
* Enables the audio on the Chemical Detector.
*
* Arguments:
* None
*
* Return Value:
* None
*
* Example:
* call kat_chemical_enableChemDetector
*
* Public: No
*/

params ["_unit"];

_unit setVariable [QGVAR(detectorEnabled), true, true];

[{
params ["_args", "_idPFH"];
_args params ["_unit"];

private _alive = alive _unit;

if (!_alive) exitWith {
[_idPFH] call CBA_fnc_removePerFrameHandler;
};

if !("KAT_ChemicalDetector" in assignedItems _unit) exitWith {
_unit setVariable [QGVAR(detectorEnabled), false, true];
_pfhID call CBA_fnc_removePerFrameHandler;
};

private _detectorSound = _unit getVariable [QGVAR(detectorSound), false];
private _intensity = _unit getVariable [QGVAR(areaIntensity), 0];

if (_detectorSound) then {
switch true do {
case (_intensity > 0.9): { [QGVAR(playTone), [_unit, QGVAR(chemTone)], _unit] call CBA_fnc_targetEvent; };
case (_intensity > 0.7): { [QGVAR(playTone), [_unit, QGVAR(chemRapidChime)], _unit] call CBA_fnc_targetEvent; };
case (_intensity > 0.5): { [QGVAR(playTone), [_unit, QGVAR(chemFastChime)], _unit] call CBA_fnc_targetEvent; };
case (_intensity > 0.3): { [QGVAR(playTone), [_unit, QGVAR(chemNormalChime)], _unit] call CBA_fnc_targetEvent; };
case (_intensity > 0.1): { [QGVAR(playTone), [_unit, QGVAR(chemSlowChime)], _unit] call CBA_fnc_targetEvent; };
};
};
}, 5, [_unit]] call CBA_fnc_addPerFrameHandler;
7 changes: 1 addition & 6 deletions addons/chemical/functions/fnc_handleRespawn.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,4 @@ params ["_unit"];

[_unit] call FUNC(fullHealLocal);

"kat_CHEM_DETECTOR" cutRsc ["RscWeaponChemicalDetector", "PLAIN", 1, false];
private _ui = uiNamespace getVariable "RscWeaponChemicalDetector";
private _obj = _ui displayCtrl 101;
_obj ctrlAnimateModel ["Threat_Level_Source", 0, true];

_unit setVariable [QGVAR(lastSoundTime), CBA_missionTime, true];
_unit setVariable [QGVAR(detectorSound), false, true];
24 changes: 24 additions & 0 deletions addons/chemical/functions/fnc_hasDetector.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#include "..\script_component.hpp"
/*
* Author: DiGii
*
* Arguments:
* 0: Player <OBJECT>
* 1: Target <OBJECT>
*
* Return Value:
* Bool
*
* Example:
* [player, cursorTarget] call kat_chemical_fnc_hasGasmask;
*
* Public: No
*/

params ["_unit"];

if ("KAT_ChemicalDetector" in assignedItems _unit) exitWith {
true
};

false
2 changes: 1 addition & 1 deletion addons/chemical/functions/fnc_init.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@ if (!local _unit) exitWith {};

[_unit] call FUNC(fullHealLocal);

_unit setVariable [QGVAR(lastSoundTime), CBA_missionTime, true];
_unit setVariable [QGVAR(detectorSound), false, true];
4 changes: 4 additions & 0 deletions addons/chemical/functions/fnc_poison.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -69,5 +69,9 @@ if (_currentInfection != _newTime) then {

// Exit if infection reaches 0
if (_newTime <= 0) then {
if !(_unit getVariable [QGVAR(airPoisoning), false]) then {
mazinskihenry marked this conversation as resolved.
Show resolved Hide resolved
[QEGVAR(breathing,playCough), [_unit], _unit] call CBA_fnc_targetEvent;
};

_unit setVariable [QGVAR(airPoisoning), true, true];
};
33 changes: 14 additions & 19 deletions addons/chemical/functions/fnc_showChemDetector.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
/*
* Author: Garth 'L-H' de Wet
* Modified: Mazinski
* Displays the KWatch on screen.
* Displays the JCAD on screen.
*
* Arguments:
* 0: unit <OBJECT>
Expand All @@ -11,7 +11,7 @@
* None
*
* Example:
* [player] call kat_watch_fnc_showKWatch
* [player] call kat_chemical_fnc_showChemDetector
*
* Public: Yes
*/
Expand Down Expand Up @@ -47,30 +47,25 @@ private _exposure = _display displayCtrl 18805;
_pfhID call CBA_fnc_removePerFrameHandler;
};

private _hour = floor dayTime;
private _minute = floor ((dayTime - _hour) * 60);

_time ctrlSetText (format ["%1:%2", [_hour, 2] call CBA_fnc_formatNumber, [_minute, 2] call CBA_fnc_formatNumber]);

private _intensity = _unit getVariable [QGVAR(areaIntensity), 0];

_exposure ctrlSetText (_intensity toFixed 2);
if ((_unit getVariable [QGVAR(detectorEnabled), false])) then {

if (_intensity > 0) then {
private _lastSoundTime = _unit getVariable QGVAR(lastSoundTime);
_unit setVariable [QGVAR(areaIntensity), 0, true];
private _hour = floor dayTime;
private _minute = floor ((dayTime - _hour) * 60);

_time ctrlSetText (format ["%1:%2", [_hour, 2] call CBA_fnc_formatNumber, [_minute, 2] call CBA_fnc_formatNumber]);

if (isNil "_lastSoundTime") then {
TRACE_1("undefined lastSoundTime: setting to current time",_lastSoundTime);
_unit setVariable [QGVAR(lastSoundTime), CBA_missionTime];
};
_exposure ctrlSetText (_intensity toFixed 2);

_unit setVariable [QGVAR(areaIntensity), _intensity, true];

if (CBA_missionTime - _lastSoundTime > 6) exitWith {
playSound3D [QPATHTOF(audio\chemDetector.ogg), _unit, false, getPosASL _unit, 4, 1, 10];
_unit setVariable [QGVAR(lastSoundTime), CBA_missionTime];
if (_intensity < 0.1) then {
mazinskihenry marked this conversation as resolved.
Show resolved Hide resolved
_unit setVariable [QGVAR(areaIntensity), 0, true];
};
} else {
_unit setVariable [QGVAR(areaIntensity), 0, true];
_time ctrlSetText (LLSTRING(ChemicalDetector_Off));
_exposure ctrlSetText ("-.--");
};

}, 1, [
Expand Down
15 changes: 15 additions & 0 deletions addons/chemical/stringtable.xml
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,9 @@
<French>Utilisé pour détecter les produits chimiques toxiques KAT</French>
<Japanese>KAT毒性化学物質の検出に使用</Japanese>
</Key>
<Key ID="STR_KAT_Chemical_ChemicalDetector_Off">
<English>OFF</English>
</Key>
<Key ID="STR_KAT_Chemical_giveGasMask_action">
<English>Put on gas mask</English>
<Spanish>Poner mascara de gas</Spanish>
Expand Down Expand Up @@ -797,6 +800,18 @@
<Japanese>ガスマスクを外す</Japanese>
<French>Enlever le masque à gaz</French>
</Key>
<Key ID="STR_KAT_Chemical_ChemicalDetector_Menu">
<English>JCAD</English>
</Key>
<Key ID="STR_KAT_Chemical_EnableDetector">
<English>Turn On Detector</English>
</Key>
<Key ID="STR_KAT_Chemical_EnableDetectorSound">
<English>Enable Warning Tone</English>
</Key>
<Key ID="STR_KAT_Chemical_DisableDetectorSound">
<English>Disable Warning Tone</English>
</Key>
<Key ID="STR_KAT_Chemical_SETTING_dropWeaponChance">
<English>Drop Weapon Chance</English>
</Key>
Expand Down
Loading