Why not just use an eventhandler "fired", that checks for "close by" units that then move to the firing units position.
firing.sqf_shooter = _this select 0;
_spotters = nearestObjects [vehicle _shooter, ["AllVehicles"], 100];
{_x doMove getpos _shooter} forEach spotters;
Change the number "100" to whatever distance you think is reasonable for hearing the shots and moving there. Higher number = more lag
You could simply include side, group or unit checks in this script as well , so not everyone moves there. Maybe some civilian units should run away instead
isServer is also recommended if in MP