fnc_jammersPFH.sqf 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. params["_args", "_handle"];
  2. _args params["_player"];
  3. /*
  4. * _jammers = [
  5. * [_jammer, _radius, _strength],
  6. * ["bis_o1", 1000, 400]
  7. * ];
  8. */
  9. if(!alive _player) exitWith { systemChat format["Player dead for %1", _handle] };
  10. _jammers = missionNamespace getVariable ["rd501_jammers",[]];
  11. // Exit if jammer list is empty, remove PFH and rely on someone else calling it via jammer placement
  12. if(count _jammers == 0) exitWith {
  13. [_handle] call CBA_fnc_removePerFrameHandler;
  14. _player setVariable ["rd501_jammers_pfh", -1];
  15. _player setVariable ["tf_receivingDistanceMultiplicator", 1];
  16. _player setVariable ["tf_transmittingDistanceMultiplicator", 1];
  17. };
  18. // Aggregate the mean interference (multiple jammers allowed)
  19. private _interference = 1;
  20. {
  21. _x params["_jammer", "_radius", "_strength"];
  22. private _distance = _player distance _jammer;
  23. if (_distance >= _radius) then { continue };
  24. private _specificInterference = _strength - ((_distance/_radius) * _strength) + 1;
  25. if(_interference == 1) then {
  26. _interference = _specificInterference;
  27. continue
  28. };
  29. _interference = (_interference + _specificInterference)/2; // Average of interference plus current
  30. } forEach _jammers;
  31. // Set interference locally
  32. _player setVariable ["tf_receivingDistanceMultiplicator", _interference];
  33. _player setVariable ["tf_transmittingDistanceMultiplicator", _interference];