Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
123new

Триггеры с газом[1.0][By NoNameUltima]

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

Автор скрипта: http://s-platoon.ru/profile/48-nonameultima/

Все благодарности за этот скрипт непосредственно автору скрипта, не мне!

 

В данной теме, расскажу как сделать зараженные газом области на карте своим методом, на обновленной версии игры 1.0.

Автор: NoNameUltima

1. Открываем на сервере файл: DayZServer\mpmissions\dayzOffline.chernarusplus\init.c

2. В самом верху файла добавляем строку:

#include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\DamagedZone.c"

3. В том же файле находим строки:

class CustomMission: MissionServer
{	

Добавляем ниже блок функции OnInit по образцу ниже:

override void OnInit () 
{
	super.OnInit();
	GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(GAS_ZONE_TRIGGER, 10000, true);
}

Если функция уже есть, в ее конец лишь дописываем сам вызов:

GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(GAS_ZONE_TRIGGER, 10000, true);

Здесь:

*10000 - Время в милисекундах(10 секунд). С такой частотой будет наноситься проверка игроков в зоне и урон в данной области.

4. Создаем в папке рядом с init.c файл с именем и расширением: DamagedZone.c

Вставляем в созданный нами файл следующий код:

vector GAS_ZONE_CorrectToGroundPosY(vector pos)
{
	private float pos_x = pos[0];
	private float pos_z = pos[2];
	private float pos_y = GetGame().SurfaceY(pos_x, pos_z);
	private vector tmp_pos = Vector(pos_x, pos_y, pos_z);
	return tmp_pos;
}
void GAS_ZONE_TRIGGER()
{
	/*
		GAS_ZONE_TRIGGER
		Автор: NoNameUltima
		skype: hf-trade
	*/
	//	Зараженные зоны
	private TVectorArray	gas_points		=	{"13249 0 3962", "6389 0 2683", "6612 0 2561"};
	//	Массив намордников
	private TStringArray	gas_masks		=	{"GasMask", "GP5GasMask"};
	//	Радиус зон
	private int 			GAS_ZONE_radius			=	350;
	//	Наносимый урон
	private float 			GAS_ZONE_damage_value	=	10;

	private array<Man> GAS_ZONE_players_man 			=	new array<Man>;
	GetGame().GetPlayers( GAS_ZONE_players_man );		
	private PlayerBase	GAS_ZONE_player;
	private vector		GAS_ZONE_position_player;		
	private int			GAS_ZONE_x;
	private bool		GAS_ZONE_isGasMask;
	private int			GAS_ZONE_attCount;
	private int			GAS_ZONE_attIdx;
	private EntityAI	GAS_ZONE_attachment;
	private ItemBase	GAS_ZONE_item;
	private string		GAS_ZONE_className;
	private float		GAS_ZONE_damage_player;
	
	for (private int GAS_ZONE_i = 0; GAS_ZONE_i < GAS_ZONE_players_man.Count(); GAS_ZONE_i++)
	{
		GAS_ZONE_player  = PlayerBase.Cast(GAS_ZONE_players_man.Get(GAS_ZONE_i));
		GAS_ZONE_position_player	=	GAS_ZONE_player.GetPosition();
		for (GAS_ZONE_x	=	0; GAS_ZONE_x < gas_points.Count(); GAS_ZONE_x++)
		{
			if ( (vector.Distance(GAS_ZONE_position_player, GAS_ZONE_CorrectToGroundPosY(gas_points.Get(GAS_ZONE_x)))) < GAS_ZONE_radius )
			{
				GAS_ZONE_isGasMask	=	false;	
				GAS_ZONE_attCount	=	GAS_ZONE_player.GetInventory().AttachmentCount();								
				for (GAS_ZONE_attIdx	=	0; GAS_ZONE_attIdx < GAS_ZONE_attCount; GAS_ZONE_attIdx++)
				{
					GAS_ZONE_attachment	=	GAS_ZONE_player.GetInventory().GetAttachmentFromIndex(GAS_ZONE_attIdx);
					if ( GAS_ZONE_attachment.IsItemBase() )
						{
							GAS_ZONE_item  = ItemBase.Cast(GAS_ZONE_attachment);
							GAS_ZONE_className	=	GAS_ZONE_item.GetType();									
							if ( gas_masks.Find(GAS_ZONE_className) >= 0 )
								{
									//Print ("Намордник найден!");
									GAS_ZONE_isGasMask	=	true;
									break;
								}												
						}
				}
				if (GAS_ZONE_isGasMask == false)
				{
					//Print ("Намордник не найден!");
					GAS_ZONE_damage_player	=	GAS_ZONE_player.GetHealth("GlobalHealth", "Health");
					GAS_ZONE_player.SetHealth("GlobalHealth", "Health", GAS_ZONE_damage_player - GAS_ZONE_damage_value);
				}
			}
		}
	}
}

Все остальные настройки подписаны в скрипте, изучайте методом проб и ошибок.
P.S. от автора скрипта

1. Любой желающий, кто знает скриптинг, может изменить формат массива, и сделать зоны с разным радиусом и набором вещей.

2. Можно при желании добавить вывод оповещения, в зараженных зонах.

*Скрипт предоставлен мной (NoNameUltima), в обрезанном виде намерено - остальное на Ваш вкус и цвет

Изменено 4 октября пользователем NoNameUltima

 

Альтернативный гайд:

Вариант от товарища elanc с инструкцией

 

Изменено пользователем 123new
коррекция для совместимости с TraderMod (история изменений)

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


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





17 часов назад, 123new сказал:

Автор скрипта: http://s-platoon.ru/profile/48-nonameultima/

Все благодарности за этот скрипт непосредственно автору скрипта, не мне!

 

В данной теме, расскажу как сделать зараженные газом области на карте своим методом, на обновленной версии игры 1.0.

Автор: NoNameUltima

1. Открываем на сервере файл: DayZServer\mpmissions\dayzOffline.chernarusplus\init.c

2. В самом верху файла добавляем строку:


#include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\DamagedZone.c"

3. В том же файле находим строки:


class CustomMission: MissionServer
{	

Добавляем ниже блок функции OnInit по образцу ниже:


void OnInit () 
{
	GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(GAS_ZONE_TRIGGER, 10000, true);
}

Если функция уже есть, в ее конец лишь дописываем сам вызов:


GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(GAS_ZONE_TRIGGER, 10000, true);

Здесь:

*10000 - Время в милисекундах(10 секунд). С такой частотой будет наноситься проверка игроков в зоне и урон в данной области.

4. Создаем в папке рядом с init.c файл с именем и расширением: DamagedZone.c

Вставляем в созданный нами файл следующий код:


vector CorrectToGroundPosY(vector pos)
{
	float pos_x = pos[0];
	float pos_z = pos[2];
	float pos_y = GetGame().SurfaceY(pos_x, pos_z);
	vector tmp_pos = Vector(pos_x, pos_y, pos_z);
	return tmp_pos;
}
void GAS_ZONE_TRIGGER()
{
	/*
		GAS_ZONE_TRIGGER
		Автор: NoNameUltima
		skype: hf-trade
	*/
	//	Зараженные зоны
	TVectorArray	gas_points		=	{"13249 0 3962", "6389 0 2683", "6612 0 2561"};
	//	Массив намордников
	TStringArray	gas_masks		=	{"GasMask", "GP5GasMask"};
	//	Радиус зон
	int 			radius			=	350;
	//	Наносимый урон
	float 			damage_value	=	10;

	ref array<Man> players 			=	new array<Man>;
	GetGame().GetPlayers( players );		
	PlayerBase	player;
	vector		position_player;		
	int			x;
	bool		isGasMask;
	int			attCount;
	int			attIdx;
	EntityAI	attachment;
	ItemBase	item;
	string		className;
	float		damage_player;
	
	for (int i = 0; i < players.Count(); i++)
		{
			Class.CastTo(player, players.Get(i));
			position_player	=	player.GetPosition();
			for (x	=	0; x < gas_points.Count(); x++)
				{
					if ( (vector.Distance(position_player, CorrectToGroundPosY(gas_points.Get(x)))) < radius )
						{
							isGasMask	=	false;	
							attCount	=	player.GetInventory().AttachmentCount();								
							for (attIdx	=	0; attIdx < attCount; attIdx++)
								{
									attachment	=	player.GetInventory().GetAttachmentFromIndex(attIdx);
									if ( attachment.IsItemBase() )
										{
											item		=	Class.Cast(attachment);
											className	=	item.GetType();									
											if ( gas_masks.Find(className) >= 0 )
												{
													//Print ("Намордник найден!");
													isGasMask	=	true;
													break;
												}												
										}
								}
							if (isGasMask == false)
								{
									//Print ("Намордник не найден!");
									damage_player	=	player.GetHealth("GlobalHealth", "Health");
									player.SetHealth("GlobalHealth", "Health", damage_player - damage_value);
								}
						}
				}
		}
}

Все остальные настройки подписаны в скрипте, изучайте методом проб и ошибок.
Если функция CorrectToGroundPosY уже обозначена у вас в каком-то из скриптов и сервер не хочет запускаться, просто в файле DamagedZone.c сделайте замену этого названия на любое другое на латинице.

P.S. от автора мкрипта

1. Любой желающий, кто знает скриптинг, может изменить формат массива, и сделать зоны с разным радиусом

2. Можно при желании добавить вывод оповещения, в зараженных зонах.

*Скрипт предоставлен мной (NoNameUltima), в обрезанном виде намерено - остальное на Ваш вкус и цвет

Изменено 4 октября пользователем NoNameUltima

 

Испробовал все ничего не получается, пробовал на чистом без модов ничего не работает.

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


Ссылка на сообщение
Поделиться на других сайтах
17 часов назад, 123new сказал:

 


#include "$CurrentDir:mpmissions\dayzOffline.chernarusplus\DamagedZone.c"

 

а точно так прописывается?
может вот так?

#include "$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\DamagedZone.c"

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


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, 123new сказал:

PJIIOxa а после этого заработало?

нет не заработало, сижу вот мучаюсь

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


Ссылка на сообщение
Поделиться на других сайтах
3 минуты назад, PJIIOxa сказал:

нет не заработало, сижу вот мучаюсь

ну тогда сиди тестируй, не раньше позднего вечера это смогу протестировать, ранее нет времени вообще.
Сразу спрошу, что в твоем понимании должно быть 'скрипт работает'? Что именно ты ожидаешь увидеть на сервере, после чего скажешь 'скрипт работает'?

Изменено пользователем 123new (история изменений)

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


Ссылка на сообщение
Поделиться на других сайтах
3 минуты назад, 123new сказал:

ну тогда сиди тестируй, не раньше позднего вечера это смогу протестировать, ранее нет времени вообще.
Сразу спрошу, что в твоем понимании должно быть 'скрипт работает'? Что именно ты ожидаешь увидеть на сервере, после чего скажешь 'скрипт работает'?

ну в моем понимании это то что в определенном триггере по координатам по игроку проходит урон, ну если это логически рассуждать из данных скрипта

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


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

Вчера делал зону эту на тестовом сервере с гайда по версии 0.63 все прекрасно работало.

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


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

Вчера делал зону эту на тестовом сервере с гайда по версии 0.63 все прекрасно работало.

Ну значит я полный дурак раз у меня даже по гайду 1.0 ничего не работает

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


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

PJIIOxa с чего ты вообще взял что не работает? Ты по настроенным координатам приходил?

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


Ссылка на сообщение
Поделиться на других сайтах
29 минут назад, DrTauren сказал:

PJIIOxa с чего ты вообще взял что не работает? Ты по настроенным координатам приходил?

свои еще ставил

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


Ссылка на сообщение
Поделиться на других сайтах
7 минут назад, PJIIOxa сказал:

свои еще ставил

а если отспавнить персонажа в указанных в конфиге координатах?

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


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

свои еще ставил

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

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

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

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

 

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


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

Ребята, подскажите, как добавить аудиовизуальные эффекты? Ну, чтобы скажем зеленел экран и персонаж дышал с хрипом, например?

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


Ссылка на сообщение
Поделиться на других сайтах
В ‎21‎.‎01‎.‎2019 в 18:35, 123new сказал:

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

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

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

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

 10

 

хп сразу отнимается при спавне в этой зоне?

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


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

все разобрался в чем проблема у меня файл scripts.pbo распакован и в параметрах запуска cервера стоит -FilePatching. Походу конфликтует..

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


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

А можно же больше сделать больше 3 зон ?

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


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

дак можно наверное.

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


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

ни кто не подскажет как это исправить, чтоб скрипт с зонами работал с распакованной папкой scripts.pbo

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


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

PJIIOxa мне кажется ни кто не знает как это сделать 

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


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

чет ни черта не пойму распаковал ничего не меня со строительством в папке scripts дак работает

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


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

PJIIOxa есть у меня одна догадка как тебе сделать напиши мне в лс свой дс я тебе там расскажу 

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


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

PJIIOxa есть у меня одна догадка как тебе сделать напиши мне в лс свой дс я тебе там расскажу 

да чет переправил опять в файлах скрипт на disable base destruction удалил базу захожу все таки работает зона. Только получается папка dayzOffline.chernarusplus не моя которая установилась с сервером а ту что мне выше скинул 123new странно очень

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


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

PJIIOxa да и ты можешь сам регулировать какой кол-во хп будет отниматься при нахождение в зоне. И какие вещи должны быть одеты на персонаже что бы он не умер в данной зоне!

 

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


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

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Похожие публикации

    • Автор: 123new
      Автор скрипта: http://s-platoon.ru/profile/48-nonameultima/
      Все благодарности за этот скрипт непосредственно автору скрипта, не мне!
       
      В данной теме, расскажу как сделать зараженные газом области на карте.
      Автор: NoNameUltima
      1. Открываем на сервере файл: missionServer.c
      2. После строки:
      GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(this.UpdatePlayersStats, 30000, true); Добавляем:
      GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(this.GAS_ZONE_TRIGGER, 10000, true); *10000 - Время в мс(10 секунд). С такой частотой будет наноситься урон в данной области.
      После строки:
      GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).Remove(this.UpdatePlayersStats); Добавляем:
      GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).Remove(this.GAS_ZONE_TRIGGER); Ищем строку:
      void UpdatePlayersStats() Вставляем ВЫШЕ нее, следующий код:
      void GAS_ZONE_TRIGGER() { /* GAS_ZONE_TRIGGER Автор: NoNameUltima skype: hf-trade */ // Зараженные зоны TVectorArray gas_points = {"13249 0 3962", "6389 0 2683", "6612 0 2561"}; // Массив намордников TStringArray gas_masks = {"GasMask", "GP5GasMask"}; // Радиус зон int radius = 350; // Наносимый урон float damage_value = 10; ref array<Man> players = new array<Man>; GetGame().GetPlayers( players ); PlayerBase player; vector position_player; int x; bool isGasMask; int attCount; int attIdx; EntityAI attachment; ItemBase item; string className; float damage_player; for (int i = 0; i < players.Count(); i++) { Class.CastTo(player, players.Get(i)); position_player = player.GetPosition(); for (x = 0; x < gas_points.Count(); x++) { if ( (vector.Distance(position_player, gas_points.Get(x))) < radius ) { isGasMask = false; attCount = player.GetInventory().AttachmentCount(); for (attIdx = 0; attIdx < attCount; attIdx++) { attachment = player.GetInventory().GetAttachmentFromIndex(attIdx); if ( attachment.IsItemBase() ) { item = Class.Cast(attachment); className = item.GetType(); if ( gas_masks.Find(className) >= 0 ) { //Print ("Намордник найден!"); isGasMask = true; break; } } } if (isGasMask == false) { //Print ("Намордник не найден!"); damage_player = player.GetHealth("GlobalHealth", "Health"); player.SetHealth("GlobalHealth", "Health", damage_player - damage_value); } } } } } P.S.
      1. Так же можно изменить формат массива, и сделать зоны с разным радиусом
      2. Можно при желании добавить вывод оповещения, в зараженных зонах.
      *Скрипт предоставлен мной, в обрезанном виде намерено - остальное на Ваш вкус и цвет
      Изменено 4 октября пользователем NoNameUltima
       
      Добавлено от 123new:
      Файл missionServer.c располагается в {папка сервера}\scripts\5_Mission\MissionServer\missionServer.c
      Если у вас нет папки scripts в папке с сервером игры, откройте папку dta, распакуйте папку scripts из pbo-файла scripts.pbo и переместите в папку с сервером.
      Чтобы папка считывалась сервером, необходимо добавить параметр запуска сервера '-FilePatching'.
      P.S. Гайд не проверялся на актуальной версии серверной части игры со steam!
    • Автор: NotMeyson404
      Создал триггер в редакторе, что бы при заходе в область триггера играла музыка (Проверил в редакторе все работате на ура), сохранил как положено, закинул все файлы на сервер arma 3 epoch, и не работает ничего, пол дня провозился....подскажите как быть?
       
      class Item130
      {
      dataType="Trigger";
      position[]={7850.2622,17.753777,11198.521};
      angle=4.7678905;
      class Attributes
      {
      onActivation="1 fadeMusic 1; playMusic ""sidr11"";";
      onDeactivation="1 fadeMusic 0;";
      sizeA=3;
      sizeB=7;
      sizeC=4;
      repeatable=1;
      activationBy="ANY";
      isRectangle=1;
      isServerOnly=1;
      };
      id=40;
      type="EmptyDetectorArea10x10";
      atlOffset=-0.052999496;
      };
      class Item131
      {
      dataType="Trigger";
      position[]={7853.6118,17.391575,11197.52};
      angle=4.6931028;
      class Attributes
      {
      onActivation="playSound ""sidr22"";";
      onDeactivation="playSound ""sidr33"";";
      sizeA=2;
      sizeB=2;
      sizeC=4;
      repeatable=1;
      activationBy="ANY";
      isRectangle=1;
      isServerOnly=1;
      };
      id=41;
      type="EmptyDetectorArea10x10";
      atlOffset=0.1210022;
      };
    • Автор: exploadead
      Привет всем! Арма 1.58 Эпоч 0380 Пытаюсь перенести триггеры с 1.56 армы на 1.58....   Вот например такая конструкция по удалению ботов из зоны успешно работала на 1.56:   class Sensors { items=1; class Item0 { position[]={13325,0,14515}; a=200; b=200; activationBy="GUER"; repeating=1; interruptable=1; age="UNKNOWN"; expActiv="{deleteVehicle _x} forEach thisList;"; class Effects { }; }; };    
      Но в 1.58 появился новый общий для всего класс class Entities. Уже пробовал вот так:      
      class Entities { items=1; class Item1 { dataType="Trigger"; position[]={13325,0,14515}; class Attributes { name="delbot"; onActivation="{deleteVehicle _x} forEach thisList;"; sizeA=200; sizeB=200; repeatable=1; interruptable=1; activationBy="GUER"; }; id=210; type="EmptyDetector"; }; };    
      Но не сработало((... пробовал то же самое прямо в редакторе сделать... на 1.56 получалось... на 1.58 не пашет((
    • Автор: Mac2706
      Создал Триггер на определённых координатах, который должен вызывать скрипт, но когда захожу в триггер ничего не происходит.Триггер динамический :
       
       
      Я подозреваю, что это происходит, потому что скрипт исполняется только на стороне клиента и не передаёт данные на сервер Danger.Sqf
  • Наш выбор

×
×
  • Создать...

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

Используя этот сайт, вы автоматически обязуетесь соблюдать наши Правила и Политика конфиденциальности.
Чтобы сделать этот веб-сайт лучше, мы разместили cookies на вашем устройстве. Вы можете изменить свои настройки cookies, в противном случае мы будем считать, что вы согласны с этим.