Стратегическая карта (скрипт)

Скрипт на использование стратегической карты, с возможностью её многократного открытия, с опциями скрытия существующих задач, и добавления новых.

Использование:

На предмете, на котором будет кнопка «Открыть стратегическую карту» вешаем это:

this addAction ["Открыть стратегическую карту","scripts\osm.sqf",[false],1,false,true,"","(_target distance _this) < 3"];

Перед тем как открыть «Стратегическая карта» , надо дать команду показать на ней места заданий (иначе ошибка).

В нашем случае это:

showAAATask = true;
showArtyTask = true;
showHeloTask = true;

Что бы удалить (спрятать) выполненное задание, нам нужно написать условие. Где угодно, только не в файле самой карты.

У меня оно такое:

0 spawn {
waitUntil{
!alive aa;
};
showAAATask = false;
hint "Ok";
};

Где aa — это зенитка которую мне надо уничтожить.
Ну а hint просто для проверки работы. Если вдруг сомневаетесь.

Так же не забываем создать сами маркера.
У меня они:

Для заданий:

mrk_AAA
mrk_Arty
mrk_Helo

Для позиций куда телепортировать игрока:

mrk_startAAA
mrk_startArty
mrk_startHelo

Сам скрипт:

// Название задания
startAAA =
{
player enableSimulation false; // Отключаем симуляцию у игрока
"mrk_startAAA" setMarkerSize [1,1]; // Устанавливаем размер маркера
player setpos getmarkerpos "mrk_startAAA"; // Переносим игрока к маркеру mrk_startAAA
{_x setpos getmarkerpos "mrk_startAAA";_x enableAI "ANIM";_x switchMove ""} forEach [a2,a3,a4,a5]; // Переносим ботов к маркеру mrk_startAAA
a2 joinAsSilent [group player, 2]; // Присоединяем бота к группе
a3 joinAsSilent [group player, 3]; // Присоединяем бота к группе
a4 joinAsSilent [group player, 4]; // Присоединяем бота к группе
a5 joinAsSilent [group player, 5]; // Присоединяем бота к группе
group player setBehaviour "STEALTH"; // Группе игрока ставим поведение "скрытно"
player setdir 64; // Поворачиваем игрока на 64*
player enableSimulation true; //Включаем симуляцию у игрока
};
 
startArty =
{
player enableSimulation false;
"mrk_startArty" setMarkerSize [1,1];
player setpos getmarkerpos "mrk_startArty";
{_x setpos getmarkerpos "mrk_startArty";_x enableAI "ANIM";_x switchMove ""} forEach [a2,a3,a4,a5];
a2 joinAsSilent [group player, 2];
a3 joinAsSilent [group player, 3];
a4 joinAsSilent [group player, 4];
a5 joinAsSilent [group player, 5];
group player setBehaviour "STEALTH";
player setdir 124;
player enableSimulation true;
};
 
startHelo =
{
player enableSimulation false;
"mrk_startHelo" setMarkerSize [1,1];
player setpos getmarkerpos "mrk_startHelo";
{_x setpos getmarkerpos "mrk_startHelo";_x enableAI "ANIM";_x switchMove ""} forEach [a2,a3,a4,a5];
a2 joinAsSilent [group player, 2];
a3 joinAsSilent [group player, 3];
a4 joinAsSilent [group player, 4];
a5 joinAsSilent [group player, 5];
group player setBehaviour "STEALTH";
player setdir 57;
player enableSimulation true;
};
 
//////////////////////////////////////////
// Пишем сюда задания для СК.
 
_missionsData   = [];
if (showAAATask) then { _missionsData pushBack  [getmarkerpos "mrk_AAA",startAAA,"Позиция зенитки","Второстепенная задача: выведите их зенитку из строя","","",1,[]] };
if (showArtyTask) then { _missionsData pushBack  [getmarkerpos "mrk_Arty",startArty,"Название задания","Описание задания, при наведении мыши на него.","","",1,[]]};
if (showHeloTask) then { _missionsData pushBack  [getmarkerpos "mrk_Helo",startHelo,"Уничтожить тачку пидораса","Уничтожить тачилу одному педриле!","","",1,[]]};
 
 
//////////////////////////////////////////
 
disableserialization;
 
_parentDisplay  = [] call bis_fnc_displayMission;
_mapCenter  = getmarkerpos "base"; // На каком месте откроется карта. Если не прописать - укажет координаты 0,0,0 (левый нижний угол)
_ORBAT      = []; // Боевое расписание. Если надо.
_markers    = []; // Маркера. Если надо.
_images     = []; // Картинки. Если надо.
_overcast   = overcast; // Погода
_isNight    = !((dayTime > 6) && (dayTime < 20)); //Проверка ночь ли это. ХЗ зачем, не стал вникать
_scale      = 1.5; // Масштаб отображаемой карты (по умолчанию = 1)
_simul      = true;
 
 
[
findDisplay 46,
_mapCenter,
_missionsData,
_ORBAT,
_markers,
_images,
_overcast,
_isNight,
_scale,
_simul
] call Bis_fnc_strategicMapOpen;

Спасибо за помощь Dusin (участник нашего Discord).

Наше видео на эту тему (показан старый форум, сейчас тут этот сайт):

Обсудить этот метод можно в нашем Discord канале