Browse Source

Add jlts shield for bx shield

m3ales 4 years ago
parent
commit
ecf21bcd8c

+ 1 - 1
addons - Copy/RD501_Droids/droid_inits.hpp

@@ -26,7 +26,7 @@ class Extended_Init_EventHandlers
 	{
 		class rd501_equip_shield
 		{
-			init = "[] call JLTS_fnc_handleRiotShield";
+			init = "_this call rd501_fnc_jlts_shield_aiToggle";
 		};
 	};
 }

+ 3 - 0
addons - Copy/RD501_Main/XEH_preInit.sqf

@@ -159,4 +159,7 @@ macro_prep_xeh(fired_deployable\fnc_fired_deployable_personalShieldDeployServer.
 // Droideka Shield
 macro_prep_xeh(init\deka_shield_init.sqf,deka_shield_init)
 
+// JLTS Shield
+macro_prep_xeh(jlts_shield\fnc_jlts_shield_aiToggle.sqf,jlts_shield_aiToggle)
+
 diag_log "RD501 PREP Complete";

+ 97 - 0
addons - Copy/RD501_Main/functions/jlts_shield/fnc_jlts_shield_aiToggle.sqf

@@ -0,0 +1,97 @@
+/*
+ * Author: MrClock
+ * Modified by: Mirror
+ * [Originally] called from the "Equip/unequip riot shield" CBA keybind
+ * Modified to work directly with AI (just stripped out player specific stuff)
+ *
+ * Arguments:
+ * None
+ *
+ * Originally:
+ * [] call JLTS_fnc_handleRiotShield;
+ *
+ * Example:
+ * _this call rd501_jlts_shield_aiToggle;
+ *
+ * Return Value:
+ * None
+ */
+
+params["_unit"];
+
+private _weapon = currentWeapon _unit;
+if (_weapon == "") exitWith {false;};
+
+private _items = [_weapon,_unit,false,true] call JLTS_fnc_getWeaponItems;
+
+if (getNumber(configFile >> "CfgWeapons" >> _weapon >> "JLTS_canHaveShield") == 1 && {getNumber(configFile >> "CfgWeapons" >> _weapon >> "JLTS_isShielded") != 1}) then {
+	private _shield = [];
+	{
+		if (getNumber(configFile >> "CfgWeapons" >> _x >> "JLTS_isShieldItem") == 1) exitWith {
+			_shield = [_x,getText(configFile >> "CfgWeapons" >> _x >> "JLTS_shieldAttachment")]
+		};
+	} forEach items _unit;
+	if (_shield isEqualTo []) exitWith {false};
+	[_unit,_weapon,_items,_shield] params["_unit","_weapon","_items","_shield"];
+    private _shieldedVariant = getText(configFile >> "CfgWeapons" >> _weapon >> "JLTS_shieldedWeapon");
+    
+    [_unit,_weapon] call JLTS_fnc_magazineCorrection;
+    
+    [_unit,_shieldedVariant] remoteExec ["addWeapon",0,false];
+    
+    [_shieldedVariant,_unit,_items] call JLTS_fnc_addWeaponItems;
+    [_shieldedVariant,_unit,[_shield select 1]] call JLTS_fnc_addWeaponItems;
+        
+    _unit removeItem (_shield select 0);
+	
+} else {
+	if (getNumber(configFile >> "CfgWeapons" >> _weapon >> "JLTS_isShielded") == 1) then {
+		private _shield = [];
+		switch ([_weapon] call JLTS_fnc_getWeaponType) do {
+			case ("handgun"): {
+				private _shieldAttachment = (handgunItems _unit) select 3;
+				if (_shieldAttachment != "" && {getNumber(configFile >> "CfgWeapons" >> _shieldAttachment >> "JLTS_isShieldAttachment") == 1}) then {
+					private _shieldItem = getText(configFile >> "CfgWeapons" >> _shieldAttachment >> "JLTS_shieldItem");
+					_shield = [_shieldItem,_shieldAttachment];
+				};
+			};
+			case ("primary"): {
+				private _shieldAttachment = (primaryWeaponItems _unit) select 3;
+				if (_shieldAttachment != "" && {getNumber(configFile >> "CfgWeapons" >> _shieldAttachment >> "JLTS_isShieldAttachment") == 1}) then {
+					private _shieldItem = getText(configFile >> "CfgWeapons" >> _shieldAttachment >> "JLTS_shieldItem");
+					_shield = [_shieldItem,_shieldAttachment];
+				};
+			};
+			default {};
+		};
+
+		if (_shield isEqualTo []) then {
+			_shield = ["JLTS_riot_shield_item",""];
+		};
+		
+		if (!(_unit canAdd (_shield select 0))) then {
+            private _baseVariant = getText(configFile >> "CfgWeapons" >> _weapon >> "JLTS_baseWeapon");
+            [_unit,_weapon] call JLTS_fnc_magazineCorrection;
+            [_unit,_baseVariant] remoteExec ["addWeapon",0,false];
+            
+            if (_shield select 1 != "") then {
+                _items = _items - [_shield select 1];
+            };
+            [_baseVariant,_unit,_items] call JLTS_fnc_addWeaponItems;
+            [_unit] call JLTS_fnc_cleanUpShields;
+            private _weaponHolder = createVehicle["GroundWeaponHolder",getPos _unit,[],0,"CAN_COLLIDE"];
+            _weaponHolder setDir ((getDir _unit) - random[5,10,15]);
+            _weaponHolder addItemCargoGlobal [_shield select 0,1];
+		} else {
+			private _baseVariant = getText(configFile >> "CfgWeapons" >> _weapon >> "JLTS_baseWeapon");
+            [_unit,_weapon] call JLTS_fnc_magazineCorrection;
+            [_unit,_baseVariant] remoteExec ["addWeapon",0,false];
+            if (_shield select 1 != "") then {
+                _items = _items - [_shield select 1];
+            };
+            [_baseVariant,_unit,_items] call JLTS_fnc_addWeaponItems;
+            [_unit] call JLTS_fnc_cleanUpShields;
+            _unit addItem (_shield select 0);
+		};
+	};
+};