From 6bdc3956fb524cf53c5b788b73cf3c9d3186eb69 Mon Sep 17 00:00:00 2001 From: oiad Date: Mon, 22 Aug 2016 09:19:52 +1200 Subject: [PATCH] Plot / door management userlist sorting (#1747) * Plot / door management userlist sorting This correctly sorts the nearby humans list in both mods, I have this running on my 1051 server with no issues, @ebaydayz please advise if this is not right, I've tested it pretty well and it is indeed selecting the right person/UID * Door/plot management fixes As per @ebaydayz --- .../RscDisplay/doorManagement/doorAccess.hpp | 9 ++-- .../doorManagement/doorManagement.hpp | 27 ++++++---- .../Configs/RscDisplay/plotManagement.hpp | 50 ++++++++++--------- .../actions/doorManagement/doorAddFriend.sqf | 27 ++++++---- .../doorManagement/doorNearbyHumans.sqf | 21 +++++--- .../actions/plotManagement/plotAddFriend.sqf | 23 ++++++--- .../plotManagement/plotNearbyHumans.sqf | 20 +++++--- 7 files changed, 104 insertions(+), 73 deletions(-) diff --git a/SQF/dayz_code/Configs/RscDisplay/doorManagement/doorAccess.hpp b/SQF/dayz_code/Configs/RscDisplay/doorManagement/doorAccess.hpp index 28624c10a..dd990e3ba 100644 --- a/SQF/dayz_code/Configs/RscDisplay/doorManagement/doorAccess.hpp +++ b/SQF/dayz_code/Configs/RscDisplay/doorManagement/doorAccess.hpp @@ -26,7 +26,7 @@ class DoorAccess h = 0.50 * safezoneH; colorBackground[] = {0,0,0,0.8}; }; - + class ZupaHeader_2: ZSC_RscTextT { idc = -1; @@ -38,8 +38,7 @@ class DoorAccess colorBackground[] = {0,0,0,0.8}; colorText[] = {1,1,1,1}; }; - - + class ZupaButton_1 : ZSC_RscButtonMenuBlue { idc = -1; @@ -50,7 +49,7 @@ class DoorAccess w = 0.20; onButtonClick = "keypadCancel = false; call player_unlockDoor"; }; - + class ZupaButton_4 : ZSC_RscButtonMenuBlue { idc = -1; @@ -61,7 +60,7 @@ class DoorAccess w = 0.20; onButtonClick = "call player_enterCode"; }; - + class ZupaButton_2: ZSC_RscButtonMenuBlue { idc = -1; diff --git a/SQF/dayz_code/Configs/RscDisplay/doorManagement/doorManagement.hpp b/SQF/dayz_code/Configs/RscDisplay/doorManagement/doorManagement.hpp index 895f0648d..53c72bb7b 100644 --- a/SQF/dayz_code/Configs/RscDisplay/doorManagement/doorManagement.hpp +++ b/SQF/dayz_code/Configs/RscDisplay/doorManagement/doorManagement.hpp @@ -11,7 +11,8 @@ class DoorManagement w = 0.30 * safezoneW; h = 0.5 * safezoneH; colorBackground[] = {0,0,0,0.8}; - }; + }; + class RscListbox_7101: RscListbox { idc = 7101; @@ -22,6 +23,7 @@ class DoorManagement soundSelect[] = {"",0.1,1}; colorBackground[] = {0.1,0.1,0.1,0.8}; }; + class RscListbox_7102: RscListbox { idc = 7102; @@ -32,6 +34,7 @@ class DoorManagement soundSelect[] = {"",0.1,1}; colorBackground[] = {0.1,0.1,0.1,0.8}; }; + class RscShortcutButton_7104: ZSC_RscButtonMenuBlue { idc = 7104; @@ -39,9 +42,9 @@ class DoorManagement x = 0.33 * safezoneW + safezoneX; y = 0.70 * safezoneH + safezoneY; w = 0.08 * safezoneW; - //h = 0.06 * safezoneH; - onButtonClick = "[(lbCurSel 7101)] call DoorAddFriend;"; + onButtonClick = "[lbData [7101,lbCurSel 7101]] call DoorAddFriend;"; }; + class RscShortcutButton_7105: ZSC_RscButtonMenuBlue { idc = 7105; @@ -49,9 +52,9 @@ class DoorManagement x = 0.47 * safezoneW + safezoneX; y = 0.70 * safezoneH + safezoneY; w = 0.08 * safezoneW; - //h = 0.06 * safezoneH; onButtonClick = "[(lbCurSel 7102)] call DoorRemoveFriend;"; - }; + }; + class RscShortcutButton_7106: ZSC_RscButtonMenuBlue { idc = 7106; @@ -59,9 +62,9 @@ class DoorManagement x = 0.40 * safezoneW + safezoneX; y = 0.74 * safezoneH + safezoneY; w = 0.08 * safezoneW; - //h = 0.06 * safezoneH; onButtonClick = "((ctrlParent (_this select 0)) closeDisplay 9000);"; - }; + }; + class RscText_7107: ZSC_RscTextT { idc = 7107; @@ -69,10 +72,11 @@ class DoorManagement x = 0.30 * safezoneW + safezoneX; y = 0.30 * safezoneH + safezoneY; w = 0.30 * safezoneW; - h = 0.05 * safezoneH; - colorBackground[] = {0,0,0,0.8}; - colorText[] = {1,1,1,1}; + h = 0.05 * safezoneH; + colorBackground[] = {0,0,0,0.8}; + colorText[] = {1,1,1,1}; }; + class RscText_7108: ZSC_RscTextT { idc = 7108; @@ -83,7 +87,8 @@ class DoorManagement h = 0.03 * safezoneH; colorText[] = {1,1,1,1}; }; - class RscText_7103: ZSC_RscTextT + + class RscText_7103: ZSC_RscTextT { idc = 71103; text = $STR_EPOCH_DOORMANAGEMENT_FRIENDS; diff --git a/SQF/dayz_code/Configs/RscDisplay/plotManagement.hpp b/SQF/dayz_code/Configs/RscDisplay/plotManagement.hpp index dd268f9ca..0d619ddca 100644 --- a/SQF/dayz_code/Configs/RscDisplay/plotManagement.hpp +++ b/SQF/dayz_code/Configs/RscDisplay/plotManagement.hpp @@ -12,19 +12,19 @@ class PlotManagement h = 0.65 * safezoneH; colorBackground[] = {0,0,0,0.8}; }; - - class RscText_7007: ZSC_RscTextT + + class RscText_7007: ZSC_RscTextT { idc = 7007; text = $STR_EPOCH_ACTIONS_MANAGEPLOT; x = 0.30 * safezoneW + safezoneX; y = 0.15 * safezoneH + safezoneY; w = 0.30 * safezoneW; - h = 0.05 * safezoneH; - colorBackground[] = {0,0,0,0.8}; - colorText[] = {1,1,1,1}; + h = 0.05 * safezoneH; + colorBackground[] = {0,0,0,0.8}; + colorText[] = {1,1,1,1}; }; - + class RscShortcutButton_7009: ZSC_RscButtonMenuBlue { idc = -1; @@ -34,8 +34,8 @@ class PlotManagement w = 0.08 * safezoneW; onButtonClick = "call PlotPreview;"; }; - - class RscShortcutButton_7010: ZSC_RscButtonMenuBlue + + class RscShortcutButton_7010: ZSC_RscButtonMenuBlue { idc = -1; text = $STR_EPOCH_REFRESH; @@ -44,8 +44,8 @@ class PlotManagement w = 0.08 * safezoneW; onButtonClick = "'preview' call MaintainPlot;"; }; - - class RscShortcutButton_7011: ZSC_RscButtonMenuBlue + + class RscShortcutButton_7011: ZSC_RscButtonMenuBlue { idc = -1; text = $STR_EPOCH_ACTIONS_MAINTAIN; @@ -54,6 +54,7 @@ class PlotManagement w = 0.08 * safezoneW; onButtonClick = "'maintain' call MaintainPlot;"; }; + class RscText_7012: ZSC_RscTextT { idc = 7012; @@ -61,11 +62,11 @@ class PlotManagement x = 0.31 * safezoneW + safezoneX; y = 0.30 * safezoneH + safezoneY; w = 0.30 * safezoneW; - h = 0.05 * safezoneH; + h = 0.05 * safezoneH; colorText[] = {1,1,1,1}; }; - + class RscText_7014: RscStructuredText { idc = 7014; @@ -74,11 +75,11 @@ class PlotManagement y = 0.15 * safezoneH + safezoneY; w = 0.30 * safezoneW; h = 0.03 * safezoneH; - class Attributes { + class Attributes { align = "right"; }; }; - + class RscText_7013: ZSC_RscTextT { idc = 7013; @@ -89,8 +90,7 @@ class PlotManagement h = 0.03 * safezoneH; colorText[] = {1,1,1,1}; }; - - + class RscText_7008: ZSC_RscTextT { idc = -1; @@ -100,7 +100,8 @@ class PlotManagement w = 0.13 * safezoneW; h = 0.03 * safezoneH; colorText[] = {1,1,1,1}; - }; + }; + class RscText_7003: ZSC_RscTextT { idc = -1; @@ -111,8 +112,7 @@ class PlotManagement h = 0.03 * safezoneH; colorText[] = {1,1,1,1}; }; - - + class RscListbox_7001: RscListbox { idc = 7001; @@ -123,6 +123,7 @@ class PlotManagement soundSelect[] = {"",0.1,1}; colorBackground[] = {0.1,0.1,0.1,0.8}; }; + class RscListbox_7002: RscListbox { idc = 7002; @@ -133,6 +134,7 @@ class PlotManagement soundSelect[] = {"",0.1,1}; colorBackground[] = {0.1,0.1,0.1,0.8}; }; + class RscShortcutButton_7004: ZSC_RscButtonMenuBlue { idc = -1; @@ -140,8 +142,9 @@ class PlotManagement x = 0.33 * safezoneW + safezoneX; y = 0.70 * safezoneH + safezoneY; w = 0.08 * safezoneW; - onButtonClick = "[(lbCurSel 7001)] call PlotAddFriend;"; + onButtonClick = "[lbData [7001,lbCurSel 7001]] call PlotAddFriend;"; }; + class RscShortcutButton_7005: ZSC_RscButtonMenuBlue { idc = -1; @@ -150,7 +153,8 @@ class PlotManagement y = 0.70 * safezoneH + safezoneY; w = 0.08 * safezoneW; onButtonClick = "[(lbCurSel 7002)] call PlotRemoveFriend;"; - }; + }; + class RscShortcutButton_7006: ZSC_RscButtonMenuBlue { idc = -1; @@ -158,9 +162,7 @@ class PlotManagement x = 0.40 * safezoneW + safezoneX; y = 0.74 * safezoneH + safezoneY; w = 0.08 * safezoneW; - onButtonClick = "((ctrlParent (_this select 0)) closeDisplay 9000);"; - }; - + }; }; }; diff --git a/SQF/dayz_code/actions/doorManagement/doorAddFriend.sqf b/SQF/dayz_code/actions/doorManagement/doorAddFriend.sqf index defa7e311..019188cee 100644 --- a/SQF/dayz_code/actions/doorManagement/doorAddFriend.sqf +++ b/SQF/dayz_code/actions/doorManagement/doorAddFriend.sqf @@ -1,17 +1,24 @@ -private ["_pos","_plots","_inList","_friends","_toAdd"]; +private ["_inList","_toAdd","_friends","_friendUID","_friendName","_userList"]; +disableSerialization; + +_userList = (findDisplay 711195) displayCtrl 7101; + +_friendUID = _this select 0; +_friendName = _userList lbText (lbCurSel _userList); + +if (_friendUID == "") exitWith {}; -_pos = _this select 0; -if (_pos < 0) exitWith {}; -_toAdd = (Humans select _pos); _friends = TheDoor getVariable ["doorfriends",[]]; +_toAdd = [_friendUID,toArray _friendName]; _inList = false; -{ - if((_x select 0) == (_toAdd select 0)) exitWith { _inList = true; }; -} forEach _friends; -if(_inList) exitWith { localize "STR_EPOCH_PLOTMANAGEMENT_ADDFRIEND_ALREADYONTHELIST" call dayz_rollingMessages; }; -if(count _friends >= DZE_doorManagementMaxFriends) exitWith { format[localize "STR_EPOCH_PLOTMANAGEMENT_ADDFRIEND_FRIENDLIMIT", DZE_doorManagementMaxFriends] call dayz_rollingMessages; }; -_friends set [count _friends, _toAdd]; + +{ if ((_x select 0) == (_toAdd select 0)) exitWith { _inList = true; }; false } count _friends; +if (_inList) exitWith { systemChat localize "STR_EPOCH_PLOTMANAGEMENT_ADDFRIEND_ALREADYONTHELIST"; }; +if ((count _friends) == DZE_doorManagementMaxFriends) exitWith { systemChat format[localize "STR_EPOCH_PLOTMANAGEMENT_ADDFRIEND_FRIENDLIMIT", DZE_doorManagementMaxFriends]; }; + +_friends set [(count _friends), _toAdd]; TheDoor setVariable ["doorfriends", _friends, true]; + PVDZ_veh_Save = [TheDoor,"gear"]; if (isServer) then { PVDZ_veh_Save call server_updateObject; diff --git a/SQF/dayz_code/actions/doorManagement/doorNearbyHumans.sqf b/SQF/dayz_code/actions/doorManagement/doorNearbyHumans.sqf index 14a98642c..ba3f0a80d 100644 --- a/SQF/dayz_code/actions/doorManagement/doorNearbyHumans.sqf +++ b/SQF/dayz_code/actions/doorManagement/doorNearbyHumans.sqf @@ -1,14 +1,19 @@ -private ["_closePeople","_friendUID","_friendName"]; +private ["_closePeople","_friendUID","_friendName","_userList"]; +disableSerialization; + +_userList = (findDisplay 711195) displayCtrl 7101; + +lbClear _userList; + +_closePeople = if (DZE_doorManagementMustBeClose) then { player nearEntities ["CAManBase", 10] } else { playableUnits }; -lbClear 7101; -_closePeople = player nearEntities ["CAManBase", 10]; -if (!DZE_doorManagementMustBeClose) then {_closePeople = playableUnits}; -Humans = []; { if (isPlayer _x) then { _friendUID = [_x] call FNC_GetPlayerUID; - _friendName = name _x; - Humans set [count Humans, [_friendUID,toArray _friendName]]; - lbAdd [7101, _friendName]; + _friendName = name _x; + _userList lbAdd _friendName; + _userList lbSetData [(lbSize _userList) -1,_friendUID]; }; } forEach _closePeople; + +lbSort _userList; diff --git a/SQF/dayz_code/actions/plotManagement/plotAddFriend.sqf b/SQF/dayz_code/actions/plotManagement/plotAddFriend.sqf index ce33dad4b..5067e8eb7 100644 --- a/SQF/dayz_code/actions/plotManagement/plotAddFriend.sqf +++ b/SQF/dayz_code/actions/plotManagement/plotAddFriend.sqf @@ -1,26 +1,33 @@ -private ["_pos","_plots","_thePlot","_inList","_toAdd","_friends"]; +private ["_plots","_thePlot","_inList","_toAdd","_friends","_friendUID","_friendName","_userList"]; +disableSerialization; -_pos = _this select 0; -if (_pos < 0) exitWith {}; +_userList = (findDisplay 711194) displayCtrl 7001; -_toAdd = (Humans select _pos); -_plots = nearestObjects [[player] call FNC_getPos, ["Plastic_Pole_EP1_DZ"],15]; +_friendUID = _this select 0; +_friendName = _userList lbText (lbCurSel _userList); + +if (_friendUID == "") exitWith {}; + +_plots = nearestObjects [[player] call FNC_getPos, ["Plastic_Pole_EP1_DZ"],15]; _thePlot = _plots select 0; _friends = _thePlot getVariable ["plotfriends",[]]; +_toAdd = [_friendUID,toArray _friendName]; _inList = false; -{ if ((_x select 0) == (_toAdd select 0)) exitWith { _inList = true; }; } count _friends; -if (_inList) exitWith {localize "STR_EPOCH_PLOTMANAGEMENT_ADDFRIEND_ALREADYONTHELIST" call dayz_rollingMessages}; -if ((count _friends) == DZE_MaxPlotFriends) exitWith { format[localize "STR_EPOCH_PLOTMANAGEMENT_ADDFRIEND_FRIENDLIMIT", DZE_MaxPlotFriends] call dayz_rollingMessages;}; +{ if ((_x select 0) == (_toAdd select 0)) exitWith { _inList = true; }; false } count _friends; +if (_inList) exitWith { systemChat localize "STR_EPOCH_PLOTMANAGEMENT_ADDFRIEND_ALREADYONTHELIST"; }; +if ((count _friends) == DZE_MaxPlotFriends) exitWith { systemChat format[localize "STR_EPOCH_PLOTMANAGEMENT_ADDFRIEND_FRIENDLIMIT", DZE_MaxPlotFriends]; }; _friends set [(count _friends), _toAdd]; _thePlot setVariable ["plotfriends", _friends, true]; + PVDZ_veh_Save = [_thePlot,"gear"]; if (isServer) then { PVDZ_veh_Save call server_updateObject; } else { publicVariableServer "PVDZ_veh_Save"; }; + call PlotGetFriends; call PlotNearbyHumans; diff --git a/SQF/dayz_code/actions/plotManagement/plotNearbyHumans.sqf b/SQF/dayz_code/actions/plotManagement/plotNearbyHumans.sqf index 2ee291bbf..0f8495ea8 100644 --- a/SQF/dayz_code/actions/plotManagement/plotNearbyHumans.sqf +++ b/SQF/dayz_code/actions/plotManagement/plotNearbyHumans.sqf @@ -1,13 +1,19 @@ -private ["_closePeople","_friendUID","_friendName"]; +private ["_closePeople","_friendUID","_friendName","_userList"]; +disableSerialization; + +_userList = (findDisplay 711194) displayCtrl 7001; + +lbClear _userList; + +_closePeople = if (DZE_plotManagementMustBeClose) then { player nearEntities ["CAManBase", 10] } else { playableUnits }; -lbClear 7001; -if (!DZE_plotManagementMustBeClose) then {_closePeople = playableUnits;} else {_closePeople = player nearEntities ["CAManBase", 10];}; -Humans = []; { if (isPlayer _x) then { _friendUID = [_x] call FNC_GetPlayerUID; _friendName = name _x; - Humans = Humans + [[_friendUID,toArray _friendName]]; - lbAdd [7001, _friendName]; + _userList lbAdd _friendName; + _userList lbSetData [(lbSize _userList) -1,_friendUID]; }; -} forEach _closePeople; \ No newline at end of file +} forEach _closePeople; + +lbSort _userList;