Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Нужна помощь?

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

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
  • Не хотите БАН?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок
  • Загляните на торговую площадку

    Там вы можете купить
    Всё что касается игровых серверов
123new

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

Recommended Posts

Автор скрипта: 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 с инструкцией

 

Edited by 123new
коррекция для совместимости с TraderMod (see edit history)

Share this post


Link to post
Share on other sites



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

 

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

Share this post


Link to post
Share on other sites
17 часов назад, 123new сказал:

 


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

 

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

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

Share this post


Link to post
Share on other sites
1 минуту назад, 123new сказал:

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

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

Share this post


Link to post
Share on other sites
3 минуты назад, PJIIOxa сказал:

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

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

Edited by 123new (see edit history)

Share this post


Link to post
Share on other sites
3 минуты назад, 123new сказал:

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
2 часа назад, thessend сказал:

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
29 минут назад, DrTauren сказал:

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

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

Share this post


Link to post
Share on other sites
7 минут назад, PJIIOxa сказал:

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

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

Share this post


Link to post
Share on other sites
1 час назад, PJIIOxa сказал:

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

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

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

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

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

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

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

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

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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
В ‎21‎.‎01‎.‎2019 в 18:35, 123new сказал:

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

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

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

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

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

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

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

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

 10

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
2 минуты назад, ZigoFrend сказал:

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

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

Share this post


Link to post
Share on other sites

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

 

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

  • Similar Content

    • By 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!
    • By 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;
      };
    • By 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 не пашет((
    • By Mac2706
      Создал Триггер на определённых координатах, который должен вызывать скрипт, но когда захожу в триггер ничего не происходит.Триггер динамический :
       
       
      Я подозреваю, что это происходит, потому что скрипт исполняется только на стороне клиента и не передаёт данные на сервер Danger.Sqf
×
×
  • Create New...

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
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.