/* * 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 ACE_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" private ["_unit","_availableSounds_A","_availableSounds_B","_availableSounds_C","_sound", "_pain"]; 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. _availableSounds_A = [ "WoundedGuyA_01", "WoundedGuyA_02", "WoundedGuyA_03", "WoundedGuyA_04", "WoundedGuyA_05", "WoundedGuyA_06", "WoundedGuyA_07", "WoundedGuyA_08" ]; _availableSounds_B = [ "WoundedGuyB_01", "WoundedGuyB_02", "WoundedGuyB_03", "WoundedGuyB_04", "WoundedGuyB_05", "WoundedGuyB_06", "WoundedGuyB_07", "WoundedGuyB_08" ]; _availableSounds_C = [ "WoundedGuyC_01", "WoundedGuyC_02", "WoundedGuyC_03", "WoundedGuyC_04", "WoundedGuyC_05" ]; _sound = ""; // Select the to be played sound based upon damage amount. if (_pain > 0.5) then { if (random(1) > 0.5) then { _sound = _availableSounds_A select (round(random((count _availableSounds_A) - 1))); } else { _sound = _availableSounds_B select (round(random((count _availableSounds_B) - 1))); }; } else { _sound = _availableSounds_B select (round(random((count _availableSounds_B) - 1))); }; // 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"; _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 EFUNC(common,waitAndExecute); }; // Clean up in case there has not been played any sounds. _unit setvariable [QGVAR(playingInjuredSound),nil];