|
@@ -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);
|
|
|
+ };
|
|
|
+ };
|
|
|
+};
|