//[unit, weapon, muzzle, mode, ammo, magazine, projectile] private ["_unit","_evType","_recordable","_inVehicle","_isPlayer","_isRocket","_dmgDistance","_isBallistic","_handled","_id","_firer","_distance","_weapon","_ammo","_killerID","_arc","_turretDir","_weaponDir","_pos1","_pos2","_facing","_firingArc","_isInFront","_isInRear"]; //Init //[unit, firer, distance, weapon, muzzle, mode, ammo] _unit = _this select 0; _firer = _this select 1; _distance = _this select 2; _weapon = _this select 3; _ammo = _this select 6; _killerID = _firer getVariable["MemberID",0]; _handled = false; _arc = 60; _isBallistic = (getNumber (configfile >> "CfgAmmo" >> _ammo >> "whistleOnFire") > 0); _dmgDistance = getNumber (configfile >> "CfgAmmo" >> _ammo >> "whistleDist"); _isRocket = ((_ammo isKindOf "RocketBase") and (_firer isKindOf "Man")); _isPlayer = (_unit == player); _inVehicle = (vehicle _unit != _unit); _evType = ""; _recordable = false; // Both the firer and those nearby (<=8m) go into "combat" to prevent ALT-F4 //diag_log ("DEBUG: AMMO TYPE: " +str(_ammo)); _firer setVariable["startcombattimer", 1, false]; if (_distance <= 8) then { _unit setVariable["startcombattimer", 1, false]; }; if (_inVehicle) exitWith{}; if (_firer == player) exitWith{}; //Is in danger angle? _turretDir = _firer weaponDirection _weapon; _weaponDir = ((_turretDir select 0) atan2 (_turretDir select 1)); _pos1 = getposATL _unit; _pos2 = getposATL _firer; _facing = ((_pos1 Select 0) - (_pos2 Select 0)) ATan2 ((_pos1 Select 1) - (_pos2 Select 1)); _firingArc = (_weaponDir - _facing); _firingArc = (-_firingArc) max (_firingArc); //In front? _isInFront = (_firingArc < _arc); _isInRear = (_firingArc > (180 - _arc)); //Ballistic Handler if ((_isBallistic and _isInFront) and (_distance < (_dmgDistance * 2))) then { if (_distance < _dmgDistance) then { //Will Cause Damage 1 call fnc_usec_bulletHit; [20,45] call fnc_usec_pitchWhine; //Visual , Sound if (_distance < ((_dmgDistance / 2) + 1)) then { //serious ballistic damage if (_isPlayer) then { _id = [] spawn player_death; }; [_unit,4] call fnc_usec_damageUnconscious; } else {; //Just Knocked out [_unit,0.5] call fnc_usec_damageUnconscious; }; } else { //Hit warn zone if (_unit == player) then { [10,20] call fnc_usec_pitchWhine; //Visual , Sound addCamShake [15, 0.8, 25]; }; }; } else { if (_isRocket and (_isInFront or _isInRear)) then { if ((_distance < 5) and !_handled) then { 1 call fnc_usec_bulletHit; [20,45] call fnc_usec_pitchWhine; //Visual , Sound // Dead if (_isPlayer) then { _id = [] spawn player_death; }; [_unit,2] call fnc_usec_damageUnconscious; }; if ((_distance < 10) and !_handled) then { [10,20] call fnc_usec_pitchWhine; //Visual , Sound // Unconscious [_unit,0.2] call fnc_usec_damageUnconscious; }; if ((_distance < 20) and !_handled and _isPlayer) then { // Warn [10,20] call fnc_usec_pitchWhine; //Visual , Sound addCamShake [15, 0.8, 25]; }; }; }; //Launcher Handler