Jump to content

Добро пожаловать на проект
Weekly Open Games

Weekly Open Games — это проект для людей, которым интересен хардкорный тип игры. Мы стараемся максимально эффективно использовать структуру, слабые и сильные стороны, а также технику и вооружение различных сторон конфликта, но не ставим перед собой цель провести 100% сбалансированного боестолкновения. Командная игра, командное взаимодействие — фундамент нашего проекта.
О проекте WOG Как начать играть Правила серверов
Sign in to follow this  
rezakpower

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

Recommended Posts

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

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

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

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

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

Share this post


Link to post
Share on other sites
  • 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: Проверил в редакторе - все работает, но писал наспех, поэтому возможны проблемы на выделенном сервере.

Share this post


Link to post
Share on other sites
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 разных зоны и условия победы разные, т.е. если вип доставлен в одну зону и удержан там, победить должна одна сторона, а если в другую, вторая сторона. В этом скрипте я не могу разделить зоны, он срабатывает на победу только одной стороны, как сделать чтобы на разные? Спасибо.

Share this post


Link to post
Share on other sites
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 (независимые)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.