Терминал данных и дополнительные действия в нём.

В этой статье выложен мой пример, а исходник был взят на 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 канале