В папке:
...\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


Тема закрыта








