12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- /*
- * 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);
- };
- };
- };
|