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

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

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

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

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

DayZ Standalone 0.63 Триггеры с газом[перезалив]

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

Автор скрипта: 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!

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


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





Не надо это в missionServer.c

 

Делаем просто в Init.c

 

В классе class CustomMission : MissionServer

 

Вставляем саму функцию

Да где угодно

 

В конце класса

 

	void CustomMission()
	{
		GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(this.GAS_ZONE_TRIGGER, 10000, true); //ADD GASZONE TRIGGER
	}

	void ~CustomMission()
	{
		GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).Remove(this.GAS_ZONE_TRIGGER); //REMOVE GASZONE TRIGGER
	}

И не надо лазить в scripts.pbo

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


Ссылка на сообщение
Поделиться на других сайтах
В 16.11.2018 в 14:12, BorizzK сказал:

Не надо это в missionServer.c

 

Делаем просто в Init.c

 

В классе class CustomMission : MissionServer

 

Вставляем саму функцию

Да где угодно

 

В конце класса

 


	void CustomMission()
	{
		GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(this.GAS_ZONE_TRIGGER, 10000, true); //ADD GASZONE TRIGGER
	}

	void ~CustomMission()
	{
		GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).Remove(this.GAS_ZONE_TRIGGER); //REMOVE GASZONE TRIGGER
	}

И не надо лазить в scripts.pbo

 это рэндомная зона будет ? или на все карту ?

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


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

Snecky Внимательно посмотрите скрипт что выполняет функцию зоны

//	Зараженные зоны
TVectorArray	gas_points		=	{"13249 0 3962", "6389 0 2683", "6612 0 2561"};

 

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


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

т.е. в в init.c  классе class CustomMission : MissionServer вставляем 

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);
									}
							}
					}
			}
	}

а в конце класса 

void CustomMission()
	{
		GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(this.GAS_ZONE_TRIGGER, 10000, true); //ADD GASZONE TRIGGER
	}

	void ~CustomMission()
	{
		GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).Remove(this.GAS_ZONE_TRIGGER); //REMOVE GASZONE TRIGGER
	}

помогите плиз )))

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


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

Snecky в ините вставляешь то что ты написал 1-м выше
а далее в классе же том же 'class CustomMission: MissionServer' добавляешь

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

где 10000 - частота повтора выполнения скрипта (1000 = 1 сек.)

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

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


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

Всем привет, вопрос такой актуален этот гайд для версии 1.0...?

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

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


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

PJIIOxa да

ясно спасибо, значит это я тугодум сообразить не могу как сделать

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


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

PJIIOxa да

Можете подсказать как сделать а то чет я вообще не понимаю, сделал все как написано в шапке прибегаю на свои координаты которые указал ничего не происходит

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


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

Можете подсказать как сделать а то чет я вообще не понимаю, сделал все как написано в шапке прибегаю на свои координаты которые указал ничего не происходит

так проще?

 

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


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

так проще?

 

спс но чет у мена вообще ничерта не работает даже по гайду что скинули на версию 1.0

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


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

PJIIOxa ну значит проверяем, правильно ли все прописали) может мод какой накладку вносит или имя папки миссии сервера активной отключается, или мод стоит какой-нить, который чтение миссии сервера напрочь отрубается, насмотрелся разных ужастей. На чистом сервере проверьте.

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


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

спс но чет у мена вообще ничерта не работает даже по гайду что скинули на версию 1.0

у меня все работает , уже год этот скрипт стоит 

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

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