diff --git a/addons/advanced_ballistics/functions/fnc_handleFirePFH.sqf b/addons/advanced_ballistics/functions/fnc_handleFirePFH.sqf index 5874de96c4..63d5cc106f 100644 --- a/addons/advanced_ballistics/functions/fnc_handleFirePFH.sqf +++ b/addons/advanced_ballistics/functions/fnc_handleFirePFH.sqf @@ -27,7 +27,10 @@ _aceTimeSecond = floor ACE_time; _bulletSpeed = vectorMagnitude _bulletVelocity; if (!alive _bullet || _bulletSpeed < 100) then { - GVAR(allBullets) deleteAt (GVAR(allBullets) find _x); + GVAR(allBullets) deleteAt _forEachIndex; + + // An index was removed, remember to account for it + _forEachIndex = _forEachIndex - 1; } else { _bulletPosition = getPosASL _bullet; @@ -37,8 +40,7 @@ _aceTimeSecond = floor ACE_time; call compile ("ace_advanced_ballistics" callExtension format["simulate:%1:%2:%3:%4:%5:%6:%7", _index, _bulletVelocity, _bulletPosition, ACE_wind, ASLToATL(_bulletPosition) select 2, _aceTimeSecond, ACE_time - _aceTimeSecond]); }; - nil -} count +GVAR(allBullets); +} forEach GVAR(allBullets); if (GVAR(allBullets) isEqualTo []) then { [_this select 1] call CBA_fnc_removePerFrameHandler; diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index 069105418c..e17e04f40b 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -32,12 +32,13 @@ { // if condition is satisifed call statement if ((_x select 2) call (_x select 0)) then { - // make sure to delete the correct handle when multiple conditions are met in one frame - GVAR(waitUntilAndExecArray) deleteAt (GVAR(waitUntilAndExecArray) find _x); + GVAR(waitUntilAndExecArray) deleteAt _forEachIndex; (_x select 2) call (_x select 1); + + // An index was removed, remember to account for it + _forEachIndex = _forEachIndex - 1; }; - nil - } count +GVAR(waitUntilAndExecArray); + } forEach GVAR(waitUntilAndExecArray); END_COUNTER(waitAndExec); }, 0, []] call CBA_fnc_addPerFrameHandler; diff --git a/addons/common/functions/fnc_setVariablePublic.sqf b/addons/common/functions/fnc_setVariablePublic.sqf index 8dbaeffbd6..e74bf6d313 100644 --- a/addons/common/functions/fnc_setVariablePublic.sqf +++ b/addons/common/functions/fnc_setVariablePublic.sqf @@ -43,11 +43,13 @@ GVAR(setVariablePublicPFH) = [{ if (ACE_diagTime > _syncTime) then { // set value public _object setVariable [_varName, _object getVariable _varName, true]; - GVAR(setVariablePublicArray) deleteAt (GVAR(setVariablePublicArray) find _x); - GVAR(setVariableNames) deleteAt (GVAR(setVariableNames) find _x); + GVAR(setVariablePublicArray) deleteAt _forEachIndex; + GVAR(setVariableNames) deleteAt _forEachIndex; + + // An index was removed, remember to account for it + _forEachIndex = _forEachIndex - 1; }; - nil - } count +GVAR(setVariablePublicArray); + } forEach GVAR(setVariablePublicArray); if (GVAR(setVariablePublicArray) isEqualTo []) then { [GVAR(setVariablePublicPFH)] call CBA_fnc_removePerFrameHandler; diff --git a/addons/winddeflection/functions/fnc_updateTrajectoryPFH.sqf b/addons/winddeflection/functions/fnc_updateTrajectoryPFH.sqf index 393a5cd757..d032ce5bca 100644 --- a/addons/winddeflection/functions/fnc_updateTrajectoryPFH.sqf +++ b/addons/winddeflection/functions/fnc_updateTrajectoryPFH.sqf @@ -34,7 +34,10 @@ _bulletSpeed = vectorMagnitude _bulletVelocity; if ((!alive _bullet) || {(_bullet isKindOf "BulletBase") && {_bulletSpeed < 100}}) then { - GVAR(trackedBullets) deleteAt (GVAR(trackedBullets) find _x); + GVAR(trackedBullets) deleteAt _forEachIndex; + + // An index was removed, remember to account for it + _forEachIndex = _forEachIndex - 1; } else { if (_isWind) then { _trueVelocity = _bulletVelocity vectorDiff ACE_wind; @@ -50,7 +53,6 @@ }; _bullet setVelocity _bulletVelocity; }; - nil - } count +GVAR(trackedBullets); + } forEach GVAR(trackedBullets); // END_COUNTER(pfeh); }, GVAR(simulationInterval), [ACE_time]] call CBA_fnc_addPerFrameHandler;