From b25b7636a79b2ff65455c7e90f1655041b565773 Mon Sep 17 00:00:00 2001 From: icomrade Date: Fri, 7 Oct 2016 13:46:53 -0400 Subject: [PATCH] Direct menu to cursortarget or player Please test the living hell out of this. --- SQF/dayz_code/compile/fn_gearMenuChecks.sqf | 68 +++++++++++++-------- SQF/dayz_code/init/variables.sqf | 1 + 2 files changed, 43 insertions(+), 26 deletions(-) diff --git a/SQF/dayz_code/compile/fn_gearMenuChecks.sqf b/SQF/dayz_code/compile/fn_gearMenuChecks.sqf index 64a0ae544..4142a3a9a 100644 --- a/SQF/dayz_code/compile/fn_gearMenuChecks.sqf +++ b/SQF/dayz_code/compile/fn_gearMenuChecks.sqf @@ -7,38 +7,54 @@ if ((vehicle player) == player) then { _cTarget = cursorTarget; _dis = if (_cTarget isKindOf "USEC_ch53_E" || _cTarget isKindOf "MV22") then {25} else {12}; _exit = false; - - if (locked _cTarget && {(_cTarget isKindOf "LandVehicle") or {_cTarget isKindOf "Air"} or {_cTarget isKindOf "Ship"}} && {(player distance _cTarget) <= _dis}) then { - _exit = true; - } else { - _nearestObjects = (position player) nearEntities [["Air", "Car", "Motorcycle", "Tank", "Ship"], 26]; - if (count _nearestObjects >= 1) then { - { - _vehType = TypeOf _x; - _dis = getNumber (configFile >> "CfgVehicles" >> _vehType >> "supplyRadius"); - if (_dis < 2) then {_dis = _dis * 4;} else {_dis = _dis * 3;}; //There seems to be significant inaccuracy of the supplyRadius config definition that is worse when the value is smaller - _dis = _dis min 12; - _gearSelection = getText (configFile >> "CfgVehicles" >> _vehType >> "memoryPointSupply"); - _supplyPositionWorld = _x modelToWorld (_x selectionPosition _gearSelection); - if (_x isKindOf "USEC_ch53_E" || _x isKindOf "MV22") then {_dis = 25;}; - if (locked _x && {(_supplyPositionWorld distance player) <= _dis}) then { - _exit = true; - }; - } forEach _nearestObjects; + + if (!DZE_GearCheckBypass) then { + if (locked _cTarget && {(_cTarget isKindOf "LandVehicle") or {_cTarget isKindOf "Air"} or {_cTarget isKindOf "Ship"}} && {(player distance _cTarget) <= _dis}) then { + _exit = true; + } else { + _nearestObjects = (position player) nearEntities [["Air", "Car", "Motorcycle", "Tank", "Ship"], 26]; + if (count _nearestObjects >= 1) then { + { + _vehType = TypeOf _x; + _dis = getNumber (configFile >> "CfgVehicles" >> _vehType >> "supplyRadius"); + if (_dis < 2) then {_dis = _dis * 4;} else {_dis = _dis * 3;}; //There seems to be significant inaccuracy of the supplyRadius config definition that is worse when the value is smaller + _dis = _dis min 12; + _gearSelection = getText (configFile >> "CfgVehicles" >> _vehType >> "memoryPointSupply"); + _supplyPositionWorld = _x modelToWorld (_x selectionPosition _gearSelection); + if (_x isKindOf "USEC_ch53_E" || _x isKindOf "MV22") then {_dis = 25;}; + if (locked _x && {(_supplyPositionWorld distance player) <= _dis}) then { + _exit = true; + }; + } forEach _nearestObjects; + }; + }; + if (DZE_BackpackAntiTheft) then { + _friendlies = player getVariable ["friendlies",[]]; + _rID = if (DZE_permanentPlot) then { getPlayerUID _cTarget } else { _cTarget getVariable ["CharacterID","0"] }; + if ((!canbuild or isInTraderCity) && {_cTarget isKindOf "Man"} && {alive _cTarget} && {isPlayer _cTarget} && {!(_rID in _friendlies)} && {(player distance _cTarget) < 12}) then { + localize "STR_EPOCH_PLAYER_316" call dayz_rollingMessages; + _display closeDisplay 1; + }; }; }; if (_exit) then { + _lastSave = dayz_lastSave; + _startTime = diag_tickTime; localize "str_epoch_player_7" call dayz_rollingMessages; _display closeDisplay 1; - }; - - if (DZE_BackpackAntiTheft) then { - _friendlies = player getVariable ["friendlies",[]]; - _rID = if (DZE_permanentPlot) then { getPlayerUID _cTarget } else { _cTarget getVariable ["CharacterID","0"] }; - if ((!canbuild or isInTraderCity) && {_cTarget isKindOf "Man"} && {alive _cTarget} && {isPlayer _cTarget} && {!(_rID in _friendlies)} && {(player distance _cTarget) < 12}) then { - localize "STR_EPOCH_PLAYER_316" call dayz_rollingMessages; - _display closeDisplay 1; + _ctType = typeOf _cTarget; + //direct gear to cursorTarget + [_lastSave, _startTime, _ctType, _cTarget] spawn { + waitUntil {((_this select 0) != dayz_lastSave) || {diag_tickTime >= ((_this select 1) + 1)}}; //waiting is required otherwise player_forceSave will reset DZE_GearCheckBypass + DZE_GearCheckBypass = true; + if ((((_this select 2) in DZE_isNewStorage) || {(_this select 2) == "LockboxStorage"} || {(_this select 2) isKindOf "Land_A_tent"} || {(_this select 2) isKindOf "WeaponHolder"} || {((!alive (_this select 3)) && {(_this select 2) isKindOf "Man"})}) && {!(locked (_this select 3))}) then { + Player action ["GEAR", (_this select 3)]; + } else { + createGearDialog [player, "RscDisplayGear"]; + }; }; + } else { + DZE_GearCheckBypass = false; //exit will always be false the when the above code opens a new gear menu, this will reset the variable }; }; \ No newline at end of file diff --git a/SQF/dayz_code/init/variables.sqf b/SQF/dayz_code/init/variables.sqf index 1b727cf7d..bfdcc20e7 100644 --- a/SQF/dayz_code/init/variables.sqf +++ b/SQF/dayz_code/init/variables.sqf @@ -544,6 +544,7 @@ DZE_tradeObject = DZE_tradeVehicle + ["trade_backpacks"]; if (isNil "DZE_plotOwnershipExclusions") then { DZE_plotTakeOwnershipItems = DayZ_SafeObjects - (DZE_LockableStorage + ["Plastic_Pole_EP1_DZ","DZ_storage_base"]); }; +DZE_GearCheckBypass = false; isInTraderCity = false; inTraderCity = "Unknown Trader"; PlayerDeaths = [];