В папке:
...\MPMissions\ВАША_МИССИЯ\
Создадим папку:
Ultima_Client_Custom_Scripts
В папке:
...\MPMissions\ВАША_МИССИЯ\Ultima_Client_Custom_Scripts\
Создадим папку для наших скриптов:
Ultima_Client_Fractions
В папке Ultima_Client_Fractions создадим файлы:
*Для хранения конфигурации настроек скриптов фракций
Ultima_Client_Fractions_Configs.sqf
*Для инициализации - подключения скриптов фракций
Ultima_Client_Fractions_Init.sqf
*Для создания и отображения меню фракций
Ultima_Client_Fractions_Menu.sqf
*Для обработки и применения выбранного пункта меню фракций
Ultima_Client_Fractions_Set_Or_Change_Or_Exit.sqf
Разбираем файлы:
Файл Ultima_Client_Fractions_Configs.sqf:
Добавим в него следующий код:
// Массив объектов, рядом с которыми будет появляться меню фракций. Ultima_Client_Array_Fractions_Menu_Objects = ["Laptop_EP1"]; // Дистанция от игрока, до объекта рядом с которыми появляется меню фракций.(В примере - 5 метров). Ultima_Client_Integer_Fractions_Menu_Distance = 5;
Файл Ultima_Client_Fractions_Init.sqf:
Добавим в него следующий код:
// Подключаем конфигурацию настроек меню [] call compile preprocessFileLineNumbers "Ultima_Client_Custom_Scripts\Ultima_Client_Fractions\Ultima_Client_Fractions_Configs.sqf"; // Создаем массив в котором будут хранится отображаемые меню фракций. Ultima_Client_Array_Fractions_Menu = []; [] execVM "Ultima_Client_Custom_Scripts\Ultima_Client_Fractions\Ultima_Client_Fractions_Menu.sqf";
Файл Ultima_Client_Fractions_Menu.sqf:
Добавим в него следующий код:
Private ["_fraction", "_fraction_menu"]; // Цикл будет создавать и удалять меню фракций, в зависимости от условий. Работает постоянно. Интервал 2 секунды. while {true} do { // Если рядом с игроком, в пределах Ultima_Client_Integer_Fractions_Menu_Distance, есть какой то объект из массива - Ultima_Client_Array_Fractions_Menu_Objects, будем создавать меню if ( (count nearestObjects [(getPosATL player), Ultima_Client_Array_Fractions_Menu_Objects, Ultima_Client_Integer_Fractions_Menu_Distance]) > 0 ) then { // Если меню фракций еще не создано, - создадим его. if ( (count _fraction_menu) < 0 ) then { // Узнаем в какой фракции в данный момент состоит игрок(по умолчанию - NO - вне фракции.). _fraction = player getVariable ["Ultima_Fraction", "NO"]; switch (_fraction) do { // Если игрок не состоит во фракции case "NO": { _fraction_menu = player addaction[("<t color=""#c70000"">" + ("Вступить по фракцию RU") +"</t>"), "Ultima_Client_Custom_Scripts\Ultima_Client_Fractions\Ultima_Client_Fractions_Set_Or_Change_Or_Exit.sqf",["RU"], 5, false, true, "", ""]; Ultima_Client_Array_Fractions_Menu set [count (Ultima_Client_Array_Fractions_Menu), _fraction_menu]; _fraction_menu = player addaction[("<t color=""#c70000"">" + ("Вступить по фракцию EN") +"</t>"), "Ultima_Client_Custom_Scripts\Ultima_Client_Fractions\Ultima_Client_Fractions_Set_Or_Change_Or_Exit.sqf",["EN"], 5, false, true, "", ""]; Ultima_Client_Array_Fractions_Menu set [count (Ultima_Client_Array_Fractions_Menu), _fraction_menu]; }; // Если игрок состоит во фракции RU case "RU": { _fraction_menu = player addaction[("<t color=""#c70000"">" + ("Перейти во фракцию EN") +"</t>"), "Ultima_Client_Custom_Scripts\Ultima_Client_Fractions\Ultima_Client_Fractions_Set_Or_Change_Or_Exit.sqf",["EN"], 5, false, true, "", ""]; Ultima_Client_Array_Fractions_Menu set [count (Ultima_Client_Array_Fractions_Menu), _fraction_menu]; _fraction_menu = player addaction[("<t color=""#c70000"">" + ("Выйти из фракции RU") +"</t>"), "Ultima_Client_Custom_Scripts\Ultima_Client_Fractions\Ultima_Client_Fractions_Set_Or_Change_Or_Exit.sqf",["NO"], 5, false, true, "", ""]; Ultima_Client_Array_Fractions_Menu set [count (Ultima_Client_Array_Fractions_Menu), _fraction_menu]; }; // Если игрок состоит во фракции EN case "EN": { _fraction_menu = player addaction[("<t color=""#c70000"">" + ("Перейти во фракцию RU") +"</t>"), "Ultima_Client_Custom_Scripts\Ultima_Client_Fractions\Ultima_Client_Fractions_Set_Or_Change_Or_Exit.sqf",["RU"], 5, false, true, "", ""]; Ultima_Client_Array_Fractions_Menu set [count (Ultima_Client_Array_Fractions_Menu), _fraction_menu]; _fraction_menu = player addaction[("<t color=""#c70000"">" + ("Выйти из фракции EN") +"</t>"), "Ultima_Client_Custom_Scripts\Ultima_Client_Fractions\Ultima_Client_Fractions_Set_Or_Change_Or_Exit.sqf",["NO"], 5, false, true, "", ""]; Ultima_Client_Array_Fractions_Menu set [count (Ultima_Client_Array_Fractions_Menu), _fraction_menu]; }; }; }; } else { // Удаляем меню фракций { player removeAction _x; } forEach Ultima_Client_Array_Fractions_Menu; // Очищаем массив меню фракций Ultima_Client_Array_Fractions_Menu = []; }; // Пауза 2 секунды Sleep 2; };
Файл Ultima_Client_Fractions_Set_Or_Change_Or_Exit:
Добавим в него следующий код:
// Выставляем фракцию игроку player setVariable ["Ultima_Fraction", ((_this select 3) select 1), true]; // Удаляем меню фракций { player removeAction _x; } forEach Ultima_Client_Array_Fractions_Menu; // Очищаем массив меню фракций Ultima_Client_Array_Fractions_Menu = [];
Подключение данных скриптов на клиенте(в миссии):
В папке:
...\MPMissions\ВАША_МИССИЯ\
Откроем файл:
init.sqf
В низ данного файла добавим:
if !(isServer) then { [] execVM "Ultima_Client_Custom_Scripts\Ultima_Client_Fractions\Ultima_Client_Fractions_Init.sqf"; };© rnrportal.ru by NoNameUltima