Browse Source

Add reload action to all static weapons

m3ales 4 years ago
parent
commit
6c67043652

+ 3 - 3
addons - Copy/RD501_Main/XEH_postinit.sqf

@@ -30,7 +30,7 @@ call macro_fnc_name(magclamp);
 // Check every second for if the Loading Screen is still up and forcibly end it.
 _fnc_endLoadingScreen = {
 	params ["_args", "_handle"];
-	systemChat format["Ending LoadingScreen [Attempt %1]", _handle];
+	systemChat format["Ending LoadingScreen [Handle %1]", _handle];
 	endLoadingScreen;
 	_stillLoading = call BIS_fnc_isLoading;
 	if(!_stillLoading) exitWith {
@@ -38,6 +38,6 @@ _fnc_endLoadingScreen = {
 	};
 };
 [_fnc_endLoadingScreen, 5, []] call CBA_fnc_addPerFrameHandler;
-
 // Flip Backpack
-rd501_flip_vehicle_validBackpacks = ["RD501_JLTS_Clone_Flip_backpack"];
+rd501_flip_vehicle_validBackpacks = ["RD501_JLTS_Clone_Flip_backpack"];
+["rd501_external_reload", { _this call rd501_fnc_onReloadExternalHandler }, []] call CBA_fnc_addEventHandlerArgs;

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

@@ -105,4 +105,9 @@ macro_prep_xeh(reload_on_select\fnc_onWeaponFiredSwapToEmpty.sqf,onWeaponFiredSw
 
 // Flip backpack
 macro_prep_xeh(flip_vehicle\fnc_flipVehicle.sqf,flipVehicle)
-macro_prep_xeh(flip_vehicle\fnc_canFlipVehicle.sqf,canFlipVehicle)
+macro_prep_xeh(flip_vehicle\fnc_canFlipVehicle.sqf,canFlipVehicle)
+
+// Reload Externally
+macro_prep_xeh(external_reload\fnc_canReloadExternal.sqf,canReloadExternal)
+macro_prep_xeh(external_reload\fnc_reloadExternal.sqf,reloadExternal)
+macro_prep_xeh(external_reload\fnc_onReloadExternalHandler.sqf,onReloadExternalHandler)

+ 13 - 0
addons - Copy/RD501_Main/config.cpp

@@ -595,6 +595,19 @@ class CfgVehicles
 			};
 		};
 	};
+	class StaticWeapon: LandVehicle {
+		class ACE_Actions {
+			class ACE_MainActions {
+				class rd501_external_reload {
+					displayName = "Reload";
+					condition = "_this call rd501_fnc_canReloadExternal";
+					statement = "_this call rd501_fnc_reloadExternal";
+					exceptions[] = {};
+					runOnHover = 0;
+				};
+			};
+		};
+	};
 	class Man;
 	class CAManBase: Man
 	{

+ 10 - 0
addons - Copy/RD501_Main/functions/external_reload/fnc_canReloadExternal.sqf

@@ -0,0 +1,10 @@
+params ["_target", "_player", "_params"];
+if(!(alive _target) || !(alive _player)) exitWith { false };
+if(vehicle _target != _target) exitWith {false};
+_currentTurret = _target currentWeaponTurret [0];
+if(_currentTurret == "") then {
+	_currentTurret =  _target weaponsTurret [0] select 0;
+};
+_compatMags = [_currentTurret] call CBA_fnc_compatibleMagazines;
+_magazines = (magazinesAmmo _player) select {_x select 1 > 0 && (_x select 0) in _compatMags};
+count _magazines > 0

+ 5 - 0
addons - Copy/RD501_Main/functions/external_reload/fnc_onReloadExternalHandler.sqf

@@ -0,0 +1,5 @@
+params ["_target", "_magazine", "_ammoAmount"];
+{
+	_target removeMagazinesTurret [_magazine, _x];
+	_target addMagazineTurret [_magazine, _x, _ammoAmount];
+} forEach allTurrets _target;

+ 36 - 0
addons - Copy/RD501_Main/functions/external_reload/fnc_reloadExternal.sqf

@@ -0,0 +1,36 @@
+params ["_target", "_player", "_params"];
+
+_currentTurret = _target currentWeaponTurret [0];
+if(_currentTurret == "") then {
+	_currentTurret =  _target weaponsTurret [0] select 0;
+};
+_compatMags = [_currentTurret] call CBA_fnc_compatibleMagazines;
+
+
+_magazines = (magazinesAmmo _player) select {_x select 1 > 0 && (_x select 0) in _compatMags};
+_magazines sort false;
+if(count _magazines == 0) exitWith {
+	["No compatible mags found", true, 2, 0] call ace_common_fnc_displayText;
+};
+
+_magazine = _magazines select 0;
+_ammoAmount = _magazine select 1;
+_magazine = _magazine select 0;
+
+private _onFinish = {
+    (_this select 0) params ["_player", "_target", "_magazine", "_ammoAmount"];
+
+	[_player, _magazine, _ammoAmount] call ace_common_fnc_removeSpecificMagazine;
+
+	["rd501_external_reload", [_target, _magazine, _ammoAmount], [_target]] call CBA_fnc_targetEvent;
+	[format["Reloaded %1", _target], true, 2, 0] call ace_common_fnc_displayText;
+};
+
+private _onFailure = {
+    (_this select 0) params ["_player", "_target"];
+    [_player, "AmovPknlMstpSrasWrflDnon", 1] call ace_common_fnc_doAnimation;
+};
+
+[_player, "AinvPknlMstpSnonWnonDr_medic5", 0] call ace_common_fnc_doAnimation;
+
+[5, [_player, _target, _magazine, _ammoAmount], _onFinish, _onFailure, ("Reloading")] call ace_common_fnc_progressBar;