2016-12-01 19:54:03 +00:00
|
|
|
#include "script_component.hpp"
|
|
|
|
|
2018-07-18 20:50:03 +00:00
|
|
|
[QEGVAR(medical,injured), {
|
2018-07-18 18:21:27 +00:00
|
|
|
params ["_unit", "_painLevel"];
|
|
|
|
[_unit, "hit", PAIN_TO_SCREAM(_painLevel)] call FUNC(playInjuredSound);
|
2019-10-11 20:00:53 +00:00
|
|
|
|
|
|
|
if (hasInterface && {_unit == ace_player}) then {
|
|
|
|
[true] call FUNC(handleEffects);
|
|
|
|
};
|
2018-07-18 18:21:27 +00:00
|
|
|
}] call CBA_fnc_addEventHandler;
|
|
|
|
|
2018-07-18 20:50:03 +00:00
|
|
|
[QEGVAR(medical,moan), {
|
2018-07-18 18:21:27 +00:00
|
|
|
params ["_unit", "_painLevel"];
|
|
|
|
[_unit, "moan", PAIN_TO_MOAN(_painLevel)] call FUNC(playInjuredSound);
|
|
|
|
}] call CBA_fnc_addEventHandler;
|
|
|
|
|
2019-10-11 20:00:53 +00:00
|
|
|
if (!hasInterface) exitWith {};
|
|
|
|
|
2019-06-22 21:47:35 +00:00
|
|
|
[QEGVAR(medical,fracture), {
|
|
|
|
params ["_unit"];
|
|
|
|
if (_unit == ACE_player) then {
|
|
|
|
playSound SND_FRACTURE;
|
|
|
|
};
|
|
|
|
}] call CBA_fnc_addEventHandler;
|
|
|
|
|
2017-03-18 16:53:57 +00:00
|
|
|
GVAR(nextFadeIn) = 0;
|
2017-02-19 04:11:40 +00:00
|
|
|
GVAR(heartBeatEffectRunning) = false;
|
2019-10-11 20:00:53 +00:00
|
|
|
GVAR(lastHeartBeatSound) = 0;
|
|
|
|
GVAR(bloodTickCounter) = 0;
|
2017-02-19 04:11:40 +00:00
|
|
|
|
|
|
|
[false] call FUNC(initEffects);
|
2019-10-11 20:00:53 +00:00
|
|
|
[true] call FUNC(handleEffects);
|
|
|
|
[FUNC(handleEffects), 1, false] call CBA_fnc_addPerFrameHandler;
|
2016-12-09 18:16:41 +00:00
|
|
|
|
|
|
|
["ace_unconscious", {
|
|
|
|
params ["_unit", "_unconscious"];
|
2018-07-18 18:13:25 +00:00
|
|
|
|
2016-12-09 18:16:41 +00:00
|
|
|
if (_unit != ACE_player) exitWith {};
|
2019-08-06 13:10:33 +00:00
|
|
|
TRACE_1("player unconscious eh",_unconscious);
|
2016-12-09 18:16:41 +00:00
|
|
|
|
2019-05-20 20:12:18 +00:00
|
|
|
if (_unconscious && {cameraView == "GUNNER"} && {(vehicle _unit) != _unit} && {cameraOn == vehicle _unit}) then {
|
|
|
|
TRACE_2("exiting gunner view",cameraOn,cameraView);
|
|
|
|
ACE_player switchCamera "INTERNAL";
|
|
|
|
};
|
|
|
|
|
2018-07-20 21:23:48 +00:00
|
|
|
// Toggle unconscious player's ability to talk in radio addons
|
2019-04-09 17:51:59 +00:00
|
|
|
if (["task_force_radio"] call EFUNC(common,isModLoaded)) then {
|
|
|
|
_unit setVariable ["tf_voiceVolume", [1, 0] select _unconscious, true];
|
|
|
|
_unit setVariable ["tf_unable_to_use_radio", _unconscious]; // Only used locally
|
|
|
|
};
|
|
|
|
if (["acre_main"] call EFUNC(common,isModLoaded)) then {
|
|
|
|
_unit setVariable ["acre_sys_core_isDisabled", _unconscious, true];
|
|
|
|
};
|
2019-10-11 20:00:53 +00:00
|
|
|
|
2018-07-20 21:23:48 +00:00
|
|
|
// Greatly reduce player's hearing ability while unconscious (affects radio addons)
|
|
|
|
[QUOTE(ADDON), VOL_UNCONSCIOUS, _unconscious] call EFUNC(common,setHearingCapability);
|
|
|
|
|
2019-10-11 20:00:53 +00:00
|
|
|
[true] call FUNC(handleEffects);
|
2017-01-29 19:24:16 +00:00
|
|
|
["unconscious", _unconscious] call EFUNC(common,setDisableUserInputStatus);
|
2016-12-09 18:16:41 +00:00
|
|
|
}] call CBA_fnc_addEventHandler;
|
2017-04-30 06:46:51 +00:00
|
|
|
|
2018-07-20 21:23:48 +00:00
|
|
|
// Reset volume upon death for spectators
|
|
|
|
[QEGVAR(medical,death), {
|
|
|
|
params ["_unit"];
|
|
|
|
|
|
|
|
if (_unit != ACE_player) exitWith {};
|
2019-04-09 17:51:59 +00:00
|
|
|
if (["task_force_radio"] call EFUNC(common,isModLoaded)) then {
|
|
|
|
_unit setVariable ["tf_voiceVolume", 1, true];
|
|
|
|
_unit setVariable ["tf_unable_to_use_radio", false];
|
|
|
|
};
|
|
|
|
if (["acre_main"] call EFUNC(common,isModLoaded)) then {
|
|
|
|
_unit setVariable ["acre_sys_core_isDisabled", false, true];
|
|
|
|
};
|
2018-07-20 21:23:48 +00:00
|
|
|
[QUOTE(ADDON), 1, false] call EFUNC(common,setHearingCapability);
|
|
|
|
}] call CBA_fnc_addEventHandler;
|
|
|
|
|
|
|
|
// Update effects to match new unit's current status (this also handles respawn)
|
2017-04-30 06:46:51 +00:00
|
|
|
["unit", {
|
2019-04-09 17:51:59 +00:00
|
|
|
params ["_new"];
|
2019-05-12 04:13:59 +00:00
|
|
|
private _status = IS_UNCONSCIOUS(_new);
|
2018-07-20 21:23:48 +00:00
|
|
|
|
2019-04-09 17:51:59 +00:00
|
|
|
if (["task_force_radio"] call EFUNC(common,isModLoaded)) then {
|
|
|
|
_new setVariable ["tf_voiceVolume", [1, 0] select _status, true];
|
|
|
|
_new setVariable ["tf_unable_to_use_radio", _status];
|
|
|
|
};
|
|
|
|
if (["acre_main"] call EFUNC(common,isModLoaded)) then {
|
|
|
|
_new setVariable ["acre_sys_core_isDisabled", _status, true];
|
|
|
|
};
|
2018-07-20 21:23:48 +00:00
|
|
|
[QUOTE(ADDON), VOL_UNCONSCIOUS, _status] call EFUNC(common,setHearingCapability);
|
2019-10-11 20:00:53 +00:00
|
|
|
[true] call FUNC(handleEffects);
|
2017-04-30 06:46:51 +00:00
|
|
|
["unconscious", _status] call EFUNC(common,setDisableUserInputStatus);
|
|
|
|
}] call CBA_fnc_addPlayerEventHandler;
|
2019-04-27 19:04:31 +00:00
|
|
|
|
2019-10-11 20:00:53 +00:00
|
|
|
// Forced say3D
|
|
|
|
[QGVAR(forceSay3D), {
|
|
|
|
params ["_unit", "_sound", "_distance"];
|
|
|
|
|
|
|
|
if (ACE_player distance _unit > _distance) exitWith {};
|
|
|
|
|
|
|
|
if (vehicle _unit == _unit) then {
|
|
|
|
// say3D waits for the previous sound to finish, so use a dummy instead
|
|
|
|
private _dummy = "#dynamicsound" createVehicleLocal [0, 0, 0];
|
|
|
|
_dummy attachTo [_unit, [0, 0, 0], "camera"];
|
|
|
|
_dummy say3D [_sound, _distance, 1, false];
|
|
|
|
|
|
|
|
[{
|
|
|
|
detach _this;
|
|
|
|
deleteVehicle _this;
|
|
|
|
}, _dummy, 5] call CBA_fnc_waitAndExecute;
|
|
|
|
} else {
|
|
|
|
// Fallback: attachTo doesn't work within vehicles
|
|
|
|
_unit say3D [_sound, _distance, 1, false];
|
|
|
|
};
|
|
|
|
}] call CBA_fnc_addEventHandler;
|
2019-04-27 19:04:31 +00:00
|
|
|
|
|
|
|
// Kill vanilla bleeding feedback effects.
|
|
|
|
#ifdef DISABLE_VANILLA_DAMAGE_EFFECTS
|
|
|
|
TRACE_1("disabling vanilla bleeding feedback effects",_this);
|
|
|
|
[{
|
|
|
|
{isNil _x} count [
|
|
|
|
"BIS_fnc_feedback_damageCC",
|
|
|
|
"BIS_fnc_feedback_damageRadialBlur",
|
|
|
|
"BIS_fnc_feedback_damageBlur"
|
|
|
|
] == 0
|
|
|
|
}, {
|
|
|
|
{
|
|
|
|
ppEffectDestroy _x;
|
|
|
|
} forEach [
|
|
|
|
BIS_fnc_feedback_damageCC,
|
|
|
|
BIS_fnc_feedback_damageRadialBlur,
|
|
|
|
BIS_fnc_feedback_damageBlur
|
|
|
|
];
|
|
|
|
}] call CBA_fnc_waitUntilAndExecute;
|
|
|
|
#endif
|