Многие хотят сделать миссию, в которой нужно взять какой-либо предмет и отнести в определенное место или кому-то передать. Это довольно простая задача, если вы не хотите, чтобы этот предмет отображался в инвентаре. В противном случае придется попотеть, чем в этом небольшом пособии и займемся.
Для себя я нашел два варианта решения такой задачи: с помощью скрипта и с помощью мода. Первый проще и быстрее, но не лишен багов, да и вообще способ «костыльный». В любом случае, мы разберем оба варианта.
Первый:
Создаем в редакторе ноутбук (например «Land_Laptop_F») и называем его notebook. В инициализации ему пишем:
this addAction ["Взять ноутбук",{(_this # 0) execVM "notebook.sqf";}];
Теперь у ноутбук появилась кнопочка «Взять ноутбук», нажав на которую будет вызываться скрипт notebook.sqf.
В корне миссии создаем этот самый файл notebook.sqf и в него пишем следующее:
1. Удаляем ноутбук, затем добавляем нам в униформу ХИС (химический источник света). Я выбрал желтый.
deleteVehicle _this; player addItemToUniform "Chemlight_yellow";
2. Добавляем функцию, которая будет заменять данные этого ХИСа.
fnc_changeItem = { waitUntil {!isNull findDisplay 602}; //ждем пока откроется дисплей инвентаря _uniform = (findDisplay 602) displayCtrl 633; //создаем переменную для control 633. Это список вещей униформы _size = lbSize _uniform; //узнаем сколько вещей в униформе _index = -1; //создаем переменную с индексом for "_i" from 0 to (_size - 1) do { //создаем цикл для проверки всех вещей униформы, чтобы найти наш ХИС if ((lbData [633,_i]) == "Chemlight_yellow") exitWith { //если ХИС найден, присваиваем его индекс переменной _index _index = _i; }; }; _uniform lbSetText [_index,"Ноутбук"]; //Меняем текст _uniform lbSetTooltip [_index,"Ноутбук очень приочень важный"]; //Описание не меняется. В чем причина я так и не разобрался _uniform lbSetPicture [_index,"D:\noutbook.paa"]; //меняем картинку на ту, которая нам нужна _uniform lbSetColor [_index,[1,0,0,1]]; //и даже меняем цвет текста, чтобы игрок точно знал, что штука эта важная )) };
3. Добавляем хендлер на открытие инвентаря, который и будет вызывать нашу функцию.
pEHopen = player addEventHandler ["InventoryOpened", { [] spawn fnc_changeItem; }];
На этом все. На скриншоте видно, как это работает, а так же видно, какие есть баги. Всплывающая подсказка (tooltip) не меняет текст, так и не понял почему. При выкидывании ноутбука в списке слева он выглядит, как ХИС. Конечно, можно отслеживать это и менять текст и картинку и там. Так же, при выкидывании ноутбука, на земле появляется не ноутбук, а тот же ХИС. Нужно отслеживать и этот момент, менять хис на ноутбук и снова добавлять ему экшн на поднятие, а плееру, который выкинул ноут, не забыть удалить хендлер, чтобы, если он поднимет где-то желтый ХИС, этот хис не перекрашивался в ноутбук.
Второй способ:
Второй способ мне нравится больше, хоть я не занимаюсь модами, да и не разбираюсь в этом, но постарался понять, как же сделать правильный ноутбук для инвентаря.
В папке с армой создаем папку с любым названием, например @new_item. Это будет папка с нашим модом. В этой папке создаем еще одну папку — addons. В ней еще одну с любым названием, у меня это bt_notebook. В ней создаем файл config.cpp и две папки: images и models.
В папке images должна лежать картинка в формате .paa. Эта картинка является иконкой, которая будет отображаться в инвентаре.
В папке models должна лежать 3d модель в формате .p3d. Это модель ноутбука в моем случае. Я не делаю 3d модели (пока что, по крайней мере :)), поэтому взял модель ноутбука из самой Армы. Можно было указать прямой путь до модели, но я решил скопировать для наглядности, чтобы Вы потом могли без проблем ее заменить на свою.
Теперь пишем конфиг. Описание конфига будет скудное, так как, повторюсь, я не мододел и в этом не разбираюсь.
class CfgPatches { class bt_notebook //название класса должно быть такое же как у папки, которая лежит в папке addons { units[]={}; weapons[]={}; requiredVersion=1; author[]={"BlackTok"}; }; }; class CfgMagazines { class CA_Magazine; class bt_notebook_F: CA_Magazine { displayName = "NoteBook BT"; scope=2; author = "BlackTok"; picture = "\bt_notebook\images\noutbook.paa"; //путь до картинки model = "\bt_notebook\models\Laptop_F"; //путь до модели icon = "iconObject_circle"; descriptionShort = "Описание"; }; };
В результате при добавлении ноутбука в инвентарь:
player addItemToUniform "bt_notebook_F";
Если нам нужно его отспаунить на земле — то пишем так:
_objpick = createVehicle ["groundweaponHolder",[7080.58,7310.69,0],[], 0, "can_collide"] ; _objpick additemcargoGlobal ["bt_notebook_F", 1];
В инвентаре появляется нормальный ноутбук, который можно выкинуть на землю, а затем снова поднять. Который можно забрать из формы убитого юнита и тд.
Мод в собранном виде: скачать
Если же что-то непонятно, то можно спросить / уточнить в нашем Discord канале