Jump to content

Recommended Posts

HI.

Maybe someone can find this usable.

Adds/removes silencer to player group units according to player group combat mode.

If someone's gun cant be equipped with silencer and unit has handgun with silencer, unit will change weapon and hold it  until combat mode change.

 

/*
file: automuzzle.sqf
by DaVidoSS

description:
Adds/removes silencer to player group units according to player group combat mode.
If someone's gun cant be equipped with silencer and unit has handgun with silencer,
unit will change weapon and hold it  until combat mode change.

parameters:
none
return:
VOID
usage:
//initPlayerLocal.sqf or init.sqf

if (hasInterface) then {
	0 = [] execVM "automuzzle.sqf";
};

*/


private _automuzzle = createTrigger ["EmptyDetector", [0, 0, 0], false];
_automuzzle setTriggerActivation ["NONE", "PRESENT", true];
_automuzzle setTriggerStatements [
	"((behaviour player) == 'STEALTH') && {(leader (group player)) == player}",
	"
		private _fnc_getMuzzle = {  
			params [['_weapon','',['']]];
			private _configmuzzles = configfile >> 'CfgWeapons' >> _weapon >> 'WeaponSlotsInfo' >> 'MuzzleSlot' >> 'compatibleItems';  
			private _return = [];
			if (isClass _configmuzzles) then { 
				_return = configProperties [_configmuzzles, 'isNumber _x'] select {getNumber _x > 0} apply {configName _x}; 
			} else { 
				if (isArray _configmuzzles) then { 
					_return = getArray _configmuzzles; 
				}; 
			}; 
			(_return) 
		}; 
		
		private ['_unit', '_primaryWeapon','_handGun', '_muzzleSlotItem', '_compatiblePrimMuzzleItems','_compatiblePistolMuzzleItems'];
		{
			_unit = _x;

			if (alive _unit && {isNull (objectParent _unit)}) then {
				_primaryWeapon = primaryWeapon _unit;
				_handGun = handgunWeapon _unit;
				_compatiblePrimMuzzleItems = [];
				_compatiblePistolMuzzleItems = [];
				
				if (_primaryWeapon != '') then {
					_muzzleSlotItem = '';
					_compatiblePrimMuzzleItems = [_primaryWeapon] call _fnc_getMuzzle;
					if !(_compatiblePrimMuzzleItems isEqualTo []) then {
						{
							if (_x in (items _unit) || _x in (primaryWeaponItems _unit)) exitWith {
								_muzzleSlotItem = _x;
							};
						} forEach _compatiblePrimMuzzleItems;
						
						if (_muzzleSlotItem != '') then {
							if (_muzzleSlotItem in (items _unit)) then {
								_unit removeItem _muzzleSlotItem;
							};
							if !(_muzzleSlotItem in (primaryWeaponItems _unit)) then {
								_unit addPrimaryWeaponItem _muzzleSlotItem;
							};
						} else {
							_muzzleSlotItem = selectRandom _compatiblePrimMuzzleItems;
							_unit addPrimaryWeaponItem _muzzleSlotItem;
						};
					};
				};
				
				if (_handGun != '') then {
					_muzzleSlotItem = '';
					_compatiblePistolMuzzleItems = [_handGun] call _fnc_getMuzzle;
					if !(_compatiblePistolMuzzleItems isEqualTo []) then {
						{
							if (_x in (items _unit) || _x in (handgunItems _unit)) exitWith {
								_muzzleSlotItem = _x;
							};
						} forEach _compatiblePistolMuzzleItems;
						
						if (_muzzleSlotItem != '') then {
							if (_muzzleSlotItem in (items _unit)) then {
								_unit removeItem _muzzleSlotItem;
							};
							if !(_muzzleSlotItem in (handgunItems _unit)) then {
								_unit addHandgunItem _muzzleSlotItem;
							};
						} else {
							_muzzleSlotItem = selectRandom _compatiblePistolMuzzleItems;
							_unit addHandgunItem _muzzleSlotItem;
						};
					};
				};
				
				if (_compatiblePrimMuzzleItems isEqualTo [] && {!(_compatiblePistolMuzzleItems isEqualTo [])}) then {
					_unit selectWeapon _handGun;
				};
				
			};
		} forEach ((units (group player)) select {!isPlayer _x});
	",
	"
		private _unit = objNull;
		{
			_unit = _x;

			if (alive _unit && {isNull (objectParent _unit)}) then {
			
				private _currentWeapon = currentWeapon _unit;
				(primaryWeaponItems _unit) params ['_muzzle','','',''];
				(handgunItems _unit) params ['_pmuzzle','','',''];
				
				if (_muzzle != '') then {
					_unit removePrimaryWeaponItem _muzzle;
					_unit addItem _muzzle;
				};
				if (_pmuzzle != '') then {
					_unit removeHandgunItem _pmuzzle;
					_unit addItem _pmuzzle;
				};
				if (_currentWeapon isEqualTo (handgunWeapon _unit)) then {
					_unit selectWeapon (primaryWeapon _unit);
				};
			};
		} forEach ((units (group player)) select {!isPlayer _x});
	"
];

 

  • Like 1
  • Thanks 3

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

×