Перейти к содержанию
Авторизация  
rezakpower

Нужна помощь по картоделию

Рекомендуемые сообщения

Господа, я тут решил сделать миссию, но столкнулся с проблемами реализации своих идей, вот мои вопросы по пунктам:

1) Я хочу притащить unit в определенный маркер (у врагов должна появиться надпись, "unit захвачен русскими". ?  

2) Надо продержать его в этом маркере столько времени, сколько я хочу и по истечении времени моя победа. Конечно при этом если он из маркера выйдет, время сбрасывалось и шло заново, если я притащу его вновь.

3) Если unit умер у всех должна выскочить надпись "Unit мертв" (естественно имя должно высвечиваться которое я сам придумаю, а не имя слота).

Если кто знает напишите поподробнее как все это сделать и в какое место вставлять скрипты. Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 1) Создаешь триггер и настраиваешь так:

Тип - Нет

Активация - Кто угодно

Тип активации - Присутствует

Галочку на "Повторяемый"

Размер и форму подбираешь сам.

Скрытый текст

arma3 2016-10-04 02-19-00-415.jpg

В условии пишешь:

Ivan in thislist

При активации:

missionNamespace setVariable ['isInside', true, true];
[[[], {['VIP захвачен русскими!'] call WMT_fnc_ShowTaskNotification;} ], 'bis_fnc_spawn'] call bis_fnc_MP;

При деактивации:

missionNamespace setVariable ['isInside', false, true];
[[[], {['VIP покинул зону!'] call WMT_fnc_ShowTaskNotification;} ], 'bis_fnc_spawn'] call bis_fnc_MP;
  • 2) Заходишь в атрибуты юнита, даешь ему имя в поле "Имя переменной", например, Ivan.
  • 3) В папке с миссией создаешь файл init.sqf

Наполняешь его следующим:

if (isServer) then  //выполнение только на сервере
{
	if (isNil "isInside") then {isInside = false; publicVariable "isInside";};
	missionComplete = false;
	[] spawn
	{
		i = 0;
		_timeScore = 10;     //количество секунд для удержания в зоне
		while {!missionComplete} do   //loop для проверки нахождения ВИПа и подсчет кол-ва секунд удержания
		{
			if (isInside) then
			{
				i = i + 1;  //наращиваем счетчик, если ВИП в зоне
			} else
			{
				i = 0; //обнуляем если - нет
			};
			
			if (i >= _timeScore && alive Ivan) then  //вывод сообщения и завершение миссии после удержания за указанный период времени
			{
				[[[], {[resistance, 'VIP удержан в зоне!'] call wmt_fnc_endmission;} ], 'bis_fnc_spawn'] call bis_fnc_MP; //выставляешь ту сторону вместо resistance, которая должна выиграть при удержании ВИПа в зоне
				[[[], {['VIP удержан в зоне!'] call WMT_fnc_ShowTaskNotification;} ], 'bis_fnc_spawn'] call bis_fnc_MP;
				missionComplete = true; //переменная-триггер
			};
			sleep 1;  //интервал срабатывания цикла 1 сек.
		};
	};
	[] spawn
	{
		while {alive Ivan && !missionComplete} do //loop на проверку убийства ВИПа
		{
			sleep 0.5;
		};
		if (!alive Ivan) then //если убит - выводим сообщение и завершаем миссию
		{
			[[[], {[blufor, 'VIP убит!'] call wmt_fnc_endmission;} ], 'bis_fnc_spawn'] call bis_fnc_MP;  //выставляешь вместо blufor ту сторону, которая должна выиграть при убийстве юнита
			[[[], {['VIP убит!'] call WMT_fnc_ShowTaskNotification;} ], 'bis_fnc_spawn'] call bis_fnc_MP;
			missionComplete = true;
		};	
	};
};

P.S.: Кодировка файла должна быть UTF-8, иначе будут проблемы с русскими символами.

P.S.S: Проверил в редакторе - все работает, но писал наспех, поэтому возможны проблемы на выделенном сервере.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
10 часов назад, Lex сказал:
  • 1) Создаешь триггер и настраиваешь так:

Тип - Нет

Активация - Кто угодно

Тип активации - Присутствует

Галочку на "Повторяемый"

Размер и форму подбираешь сам.

  Показать содержимое

arma3 2016-10-04 02-19-00-415.jpg

В условии пишешь:


Ivan in thislist

При активации:


missionNamespace setVariable ['isInside', true, true];
[[[], {['VIP захвачен русскими!'] call WMT_fnc_ShowTaskNotification;} ], 'bis_fnc_spawn'] call bis_fnc_MP;

При деактивации:


missionNamespace setVariable ['isInside', false, true];
[[[], {['VIP покинул зону!'] call WMT_fnc_ShowTaskNotification;} ], 'bis_fnc_spawn'] call bis_fnc_MP;
  • 2) Заходишь в атрибуты юнита, даешь ему имя в поле "Имя переменной", например, Ivan.
  • 3) В папке с миссией создаешь файл init.sqf

Наполняешь его следующим:


if (isServer) then  //выполнение только на сервере
{
	if (isNil "isInside") then {isInside = false; publicVariable "isInside";};
	missionComplete = false;
	[] spawn
	{
		i = 0;
		_timeScore = 10;     //количество секунд для удержания в зоне
		while {!missionComplete} do   //loop для проверки нахождения ВИПа и подсчет кол-ва секунд удержания
		{
			if (isInside) then
			{
				i = i + 1;  //наращиваем счетчик, если ВИП в зоне
			} else
			{
				i = 0; //обнуляем если - нет
			};
			
			if (i >= _timeScore && alive Ivan) then  //вывод сообщения и завершение миссии после удержания за указанный период времени
			{
				[[[], {[resistance, 'VIP удержан в зоне!'] call wmt_fnc_endmission;} ], 'bis_fnc_spawn'] call bis_fnc_MP; //выставляешь ту сторону вместо resistance, которая должна выиграть при удержании ВИПа в зоне
				[[[], {['VIP удержан в зоне!'] call WMT_fnc_ShowTaskNotification;} ], 'bis_fnc_spawn'] call bis_fnc_MP;
				missionComplete = true; //переменная-триггер
			};
			sleep 1;  //интервал срабатывания цикла 1 сек.
		};
	};
	[] spawn
	{
		while {alive Ivan && !missionComplete} do //loop на проверку убийства ВИПа
		{
			sleep 0.5;
		};
		if (!alive Ivan) then //если убит - выводим сообщение и завершаем миссию
		{
			[[[], {[blufor, 'VIP убит!'] call wmt_fnc_endmission;} ], 'bis_fnc_spawn'] call bis_fnc_MP;  //выставляешь вместо blufor ту сторону, которая должна выиграть при убийстве юнита
			[[[], {['VIP убит!'] call WMT_fnc_ShowTaskNotification;} ], 'bis_fnc_spawn'] call bis_fnc_MP;
			missionComplete = true;
		};	
	};
};

P.S.: Кодировка файла должна быть UTF-8, иначе будут проблемы с русскими символами.

P.S.S: Проверил в редакторе - все работает, но писал наспех, поэтому возможны проблемы на выделенном сервере.

Слушай, а вот если у меня 2 разных зоны и условия победы разные, т.е. если вип доставлен в одну зону и удержан там, победить должна одна сторона, а если в другую, вторая сторона. В этом скрипте я не могу разделить зоны, он срабатывает на победу только одной стороны, как сделать чтобы на разные? Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, rezakpower сказал:

Слушай, а вот если у меня 2 разных зоны и условия победы разные, т.е. если вип доставлен в одну зону и удержан там, победить должна одна сторона, а если в другую, вторая сторона. В этом скрипте я не могу разделить зоны, он срабатывает на победу только одной стороны, как сделать чтобы на разные? Спасибо.

Ставишь уже два триггера с такими же настройками. Отличаться они будут полями "при активации" и "при деактивации".

В первом триггере будет:

При активации

missionNamespace setVariable ['isInside_1', true, true];
[[[], {['VIP захвачен русскими!'] call WMT_fnc_ShowTaskNotification;} ], 'bis_fnc_spawn'] call bis_fnc_MP;

При деактивации

missionNamespace setVariable ['isInside_1', false, true];
[[[], {['VIP покинул зону!'] call WMT_fnc_ShowTaskNotification;} ], 'bis_fnc_spawn'] call bis_fnc_MP;

Во втором триггере соответственно:

При активации

missionNamespace setVariable ['isInside_2', true, true];
[[[], {['VIP захвачен американцами!'] call WMT_fnc_ShowTaskNotification;} ], 'bis_fnc_spawn'] call bis_fnc_MP;

И при деактивации

missionNamespace setVariable ['isInside_2', false, true];
[[[], {['VIP покинул зону!'] call WMT_fnc_ShowTaskNotification;} ], 'bis_fnc_spawn'] call bis_fnc_MP;

Как видишь, я теперь использую в каждом триггере свою переменную - "isInside_1" и "isInside_2", которая будет обозначать присутствие ВИПа в соответствующей зоне.

Далее меняем код в init.sqf:

if (isServer) then
{
	if (isNil "isInside_1") then {isInside_1 = false; publicVariable "isInside_1";};  //объявляем переменные
  	if (isNil "isInside_2") then {isInside_2 = false; publicVariable "isInside_2";};
	missionComplete = false;
	[] spawn
	{
		i1 = 0;  //для каждой зоны свой счетчик
      	i2 = 0;
		_timeScore = 10;
		while {!missionComplete} do
		{
			if (isInside_1) then  //если ВИП в первой зоне - наращиваем нужный счетчик
			{
				i1 = i1 + 1;
			} else
			{
				i1 = 0;
			};
          
          	if (isInside_2) then
			{
				i2 = i2 + 1;
			} else
			{
				i2 = 0;
			};
			
			if (i1 >= _timeScore && alive Ivan) then 
			{
				[[[], {[resistance, 'VIP удержан в зоне!'] call wmt_fnc_endmission;} ], 'bis_fnc_spawn'] call bis_fnc_MP;  //удержан в первой зоне - победа зеленых
				[[[], {['VIP удержан в зоне!'] call WMT_fnc_ShowTaskNotification;} ], 'bis_fnc_spawn'] call bis_fnc_MP;
				missionComplete = true;
			};
          
          	if (i2 >= _timeScore && alive Ivan) then 
			{
				[[[], {[west, 'VIP удержан в зоне!'] call wmt_fnc_endmission;} ], 'bis_fnc_spawn'] call bis_fnc_MP;  //удержан во второй зоне - победа синих
				[[[], {['VIP удержан в зоне!'] call WMT_fnc_ShowTaskNotification;} ], 'bis_fnc_spawn'] call bis_fnc_MP;
				missionComplete = true;
			};
			sleep 1;
		};
	};
	[] spawn
	{
		while {alive Ivan && !missionComplete} do //loop на проверку убийства ВИПа
		{
			sleep 0.5;
		};
		if (!alive Ivan) then //если убит - выводим сообщение и завершаем миссию
		{
			[[[], {[west, 'VIP убит!'] call wmt_fnc_endmission;} ], 'bis_fnc_spawn'] call bis_fnc_MP;  //выставляешь вместо west ту сторону, которая должна выиграть при убийстве юнита
			[[[], {['VIP убит!'] call WMT_fnc_ShowTaskNotification;} ], 'bis_fnc_spawn'] call bis_fnc_MP;
			missionComplete = true;
		};	
	};
};

Попробуй так, я не тестировал, но должно работать. 

Поправка к моему посту выше: стороны должны называться west (синие), east (красные) и resistance (независимые)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.