Browse Source

finish refueling

thefloff 4 years ago
parent
commit
1b9dd94dee

+ 2 - 1
addons - Copy/RD501_Main/XEH_preInit.sqf

@@ -68,7 +68,8 @@ macro_prep_xeh(nightvision.sqf,nightvision)
 //magclamp
 macro_prep_xeh(magclamp\magclamp.sqf,magclamp)
 macro_prep_xeh(magclamp\fnc_startRefuel.sqf,mc_startRefuel)
-macro_prep_xeh(magclamp\fnc_stopRefuel.sqf,mc_stopRefuel)
+macro_prep_xeh(magclamp\fnc_canRefuel.sqf,mc_canRefuel)
+macro_prep_xeh(magclamp\fnc_canStopRefuel.sqf,mc_canStopRefuel)
 
 //HUD color
 macro_prep_xeh(hud_color_change.sqf,change_hud_color)

+ 7 - 0
addons - Copy/RD501_Main/functions/magclamp/fnc_canRefuel.sqf

@@ -0,0 +1,7 @@
+params["_vehicle"];
+
+if (!(driver _vehicle == player)) exitWith{false};
+if (!alive _vehicle) exitWith{false};
+if (isNull (_vehicle getVariable["RD501_mc_attached_large", objNull])) exitWith{false};
+if (_vehicle getVariable["RD501_mc_lastRefuelTick", -1] != -1) exitWith{false};
+true

+ 7 - 0
addons - Copy/RD501_Main/functions/magclamp/fnc_canStopRefuel.sqf

@@ -0,0 +1,7 @@
+params["_vehicle"];
+
+if (!(driver _vehicle == player)) exitWith{false};
+if (!alive _vehicle) exitWith{false};
+if (isNull (_vehicle getVariable["RD501_mc_attached_large", objNull])) exitWith{false};
+if (_vehicle getVariable["RD501_mc_lastRefuelTick", -1] == -1) exitWith{false};
+true

+ 21 - 14
addons - Copy/RD501_Main/functions/magclamp/fnc_startRefuel.sqf

@@ -26,7 +26,20 @@ _vehicle setVariable["RD501_mc_nextRefuelUpdate", 0.1, true];
     params ["_args", "_pfID"];
     _args params ["_target", "_source", "_rate", "_maxFuelSource", "_maxFuelTarget"];
 
-    private _stop = _source getVariable["RD501_mc_stop_refuel", false];
+    if (!alive _source || {!alive _sink}) then 
+    {
+        _vehicle setVariable["RD501_mc_lastRefuelTick", nil, true];
+        _vehicle setVariable["RD501_mc_nextRefuelUpdate", nil, true];
+        [_pfID] call CBA_fnc_removePerFrameHandler;
+    };
+
+    if (_source getVariable["RD501_mc_stop_refuel", false]) then
+    {
+        hint "Refueling stopped";
+        _vehicle setVariable["RD501_mc_lastRefuelTick", nil, true];
+        _vehicle setVariable["RD501_mc_nextRefuelUpdate", nil, true];
+        [_pfID] call CBA_fnc_removePerFrameHandler;
+    };
 
     private _currentTime = 0;
     if (isMultiplayer) then
@@ -36,12 +49,11 @@ _vehicle setVariable["RD501_mc_nextRefuelUpdate", 0.1, true];
     {
         _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 _deltaT = _currentTime - (_source getVariable["RD501_mc_lastRefuelTick", 0]);
     private _transfer = _rate * _deltaT;
 
     private _target_new_fuel = ((_target_fuel + _transfer) / _maxFuelTarget);
@@ -53,27 +65,22 @@ _vehicle setVariable["RD501_mc_nextRefuelUpdate", 0.1, true];
     {
         _target_new_fuel = 1.0;
         hint "Refueling complete";
-        _stop = true;
+        _vehicle setVariable["RD501_mc_lastRefuelTick", nil, true];
+        _vehicle setVariable["RD501_mc_nextRefuelUpdate", nil, true];
+        [_pfID] call CBA_fnc_removePerFrameHandler;
     } else 
     {
         if (_target_new_fuel >= _last_update) then
         {
             _last_update = round(_target_new_fuel * 10) / 10;
-            hint format ["Refueling at %1", _last_update];
+            hint format ["Refueling at %1 percent", str (_last_update*100)];
             _source setVariable["RD501_mc_nextRefuelUpdate", _last_update+0.1, true];
         };
     };
 
-    systemChat format ["Refuel status: %1", _target_new_fuel * 100];
-
-    _target setVariable ["RD501_mc_targetFuel", _target_new_fuel];
-    ["RD501_mc_set_fuel", [], _target] call CBA_fnc_targetEvent;
+    ["RD501_mc_set_fuel", _target_new_fuel, _target] call CBA_fnc_targetEvent;
 
     _source setFuel _source_new_fuel;
     _source setVariable["RD501_mc_lastRefuelTick", _currentTime, true];
 
-    if (_stop) then
-    {
-        [_pfID] call CBA_fnc_removePerFrameHandler;
-    };
 }, 1, [_attached, _vehicle, _rate, _maxFuelSource, _maxFuelTarget]] call CBA_fnc_addPerFrameHandler;

+ 0 - 4
addons - Copy/RD501_Main/functions/magclamp/fnc_stopRefuel.sqf

@@ -1,4 +0,0 @@
-params["_vehicle"];
-
-systemChat "stopping refuel";
-_vehicle setVariable["RD501_mc_stop_refuel",true,true];

+ 7 - 3
addons - Copy/RD501_Main/functions/magclamp/magclamp.sqf

@@ -20,7 +20,7 @@ macro_grp_fnc_name(magclamp,handle_universal) = {
 	    private _is_attached = _target getVariable["RD501_mc_is_attached",false];
 	    private _cant_be_clamped = (configFile >> "CfgVehicles" >> (typeOf _target) >> _forbid_param) call BIS_fnc_getCfgDataBool;
 
-	    while {_target isKindOf "Man" || _is_attached || _cant_be_clamped} do {
+	    while {_target == _vehicle || _target isKindOf "Man" || _is_attached || _cant_be_clamped} do {
 	        _target_index = _target_index + 1;
 	        _target = _objects select _target_index;
 	        _is_attached = _target getVariable["RD501_mc_is_attached",false];
@@ -40,6 +40,10 @@ macro_grp_fnc_name(magclamp,handle_universal) = {
 	} else {
 	    detach _attached;
 	    _vehicle setVariable[_attached_var,objNull,true];
+        if (_mc_pos == "RD501_magclamp_large") then
+        {
+            _vehicle setVariable["RD501_mc_stop_refuel",true,true];
+        };
 	    _attached setVariable["RD501_mc_is_attached",false,true];
 	};
 };
@@ -78,6 +82,7 @@ macro_grp_fnc_name(magclamp,handle_drop_all) = {
     _attached = _vehicle getVariable["RD501_mc_attached_large",objNull];
     if(isNull _attached) then {} else {
 	    detach _attached;
+        _vehicle setVariable["RD501_mc_stop_refuel",true,true];
 	    _vehicle setVariable["RD501_mc_attached_large",objNull,true];
 	    _attached setVariable["RD501_mc_is_attached",false,true];
     };
@@ -107,6 +112,5 @@ macro_grp_fnc_name(magclamp,handle_drop_all) = {
 ["RD501_mc_set_fuel", {
     _vehicle = (vehicle this);
     if (isNull _vehicle) exitWith {};
-    _new_fuel = _vehicle getVariable["RD501_mc_targetFuel", 0];
-    _vehicle setFuel _new_fuel;
+    _vehicle setFuel _this;
 }, []] call CBA_fnc_addEventHandlerArgs;

+ 1 - 1
addons - Copy/RD501_Vehicles/air/LAAT/common_stuff_swop.hpp

@@ -5,7 +5,7 @@ class EventHandlers : DefaultEventhandlers
 };
 
 RD501_magclamp_small_forbidden=1;
-RD501_magclamp_large_offset[]={0.0,0.0,-3.0};
+RD501_magclamp_large_offset[]={0.0,2.0,-3.5};
 
 	faction = macro_republic_faction
 	editorSubcategory = macro_editor_cat_air(Republic_heli)

+ 1 - 1
addons - Copy/RD501_Vehicles/air/LAAT/common_stuff_tcw.hpp

@@ -13,7 +13,7 @@ editorSubcategory = macro_editor_cat_air(Republic_heli)
 vehicleClass = macro_editor_vehicle_type_air(Republic)
 
 RD501_magclamp_small_forbidden=1;
-RD501_magclamp_large_offset[]={0.0,0.0,-3.0};
+RD501_magclamp_large_offset[]={0.0,1.6,-7.3};
 
 weapons[] = {
 	macro_basic_air_weapons,

+ 5 - 3
addons - Copy/RD501_Vehicles/air/LAAT/config.cpp

@@ -467,6 +467,8 @@ class CfgVehicles
 		RD501_magclamp_small_1[] = {-7.0,-2.0,-2.5};
 		RD501_magclamp_large[] = {0.0,-2.0,-2.0};
 		RD501_magclamp_small_2[] = {7.0,-2.0,-2.5};
+		RD501_magclamp_small_forbidden=1;
+		RD501_magclamp_large_offset[]={0.0,1.0,-4.5};
 
 		class ACE_SelfActions
 		{		
@@ -490,7 +492,7 @@ class CfgVehicles
 				radius = 20;
 				priority = 21;
 				onlyForPlayer = 1;
-				condition = "((player == driver this) AND (alive this))";
+				condition = "this call RD501_fnc_mc_canRefuel";
 				statement = "this call RD501_fnc_mc_startRefuel;";
 			};
 			class StopRefuel
@@ -502,8 +504,8 @@ class CfgVehicles
 				radius = 20;
 				priority = 21;
 				onlyForPlayer = 1;
-				condition = "((player == driver this) AND (alive this))";
-				statement = "this call RD501_fnc_mc_stopRefuel;";
+				condition = "this call RD501_fnc_mc_canStopRefuel";
+				statement = "_vehicle setVariable['RD501_mc_stop_refuel',true,true];";
 			};
 		};
 		class EventHandlers : DefaultEventhandlers {