Перейти к содержимому

DustBlue IPB Skin by CodeGame Networks

Создание фракций в ArmA. Часть 2. Клиентская(миссионная).

dayz epoch arma fraction guild clan клан фракция гильдия

  • Закрытая тема Тема закрыта
В теме одно сообщение

#1 NoNameUltima

NoNameUltima

    Администратор

  • Администраторы
  • 191 сообщений
  • ГородСанкт-Петербург

Отправлено 28 марта 2016 - 19:33

Создание папок и файлов:

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

#2 NoNameUltima

NoNameUltima

    Администратор

  • Администраторы
  • 191 сообщений
  • ГородСанкт-Петербург

Отправлено 28 марта 2016 - 19:34

Если у Вас возникают вопросы по данной статье, создайте тему, в разделе "Вопросы по серверам" по данной ссылке:
http://rnrportal.ru/...сы-по-серверам/
И укажите ссылку на данную тему.





Темы с аналогичным тегами dayz, epoch, arma, fraction, guild, clan, клан, фракция, гильдия

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных