params["_ammo", "_target"]; private _health = _target getVariable ["rd501_shield_currentHealth", false]; if(_health isEqualTo false) exitWith { systemChat "[RD501][Shield][Hit Handler] Health not found"; }; _ammo params ["_directHit", "_indirectHit", "_indirectRange", "_explosionHit", "_ammoClass"]; private _hit = _directHit + (_indirectHit/(_indirectRange max 0.1)) + _explosionHit; private _result = _health - _hit; if(_result <= 0) then { _target setVariable ["rd501_shield_currentHealth", _result, true]; private _ehId = _target getVariable ["rd501_shield_ehId", -1]; ["rd501_shield_destroy", [_target], _target] call cba_fnc_targetEvent; _target removeEventHandler ["HitPart", _ehId]; } else { // Set locally only to reduce network traffic _target setVariable ["rd501_shield_currentHealth", _result]; [_target] call rd501_fnc_shield_checkState; private _delay = _target getVariable["rd501_shield_regenDelay", 5]; _target setVariable ["rd501_shield_regenStartsAt", diag_tickTime + _delay]; };