natoed Posted April 22, 2017 Report Share Posted April 22, 2017 has anybody had and luck adding safes and lockboxs to the AutoLockPicker.sqf! I just keep finding different ways of failing lol cheers natoed Link to comment Share on other sites More sharing options...
Drokz Posted April 22, 2017 Report Share Posted April 22, 2017 11 hours ago, natoed said: has anybody had and luck adding safes and lockboxs to the AutoLockPicker.sqf! I just keep finding different ways of failing lol cheers natoed https://github.com/xDrokZ/Arma-3-Epoch natoed 1 Link to comment Share on other sites More sharing options...
natoed Posted April 22, 2017 Report Share Posted April 22, 2017 Thanks Drokz yet another schoolboy error on my part, was using the wrong class names lol Link to comment Share on other sites More sharing options...
Grahame Posted May 8, 2017 Report Share Posted May 8, 2017 On 4/22/2017 at 0:34 PM, Drokz said: https://github.com/xDrokZ/Arma-3-Epoch Your version removes the lock-picking of doors though. To add storage in addition to doors you can do the following: (1) Add a new file fn_storageunlock.sqf to the ALP PBO with: Spoiler if(isServer) then { "ALPSTORAGEUNLOCK" addPublicVariableEventHandler {_this select 1 call unlock_storage}; unlock_storage = { private["_veh"]; _veh = _this select 0; _veh setVariable ["EPOCH_Locked", false, true]; _veh call EPOCH_server_save_storage; }; }; (2) Add the following line to the start of fn_alpinit.sqf: [] ExecVM "\a3_epoch_autolockpicker\fn_storageunlock.sqf"; (3) Re-PBO the ALP PBO and upload to @epochhive. (4) Replace AutoLockPicker.sqf in your mission file with the following and change the variables as you need them: Spoiler /* AutoLockPicker by second_coming (http://epochmod.com/forum/index.php?/user/16619-second-coming/) with help from SpiRe Allow players to have a chance to lock pick any vehicle or locked door (also a chance to eloctrocute on failed unlocking!) Initial Script Code: Stealthstick's "Explosive-To-Vehicle" Script Electrocution effect: http://www.altisliferpg.com/topic/224-effects-on-marijuana-use/ v1.2 Swapped to cursortarget instead of the nearest item to get around putting the AutoLockPicker onto the wrong item Added variables for the materials required Added EnergyRequired Added AllowLockPicksNear to stop multiple locks being placed together */ // ====================================================================================================================================================================================== // User configurable Variables // ====================================================================================================================================================================================== // Which locks can be opened LockpickLandVehicles = true; // All land vehicles (cars, vans, trucks etc) ::: acceptable values true or false LockpickAir = true; // Helis and jets ::: acceptable values true or false LockpickShip = true; // Boats, jetskis and submarines ::: acceptable values true or false LockpickEpochDoors = true; // Epoch build-able doors ::: acceptable values true or false LockpickEpochStorage = true; // Epoch lockable storage ::: acceptable values true or false // Chance to succeed or be electrocuted SuccessChanceVehicles = 30; // (Between 1-100) % Chance to successfully pick the lock SuccessChanceEpochDoors = 30; // (Between 1-100) % Chance to successfully pick the lock SuccessChanceEpochStorage = 30; // (Between 1-100) % Chance to successfully pick the lock ElectrocuteChance = 25; // (Between 1-100) % Chance of electrocution on if the lock pick fails // Damage Settings InflictDamage = true; // If true damage is added, if false just stun MinimumDamage = 50; // (Between 1-100) min% of full health Damage to inflict must be less than MaximumDamage MaximumDamage = 90; // (Between 1-100) max% of full health Damage to inflict must be more than MinimumDamage StunTime = 30; // Time in seconds to stun the player on electrocution (if it doesn't kill them) // Materials Required to Create AutoLockPicker EnergyRequired = 100; // Amount of energy expended operating AutoLockPicker (0 for zero energy required) MaterialRequired1 = 'CircuitParts'; // First material required to create AutoLockPicker (default is 'CircuitParts' or Electronic Component) MaterialRequired1Count = 1; MaterialRequired2 = 'ItemHotwire'; // Second material required to create AutoLockPicker (default is 'ItemCorrugated' or small metal parts) MaterialRequired2Count = 1; // Usage Restrictions AllowInSafeZone = true; // (Leave true if you don't use inSafezone) Allow use of AutoLockPicker in safezones // (using the boolean variable inSafezone set here http://epochmod.com/forum/index.php?/topic/32555-extended-safezone-script-working/) _MinimumPlayers = 0; // Number of players required online before the option to lock pick becomes available (set to 0 to always allow) AllowLockPicksNear = false; // (Leave true for no restriction) selecting false will make the script check if one has been placed within 5m of the player // ====================================================================================================================================================================================== // End of User configurable Variables // ====================================================================================================================================================================================== if(AllowInSafeZone && count playableUnits >= _MinimumPlayers) then { SafeToALP = true; } else { if(!inSafezone && count playableUnits >= _MinimumPlayers) then { SafeToALP = true; } else { SafeToALP = false; }; }; LockPickableItems = []; if(LockpickLandVehicles) then { LockPickableItems = LockPickableItems + ["LandVehicle"]; }; if(LockpickAir) then { LockPickableItems = LockPickableItems + ["Air"]; }; if(LockpickShip) then { LockPickableItems = LockPickableItems + ["Ship"]; }; if(LockpickEpochDoors) then { LockPickableItems = LockPickableItems + ["CinderWallGarage_EPOCH","WoodLargeWallDoorL_EPOCH","WoodLargeWallDoor_EPOCH"]; }; if(LockpickEpochStorage) then { LockPickableItems = LockPickableItems + ["LockBox_EPOCH","Safe_EPOCH"]; }; AutoLockPicker_MatsCheck = { _charge1 = _this select 0; _charge2 = _this select 1; _unit = _this select 2; _hasIt1 = _charge1 in (magazines _unit); _hasIt1Count = {_x == _charge1} count magazines player; _hasIt2 = _charge2 in (magazines _unit); _hasIt2Count = {_x == _charge2} count magazines player; _hasEnough = false; if(_hasIt1Count >= MaterialRequired1Count && _hasIt2Count >= MaterialRequired2Count) then { _hasEnough = true; }; _hasEnergy = false; if(EnergyRequired == 0 || EPOCH_playerEnergy - EnergyRequired >= 0) then { _hasEnergy = true; }; _CanPlace = false; _nearALP = nearestObjects [_unit,["Land_PortableLongRangeRadio_F"],5]; if(AllowLockPicksNear || (count _nearALP == 0 && !AllowLockPicksNear)) then { _CanPlace = true; }; _target = cursorTarget; _LockPickable = false; if ((typeOf cursorTarget) in LockPickableItems) then { _LockPickable = true; } else { if (_target isKindOf "LandVehicle" && LockpickLandVehicles) then { _LockPickable = true; }; if (_target isKindOf "Air" && LockpickAir) then { _LockPickable = true; }; if (_target isKindOf "Ship" && LockpickShip) then { _LockPickable = true; }; }; //hint format ["Target: %1 Lockpickable: %2 Locked: %3 Distance: %4",(typeOf cursorTarget),_LockPickable,locked cursorTarget,_unit distance cursorTarget]; _nearVehs = false; if (_LockPickable && _unit distance _target < 5 && (locked _target == 2 || locked _target == -1) ) then { _nearVehs = true; }; _return = (_hasEnough && _nearVehs && alive _unit && SafeToALP && _hasEnergy && _CanPlace); _return }; AutoLockPicker_Activate = { _array = _this select 3; _unit = _array select 0; _lockpicks = _unit getVariable ["lockpicks",[]]; { if(alive _x && SafeToALP) then { _nearVehicle = (nearestObjects [_x,LockPickableItems,5]) select 0; if ((typeOf _nearVehicle) in ["CinderWallGarage_EPOCH","WoodLargeWallDoorL_EPOCH","WoodLargeWallDoor_EPOCH"]) then { SuccessChance = SuccessChanceEpochDoors; } else { if ((typeOf _nearVehicle) in ["LockBox_EPOCH","Safe_EPOCH"]) then { SuccessChance = SuccessChanceEpochStorage; } else { SuccessChance = SuccessChanceVehicles; }; }; // Chance to unlock _chance = Ceil random 100; if(_chance <= SuccessChance) then { if ((typeOf _nearVehicle) in ["CinderWallGarage_EPOCH","WoodLargeWallDoorL_EPOCH","WoodLargeWallDoor_EPOCH"]) then { // Unlock the door or vehicle deleteVehicle _x; ALPUNLOCK = [_nearVehicle]; uiSleep 3; publicVariableServer "ALPUNLOCK"; uiSleep 1; } else { if ((typeOf _nearVehicle) in ["LockBox_EPOCH","Safe_EPOCH"]) then { // Unlock the door or vehicle deleteVehicle _x; ALPSTORAGEUNLOCK = [_nearVehicle]; uiSleep 3; publicVariableServer "ALPSTORAGEUNLOCK"; uiSleep 1; } else { // Unlock the door or vehicle deleteVehicle _x; ALPUNLOCK = [_nearVehicle]; uiSleep 3; publicVariableServer "ALPUNLOCK"; uiSleep 1; }; }; if ((typeOf _nearVehicle) in ["CinderWallGarage_EPOCH","WoodLargeWallDoorL_EPOCH","WoodLargeWallDoor_EPOCH"]) then { hint "The AutoLockPicker worked! Opening door"; _nearVehicle animate ['open_left', 1]; _nearVehicle animate ['open_right', 1]; _nearVehicle animate ['Open_Door', 1]; } else { hint "The AutoLockPicker worked! Unlocking..."; } } else { _chance2 = Ceil random 100; if(_chance2 <= ElectrocuteChance) then { // Chance of electrocution _DamagetoInflict = (Ceil random (MaximumDamage - MinimumDamage))/100; _damage = Damage player; _damage = _damage + (MinimumDamage/100) + _DamagetoInflict; playSound "shocker"; if(_damage > 1 && InflictDamage) then { hint "The AutoLockPicker malfunctioned and electrocuted you"; // Activate ppEffects "chromAberration" ppEffectEnable true; "radialBlur" ppEffectEnable true; enableCamShake true; // 5secs of effects for "_i" from 0 to 4 do { "chromAberration" ppEffectAdjust [random 0.25,random 0.25,true]; "chromAberration" ppEffectCommit 1; "radialBlur" ppEffectAdjust [random 0.02,random 0.02,0.15,0.15]; "radialBlur" ppEffectCommit 1; addcamShake[random 3, 1, random 3]; uiSleep 1; }; //Stop effects "chromAberration" ppEffectAdjust [0,0,true]; "chromAberration" ppEffectCommit 5; "radialBlur" ppEffectAdjust [0,0,0,0]; "radialBlur" ppEffectCommit 5; uiSleep 6; //Deactivate ppEffects "chromAberration" ppEffectEnable false; "radialBlur" ppEffectEnable false; resetCamShake; player setDamage 1; } else { hint "The AutoLockPicker malfunctioned and gave you an electric shock"; if(InflictDamage) then { player setDamage _damage; }; player playMove "amovpknlmstpsraswrfldnon"; // Activate ppEffects "chromAberration" ppEffectEnable true; "radialBlur" ppEffectEnable true; enableCamShake true; uiSleep 1; // Stop the player from moving while shocked player enablesimulation false; // StunTime seconds of effects for "_i" from 0 to StunTime do { "chromAberration" ppEffectAdjust [random 0.25,random 0.25,true]; "chromAberration" ppEffectCommit 1; "radialBlur" ppEffectAdjust [random 0.02,random 0.02,0.15,0.15]; "radialBlur" ppEffectCommit 1; addcamShake[random 3, 1, random 3]; uiSleep 1; }; player enablesimulation true; //Stop effects "chromAberration" ppEffectAdjust [0,0,true]; "chromAberration" ppEffectCommit 5; "radialBlur" ppEffectAdjust [0,0,0,0]; "radialBlur" ppEffectCommit 5; uiSleep 6; //Deactivate ppEffects "chromAberration" ppEffectEnable false; "radialBlur" ppEffectEnable false; resetCamShake; }; deleteVehicle _x; } else { hint "The AutoLockPicker failed to unlock the door, try again"; deleteVehicle _x; } }; }; } forEach _lockpicks; _unit setVariable ["lockpicks",[]]; }; AutoLockPicker_UnitCheck = { private "_return"; _unit = _this select 0; _lockpicks = _unit getVariable ["lockpicks",[]]; if(count _lockpicks > 0) then { _return = true; } else { _return = false; }; _return }; AutoLockPicker_AttachALP = { _array = _this select 3; _charge = _array select 0; _unit = _array select 1; private "_class"; for "_i" from 1 to MaterialRequired1Count step 1 do { _unit removemagazine MaterialRequired1; uiSleep 0.1; }; for "_i" from 1 to MaterialRequired2Count step 1 do { _unit removemagazine MaterialRequired2; uiSleep 0.1; }; EPOCH_playerEnergy = EPOCH_playerEnergy - EnergyRequired; _unit playMove "AinvPercMstpSnonWnonDnon_Putdown_AmovPercMstpSnonWnonDnon"; switch _charge do { case "Land_PortableLongRangeRadio_F": { _class = "Land_PortableLongRangeRadio_F"; }; }; _nearVehicle = (nearestObjects [_unit,LockPickableItems,5]) select 0; _autolockpick = _class createVehicle [0,0,0]; _autolockpick attachTo [_unit,[0,0,0],"leftHand"]; _random0 = random 180; _random1 = random 180; [_autolockpick,_random0,_random1] call BIS_fnc_SetPitchBank; [_autolockpick,_nearVehicle,_unit,_random0,_random1] spawn { _autolockpick = _this select 0; _nearVehicle = _this select 1; _unit = _this select 2; _random0 = _this select 3; _random1 = _this select 4; uiSleep 1.5; _autolockpick attachTo [_nearVehicle, [0,0,0.2]]; [_autolockpick,_random0,_random1] call BIS_fnc_SetPitchBank; _unit setVariable ["lockpicks",(_unit getVariable ["lockpicks",[]]) + [_autolockpick]]; }; }; AutoLockPicker_Actions = { private ["_unit"]; _unit = _this select 0; _unit addAction ["<t color=""#0099FF"">" +"Attach AutoLockPicker", AutoLockPicker_AttachALP, ["Land_PortableLongRangeRadio_F",_unit], 1, true, true, "","[MaterialRequired1,MaterialRequired2,_target] call AutoLockPicker_MatsCheck"]; _unit addAction ["<t color=""#3D993D"">" +"Activate AutoLockPicker", AutoLockPicker_Activate, [_unit], 1, true, true, "","[_target] call AutoLockPicker_UnitCheck"]; }; //removeAllActions player; //======================= [player] call AutoLockPicker_Actions; (5) RePBO your mission file and upload, (6) Add !="ALPSTORAGEUNLOCK" to publicvariable.txt BattlEye filter. (7) Enjoy! Drokz and natoed 2 Link to comment Share on other sites More sharing options...
Drokz Posted May 8, 2017 Report Share Posted May 8, 2017 2 hours ago, Grahame said: Your version removes the lock-picking of doors though. To add storage in addition to doors you can do the following: (1) Add a new file fn_storageunlock.sqf to the ALP PBO with: Reveal hidden contents if(isServer) then { "ALPSTORAGEUNLOCK" addPublicVariableEventHandler {_this select 1 call unlock_storage}; unlock_storage = { private["_veh"]; _veh = _this select 0; _veh setVariable ["EPOCH_Locked", false, true]; _veh call EPOCH_server_save_storage; }; }; (2) Add the following line to the start of fn_alpinit.sqf: [] ExecVM "\a3_epoch_autolockpicker\fn_storageunlock.sqf"; (3) Re-PBO the ALP PBO and upload to @epochhive. (4) Replace AutoLockPicker.sqf in your mission file with the following and change the variables as you need them: Reveal hidden contents /* AutoLockPicker by second_coming (http://epochmod.com/forum/index.php?/user/16619-second-coming/) with help from SpiRe Allow players to have a chance to lock pick any vehicle or locked door (also a chance to eloctrocute on failed unlocking!) Initial Script Code: Stealthstick's "Explosive-To-Vehicle" Script Electrocution effect: http://www.altisliferpg.com/topic/224-effects-on-marijuana-use/ v1.2 Swapped to cursortarget instead of the nearest item to get around putting the AutoLockPicker onto the wrong item Added variables for the materials required Added EnergyRequired Added AllowLockPicksNear to stop multiple locks being placed together */ // ====================================================================================================================================================================================== // User configurable Variables // ====================================================================================================================================================================================== // Which locks can be opened LockpickLandVehicles = true; // All land vehicles (cars, vans, trucks etc) ::: acceptable values true or false LockpickAir = true; // Helis and jets ::: acceptable values true or false LockpickShip = true; // Boats, jetskis and submarines ::: acceptable values true or false LockpickEpochDoors = true; // Epoch build-able doors ::: acceptable values true or false LockpickEpochStorage = true; // Epoch lockable storage ::: acceptable values true or false // Chance to succeed or be electrocuted SuccessChanceVehicles = 30; // (Between 1-100) % Chance to successfully pick the lock SuccessChanceEpochDoors = 30; // (Between 1-100) % Chance to successfully pick the lock SuccessChanceEpochStorage = 30; // (Between 1-100) % Chance to successfully pick the lock ElectrocuteChance = 25; // (Between 1-100) % Chance of electrocution on if the lock pick fails // Damage Settings InflictDamage = true; // If true damage is added, if false just stun MinimumDamage = 50; // (Between 1-100) min% of full health Damage to inflict must be less than MaximumDamage MaximumDamage = 90; // (Between 1-100) max% of full health Damage to inflict must be more than MinimumDamage StunTime = 30; // Time in seconds to stun the player on electrocution (if it doesn't kill them) // Materials Required to Create AutoLockPicker EnergyRequired = 100; // Amount of energy expended operating AutoLockPicker (0 for zero energy required) MaterialRequired1 = 'CircuitParts'; // First material required to create AutoLockPicker (default is 'CircuitParts' or Electronic Component) MaterialRequired1Count = 1; MaterialRequired2 = 'ItemHotwire'; // Second material required to create AutoLockPicker (default is 'ItemCorrugated' or small metal parts) MaterialRequired2Count = 1; // Usage Restrictions AllowInSafeZone = true; // (Leave true if you don't use inSafezone) Allow use of AutoLockPicker in safezones // (using the boolean variable inSafezone set here http://epochmod.com/forum/index.php?/topic/32555-extended-safezone-script-working/) _MinimumPlayers = 0; // Number of players required online before the option to lock pick becomes available (set to 0 to always allow) AllowLockPicksNear = false; // (Leave true for no restriction) selecting false will make the script check if one has been placed within 5m of the player // ====================================================================================================================================================================================== // End of User configurable Variables // ====================================================================================================================================================================================== if(AllowInSafeZone && count playableUnits >= _MinimumPlayers) then { SafeToALP = true; } else { if(!inSafezone && count playableUnits >= _MinimumPlayers) then { SafeToALP = true; } else { SafeToALP = false; }; }; LockPickableItems = []; if(LockpickLandVehicles) then { LockPickableItems = LockPickableItems + ["LandVehicle"]; }; if(LockpickAir) then { LockPickableItems = LockPickableItems + ["Air"]; }; if(LockpickShip) then { LockPickableItems = LockPickableItems + ["Ship"]; }; if(LockpickEpochDoors) then { LockPickableItems = LockPickableItems + ["CinderWallGarage_EPOCH","WoodLargeWallDoorL_EPOCH","WoodLargeWallDoor_EPOCH"]; }; if(LockpickEpochStorage) then { LockPickableItems = LockPickableItems + ["LockBox_EPOCH","Safe_EPOCH"]; }; AutoLockPicker_MatsCheck = { _charge1 = _this select 0; _charge2 = _this select 1; _unit = _this select 2; _hasIt1 = _charge1 in (magazines _unit); _hasIt1Count = {_x == _charge1} count magazines player; _hasIt2 = _charge2 in (magazines _unit); _hasIt2Count = {_x == _charge2} count magazines player; _hasEnough = false; if(_hasIt1Count >= MaterialRequired1Count && _hasIt2Count >= MaterialRequired2Count) then { _hasEnough = true; }; _hasEnergy = false; if(EnergyRequired == 0 || EPOCH_playerEnergy - EnergyRequired >= 0) then { _hasEnergy = true; }; _CanPlace = false; _nearALP = nearestObjects [_unit,["Land_PortableLongRangeRadio_F"],5]; if(AllowLockPicksNear || (count _nearALP == 0 && !AllowLockPicksNear)) then { _CanPlace = true; }; _target = cursorTarget; _LockPickable = false; if ((typeOf cursorTarget) in LockPickableItems) then { _LockPickable = true; } else { if (_target isKindOf "LandVehicle" && LockpickLandVehicles) then { _LockPickable = true; }; if (_target isKindOf "Air" && LockpickAir) then { _LockPickable = true; }; if (_target isKindOf "Ship" && LockpickShip) then { _LockPickable = true; }; }; //hint format ["Target: %1 Lockpickable: %2 Locked: %3 Distance: %4",(typeOf cursorTarget),_LockPickable,locked cursorTarget,_unit distance cursorTarget]; _nearVehs = false; if (_LockPickable && _unit distance _target < 5 && (locked _target == 2 || locked _target == -1) ) then { _nearVehs = true; }; _return = (_hasEnough && _nearVehs && alive _unit && SafeToALP && _hasEnergy && _CanPlace); _return }; AutoLockPicker_Activate = { _array = _this select 3; _unit = _array select 0; _lockpicks = _unit getVariable ["lockpicks",[]]; { if(alive _x && SafeToALP) then { _nearVehicle = (nearestObjects [_x,LockPickableItems,5]) select 0; if ((typeOf _nearVehicle) in ["CinderWallGarage_EPOCH","WoodLargeWallDoorL_EPOCH","WoodLargeWallDoor_EPOCH"]) then { SuccessChance = SuccessChanceEpochDoors; } else { if ((typeOf _nearVehicle) in ["LockBox_EPOCH","Safe_EPOCH"]) then { SuccessChance = SuccessChanceEpochStorage; } else { SuccessChance = SuccessChanceVehicles; }; }; // Chance to unlock _chance = Ceil random 100; if(_chance <= SuccessChance) then { if ((typeOf _nearVehicle) in ["CinderWallGarage_EPOCH","WoodLargeWallDoorL_EPOCH","WoodLargeWallDoor_EPOCH"]) then { // Unlock the door or vehicle deleteVehicle _x; ALPUNLOCK = [_nearVehicle]; uiSleep 3; publicVariableServer "ALPUNLOCK"; uiSleep 1; } else { if ((typeOf _nearVehicle) in ["LockBox_EPOCH","Safe_EPOCH"]) then { // Unlock the door or vehicle deleteVehicle _x; ALPSTORAGEUNLOCK = [_nearVehicle]; uiSleep 3; publicVariableServer "ALPSTORAGEUNLOCK"; uiSleep 1; } else { // Unlock the door or vehicle deleteVehicle _x; ALPUNLOCK = [_nearVehicle]; uiSleep 3; publicVariableServer "ALPUNLOCK"; uiSleep 1; }; }; if ((typeOf _nearVehicle) in ["CinderWallGarage_EPOCH","WoodLargeWallDoorL_EPOCH","WoodLargeWallDoor_EPOCH"]) then { hint "The AutoLockPicker worked! Opening door"; _nearVehicle animate ['open_left', 1]; _nearVehicle animate ['open_right', 1]; _nearVehicle animate ['Open_Door', 1]; } else { hint "The AutoLockPicker worked! Unlocking..."; } } else { _chance2 = Ceil random 100; if(_chance2 <= ElectrocuteChance) then { // Chance of electrocution _DamagetoInflict = (Ceil random (MaximumDamage - MinimumDamage))/100; _damage = Damage player; _damage = _damage + (MinimumDamage/100) + _DamagetoInflict; playSound "shocker"; if(_damage > 1 && InflictDamage) then { hint "The AutoLockPicker malfunctioned and electrocuted you"; // Activate ppEffects "chromAberration" ppEffectEnable true; "radialBlur" ppEffectEnable true; enableCamShake true; // 5secs of effects for "_i" from 0 to 4 do { "chromAberration" ppEffectAdjust [random 0.25,random 0.25,true]; "chromAberration" ppEffectCommit 1; "radialBlur" ppEffectAdjust [random 0.02,random 0.02,0.15,0.15]; "radialBlur" ppEffectCommit 1; addcamShake[random 3, 1, random 3]; uiSleep 1; }; //Stop effects "chromAberration" ppEffectAdjust [0,0,true]; "chromAberration" ppEffectCommit 5; "radialBlur" ppEffectAdjust [0,0,0,0]; "radialBlur" ppEffectCommit 5; uiSleep 6; //Deactivate ppEffects "chromAberration" ppEffectEnable false; "radialBlur" ppEffectEnable false; resetCamShake; player setDamage 1; } else { hint "The AutoLockPicker malfunctioned and gave you an electric shock"; if(InflictDamage) then { player setDamage _damage; }; player playMove "amovpknlmstpsraswrfldnon"; // Activate ppEffects "chromAberration" ppEffectEnable true; "radialBlur" ppEffectEnable true; enableCamShake true; uiSleep 1; // Stop the player from moving while shocked player enablesimulation false; // StunTime seconds of effects for "_i" from 0 to StunTime do { "chromAberration" ppEffectAdjust [random 0.25,random 0.25,true]; "chromAberration" ppEffectCommit 1; "radialBlur" ppEffectAdjust [random 0.02,random 0.02,0.15,0.15]; "radialBlur" ppEffectCommit 1; addcamShake[random 3, 1, random 3]; uiSleep 1; }; player enablesimulation true; //Stop effects "chromAberration" ppEffectAdjust [0,0,true]; "chromAberration" ppEffectCommit 5; "radialBlur" ppEffectAdjust [0,0,0,0]; "radialBlur" ppEffectCommit 5; uiSleep 6; //Deactivate ppEffects "chromAberration" ppEffectEnable false; "radialBlur" ppEffectEnable false; resetCamShake; }; deleteVehicle _x; } else { hint "The AutoLockPicker failed to unlock the door, try again"; deleteVehicle _x; } }; }; } forEach _lockpicks; _unit setVariable ["lockpicks",[]]; }; AutoLockPicker_UnitCheck = { private "_return"; _unit = _this select 0; _lockpicks = _unit getVariable ["lockpicks",[]]; if(count _lockpicks > 0) then { _return = true; } else { _return = false; }; _return }; AutoLockPicker_AttachALP = { _array = _this select 3; _charge = _array select 0; _unit = _array select 1; private "_class"; for "_i" from 1 to MaterialRequired1Count step 1 do { _unit removemagazine MaterialRequired1; uiSleep 0.1; }; for "_i" from 1 to MaterialRequired2Count step 1 do { _unit removemagazine MaterialRequired2; uiSleep 0.1; }; EPOCH_playerEnergy = EPOCH_playerEnergy - EnergyRequired; _unit playMove "AinvPercMstpSnonWnonDnon_Putdown_AmovPercMstpSnonWnonDnon"; switch _charge do { case "Land_PortableLongRangeRadio_F": { _class = "Land_PortableLongRangeRadio_F"; }; }; _nearVehicle = (nearestObjects [_unit,LockPickableItems,5]) select 0; _autolockpick = _class createVehicle [0,0,0]; _autolockpick attachTo [_unit,[0,0,0],"leftHand"]; _random0 = random 180; _random1 = random 180; [_autolockpick,_random0,_random1] call BIS_fnc_SetPitchBank; [_autolockpick,_nearVehicle,_unit,_random0,_random1] spawn { _autolockpick = _this select 0; _nearVehicle = _this select 1; _unit = _this select 2; _random0 = _this select 3; _random1 = _this select 4; uiSleep 1.5; _autolockpick attachTo [_nearVehicle, [0,0,0.2]]; [_autolockpick,_random0,_random1] call BIS_fnc_SetPitchBank; _unit setVariable ["lockpicks",(_unit getVariable ["lockpicks",[]]) + [_autolockpick]]; }; }; AutoLockPicker_Actions = { private ["_unit"]; _unit = _this select 0; _unit addAction ["<t color=""#0099FF"">" +"Attach AutoLockPicker", AutoLockPicker_AttachALP, ["Land_PortableLongRangeRadio_F",_unit], 1, true, true, "","[MaterialRequired1,MaterialRequired2,_target] call AutoLockPicker_MatsCheck"]; _unit addAction ["<t color=""#3D993D"">" +"Activate AutoLockPicker", AutoLockPicker_Activate, [_unit], 1, true, true, "","[_target] call AutoLockPicker_UnitCheck"]; }; //removeAllActions player; //======================= [player] call AutoLockPicker_Actions; (5) RePBO your mission file and upload, (6) Add !="ALPSTORAGEUNLOCK" to publicvariable.txt BattlEye filter. (7) Enjoy! I know coz i dont want them to be lockpicked :D Grahame 1 Link to comment Share on other sites More sharing options...