#include "..\script_component.hpp" /* * Author: ACE-Team * * * Arguments: * None * * Return Value: * None * * Example: * call ace_frag_fnc_pfhRound * * Public: No */ params ["_round", "_lastPos", "_lastVel", "_shellType", "_firedFrame", "_firedPos", "_doSpall", "_spallTrack", "_foundObjectHPIds", "_skip", "_explosive", "_indirectRange", "_force", "_fragPower"]; if (_round in GVAR(blackList)) exitWith { false }; if (!alive _round) exitWith { if ((diag_frameno - _firedFrame) > 1) then { //skip if deleted within a single frame if (_skip == 0) then { if ((_explosive > 0.5 && {_indirectRange >= 4.5} && {_fragPower >= 35}) || {_force == 1}) then { // shotbullet, shotShell don't seem to explode when touching water, so don't create frags if ((surfaceIsWater _lastPos) && {(toLower getText (configFile >> "CfgAmmo" >> _shellType >> "simulation")) in ["shotbullet", "shotshell"]}) exitWith {}; private _fuseDist = getNumber(configFile >> "CfgAmmo" >> _shellType >> "fuseDistance"); private _isArmed = _firedPos vectorDistance _lastPos >= _fuseDist; // rounds explode at exactly fuseDistance, so check inclusive TRACE_2("",_fuseDist,_isArmed); if (!_isArmed) exitWith {TRACE_1("round not armed",_this);}; TRACE_3("Sending frag event to server",_lastPos,_lastVel,_shellType); [QGVAR(frag_eh), [_lastPos,_lastVel,_shellType]] call CBA_fnc_serverEvent; }; }; }; if (_doSpall) then { DEC(GVAR(spallIsTrackingCount)); TRACE_1("doSpall",_foundObjectHPIds); { if (!isNil "_x") then { _x removeEventHandler ["hitPart", _foundObjectHPIds select _forEachIndex]; }; } forEach _spallTrack; }; false }; _this set [1, getPosASL _round]; _this set [2, velocity _round]; if (_doSpall) then { private _scale = ((count GVAR(objects)) / GVAR(maxTrackPerFrame)) max 0.1; [_round, _scale, _spallTrack, _foundObjectHPIds] call FUNC(spallTrack); }; true