2023-09-12 18:58:10 +00:00
|
|
|
#include "..\script_component.hpp"
|
2017-06-08 13:31:51 +00:00
|
|
|
/*
|
|
|
|
* Author: ACE-Team
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* Arguments:
|
|
|
|
* None
|
|
|
|
*
|
|
|
|
* Return Value:
|
|
|
|
* None
|
|
|
|
*
|
|
|
|
* Example:
|
|
|
|
* call ace_frag_fnc_pfhRound
|
|
|
|
*
|
|
|
|
* Public: No
|
|
|
|
*/
|
|
|
|
|
2021-11-07 23:20:57 +00:00
|
|
|
params ["_round", "_lastPos", "_lastVel", "_shellType", "_firedFrame", "_firedPos", "_doSpall", "_spallTrack", "_foundObjectHPIds", "_skip", "_explosive", "_indirectRange", "_force", "_fragPower"];
|
2016-05-30 16:37:03 +00:00
|
|
|
|
2016-10-26 22:16:31 +00:00
|
|
|
if (_round in GVAR(blackList)) exitWith {
|
2016-05-30 16:37:03 +00:00
|
|
|
false
|
|
|
|
};
|
|
|
|
|
|
|
|
if (!alive _round) exitWith {
|
2016-10-26 22:16:31 +00:00
|
|
|
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 {
|
2016-07-22 01:08:11 +00:00
|
|
|
// shotbullet, shotShell don't seem to explode when touching water, so don't create frags
|
2021-11-07 23:20:57 +00:00
|
|
|
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);
|
2017-04-11 15:33:56 +00:00
|
|
|
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;
|
2016-05-30 16:37:03 +00:00
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
2016-10-26 22:16:31 +00:00
|
|
|
if (_doSpall) then {
|
|
|
|
DEC(GVAR(spallIsTrackingCount));
|
2017-04-11 15:33:56 +00:00
|
|
|
TRACE_1("doSpall",_foundObjectHPIds);
|
2016-05-30 16:37:03 +00:00
|
|
|
{
|
2016-10-26 22:16:31 +00:00
|
|
|
if (!isNil "_x") then {
|
2016-05-30 16:37:03 +00:00
|
|
|
_x removeEventHandler ["hitPart", _foundObjectHPIds select _forEachIndex];
|
|
|
|
};
|
|
|
|
} forEach _spallTrack;
|
|
|
|
};
|
|
|
|
false
|
|
|
|
};
|
|
|
|
|
2016-10-26 22:16:31 +00:00
|
|
|
_this set [1, getPosASL _round];
|
|
|
|
_this set [2, velocity _round];
|
2016-05-30 16:37:03 +00:00
|
|
|
|
2016-10-26 22:16:31 +00:00
|
|
|
if (_doSpall) then {
|
2017-02-10 18:28:27 +00:00
|
|
|
private _scale = ((count GVAR(objects)) / GVAR(maxTrackPerFrame)) max 0.1;
|
2016-05-30 16:37:03 +00:00
|
|
|
[_round, _scale, _spallTrack, _foundObjectHPIds] call FUNC(spallTrack);
|
|
|
|
};
|
|
|
|
|
|
|
|
true
|