params["_vehicle"]; private _rate = 10; private _attached = _vehicle getVariable["RD501_mc_attached_large",objNull]; _vehicle setVariable["RD501_mc_stop_refuel",false,true]; _maxFuelSource = getNumber (configFile >> "CfgVehicles" >> typeOf _vehicle >> "fuelCapacity"); _maxFuelTarget = getNumber (configFile >> "CfgVehicles" >> typeOf _attached >> "fuelCapacity"); private _firstTick = 0; if (isMultiplayer) then { _firstTick = serverTime; } else { _firstTick = time; }; _vehicle setVariable["RD501_mc_lastRefuelTick",_firstTick,true]; [{ params ["_args", "_pfID"]; _args params ["_target", "_source", "_rate", "_maxFuelSource", "_maxFuelTarget"]; private _currentTime = 0; if (isMultiplayer) then { _currentTime = serverTime; } else { _currentTime = time; }; private _lastTick = _source getVariable["RD501_mc_lastRefuelTick",objNull]; private _deltaT = _currentTime - _lastTick; private _target_fuel = (fuel _target) * _maxFuelTarget; private _source_fuel = (fuel _source) * _maxFuelSource; private _transfer = _rate * _deltaT; /* * REMOTE EXECUTE THIS */ _target setFuel ((_target_fuel + _transfer) / _maxFuelTarget); _source setFuel ((_source_fuel - _transfer) / _maxFuelSource); _source setVariable["RD501_mc_lastRefuelTick",_currentTime,true]; private _stop = _source getVariable["RD501_mc_stop_refuel",false]; if (_stop) then { [_pfID] call CBA_fnc_removePerFrameHandler; }; }, 1, [_attached, _vehicle, _rate, _maxFuelSource, _maxFuelTarget]] call CBA_fnc_addPerFrameHandler;