|
@@ -0,0 +1,55 @@
|
|
|
+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;
|