В этой статье выложен мой пример, а исходник был взят на Bohemia Interactive Forums: How to open the Land_DataTerminal_01_F
Ковырялся с миссией, и решил сделать вот такую штуку. А после, решил опять же поделится со всеми.
Теперь есть у меня такой вот терминал в моей миссии, и там выглядит это вот так:
Допустим, что нам понадобился терминал данных, и не просто открывающийся, а с дополнительными действиями.
Нам надо:
- 1.) Поставить (или заспаунить) терминал данных ( Land_DataTerminal_01_F ), и присвоить ему имя переменной, например: myTerminal
- 2.) Ему в инициализацию прописать следующий код:
// Добавляем кнопку взаимодействия с объектом, надпись на кнопке, какой файл выполнить, дистанция для взаимодействия (важно указать, иначе будет по умолчанию 15 метров) this addAction ["Открыть терминал данных", "script\OpenTerminal.sqf",[false],1,false,true,"","(_target distance _this) < 2"] call BIS_fnc_MP;
- 3.) Создать файл OpenTerminal.sqf , а в него уже добавить этот код:
_object = _this select 0; _caller = _this select 1; _id = _this select 2; _object removeaction _id; [_object,3] call BIS_fnc_dataTerminalAnimate; sleep 2; with uiNamespace do { disableserialization; // _object setObjectTexture [0,"\A3\Missions_F_EPA\video\A_in_intro.ogv"]; - выключил, потому что видео играет, можно поставить своё 1100 cutRsc ["RscMissionScreen","PLAIN"]; _scr = BIS_RscMissionScreen displayCtrl 1100; _scr ctrlSetPosition [-10,-10,0,0]; // _scr ctrlSetText "\A3\Missions_F_EPA\video\A_in_intro.ogv"; - выключил, потому что видео играет, можно поставить своё _scr ctrlAddEventHandler ["VideoStopped", { (uiNamespace getVariable "BIS_RscMissionScreen") closeDisplay 1; }]; _scr ctrlCommit 0; }; execVM "script\hack_data.sqf"; - Тут как раз запускаем следующий код, как только терминал открылся. Будет появляться круглая кнопочка.
- 4.) Создать документ hack_data.sqf , и в него добавить код:
// Опять же добавляем кнопку, делаем надпись на ней, дистанция [myTerminal, "Взломать устрйоство", "\a3\ui_f\data\IGUI\Cfg\holdactions\holdAction_connect_ca.paa", "\a3\ui_f\data\IGUI\Cfg\holdactions\holdAction_connect_ca.paa", "_this distance _target < 3", "_caller distance _target < 2", {}, {}, // Этот код начинает выполняться только после завершения прогрессбара. //Выполняем код, который нам нужно. В моём случае это устройство, с переменной ustr1 + завершение задания + запуск следующего задания + создание заряда который всё там уничтожит. { ustr1 setDamage 1; // Завершаем ранее назначенное задание BET_hackdevice ["BET_hackdevice", "SUCCEEDED",true] spawn BIS_fnc_taskSetState; // Создаём заряд, который взорвётся через 60 секунд. Он будет рядом с устройством private _position = [26993.4,23244.8,0]; private _bomb = "SatchelCharge_Remote_Ammo_Scripted" createVehicle _position; _bomb spawn { sleep 60; _this setDamage 1;}; }, {}, [], 25, 0, true, false] remoteExec ["BIS_fnc_holdActionAdd", 0, myTerminal];
Обсудить этот метод можно в нашем Discord канале