/* * Author: Glowbal * Play the injured sound for a unit if the unit is damaged. The sound broadcasted across MP. * Will not play if the unit has already played a sound within to close a time frame. * Delay: With minimal damage (below 1), the delay is (10 + random(50)) seconds. Otherwise it is 60 seconds / damage. * * Arguments: * 0: The Unit * 1: Amount of Pain * * ReturnValue: * None * * Public: No */ #include "script_component.hpp" params ["_unit", "_pain"]; if (!local _unit || !GVAR(enableScreams)) exitWith{}; // Lock if the unit is already playing a sound. if ((_unit getVariable [QGVAR(playingInjuredSound),false])) exitWith {}; _unit setVariable [QGVAR(playingInjuredSound),true]; // Play the sound if there is any damage present. if (_pain > 0 && {[_unit] call EFUNC(common,isAwake)}) exitWith { // Classnames of the available sounds. private _availableSounds_A = [ "WoundedGuyA_01", "WoundedGuyA_02", "WoundedGuyA_03", "WoundedGuyA_04", "WoundedGuyA_05", "WoundedGuyA_06", "WoundedGuyA_07", "WoundedGuyA_08" ]; private _availableSounds_B = [ "WoundedGuyB_01", "WoundedGuyB_02", "WoundedGuyB_03", "WoundedGuyB_04", "WoundedGuyB_05", "WoundedGuyB_06", "WoundedGuyB_07", "WoundedGuyB_08" ]; private _availableSounds_C = [ "WoundedGuyC_01", "WoundedGuyC_02", "WoundedGuyC_03", "WoundedGuyC_04", "WoundedGuyC_05" ]; private _sound = ""; // Select the to be played sound based upon damage amount. if (_pain > 0.5) then { if (random(1) > 0.5) then { _sound = selectRandom _availableSounds_A; } else { _sound = selectRandom _availableSounds_B; }; } else { _sound = selectRandom _availableSounds_B; }; // Play the sound playSound3D [(getArray(configFile >> "CfgSounds" >> _sound >> "sound") select 0) + ".wss", objNull, false, getPos _unit, 15, 1, 25]; // +2db, 15 meters. // Figure out what the delay will be before it is possible to play a sound again. private _delay = (30 - (random(25) * _pain)) max (3.5 + random(2)); // Clean up the lock [{ (_this select 0) setVariable [QGVAR(playingInjuredSound), nil]; }, [_unit], _delay, _delay] call CBA_fnc_waitAndExecute; }; // Clean up in case there has not been played any sounds. _unit setVariable [QGVAR(playingInjuredSound), nil];