diff --git a/SQF/dayz_code/BIS_scripts/handleGear.sqf b/SQF/dayz_code/BIS_scripts/handleGear.sqf new file mode 100644 index 000000000..36fe2d9c3 --- /dev/null +++ b/SQF/dayz_code/BIS_scripts/handleGear.sqf @@ -0,0 +1,528 @@ +disableSerialization; +private ["_control","_display","_temp","_event","_data","_x","_stopTheKey","_keyLeft","_i","_index","_size","_indices","_lbcontrol"]; +private ["_key","_keyRight","_keyTop","_keyBottom","_secondColumn","_activateControl","_output","_doFilter"]; +private ["_event","_data","_display","_control","_primaryWeaponControl","_IDCsArray","_lbIDC","_lbColumn","_sum"]; +/* + IGUI_GEAR_filterPrimaryWeapon = (_activeFilter select 0); + IGUI_GEAR_filterSecondaryWeapon = (_activeFilter select 1); + IGUI_GEAR_filterAmmo = (_activeFilter select 2); + IGUI_GEAR_filterBinocular = (_activeFilter select 3); + IGUI_GEAR_filterInventory = (_activeFilter select 4); + IGUI_GEAR_filterPistols = (_activeFilter select 5); + IGUI_GEAR_filterPistolAmmo = (_activeFilter select 6); */ + +_filterSets = [ + //Primary Weapon, Secondary weapon, Ammo, Binocular, Inventory, Pistols, Pistols Ammo + [false,false,false,false,false,false,false], + [false,true,false,true,true,true,true], + [true,false,false,true,true,true,true], + [true,true,true,false,false,true,true], // all but pistol, pistols ammo + [true,true,true,true,true,true,true] +]; + +_icons = [ + "\ca\ui\data\igui_buyUnit_filter_1_ca.paa", + "\ca\ui\data\igui_buyUnit_filter_2_ca.paa", + "\ca\ui\data\igui_buyUnit_filter_3_ca.paa", + "\ca\ui\data\igui_buyUnit_filter_4_ca.paa", + "\ca\ui\data\igui_buyUnit_filter_5_ca.paa" +]; + +_event = _this select 1; +_data = _this select 0; + +_dofilter = false; + +/*-------------------------------------------*/ +if(typeName(_data select 0) == "DISPLAY")then +{ + _display = (_data select 0); +}; + +if(typeName(_data select 0) == "CONTROL")then +{ + _control = (_data select 0); + _display = ctrlParent _control; +}; + + +/*-------------------------------------------*/ +_lbSelectedItem = { + private ["_index","_selectedItem","_n"]; + _lbcontrol = _display displayctrl _lbIDC; + _index = lbCurSel _lbcontrol; + _selectedItem = ""; + _n = 0; + + while {(_selectedItem == "")&&(_n<6)} do { + _selectedItem = _lbcontrol lnbData [_index,1]; + uisleep 0.001; + _n = _n + 1; + }; + + _selectedItem; +}; + +_arrowsEnable = { + private ["_index","_selectedItem"]; + + _lbcontrol = _display displayctrl _lbIDC; + + _controlLeftArrow = _display displayctrl 147; + _controlRightArrow = _display displayctrl 146; + _index = lbCurSel _lbcontrol; + _selectedItemCountLeft = _lbcontrol lnbText [_index,0]; + _selectedItemCountRight = _lbcontrol lnbText [_index,2]; +}; + + +_isWeapon = { + private ["_item","_return"]; + _item = _this select 0; + _return = (str(configfile >> "cfgWeapons" >> _item) != ""); + _return; +}; + +_isMagazine = { + private ["_item","_return"]; + _item = _this select 0; + _return = (str(configfile >> "cfgMagazines" >> _item) != ""); + _return; +}; + + +_IDCsArray = [ + [107], + [121], + [108], + [107], + [122,123,124,125,126,127,128,129], + [107], + [107], + [107], + [109,110,111,112,113,114,115,116,117,118,119,120], + [109,110,111,112,113,114,115,116,117,118,119,120], + [108], + [107], + [130,131], + [107], + [107], + [107], + [107], + [134,135,136,137,138,139,140,141,142,143,144,145], + [107], + [107], + [107], + [107] +]; + + +_showAllIDCs = { +private ["_slotArray","_j","_i"]; +for [{_i=0},{_i-1 ) then { + _itemSlot = _display displayctrl (_slotArray select _j); + _itemSlot ctrlSetFade 0.0; + _itemSlot ctrlCommit 0.3; + + } else { + _itemSlot = _display displayctrl (_slotArray select _j); + _itemSlot ctrlSetFade 0.5; + _itemSlot ctrlCommit 0.3; + }; + }; +}; + + +/* for [{_i=0},{_i> "cfgWeapons" >> _item >> "type"); + }; + if ([_item] call _isMagazine) then { + _return = getNumber(configfile >> "cfgMagazines" >> _item >> "type"); + }; +_return; +}; + +_highlightIDCs = { + _hlIDCs = _this select 0; + for [{_i=0},{_i=0}, {_i = _i - 1} ] do +{ + + _valResult = _val mod _n; + if (_valResult != _val) then { + _bitArray set [_i, 1]; + }; + _n = _n / 2; + _val = _valResult; + }; + _bitArray +}; + +_highlightGearSlots ={ +// [] call _showAllIDCs; + _selectedItem = [] call _lbSelectedItem; + _selectedItemSlot = [_selectedItem] call _itemSlot; + _selectedItemSlotFlags = [_selectedItemSlot] call _returnBitArray; + _selectedItemSlotIDCs = [_selectedItemSlotFlags] call _returnSlotIDCs; + [_selectedItemSlotIDCs] call _higlightIDCs; +}; +_weaponsLBSetFocus = { + _lbcontrol = _display displayctrl _lbIDC; + /** Temporary disabled to prevent bug news:hov5k4$f6f$1@new-server.localdomain **/ + //ctrlSetFocus _lbcontrol; +}; +_setFilterIcon = { + _ctrlIcon = _display displayctrl 148; + _ctrlIcon ctrlSetText (_icons select IGUI_GEAR_activeFilter); +}; + + +_keyActions = { + _keyLeft = [203,327700,327686]; + _keyRight = [205,327696,327687]; + _keyTop = [200,327697,327684]; + _keyBottom = [208,327701,327685]; + _key = _data select 1; + if((_keyLeft find _key)>=0)then { + _control = _display displayctrl 146; + ctrlActivate _control; + _output = true; + }; + if((_keyRight find _key)>=0)then { + _control = _display displayctrl 147; + ctrlActivate _control; + _output = true; + }; + if((_keyTop find _key)>=0)then { + + }; + if((_keyBottom find _key)>=0)then { + + }; +}; +//_bitArray = [0,0,0,0,0 ,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; +/* +#define WeaponNoSlot 0 // dummy weapons +#define WeaponSlotPrimary 1 // primary weapons +#define WeaponSlotSecondary 4 // secondary weapons +#define WeaponSlotHandGun 2 // HandGun +#define WeaponSlotHandGunItem 16 // HandGun magazines +#define WeaponSlotItem 256 // items +#define WeaponSlotBinocular 4096 // binocular +#define WeaponHardMounted 65536 +#define WeaponSlotInventory 131072 // inventory items +*/ + +_setFilterGlobals = { + _activeFilter = _this; + IGUI_GEAR_filterPrimaryWeapon = (_activeFilter select 0); + IGUI_GEAR_filterSecondaryWeapon = (_activeFilter select 1); + IGUI_GEAR_filterAmmo = (_activeFilter select 2); + IGUI_GEAR_filterBinocular = (_activeFilter select 3); + IGUI_GEAR_filterInventory = (_activeFilter select 4); + IGUI_GEAR_filterPistols = (_activeFilter select 5); + IGUI_GEAR_filterPistolAmmo = (_activeFilter select 6); +}; + +//1201 +_highlightFilterIcons = { + for [{_i=0},{_i<6}, {_i = _i + 1} ] do + { + _control = _display displayctrl (1200 + _i); + _control ctrlSetTextColor [0.6000,0.8392,0.4706,1.0]; + }; + _control = _display displayctrl (1200 + _this); + _control ctrlSetTextColor [1,1,1,1]; +}; + +_matchesFilter = { + private ["_itemValue","_itemBitArray"]; + _output = false; + + _itemValue = _this select 0; + _itemBitArray = [_itemValue] call _returnBitArray; + + + if (_itemValue == 1 && IGUI_GEAR_filterPrimaryWeapon) then { + _output = true; + }; + + if (_itemValue == 5 && IGUI_GEAR_filterPrimaryWeapon) then { + _output = true; + + }; + + if (_itemValue == 4 && IGUI_GEAR_filterSecondaryWeapon) then { + _output = true; + }; + + if (_itemValue == 2 && IGUI_GEAR_filterPistols) then { + _output = true; + }; + if (_itemValue == 16 && IGUI_GEAR_filterPistolAmmo) then { + _output = true; + }; + + if (_itemValue == 131072 && IGUI_GEAR_filterInventory) then { + _output = true; + }; + + if (_itemValue == 512 && IGUI_GEAR_filterAmmo) then { + _output = true; + }; + if (_itemValue == 256 && IGUI_GEAR_filterAmmo) then { + _output = true; + }; + + if (_itemValue == 4096 && IGUI_GEAR_filterBinocular) then { + _output = true; + }; + _output; +}; + +_filterItems = { + private ["_n","_itemType"]; + _deleteIndexes = []; + _lbcontrol = _display displayctrl _lbIDC; + _n = (lnbSize _lbcontrol) select 0; + _j = 0; + for [{_i=_n},{_i>=0}, {_i = _i - 1} ] do + { + _item = _lbcontrol lnbData [_i,1]; + _itemType = [_item] call _itemSlot; + + if ([_itemType] call _matchesFilter) then { + _j = _j + 1; + _deleteIndexes set [(_j-1), _i]; + }; + }; + LB_CTRL = _lbcontrol; + { + _lbcontrol lnbDeleteRow _x; + } forEach _deleteIndexes; +}; + +_itemPicture = { + private ["_item"]; + _item = _this select 0; + + _return = ""; + + if ([_item] call _isWeapon) then { + _return = getText(configfile >> "cfgWeapons" >> _item >> "picture"); + }; + if ([_item] call _isMagazine) then { + _return = getText(configfile >> "cfgMagazines" >> _item >> "picture"); + }; + _return; +}; + +_itemDescription = { + private ["_inputItem","_return"]; + _inputItem = _this select 0; + _return = ""; + if ([_inputItem] call _isWeapon) then { + _name = getText(configfile >> "cfgWeapons" >> _inputItem >> "descriptionShort"); + _return = (_name); + }; + + if ([_inputItem] call _isMagazine) then { + _name = getText(configfile >> "cfgMagazines" >> _inputItem >> "descriptionShort"); + _return = (_name); + }; + _return; +}; + +_itemName = { + private ["_item"]; + _item = _this select 0; + + _return = ""; + + if ([_item] call _isWeapon) then { + _name = getText(configfile >> "cfgWeapons" >> _item >> "displayName"); + _return = ( _name); + }; + + if ([_item] call _isMagazine) then { + _name = getText(configfile >> "cfgMagazines" >> _item >> "displayName"); + _return = ( _name); + }; + + _return; +}; +_displayItemIcon = { + private ["_selectedItem","_itemPicturePath"]; + _selectedItem = [] call _lbSelectedItem; + _itemPicturePath = [_selectedItem] call _itemPicture; + _pictureControl = _display displayctrl 1104; + _pictureControl ctrlSetText _itemPicturePath; +}; + +_displayItemDescription = { + private ["_descriptionControl","_selectedItemDescription","_selectedItemN"]; + _selectedItemN = [] call _lbSelectedItem; + _selectedItemDescription = [_selectedItemN] call _itemDescription; + _descriptionControl = _display displayctrl 1106; + + _descriptionControl ctrlSetStructuredText parseText(_selectedItemDescription); +}; + +_displayItemName = { + private ["_nameControl","_itemDescription"]; + _selectedItem = [] call _lbSelectedItem; + _itemName = [_selectedItem] call _itemName; + _nameControl = _display displayctrl 1101; + _nameControl ctrlSetText _itemName; +}; + + +_output = true; +_lbIDC = 105; + + +switch _event do { + case "initDialog": { + [] call _showAllIDCs; + }; + case "onLoad": { + [] call _weaponsLBSetFocus; + [] call _arrowsEnable; + [] call _displayItemIcon; + [] call _displayItemName; + [] call _displayItemDescription; + [] call _showAllIDCs; + //[] call _arrowsEnable; + //[] call _highlightGearSlots; + }; + + //used for buyUnits + case "filter": { + IGUI_GEAR_activeFilter = IGUI_GEAR_activeFilter + 1; + if (IGUI_GEAR_activeFilter > ((count _filterSets)-1 )) then { + IGUI_GEAR_activeFilter = 0; + }; + _doFilter = true; + }; + + //changing IGUI_GEAR_activeFilter, but not filter picture (used for buyGear) + case "filterNotSet": { + IGUI_GEAR_activeFilter = IGUI_GEAR_activeFilter + 1; + if (IGUI_GEAR_activeFilter > ((count _filterSets)-1 )) then { + IGUI_GEAR_activeFilter = 0; + }; + //_doFilter = true; + }; + + case "filter_left": { + IGUI_GEAR_activeFilter = IGUI_GEAR_activeFilter - 1; + if (IGUI_GEAR_activeFilter < 0) then { + IGUI_GEAR_activeFilter = ((count _filterSets)-1 ); + }; + _doFilter = true; + }; + + + case "onFocus": { + [] call _weaponsLBSetFocus; + //[] call _arrowsEnable; + }; + + case "onKeyDown": { + [] call _keyActions; + }; + case "onLBSelChanged": { + [] call _displayItemIcon; + [] call _displayItemName; + [] call _displayItemDescription; + //[] call _arrowsEnable; + [] call _highlightGearSlots; + }; + case "onKillFocus": { + [] call _weaponsLBSetFocus; + }; + default { + + }; +}; + +/* Filter removed, moving to engine */ +if _doFilter then { + (_filterSets select IGUI_GEAR_activeFilter) call _setFilterGlobals; + // [] call _filterItems; + // [] call _setFilterIcon; +}; + + +_output; +false; \ No newline at end of file diff --git a/SQF/dayz_code/Configs/rscTitles.hpp b/SQF/dayz_code/Configs/rscTitles.hpp index 55536901b..05e71d5cd 100644 --- a/SQF/dayz_code/Configs/rscTitles.hpp +++ b/SQF/dayz_code/Configs/rscTitles.hpp @@ -893,7 +893,7 @@ class RscDisplayGear idd = 106; enableDisplay = 1; // 177 based - //onLoad = "_this call fn_gearMenuChecks;[] spawn object_monitorGear; {player removeMagazines _x} forEach MeleeMagazines; call gear_ui_init; if (isNil('IGUI_GEAR_activeFilter')) then { IGUI_GEAR_activeFilter = 0;}; private ['_dummy']; _dummy = [_this,'initDialog'] call compile preprocessFile '\ca\ui\scripts\handleGear.sqf'; _dummy = [_this,'onLoad'] execVM '\ca\ui\scripts\handleGear.sqf'; _dummy;"; + //onLoad = "_this call fn_gearMenuChecks;[] spawn object_monitorGear; {player removeMagazines _x} forEach MeleeMagazines; call gear_ui_init; if (isNil('IGUI_GEAR_activeFilter')) then { IGUI_GEAR_activeFilter = 0;}; private ['_dummy']; _dummy = [_this,'initDialog'] call compile preprocessFile '\z\addons\dayz_code\BIS_scripts\handleGear.sqf'; _dummy = [_this,'onLoad'] execVM '\z\addons\dayz_code\BIS_scripts\handleGear.sqf'; _dummy;"; onUnload = "call player_gearSync; call dayz_forceSave;"; class controls @@ -1053,8 +1053,8 @@ class RscDisplayGear idc = 146; x = -2; style = 2048; - onSetFocus = "private [""_dummy""]; _dummy = [_this,""onFocus""] execVM ""\ca\ui\scripts\handleGear.sqf""; _dummy;"; - onButtonClick = "private [""_dummy""]; _dummy = [_this,""onLBListSelChanged""] execVM ""\ca\ui\scripts\handleGear.sqf""; _dummy;"; + onSetFocus = "private [""_dummy""]; _dummy = [_this,""onFocus""] execVM ""\z\addons\dayz_code\BIS_scripts\handleGear.sqf""; _dummy;"; + onButtonClick = "private [""_dummy""]; _dummy = [_this,""onLBListSelChanged""] execVM ""\z\addons\dayz_code\BIS_scripts\handleGear.sqf""; _dummy;"; text = "<"; }; class Available_items: RscIGUIListNBox @@ -1065,10 +1065,10 @@ class RscDisplayGear idcRight = 147; idcLeft = 146; colorPlayerItem[] = {0.8784,0.8471,0.651,1}; - onKeyDown = "private [""_dummy""]; _dummy = [_this,""onKeyDown"",0,107,0,107] execVM ""\ca\ui\scripts\handleGear.sqf""; _dummy;"; - onLBSelChanged = "private [""_dummy""]; _dummy = [_this,""onLBSelChanged""] execVM ""\ca\ui\scripts\handleGear.sqf""; _dummy;"; - onLBListSelChanged = "private [""_dummy""]; _dummy = [_this,""onLBListSelChanged""] execVM ""\ca\ui\scripts\handleGear.sqf""; _dummy;"; - onKillFocus = "private [""_dummy""]; _dummy = [_this,""onKillFocus""] execVM ""\ca\ui\scripts\handleGear.sqf""; _dummy;"; + onKeyDown = "private [""_dummy""]; _dummy = [_this,""onKeyDown"",0,107,0,107] execVM ""\z\addons\dayz_code\BIS_scripts\handleGear.sqf""; _dummy;"; + onLBSelChanged = "private [""_dummy""]; _dummy = [_this,""onLBSelChanged""] execVM ""\z\addons\dayz_code\BIS_scripts\handleGear.sqf""; _dummy;"; + onLBListSelChanged = "private [""_dummy""]; _dummy = [_this,""onLBListSelChanged""] execVM ""\z\addons\dayz_code\BIS_scripts\handleGear.sqf""; _dummy;"; + onKillFocus = "private [""_dummy""]; _dummy = [_this,""onKillFocus""] execVM ""\z\addons\dayz_code\BIS_scripts\handleGear.sqf""; _dummy;"; x = 0; y = 0; w = 0.46; @@ -1079,8 +1079,8 @@ class RscDisplayGear { idc = 147; x = -2; - onSetFocus = "private [""_dummy""]; _dummy = [_this,""onFocus""] execVM ""\ca\ui\scripts\handleGear.sqf""; _dummy;"; - onButtonClick = "private [""_dummy""]; _dummy = [_this,""onLBListSelChanged""] execVM ""\ca\ui\scripts\handleGear.sqf""; _dummy;"; + onSetFocus = "private [""_dummy""]; _dummy = [_this,""onFocus""] execVM ""\z\addons\dayz_code\BIS_scripts\handleGear.sqf""; _dummy;"; + onButtonClick = "private [""_dummy""]; _dummy = [_this,""onLBListSelChanged""] execVM ""\z\addons\dayz_code\BIS_scripts\handleGear.sqf""; _dummy;"; text = ">"; }; }; @@ -1619,7 +1619,7 @@ class RscDisplayGear emptyMag2 = "\ca\ui\data\ui_gear_mag2_gs.paa"; emptyHGun = "\ca\ui\data\ui_gear_hgun_gs.paa"; emptyHGunMag = "\ca\ui\data\ui_gear_hgunmag_gs.paa"; - onLoad = "_this call fn_gearMenuChecks;[] spawn object_monitorGear; call gear_ui_init; call ui_gear_sound;if (isNil('IGUI_GEAR_activeFilter')) then { IGUI_GEAR_activeFilter = 0;}; private ['_dummy']; _dummy = [_this,'initDialog'] call compile preprocessFile '\ca\ui\scripts\handleGear.sqf'; _dummy = [_this,'onLoad'] execVM '\ca\ui\scripts\handleGear.sqf'; _dummy;"; + onLoad = "_this call fn_gearMenuChecks;[] spawn object_monitorGear; call gear_ui_init; call ui_gear_sound;if (isNil('IGUI_GEAR_activeFilter')) then { IGUI_GEAR_activeFilter = 0;}; private ['_dummy']; _dummy = [_this,'initDialog'] call compile preprocessFile '\z\addons\dayz_code\BIS_scripts\handleGear.sqf'; _dummy = [_this,'onLoad'] execVM '\z\addons\dayz_code\BIS_scripts\handleGear.sqf'; _dummy;"; class ControlsBackground { class Mainback: RscPicture