Search the Community
Showing results for tags 'silencer'.
Found 3 results
-
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}); " ];
-
mgi scripts ADAPT SILENCERS TO COMBAT/STEALTH SITUATION
pierremgi posted a topic in ARMA 3 - MISSION EDITING & SCRIPTING
ADAPT SILENCERS TO COMBAT/STEALTH SITUATION Hi all, Did you remark that AIs don't adapt their muzzle sound suppressor (silencer) with the ordered situation (STEALTH / COMBAT)?. Here is a little code for adding/removing existing silencer on current weapon. Notes: - by "existing", I means the silencer must be on weapon or inside unit's gear. Furthermore, as you can start with an already equipped silencer and no more room in gear, this script will record that in a variable and will be able to re-fit the silencer on weapon instead of losing him due to the lack of room. (a kind of extra pocket). - MP compatible but I intentionally worked at idle for better performance. If your unit's localization (PC owning it) is supposed to change, You'll need to make the variable broadcast (adding true as 3rd parameter). And, that's for the specific case your unit need the "extra pocket". - players are not concerned, but it's easy, for automatic adapted muzzle, to remove the isPlayer condition. - for performance, this script is not "on each framed". It could be. I chose to fire the code using the "animChanged" EH. In some cases, the unit can start to fire without changing its animation. So, try to order the new behavior in advance (Anims often change anyway). - some silencer can be non-removable, hard-coded with model, or simply don't exist! There is nothing to do with that. It's up to you to choose the right weapon. Tested on Vanilla and CUP. For other mods, have your own test. This will depend on how silencer classes are named. version Nov. 20th 2018 parameters: NONE { _x addEventHandler ["AnimChanged", { params ["_unit","","_silencer"]; if (!isplayer _unit) then { if (isnil {_unit getVariable "MGI_silencer"}) then { _unit setVariable ["MGI_silencer",[]] }; _silencers = (items _unit select {["_snds",_x] call bis_fnc_instring}) + (weapons _unit apply {_unit weaponAccessories _x param [0, ""]} select {_x != ""}) + (_unit getVariable "MGI_silencer"); call { if (behaviour _unit == "COMBAT" && {isNull objectParent _unit} && {_unit weaponAccessories currentMuzzle _unit param [0, ""] != ""}) exitWith { _silencer = _unit weaponAccessories currentMuzzle _unit param [0, ""]; call { if (currentWeapon _unit isEqualTo primaryWeapon _unit) exitWith { _unit removePrimaryWeaponItem _silencer; }; if (currentWeapon _unit isEqualTo handGunWeapon _unit) exitWith { _unit removeHandGunItem _silencer; }; }; call { if (_unit canAddItemToBackpack _silencer) exitWith { _unit addItemToBackpack _silencer; }; if (_unit canAddItemToVest _silencer) exitWith { _unit addItemToVest _silencer; }; if (_unit canAddItemToUniform _silencer) exitWith { _unit addItemToUniform _silencer; }; (_unit getVariable "MGI_silencer") pushBackUnique _silencer; }; }; if (behaviour _unit == "stealth" && {isNull objectParent _unit} && {_unit weaponAccessories currentMuzzle _unit param [0, ""] == ""}) exitWith { {_unit addWeaponItem [currentWeapon _unit,_x]} count _silencers; _silencer = _unit weaponAccessories currentMuzzle _unit param [0, ""]; if (_silencer in (_unit getVariable ["MGI_silencer",[]])) then { _unit setVariable ["MGI_silencer", (_unit getVariable "MGI_silencer") - [_silencer]]; } else { if (_silencer in items _unit) then {_unit removeitem _silencer}; }; }; }; }; }] } forEach (playableUnits + switchableUnits); -
I am wondering what is the range an AI will detect a gun being fired with a suppressor equipped? I want to make a mission where if the player gets detected while eliminating targets behind enemy lines, they will fail the mission. Therefore any insight into detection of suppressed gunfire by AI would be greatly appreciated as I cant find an existing forum which gives a simple answer to my question. Thank you.