From 8a2d95295bddb1fee2a19867bb79b19394f3ba7e Mon Sep 17 00:00:00 2001 From: ebaydayz Date: Fri, 7 Oct 2016 17:39:06 -0400 Subject: [PATCH] Restrict access to show plot boundary action Only the owner, plot owner, plot friends and plot admins should be able to see the plot boundary. Randoms just use it for griefing. Also renamed the targetX variables to the more appropriate doorX in fn_check_access since they are only used if the target is a door. --- SQF/dayz_code/compile/fn_check_access.sqf | 24 +++++++++++------------ SQF/dayz_code/compile/fn_selfActions.sqf | 20 ++++++++----------- 2 files changed, 20 insertions(+), 24 deletions(-) diff --git a/SQF/dayz_code/compile/fn_check_access.sqf b/SQF/dayz_code/compile/fn_check_access.sqf index 8031a283c..b0dadfd18 100644 --- a/SQF/dayz_code/compile/fn_check_access.sqf +++ b/SQF/dayz_code/compile/fn_check_access.sqf @@ -32,8 +32,8 @@ private [ ,"_isPlotOwner" // return value ,"_isPlotFriend" // return value ,"_isPlotAdmin" // return value - ,"_isTargetFriend" // return value - ,"_isTargetAdmin" // return value + ,"_isDoorFriend" // Only applicable if target is a door + ,"_isDoorAdmin" // Only applicable if target is a door ,"_targetType" // return value ,"_targetOwnerUID" // UID or characterID of the owner of _target ,"_playerUID" // UID of the _player @@ -43,7 +43,7 @@ private [ ,"_nearestPlot" // plot object ,"_plotOwnerUID" // plot owner's UID ,"_plotFriends" // list of plot friends [["UID", "Name"], ..] - ,"_targetFriends" // list of target friends [["UID", "Name"], ..] + ,"_doorFriends" // list of door friends [["UID", "Name"], ..] ]; @@ -57,8 +57,8 @@ _isFriendly = false; _isPlotOwner = false; _isPlotFriend = false; _isPlotAdmin = false; -_isTargetFriend = false; -_isTargetAdmin = false; +_isDoorFriend = false; +_isDoorAdmin = false; _targetType = ""; @@ -120,16 +120,16 @@ if(_isNearPlot) then { if(_targetType == "DOOR") then { // determine door friends // and check if player is one of them - _isTargetFriend = _isOwner; // Door owner is always a door friend - _targetFriends = _target getVariable ["doorfriends",[]]; + _isDoorFriend = _isOwner; // Door owner is always a door friend + _doorFriends = _target getVariable ["doorfriends",[]]; { - if( (_x select 0) == _playerUID ) then { _isTargetFriend = true; }; - } count _targetFriends; + if( (_x select 0) == _playerUID ) then { _isDoorFriend = true; }; + } count _doorFriends; // determine door management admins // and check if player is one of them - if(_playerUID in DZE_DoorManagementAdmins) then { _isTargetAdmin = true; }; + if(_playerUID in DZE_DoorManagementAdmins) then { _isDoorAdmin = true; }; }; @@ -139,7 +139,7 @@ if(_targetType == "DOOR") then { , _isPlotOwner , _isPlotFriend , _isPlotAdmin -, _isTargetFriend -, _isTargetAdmin +, _isDoorFriend +, _isDoorAdmin , _targetType ] diff --git a/SQF/dayz_code/compile/fn_selfActions.sqf b/SQF/dayz_code/compile/fn_selfActions.sqf index 45d4eccb4..43cd4e48c 100644 --- a/SQF/dayz_code/compile/fn_selfActions.sqf +++ b/SQF/dayz_code/compile/fn_selfActions.sqf @@ -14,7 +14,7 @@ private ["_canPickLight","_text","_dir","_canDoThis","_w2m","_bb","_waterHoles", "_isModular","_isModularDoor","_isHouse","_isGate","_isFence","_isLockableGate","_isUnlocked","_isOpen","_isClosed","_ownerArray","_ownerBuildLock", "_ownerPID","_speed","_dog","_vehicle","_inVehicle","_cursorTarget","_primaryWeapon","_currentWeapon","_magazinesPlayer","_onLadder","_canDo", "_nearLight","_vehicleOwnerID","_hasHotwireKit","_isPZombie","_dogHandle","_allowedDistance","_id","_upgrade","_weaponsPlayer","_hasCrowbar", -"_isPlane"]; +"_isPlane","_allowed"]; _vehicle = vehicle player; _inVehicle = (_vehicle != player); @@ -664,12 +664,11 @@ if (!isNull _cursorTarget && !_inVehicle && !_isPZombie && (player distance _cur s_player_breakinhouse = -1; };*/ if ((_cursorTarget isKindOf "Plastic_Pole_EP1_DZ") && {_canDo && speed player <= 1}) then { + _isOwner = [player, _cursorTarget] call FNC_check_access; + _allowed = ((_isOwner select 0) or (_isOwner select 2) or (_isOwner select 3) or (_isOwner select 4)); if (DZE_permanentPlot) then { - if (s_player_plotManagement < 0) then { - _isOwner = [player, _cursorTarget] call FNC_check_access; - if ((_isOwner select 0) or (_isOwner select 2) or (_isOwner select 3) or (_isOwner select 4)) then { - s_player_plotManagement = player addAction [format["%1",localize "STR_EPOCH_ACTIONS_MANAGEPLOT"], "\z\addons\dayz_code\actions\plotManagement\initPlotManagement.sqf", [], 5, false]; - }; + if (s_player_plotManagement < 0 && _allowed) then { + s_player_plotManagement = player addAction [format["%1",localize "STR_EPOCH_ACTIONS_MANAGEPLOT"], "\z\addons\dayz_code\actions\plotManagement\initPlotManagement.sqf", [], 5, false]; }; } else { if (s_player_maintain_area < 0) then { @@ -678,15 +677,12 @@ if (!isNull _cursorTarget && !_inVehicle && !_isPZombie && (player distance _cur s_player_maintain_area_preview = player addAction [format["%1",localize "STR_EPOCH_ACTIONS_MAINTPREV"], "\z\addons\dayz_code\actions\plotManagement\maintain_area.sqf", "preview", 5, false]; }; }; - if (s_player_plot_boundary < 0) then { + if (s_player_plot_boundary < 0 && (_allowed or (_isOwner select 1))) then { s_player_plot_boundary = player addAction [localize "STR_EPOCH_PLOTMANAGEMENT_SHOW_BOUNDARY", "\z\addons\dayz_code\actions\plotManagement\plotToggleMarkers.sqf", "", 1, false]; }; if (DZE_permanentPlot && DZE_PlotOwnership) then { - if (s_player_plot_take_ownership < 0) then { - _isOwner = [player, _cursorTarget] call FNC_check_access; - if (_isOwner select 0) then { - s_player_plot_take_ownership = player addAction [localize "STR_EPOCH_APLOTFORLIFE_TAKE_PLOT_OWNERSHIP", "\z\addons\dayz_code\actions\A_Plot_for_Life\plot_take_ownership.sqf", "", 1, false]; - }; + if (s_player_plot_take_ownership < 0 && (_isOwner select 0)) then { + s_player_plot_take_ownership = player addAction [localize "STR_EPOCH_APLOTFORLIFE_TAKE_PLOT_OWNERSHIP", "\z\addons\dayz_code\actions\A_Plot_for_Life\plot_take_ownership.sqf", "", 1, false]; }; }; } else {