Многие хотят сделать миссию, в которой нужно взять какой-либо предмет и отнести в определенное место или кому-то передать. Это довольно простая задача, если вы не хотите, чтобы этот предмет отображался в инвентаре. В противном случае придется попотеть, чем в этом небольшом пособии и займемся.
Для себя я нашел два варианта решения такой задачи: с помощью скрипта и с помощью мода. Первый проще и быстрее, но не лишен багов, да и вообще способ «костыльный». В любом случае, мы разберем оба варианта.
Первый:
Создаем в редакторе ноутбук (например «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 канале