fnc_startRefuel.sqf 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. params["_vehicle"];
  2. private _rate = 10;
  3. private _attached = _vehicle getVariable["RD501_mc_attached_large",objNull];
  4. _vehicle setVariable["RD501_mc_stop_refuel",false,true];
  5. _maxFuelSource = getNumber (configFile >> "CfgVehicles" >> typeOf _vehicle >> "fuelCapacity");
  6. _maxFuelTarget = getNumber (configFile >> "CfgVehicles" >> typeOf _attached >> "fuelCapacity");
  7. private _firstTick = 0;
  8. if (isMultiplayer) then
  9. {
  10. _firstTick = serverTime;
  11. } else
  12. {
  13. _firstTick = time;
  14. };
  15. _vehicle setVariable["RD501_mc_lastRefuelTick",_firstTick,true];
  16. [{
  17. params ["_args", "_pfID"];
  18. _args params ["_target", "_source", "_rate", "_maxFuelSource", "_maxFuelTarget"];
  19. private _currentTime = 0;
  20. if (isMultiplayer) then
  21. {
  22. _currentTime = serverTime;
  23. } else
  24. {
  25. _currentTime = time;
  26. };
  27. private _lastTick = _source getVariable["RD501_mc_lastRefuelTick",objNull];
  28. private _deltaT = _currentTime - _lastTick;
  29. private _target_fuel = (fuel _target) * _maxFuelTarget;
  30. private _source_fuel = (fuel _source) * _maxFuelSource;
  31. private _transfer = _rate * _deltaT;
  32. /*
  33. * REMOTE EXECUTE THIS
  34. */
  35. _target setFuel ((_target_fuel + _transfer) / _maxFuelTarget);
  36. _source setFuel ((_source_fuel - _transfer) / _maxFuelSource);
  37. _source setVariable["RD501_mc_lastRefuelTick",_currentTime,true];
  38. private _stop = _source getVariable["RD501_mc_stop_refuel",false];
  39. if (_stop) then
  40. {
  41. [_pfID] call CBA_fnc_removePerFrameHandler;
  42. };
  43. }, 1, [_attached, _vehicle, _rate, _maxFuelSource, _maxFuelTarget]] call CBA_fnc_addPerFrameHandler;