mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Improve checking of unit items (#6350)
* Add uniqueItems function * Optimize dogtag children actions function * Optimize getDetonators item search * Store CfgWeapons lookup in getDetonators * Update items to use new function * Update items to use new function 2 * More optimization of uniqueItems function * Update items to use new function 3
This commit is contained in:
parent
7988622635
commit
803d497d8a
@ -43,6 +43,6 @@ private _magazines = magazines _player;
|
|||||||
private _action = [_x, _displayName, _picture, {[{_this call FUNC(attach)}, _this] call CBA_fnc_execNextFrame}, {true}, {}, _x] call EFUNC(interact_menu,createAction);
|
private _action = [_x, _displayName, _picture, {[{_this call FUNC(attach)}, _this] call CBA_fnc_execNextFrame}, {true}, {}, _x] call EFUNC(interact_menu,createAction);
|
||||||
_actions pushBack [_action, [], _target];
|
_actions pushBack [_action, [], _target];
|
||||||
};
|
};
|
||||||
} forEach ([_player, false] call CBA_fnc_uniqueUnitItems);
|
} forEach (_player call EFUNC(common,uniqueItems));
|
||||||
|
|
||||||
_actions
|
_actions
|
||||||
|
@ -20,7 +20,7 @@ params ["_unit", "_target"];
|
|||||||
//Check sides, Player has cableTie, target is alive and not already handcuffed
|
//Check sides, Player has cableTie, target is alive and not already handcuffed
|
||||||
|
|
||||||
(GVAR(allowHandcuffOwnSide) || {(side _unit) != (side _target)}) &&
|
(GVAR(allowHandcuffOwnSide) || {(side _unit) != (side _target)}) &&
|
||||||
{"ACE_CableTie" in (items _unit)} &&
|
{"ACE_CableTie" in (_unit call EFUNC(common,uniqueItems))} &&
|
||||||
{alive _target} &&
|
{alive _target} &&
|
||||||
{!(_target getVariable [QGVAR(isHandcuffed), false])} &&
|
{!(_target getVariable [QGVAR(isHandcuffed), false])} &&
|
||||||
{
|
{
|
||||||
|
@ -178,6 +178,7 @@ PREP(toHex);
|
|||||||
PREP(toNumber);
|
PREP(toNumber);
|
||||||
PREP(unhideUnit);
|
PREP(unhideUnit);
|
||||||
PREP(uniqueElements);
|
PREP(uniqueElements);
|
||||||
|
PREP(uniqueItems);
|
||||||
PREP(unloadPerson);
|
PREP(unloadPerson);
|
||||||
PREP(unloadPersonLocal);
|
PREP(unloadPersonLocal);
|
||||||
PREP(unmuteUnit);
|
PREP(unmuteUnit);
|
||||||
|
@ -261,6 +261,11 @@ TRACE_1("adding unit playerEH to set ace_player",isNull cba_events_oldUnit);
|
|||||||
ACE_player = (_this select 0);
|
ACE_player = (_this select 0);
|
||||||
}, true] call CBA_fnc_addPlayerEventHandler;
|
}, true] call CBA_fnc_addPlayerEventHandler;
|
||||||
|
|
||||||
|
// Clear uniqueItems cache on loadout change
|
||||||
|
["loadout", {
|
||||||
|
GVAR(uniqueItemsCache) = nil;
|
||||||
|
}] call CBA_fnc_addPlayerEventHandler;
|
||||||
|
|
||||||
GVAR(OldIsCamera) = false;
|
GVAR(OldIsCamera) = false;
|
||||||
|
|
||||||
[{
|
[{
|
||||||
|
@ -18,4 +18,4 @@
|
|||||||
|
|
||||||
params [["_unit", objNull, [objNull]], ["_item", "", [""]]];
|
params [["_unit", objNull, [objNull]], ["_item", "", [""]]];
|
||||||
|
|
||||||
_item in items _unit
|
_item in (_unit call EFUNC(common,uniqueItems))
|
||||||
|
39
addons/common/functions/fnc_uniqueItems.sqf
Normal file
39
addons/common/functions/fnc_uniqueItems.sqf
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
* Author: mharis001
|
||||||
|
* Returns list of unique items in a unit's inventory.
|
||||||
|
* Items are cached if unit is ACE_player.
|
||||||
|
*
|
||||||
|
* Arguments:
|
||||||
|
* 0: Unit <OBJECT>
|
||||||
|
*
|
||||||
|
* Return Value:
|
||||||
|
* Items <ARRAY>
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
* [_player] call ace_common_fnc_uniqueItems
|
||||||
|
*
|
||||||
|
* Public: No
|
||||||
|
*/
|
||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
params ["_unit"];
|
||||||
|
|
||||||
|
private _fnc_getItems = {
|
||||||
|
private _items = (getItemCargo uniformContainer _unit) select 0;
|
||||||
|
_items append ((getItemCargo vestContainer _unit) select 0);
|
||||||
|
_items append ((getItemCargo backpackContainer _unit) select 0);
|
||||||
|
|
||||||
|
_items arrayIntersect _items
|
||||||
|
};
|
||||||
|
|
||||||
|
// Use cached items list if unit is ACE_player
|
||||||
|
if (_unit isEqualTo ACE_player) then {
|
||||||
|
private _items = GVAR(uniqueItemsCache);
|
||||||
|
if (isNil "_items") then {
|
||||||
|
_items = call _fnc_getItems;
|
||||||
|
GVAR(uniqueItemsCache) = _items;
|
||||||
|
};
|
||||||
|
+_items
|
||||||
|
} else {
|
||||||
|
call _fnc_getItems;
|
||||||
|
};
|
@ -22,7 +22,7 @@ private _return = false;
|
|||||||
|
|
||||||
if !(_vehicleUsage) then {
|
if !(_vehicleUsage) then {
|
||||||
if (_item != "") then {
|
if (_item != "") then {
|
||||||
if (_item in items _unit) then {
|
if (_item in (_unit call EFUNC(common,uniqueItems))) then {
|
||||||
_unit removeItem _item;
|
_unit removeItem _item;
|
||||||
_return = true;
|
_return = true;
|
||||||
} else {
|
} else {
|
||||||
|
@ -36,7 +36,7 @@ class CfgVehicles {
|
|||||||
condition = "true";
|
condition = "true";
|
||||||
statement = "";
|
statement = "";
|
||||||
exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting"};
|
exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting"};
|
||||||
insertChildren = QUOTE(_this call DFUNC(addDogtagActions));
|
insertChildren = QUOTE(_player call DFUNC(addDogtagActions));
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -1,42 +1,33 @@
|
|||||||
/*
|
/*
|
||||||
* Author: SzwedzikPL
|
* Author: SzwedzikPL, mharis001
|
||||||
* Creates one action per dogtag.
|
* Returns children actions for checking dogtags in player's inventory.
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* 0: Target <OBJECT>
|
* 0: Player <OBJECT>
|
||||||
* 1: Player <OBJECT>
|
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* Children actions <ARRAY>
|
* Actions <ARRAY>
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
* _childrenActions = [unit, player] call ace_dogtags_fnc_addDogtagActions
|
* [_player] call ace_dogtags_fnc_addDogtagActions
|
||||||
*
|
*
|
||||||
* Public: No
|
* Public: No
|
||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
params ["_target", "_player"];
|
params ["_player"];
|
||||||
|
|
||||||
//Get all dogtags and their ids
|
private _cfgWeapons = configFile >> "CfgWeapons";
|
||||||
private _unitDogtags = [];
|
|
||||||
private _unitDogtagIDs = [];
|
|
||||||
{
|
|
||||||
private _id = getNumber (configFile >> "CfgWeapons" >> _x >> QGVAR(tagID));
|
|
||||||
if (_id > 0) then {
|
|
||||||
_unitDogtags pushBack _x;
|
|
||||||
_unitDogtagIDs pushBack _id;
|
|
||||||
};
|
|
||||||
} forEach items _player;
|
|
||||||
|
|
||||||
//Create action children for all dogtags
|
|
||||||
private _actions = [];
|
private _actions = [];
|
||||||
{
|
|
||||||
private _displayName = getText (configFile >> "CfgWeapons" >> _x >> "displayName");
|
|
||||||
private _picture = getText (configFile >> "CfgWeapons" >> _x >> "picture");
|
|
||||||
|
|
||||||
|
{
|
||||||
|
private _config = _cfgWeapons >> _x;
|
||||||
|
if (getNumber (_config >> QGVAR(tagID)) > 0) then {
|
||||||
|
private _displayName = getText (_config >> "displayName");
|
||||||
|
private _picture = getText (_config >> "picture");
|
||||||
private _action = [_x, _displayName, _picture, {_this call FUNC(checkDogtagItem)}, {true}, {}, _x] call EFUNC(interact_menu,createAction);
|
private _action = [_x, _displayName, _picture, {_this call FUNC(checkDogtagItem)}, {true}, {}, _x] call EFUNC(interact_menu,createAction);
|
||||||
_actions pushBack [_action, [], _player];
|
_actions pushBack [_action, [], _player];
|
||||||
} forEach _unitDogtags;
|
};
|
||||||
|
} forEach (_player call EFUNC(common,uniqueItems));
|
||||||
|
|
||||||
_actions
|
_actions
|
||||||
|
@ -24,7 +24,7 @@ if (isNull _explosive) exitWith {
|
|||||||
deleteVehicle _target;
|
deleteVehicle _target;
|
||||||
false
|
false
|
||||||
};
|
};
|
||||||
if (vehicle _unit != _unit || {!("ACE_DefusalKit" in (items _unit))}) exitWith {false};
|
if (vehicle _unit != _unit || {!("ACE_DefusalKit" in (_unit call EFUNC(common,uniqueItems)))}) exitWith {false};
|
||||||
|
|
||||||
if (GVAR(RequireSpecialist) && {!([_unit] call EFUNC(Common,isEOD))}) exitWith {false};
|
if (GVAR(RequireSpecialist) && {!([_unit] call EFUNC(Common,isEOD))}) exitWith {false};
|
||||||
|
|
||||||
|
@ -1,25 +1,22 @@
|
|||||||
/*
|
/*
|
||||||
* Author: Garth 'L-H' de Wet
|
* Author: Garth 'L-H' de Wet, mharis001
|
||||||
* Returns all the detonators of the unit
|
* Returns all detonators the given unit has.
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* 0: Unit <OBJECT>
|
* 0: Unit <OBJECT>
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* Configs of all detonators <ARRAY>
|
* Config names of detonators <ARRAY>
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
* _detonators = [player] call ACE_Explosives_fnc_getDetonators;
|
* [_player] call ace_explosives_fnc_getDetonators
|
||||||
*
|
*
|
||||||
* Public: Yes
|
* Public: Yes
|
||||||
*/
|
*/
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
// IGNORE_PRIVATE_WARNING(_detonators);
|
|
||||||
|
|
||||||
params ["_unit"];
|
params ["_unit"];
|
||||||
TRACE_1("params",_unit);
|
TRACE_1("Getting detonators",_unit);
|
||||||
|
|
||||||
private _result = (items _unit) select {getNumber (ConfigFile >> "CfgWeapons" >> _x >> QGVAR(Detonator)) == 1};
|
private _cfgWeapons = configFile >> "CfgWeapons";
|
||||||
_result = _result arrayIntersect _result;
|
(_unit call EFUNC(common,uniqueItems)) select {getNumber (_cfgWeapons >> _x >> QGVAR(Detonator)) == 1};
|
||||||
|
|
||||||
_result
|
|
||||||
|
@ -25,7 +25,7 @@ if (_unit == ace_player) then {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Exit if no item
|
// Exit if no item
|
||||||
if (({_x == "ACE_DeadManSwitch"} count (items _unit)) == 0) exitWith {};
|
if !("ACE_DeadManSwitch" in (_unit call EFUNC(common,uniqueItems))) exitWith {};
|
||||||
|
|
||||||
private _range = getNumber (configFile >> "CfgWeapons" >> "ACE_DeadManSwitch" >> QGVAR(range));
|
private _range = getNumber (configFile >> "CfgWeapons" >> "ACE_DeadManSwitch" >> QGVAR(range));
|
||||||
private _deadman = [_unit, "DeadManSwitch"] call FUNC(getPlacedExplosives);
|
private _deadman = [_unit, "DeadManSwitch"] call FUNC(getPlacedExplosives);
|
||||||
|
@ -18,4 +18,4 @@
|
|||||||
|
|
||||||
params ["_caller", "_target"];
|
params ["_caller", "_target"];
|
||||||
|
|
||||||
("ACE_UAVBattery" in (items _caller)) && {(fuel _target) < 1} && {(speed _target) < 1} && {!(isEngineOn _target)} && {(_target distance _caller) <= 4}
|
("ACE_UAVBattery" in (_caller call EFUNC(common,uniqueItems))) && {(fuel _target) < 1} && {(speed _target) < 1} && {!(isEngineOn _target)} && {(_target distance _caller) <= 4}
|
||||||
|
@ -24,6 +24,6 @@ private _flashlights = [];
|
|||||||
if (isText (configFile >> "CfgWeapons" >> _x >> "ItemInfo" >> "FlashLight" >> "ACE_Flashlight_Colour")) then {
|
if (isText (configFile >> "CfgWeapons" >> _x >> "ItemInfo" >> "FlashLight" >> "ACE_Flashlight_Colour")) then {
|
||||||
_flashlights pushBackUnique _x;
|
_flashlights pushBackUnique _x;
|
||||||
};
|
};
|
||||||
} forEach (items _unit);
|
} forEach (_unit call EFUNC(common,uniqueItems));
|
||||||
|
|
||||||
_flashlights
|
_flashlights
|
||||||
|
@ -24,6 +24,6 @@ visibleMap &&
|
|||||||
} forEach (assignedItems ACE_player);
|
} forEach (assignedItems ACE_player);
|
||||||
false
|
false
|
||||||
} &&
|
} &&
|
||||||
{"ACE_MapTools" in (items ACE_player)} &&
|
{"ACE_MapTools" in (ACE_player call EFUNC(common,uniqueItems))} &&
|
||||||
{!GVAR(mapTool_isDragging)} &&
|
{!GVAR(mapTool_isDragging)} &&
|
||||||
{!GVAR(mapTool_isRotating)}
|
{!GVAR(mapTool_isRotating)}
|
||||||
|
@ -21,7 +21,7 @@ params ["_control", "_mousePosX", "_mousePosY"];
|
|||||||
TRACE_3("params",_control,_mousePosX,_mousePosY);
|
TRACE_3("params",_control,_mousePosX,_mousePosY);
|
||||||
|
|
||||||
// If have no map tools, then exit
|
// If have no map tools, then exit
|
||||||
if (((isNull ACE_player) || {!("ACE_MapTools" in items ACE_player)})) exitWith {
|
if (((isNull ACE_player) || {!("ACE_MapTools" in (ACE_player call EFUNC(common,uniqueItems)))})) exitWith {
|
||||||
false
|
false
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
params ["_theMap"];
|
params ["_theMap"];
|
||||||
|
|
||||||
if ((GVAR(mapTool_Shown) == 0) || {!("ACE_MapTools" in items ACE_player)}) exitWith {};
|
if ((GVAR(mapTool_Shown) == 0) || {!("ACE_MapTools" in (ACE_player call EFUNC(common,uniqueItems)))}) exitWith {};
|
||||||
|
|
||||||
private _rotatingTexture = "";
|
private _rotatingTexture = "";
|
||||||
private _textureWidth = 0;
|
private _textureWidth = 0;
|
||||||
|
@ -5,7 +5,7 @@ if (!hasInterface) exitWith {};
|
|||||||
|
|
||||||
//Add deviceKey entry:
|
//Add deviceKey entry:
|
||||||
private _conditonCode = {
|
private _conditonCode = {
|
||||||
("ACE_microDAGR" in (items ACE_player))
|
"ACE_microDAGR" in (ACE_player call EFUNC(common,uniqueItems))
|
||||||
};
|
};
|
||||||
private _toggleCode = {
|
private _toggleCode = {
|
||||||
if !([ACE_player, objNull, ["notOnMap", "isNotInside", "isNotSitting"]] call EFUNC(common,canInteractWith)) exitWith {};
|
if !([ACE_player, objNull, ["notOnMap", "isNotInside", "isNotSitting"]] call EFUNC(common,canInteractWith)) exitWith {};
|
||||||
|
@ -22,12 +22,12 @@ _returnValue = switch (_showType) do {
|
|||||||
case (DISPLAY_MODE_CLOSED): { true }; //Can always close
|
case (DISPLAY_MODE_CLOSED): { true }; //Can always close
|
||||||
case (DISPLAY_MODE_HIDDEN): { true }; //Can always hide
|
case (DISPLAY_MODE_HIDDEN): { true }; //Can always hide
|
||||||
case (DISPLAY_MODE_DIALOG): {
|
case (DISPLAY_MODE_DIALOG): {
|
||||||
("ACE_microDAGR" in (items ACE_player)) && {[ACE_player, objNull, ["notOnMap", "isNotInside", "isNotSitting"]] call EFUNC(common,canInteractWith)}
|
("ACE_microDAGR" in (ACE_player call EFUNC(common,uniqueItems))) && {[ACE_player, objNull, ["notOnMap", "isNotInside", "isNotSitting"]] call EFUNC(common,canInteractWith)}
|
||||||
};
|
};
|
||||||
case (DISPLAY_MODE_DISPLAY): {
|
case (DISPLAY_MODE_DISPLAY): {
|
||||||
//Can't have minimap up while zoomed in on foot, but allow drivers to use while in "Gunner" to handle non-3d vehicles like most tanks
|
//Can't have minimap up while zoomed in on foot, but allow drivers to use while in "Gunner" to handle non-3d vehicles like most tanks
|
||||||
((cameraView != "GUNNER") || {(vehicle ACE_player != ACE_player) && {driver vehicle ACE_player == ACE_player}}) &&
|
((cameraView != "GUNNER") || {(vehicle ACE_player != ACE_player) && {driver vehicle ACE_player == ACE_player}}) &&
|
||||||
{"ACE_microDAGR" in (items ACE_player)} &&
|
{"ACE_microDAGR" in (ACE_player call EFUNC(common,uniqueItems))} &&
|
||||||
{[ACE_player, objNull, ["notOnMap", "isNotInside", "isNotSitting"]] call EFUNC(common,canInteractWith)}
|
{[ACE_player, objNull, ["notOnMap", "isNotInside", "isNotSitting"]] call EFUNC(common,canInteractWith)}
|
||||||
};
|
};
|
||||||
default { false };
|
default { false };
|
||||||
|
@ -73,7 +73,7 @@ if ((_oldShowMode == DISPLAY_MODE_CLOSED) && {GVAR(currentShowMode) != DISPLAY_M
|
|||||||
[{
|
[{
|
||||||
params ["_args", "_idPFH"];
|
params ["_args", "_idPFH"];
|
||||||
_args params ["_player"];
|
_args params ["_player"];
|
||||||
if ((isNull ACE_player) || {!alive ACE_player} || {ACE_player != _player} || {!("ACE_microDAGR" in (items ACE_player))} || {GVAR(currentShowMode) == DISPLAY_MODE_CLOSED}) then {
|
if ((isNull ACE_player) || {!alive ACE_player} || {ACE_player != _player} || {!("ACE_microDAGR" in (ACE_player call EFUNC(common,uniqueItems)))} || {GVAR(currentShowMode) == DISPLAY_MODE_CLOSED}) then {
|
||||||
//Close Display if still open:
|
//Close Display if still open:
|
||||||
if (GVAR(currentShowMode) != DISPLAY_MODE_CLOSED) then {
|
if (GVAR(currentShowMode) != DISPLAY_MODE_CLOSED) then {
|
||||||
[DISPLAY_MODE_CLOSED] call FUNC(openDisplay);
|
[DISPLAY_MODE_CLOSED] call FUNC(openDisplay);
|
||||||
|
@ -18,4 +18,4 @@
|
|||||||
|
|
||||||
params ["_vehicle", "_player"];
|
params ["_vehicle", "_player"];
|
||||||
|
|
||||||
"ACE_RangeTable_82mm" in (items _player);
|
"ACE_RangeTable_82mm" in (_player call EFUNC(common,uniqueItems));
|
||||||
|
@ -17,6 +17,6 @@
|
|||||||
|
|
||||||
params ["_unit"];
|
params ["_unit"];
|
||||||
|
|
||||||
if !("ACE_Sandbag_empty" in items _unit) exitWith {false};
|
if !("ACE_Sandbag_empty" in (_unit call EFUNC(common,uniqueItems))) exitWith {false};
|
||||||
|
|
||||||
_unit call EFUNC(common,canDig)
|
_unit call EFUNC(common,canDig)
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
params ["_unit"];
|
params ["_unit"];
|
||||||
|
|
||||||
if (_unit getVariable [QGVAR(isDeploying), false]) then {
|
if (_unit getVariable [QGVAR(isDeploying), false]) then {
|
||||||
if !("ACE_Sandbag_empty" in items _unit) then {
|
if !("ACE_Sandbag_empty" in (_unit call EFUNC(common,uniqueItems))) then {
|
||||||
[_unit] call FUNC(deployCancel);
|
[_unit] call FUNC(deployCancel);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
params ["_trench", "_unit"];
|
params ["_trench", "_unit"];
|
||||||
|
|
||||||
if !("ACE_EntrenchingTool" in items _unit) exitWith {false};
|
if !("ACE_EntrenchingTool" in (_unit call EFUNC(common,uniqueItems))) exitWith {false};
|
||||||
if ((_trench getVariable [QGVAR(progress), 0]) >= 1) exitWith {false};
|
if ((_trench getVariable [QGVAR(progress), 0]) >= 1) exitWith {false};
|
||||||
|
|
||||||
// Prevent removing/digging trench by more than one person
|
// Prevent removing/digging trench by more than one person
|
||||||
|
@ -17,6 +17,6 @@
|
|||||||
|
|
||||||
params ["_unit"];
|
params ["_unit"];
|
||||||
|
|
||||||
if !("ACE_EntrenchingTool" in items _unit) exitWith {false};
|
if !("ACE_EntrenchingTool" in (_unit call EFUNC(common,uniqueItems))) exitWith {false};
|
||||||
|
|
||||||
_unit call EFUNC(common,canDig)
|
_unit call EFUNC(common,canDig)
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
params ["_trench", "_unit"];
|
params ["_trench", "_unit"];
|
||||||
|
|
||||||
if !("ACE_EntrenchingTool" in items _unit) exitWith {false};
|
if !("ACE_EntrenchingTool" in (_unit call EFUNC(common,uniqueItems))) exitWith {false};
|
||||||
|
|
||||||
// Prevent removing/digging trench by more than one person
|
// Prevent removing/digging trench by more than one person
|
||||||
if (_trench getVariable [QGVAR(digging), false]) exitWith {false};
|
if (_trench getVariable [QGVAR(digging), false]) exitWith {false};
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
params ["_unit"];
|
params ["_unit"];
|
||||||
|
|
||||||
if (_unit getVariable [QGVAR(isPlacing), false]) then {
|
if (_unit getVariable [QGVAR(isPlacing), false]) then {
|
||||||
if !("ACE_EntrenchingTool" in items _unit) then {
|
if !("ACE_EntrenchingTool" in (_unit call EFUNC(common,uniqueItems))) then {
|
||||||
[_unit] call FUNC(placeCancel);
|
[_unit] call FUNC(placeCancel);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -25,11 +25,12 @@ if (isNull _veh) exitWith {ERROR("null vehicle"); false};
|
|||||||
private _returnValue = false;
|
private _returnValue = false;
|
||||||
|
|
||||||
//Master can open anything "no matter what"
|
//Master can open anything "no matter what"
|
||||||
if ("ACE_key_master" in (items _unit)) then {_returnValue = true};
|
private _items = _unit call EFUNC(common,uniqueItems);
|
||||||
|
if ("ACE_key_master" in _items) then {_returnValue = true};
|
||||||
|
|
||||||
//Check side key
|
//Check side key
|
||||||
private _sideKeyName = [_veh] call FUNC(getVehicleSideKey);
|
private _sideKeyName = [_veh] call FUNC(getVehicleSideKey);
|
||||||
if (_sideKeyName in (items _unit)) then {_returnValue = true};
|
if (_sideKeyName in _items) then {_returnValue = true};
|
||||||
|
|
||||||
//Check custom keys
|
//Check custom keys
|
||||||
private _customKeys = _veh getVariable [QGVAR(customKeys), []];
|
private _customKeys = _veh getVariable [QGVAR(customKeys), []];
|
||||||
|
@ -30,7 +30,7 @@ if (isNull _veh) exitWith {ERROR("null vehicle"); false};
|
|||||||
if ((locked _veh) == 0) exitWith {false};
|
if ((locked _veh) == 0) exitWith {false};
|
||||||
|
|
||||||
//need lockpick item
|
//need lockpick item
|
||||||
if (!("ACE_key_lockpick" in (items _unit))) exitWith {false};
|
if !("ACE_key_lockpick" in (_unit call EFUNC(common,uniqueItems))) exitWith {false};
|
||||||
|
|
||||||
private _vehLockpickStrenth = _veh getVariable[QGVAR(lockpickStrength), GVAR(DefaultLockpickStrength)];
|
private _vehLockpickStrenth = _veh getVariable[QGVAR(lockpickStrength), GVAR(DefaultLockpickStrength)];
|
||||||
if (!(_vehLockpickStrenth isEqualType 0)) exitWith {ERROR("ACE_vehicleLock_LockpickStrength invalid"); false};
|
if (!(_vehLockpickStrenth isEqualType 0)) exitWith {ERROR("ACE_vehicleLock_LockpickStrength invalid"); false};
|
||||||
|
Loading…
Reference in New Issue
Block a user