Перейти к содержимому


Фотография

lbData и UI


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 30

#21 OFFLINE   ReXcOr

ReXcOr

    Ст.сержант

  • Пользователи
  • 264 сообщений
  • Откуда:Moscow

Отправлено 07 March 2018 - 19:50

ReXcOr, вот вам на подумать:

onEachFrame {
    _a = [];
    
    {
        _a pushBack [_forEachIndex, _x];
    } forEach (((getUnitLoadout player) select 4) select 1);

    hintSilent (_a joinString toString [92,110]);
};

PS Придется немного отсортировать массив, но закономерность думаю видна:

 

Влад, читаете мысли)) Как раз экспериментирую с этим)


  • 0

#22 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 07 March 2018 - 19:58

То что я пока обнаружил:
1. Все оружия переместить в самый верх списка
2. Все магазины переместить за самый первый магазин такого же класса
4. Порядок такой: оружие, предметы, магазины

Сообщение отредактировал vlad333000: 07 March 2018 - 19:59

  • 0

#23 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 07 March 2018 - 20:05

PS Если в лежит контейнер внутри, то невозможно отследить правильный порядок. Контейнеры всегда в конце, а в списке они считаются как предметы и где-то среди них находятся
PSPS команда items позволит восстановить правильный порядок для контейнеров

Сообщение отредактировал vlad333000: 07 March 2018 - 20:05

  • 0

#24 OFFLINE   NoNameUltima

NoNameUltima

    Сержант

  • Пользователи
  • 189 сообщений
  • Откуда:SPB

Отправлено 07 March 2018 - 20:42

Можно и массивы, а можно просто плюнуть и прошерстить все)

Ultima_Client_Procedure_Player_OnDblClick_Inventory_Object	=
	{
		disableSerialization;
		private ["_control", "_index", "_container", "_idc", "_disp_name", "_class", "_configClasses", "_i", "_entry", "_displayName", "_find"];
		_control		=	((_this select 0) select 0);
		_index			=	((_this select 0) select 1);
		_container		=	(_this select 1);
		_idc			=	ctrlIDC _control;
		_disp_name		=	lbText [_idc, _index];
		_class			=	lbData [_idc, _index];
		if (_class == "") then
			{
				_find		=	false;
				{
					_configClasses	=	"true" configClasses (configFile >> _x);
					for "_i" from 0 to (count _configClasses) - 1 do
						{
							_entry			=	(_configClasses select _i);
							_displayName	=	getText(_entry >> "displayName");
							if (_displayName != "") then
								{
									if ( _disp_name == _displayName ) exitWith
										{
											_class	=	configName(_entry);
											_find	=	true;
										};
								};
							if (_find) exitWith {};
						};
					if (_find) exitWith {};
				} forEach ["cfgWeapons", "CfgGlasses"];
			};
		hint _class;
		diag_log format["_class: %1", _class];
	};
[] spawn
	{
		while {true} do
			{
				waitUntil { !(isNull (findDisplay 602)) };
				((findDisplay 602) displayCtrl 633) ctrlSetEventHandler ["LBDblClick", "[_this, 'uniform'] spawn Ultima_Client_Procedure_Player_OnDblClick_Inventory_Object"];
				((findDisplay 602) displayCtrl 638) ctrlSetEventHandler ["LBDblClick", "[_this, 'vest'] spawn Ultima_Client_Procedure_Player_OnDblClick_Inventory_Object"];
				((findDisplay 602) displayCtrl 619) ctrlSetEventHandler ["LBDblClick", "[_this, 'backpack'] spawn Ultima_Client_Procedure_Player_OnDblClick_Inventory_Object"];
				waitUntil { (isNull (findDisplay 602)) };
			};
	};


  • 0

#25 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 07 March 2018 - 22:01

NoNameUltima, код как я понял вы даже не проверяли...
  • 0

#26 OFFLINE   NoNameUltima

NoNameUltima

    Сержант

  • Пользователи
  • 189 сообщений
  • Откуда:SPB

Отправлено 07 March 2018 - 22:05

vlad333000,

это почему? проверял


  • 0

#27 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 07 March 2018 - 22:07

NoNameUltima, косяк, у меня какая-то фигня была
  • 0

#28 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 07 March 2018 - 22:16

Еще один баг нашел в арме... как же я "удивлен" -_-
Через setUnitLoadout делаете игроку такой вот инвентарь (Суть в двух одинаковых пистолетах (Работает с любым оружием)):
[[],[],["hgun_P07_F","","","",["16Rnd_9x21_Mag",16],[],""],[],[],["B_Carryall_ocamo",[[["hgun_P07_F","","","",[],[],""],1]]],"","",[],["","","","","",""]]
Далее перекидываете пистолет из слота в рюкзак. Далее в getUnitLoadout получаете такое снаряжение:
[[],[],[],[],[],["B_Carryall_ocamo",[[["hgun_P07_F","","","",[],[],""],2]]],"","",[],["","","","","",""]]
Или такое (Зависит от порядка действий)
[[],[],[],[],[],["B_Carryall_ocamo",[[["hgun_P07_F","","","",["16Rnd_9x21_Mag",16],[],""],2]]],"","",[],["","","","","",""]]
Т. е. 2 пистолета без/с магазином, хотя один из них заряжен, а второй нет

Сообщение отредактировал vlad333000: 07 March 2018 - 22:17

  • 1

#29 OFFLINE   Zlobot

Zlobot

    Мл.сержант

  • Пользователи
  • 149 сообщений
  • Откуда:Хабаровск

Отправлено 10 June 2018 - 10:52

 

Можно и массивы, а можно просто плюнуть и прошерстить все)

Ultima_Client_Procedure_Player_OnDblClick_Inventory_Object	=
	{
		disableSerialization;
		private ["_control", "_index", "_container", "_idc", "_disp_name", "_class", "_configClasses", "_i", "_entry", "_displayName", "_find"];
		_control		=	((_this select 0) select 0);
		_index			=	((_this select 0) select 1);
		_container		=	(_this select 1);
		_idc			=	ctrlIDC _control;
		_disp_name		=	lbText [_idc, _index];
		_class			=	lbData [_idc, _index];
		if (_class == "") then
			{
				_find		=	false;
				{
					_configClasses	=	"true" configClasses (configFile >> _x);
					for "_i" from 0 to (count _configClasses) - 1 do
						{
							_entry			=	(_configClasses select _i);
							_displayName	=	getText(_entry >> "displayName");
							if (_displayName != "") then
								{
									if ( _disp_name == _displayName ) exitWith
										{
											_class	=	configName(_entry);
											_find	=	true;
										};
								};
							if (_find) exitWith {};
						};
					if (_find) exitWith {};
				} forEach ["cfgWeapons", "CfgGlasses"];
			};
		hint _class;
		diag_log format["_class: %1", _class];
	};
[] spawn
	{
		while {true} do
			{
				waitUntil { !(isNull (findDisplay 602)) };
				((findDisplay 602) displayCtrl 633) ctrlSetEventHandler ["LBDblClick", "[_this, 'uniform'] spawn Ultima_Client_Procedure_Player_OnDblClick_Inventory_Object"];
				((findDisplay 602) displayCtrl 638) ctrlSetEventHandler ["LBDblClick", "[_this, 'vest'] spawn Ultima_Client_Procedure_Player_OnDblClick_Inventory_Object"];
				((findDisplay 602) displayCtrl 619) ctrlSetEventHandler ["LBDblClick", "[_this, 'backpack'] spawn Ultima_Client_Procedure_Player_OnDblClick_Inventory_Object"];
				waitUntil { (isNull (findDisplay 602)) };
			};
	};

 

Вот спасибо добрый человек! )) Как раз озаботился подобной проблемой, а Вы уже решили ее! Немножко доработал ее чтобы можно было и в каком-нибудь открытом ящике (или рюкзаке другого персонажа) проверять. Нужно добавить строку:

((findDisplay 602) displayCtrl 632) ctrlSetEventHandler ["LBDblClick", "[_this, 'box'] spawn Ultima_Client_Procedure_Player_OnDblClick_Inventory_Object"];

если на земле то: displayCtrl 640


  • 0

#30 OFFLINE   NoNameUltima

NoNameUltima

    Сержант

  • Пользователи
  • 189 сообщений
  • Откуда:SPB

Отправлено 06 July 2018 - 04:51


[] spawn { while {true} do { waitUntil { !(isNull (findDisplay 602)) }; ((findDisplay 602) displayCtrl 633) ctrlSetEventHandler ["LBDblClick", "[_this, 'uniform'] spawn Ultima_Client_Procedure_Player_OnDblClick_Inventory_Object"]; ((findDisplay 602) displayCtrl 638) ctrlSetEventHandler ["LBDblClick", "[_this, 'vest'] spawn Ultima_Client_Procedure_Player_OnDblClick_Inventory_Object"]; ((findDisplay 602) displayCtrl 619) ctrlSetEventHandler ["LBDblClick", "[_this, 'backpack'] spawn Ultima_Client_Procedure_Player_OnDblClick_Inventory_Object"]; waitUntil { (isNull (findDisplay 602)) }; }; };

 

При открытии инвентаря, эту часть можно заменить на:

Ultima_Client_Boolean_Player_EH_Inventory    =    false;
Ultima_Client_EH_Inventory_Open    =
    {
        Private ["_cancel"];
        if (Ultima_Client_Boolean_Player_EH_Inventory) exitWith {};
        Ultima_Client_Boolean_Player_EH_Inventory    =    true;
        _cancel                                      =    false;
        while {(isNull (findDisplay 602))} do
            {
                uiSleep 0.01;
                if !(Ultima_Client_Boolean_Player_EH_Inventory) exitWith
                    {_cancel    =    true;}
            };
        if (_cancel) exitWith {};
        ((findDisplay 602) displayCtrl 633) ctrlSetEventHandler ["LBDblClick", "[_this, 'uniform'] call Ultima_Client_Procedure_Player_OnDblClick_Inventory_Object"];
        ((findDisplay 602) displayCtrl 638) ctrlSetEventHandler ["LBDblClick", "[_this, 'vest'] call Ultima_Client_Procedure_Player_OnDblClick_Inventory_Object"];
        ((findDisplay 602) displayCtrl 619) ctrlSetEventHandler ["LBDblClick", "[_this, 'backpack'] call Ultima_Client_Procedure_Player_OnDblClick_Inventory_Object"];
        ((findDisplay 602) displayCtrl 632) ctrlSetEventHandler ["LBDblClick", "[_this, 'container'] call Ultima_Client_Procedure_Player_OnDblClick_Inventory_Object"];
    };
player addEventHandler ["InventoryOpened", {[] spawn Ultima_Client_EH_Inventory_Open;}];
player addEventHandler ["InventoryClosed", {Ultima_Client_Boolean_Player_EH_Inventory    =    false;}];

P.S. Переменная Ultima_Client_Boolean_Player_EH_Inventory может и не нужна. Гипотетически, вероятность, что spawn процедуры произойдет с некоей задержкой, и игрок успеет быстро закрыть инвентарь почти нулевая, да и по сути, ни на что не повлияет, но всеж...

P.S.P.S. Не проверял, может InventoryOpened, срабатывает только при открытии собственного инвентаря, а не снаряжения(например ящика), если так, то - либо оставить код который был, либо использовать еще и Gear.


Сообщение отредактировал NoNameUltima: 06 July 2018 - 04:57

  • 0

#31 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 06 July 2018 - 05:27

 

 Не проверял, может InventoryOpened, срабатывает только при открытии собственного инвентаря, а не снаряжения(например ящика),

Не важно, если у игрока вызывается дисплей инвентаря, то не важно каким образом он вызван.


  • 0




Яндекс.Метрика