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

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

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

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

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

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

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

Завязывайте спорить, ни о чем спорите. Каждый всеравно останется при своем мнении в конечном итоге.

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


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





NoNameUltima А в рамках скрипта сделать простой переход на Ч/Б возможно?(во всякие световые\цветовые эффекты-бред сивой кобылы)

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


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

А как сделать чтобы было оповещение что входишь в зараженную зону и выходишь из нее? 

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


Ссылка на сообщение
Поделиться на других сайтах
class Zone {
	int id;
	int type;
	vector pos;
	float radius;
}

enum ZoneType {
	SAFE,
	GAS,
	RAD,
	BIO
}

ref array<ref Zone> ga_zones = new array<ref Zone>;

ref ControllerZones ctrl_zones = new ControllerZones;

class ControllerZones {
	void ControllerZones() {
		
		int id = 0;
		vector pos;
		float radius;
		int type = 0;

		id = 1; // Pavlovo
		pos = "2125 0 3400"; 
		radius = 200.0;
		AddZone(id, pos, radius);
		
		id = 2; // Zeleno
		pos = "2530 0 5112";
		radius = 150.0;
		AddZone(id, pos, radius);
		
		id = 3; // Dichina
		pos = "4524 0 8290";
		radius = 50.0;
		AddZone(id, pos, radius);
		
		id = 4; // Mushkino
		pos = "332 0 9368";
		radius = 100.0;
		AddZone(id, pos, radius);
		
		id = 5; // Aero SW
		pos = "4586 0 9533";
		radius = 220.0;
		AddZone(id, pos, radius);
		
		id = 6; // Aero SE
		pos = "5177 0 9960";
		radius = 350.0;
		AddZone(id, pos, radius);
		
		id = 7; // Aero W
		pos = "4228 0 10400";
		radius = 350.0;
		AddZone(id, pos, radius);
		
		id = 8; // Aero E
		pos = "4785 0 10530";
		radius = 250.0;
		AddZone(id, pos, radius);
		
		id = 9; // Aero N
		pos = "4290 0 10956";
		radius = 250.0;
		AddZone(id, pos, radius);
		
		id = 10; // Tisy
		pos = "1600 0 14030";
		radius = 600.0;
		AddZone(id, pos, radius);
		
		id = 11; // Troitskoe
		pos = "7893 0 14689";
		radius = 300.0;
		AddZone(id, pos, radius);
		
		GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(CheckZones, 5000, true);
	}
	
	void ~ControllerZones() {
	}
	
	void AddZone(int id, vector pos, float radius, int type = ZoneType.BIO) {
		ref Zone zone = new ref Zone;
		
		zone.id = id;
		zone.pos = pos;
		zone.radius = radius;
		zone.type = type;

		ga_zones.Insert(zone);
	}
	
	bool InZone(PlayerBase player, ref Zone zone) {
		vector player_position = player.GetPosition();
		player_position[1] = 0;

		if( (vector.Distance(player_position, zone.pos)) < zone.radius ) {
			
			EntityAI attachment;
			ItemBase item;
			string className;
			float biosafe = 0;
			
			attachment = player.FindAttachmentBySlotName("Mask");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("GP5GasMask") ) {
					//return true; // TEMP FIX
					biosafe = biosafe + 1.0;
				}
			}

			attachment = player.FindAttachmentBySlotName("Headgear");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("NBCHoodGray") ) {
					biosafe = biosafe + 1.0;
				}	
			}

			attachment = player.FindAttachmentBySlotName("Body");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("NBCJacketGray") ) {
					biosafe = biosafe + 1.0;
				}	
			}

			attachment = player.FindAttachmentBySlotName("Legs");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("NBCPantsGray") ) {
					biosafe = biosafe + 1.0;
				}	
			}

			attachment = player.FindAttachmentBySlotName("Feet");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("NBCBootsGray") ) {
					biosafe = biosafe + 1.0;
				}	
			}

			attachment = player.FindAttachmentBySlotName("Gloves");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("NBCGlovesGray") ) {
					biosafe = biosafe + 1.0;
				}
			}
			
			if ( biosafe > 5.0 )
				return true;
			
			float damage_player;
			float damage_zone = 6.0;
			damage_player = player.GetHealth("GlobalHealth", "Health");
			player.SetHealth("GlobalHealth", "Health", damage_player - (damage_zone - ((damage_zone / 6) * biosafe)));
			
			player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_COUGH);
			
			Param1<string> m_MessageParam = new Param1<string>("Вам нужны химзащита и противогаз!");
			GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, m_MessageParam, true, player.GetIdentity()); 
			
			return true;
		}
		
		return false;
	}
	
	void CheckZones() {
		ref array<Man> players = new array<Man>;
		GetGame().GetPlayers( players );
		
		for ( int i = 0; i < players.Count(); i++ )
		{
			PlayerBase player;
			Class.CastTo(player, players.Get(i));
			
			for ( int j = 0; j < ga_zones.Count(); j++ ) {
				if(InZone(player, ga_zones.Get(j))) {
					break;
				}
			}
		}
	}
}

Короче, как пример… Планов было много, но так и не дошли руки… Для нахождения в зонах нужна полная «химза» и противогаз, иначе игрок получает повреждения. Повреждения зависят от кол-ва одетых элементов защиты. Из эффектов: у игрока начинается кашель. Ковыряйте на здоровье.

Для работы скрипта достаточно подключить его через #include в init.c

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

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


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

Для работы скрипта достаточно подключить его через #include в main.c

Извиняюсь, я в скриптах совсем-совсем тупой, подскажите куда и как прописать? Где этот main.c? Его создать нужно? Или можно в Init.c включить? Куда чего вписывать то? Сам скрипт - как раз то, что нужно, а подключить - никак! Поможите дураку, люди добрые! 

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

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


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

VIRrusR открываешь \mpmissions\dayzOffline.chernarusplus

там создаешь файл main.c в него вставляешь вот это

class Zone {
	int id;
	int type;
	vector pos;
	float radius;
}

enum ZoneType {
	SAFE,
	GAS,
	RAD,
	BIO
}

ref array<ref Zone> ga_zones = new array<ref Zone>;

ref ControllerZones ctrl_zones = new ControllerZones;

class ControllerZones {
	void ControllerZones() {
		
		int id = 0;
		vector pos;
		float radius;
		int type = 0;

		id = 1; // Pavlovo
		pos = "2125 0 3400"; 
		radius = 200.0;
		AddZone(id, pos, radius);
		
		id = 2; // Zeleno
		pos = "2530 0 5112";
		radius = 150.0;
		AddZone(id, pos, radius);
		
		id = 3; // Dichina
		pos = "4524 0 8290";
		radius = 50.0;
		AddZone(id, pos, radius);
		
		id = 4; // Mushkino
		pos = "332 0 9368";
		radius = 100.0;
		AddZone(id, pos, radius);
		
		id = 5; // Aero SW
		pos = "4586 0 9533";
		radius = 220.0;
		AddZone(id, pos, radius);
		
		id = 6; // Aero SE
		pos = "5177 0 9960";
		radius = 350.0;
		AddZone(id, pos, radius);
		
		id = 7; // Aero W
		pos = "4228 0 10400";
		radius = 350.0;
		AddZone(id, pos, radius);
		
		id = 8; // Aero E
		pos = "4785 0 10530";
		radius = 250.0;
		AddZone(id, pos, radius);
		
		id = 9; // Aero N
		pos = "4290 0 10956";
		radius = 250.0;
		AddZone(id, pos, radius);
		
		id = 10; // Tisy
		pos = "1600 0 14030";
		radius = 600.0;
		AddZone(id, pos, radius);
		
		id = 11; // Troitskoe
		pos = "7893 0 14689";
		radius = 300.0;
		AddZone(id, pos, radius);
		
		GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(CheckZones, 5000, true);
	}
	
	void ~ControllerZones() {
	}
	
	void AddZone(int id, vector pos, float radius, int type = ZoneType.BIO) {
		ref Zone zone = new ref Zone;
		
		zone.id = id;
		zone.pos = pos;
		zone.radius = radius;
		zone.type = type;

		ga_zones.Insert(zone);
	}
	
	bool InZone(PlayerBase player, ref Zone zone) {
		vector player_position = player.GetPosition();
		player_position[1] = 0;

		if( (vector.Distance(player_position, zone.pos)) < zone.radius ) {
			
			EntityAI attachment;
			ItemBase item;
			string className;
			float biosafe = 0;
			
			attachment = player.FindAttachmentBySlotName("Mask");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("GP5GasMask") ) {
					//return true; // TEMP FIX
					biosafe = biosafe + 1.0;
				}
			}

			attachment = player.FindAttachmentBySlotName("Headgear");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("NBCHoodGray") ) {
					biosafe = biosafe + 1.0;
				}	
			}

			attachment = player.FindAttachmentBySlotName("Body");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("NBCJacketGray") ) {
					biosafe = biosafe + 1.0;
				}	
			}

			attachment = player.FindAttachmentBySlotName("Legs");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("NBCPantsGray") ) {
					biosafe = biosafe + 1.0;
				}	
			}

			attachment = player.FindAttachmentBySlotName("Feet");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("NBCBootsGray") ) {
					biosafe = biosafe + 1.0;
				}	
			}

			attachment = player.FindAttachmentBySlotName("Gloves");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("NBCGlovesGray") ) {
					biosafe = biosafe + 1.0;
				}
			}
			
			if ( biosafe > 5.0 )
				return true;
			
			float damage_player;
			float damage_zone = 6.0;
			damage_player = player.GetHealth("GlobalHealth", "Health");
			player.SetHealth("GlobalHealth", "Health", damage_player - (damage_zone - ((damage_zone / 6) * biosafe)));
			
			player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_COUGH);
			
			Param1<string> m_MessageParam = new Param1<string>("Вам нужны химзащита и противогаз!");
			GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, m_MessageParam, true, player.GetIdentity()); 
			
			return true;
		}
		
		return false;
	}
	
	void CheckZones() {
		ref array<Man> players = new array<Man>;
		GetGame().GetPlayers( players );
		
		for ( int i = 0; i < players.Count(); i++ )
		{
			PlayerBase player;
			Class.CastTo(player, players.Get(i));
			
			for ( int j = 0; j < ga_zones.Count(); j++ ) {
				if(InZone(player, ga_zones.Get(j))) {
					break;
				}
			}
		}
	}
}

2. открываешь файл init.c

находишь строчку void main() и перед ней вставляешь вот это

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

и все все работает сам только что поставил оставил только одну зону на тисах.

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


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

VIRrusR в зону забегаешь высвечивается сообщение которое вы пропишите или оставите от автора скрипта, персонаж начинает кашлять и отнимается ХП

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


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

elanc сделай отдельный гайд пожалуйста, чтобы не потерялось ничего

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


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

Ой! Извиняюсь! Моя опечатка! Конечно там должно было быть "init.c"… Я просто на Си пишу, поэтому у меня "main.c" в крови…

 

11 час назад, DrTauren сказал:

elanc сделай отдельный гайд пожалуйста, чтобы не потерялось ничего

Да зачем? Он же по функционалу повторяет скрипт ТС, просто немного другая реализация. Тем более скрипт «грязный», т.к. планировался более широкий функционал; да и я забросил проект.

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


Ссылка на сообщение
Поделиться на других сайтах
В 11.02.2019 в 19:09, elanc сказал:

Ой! Извиняюсь! Моя опечатка! Конечно там должно было быть "init.c"… Я просто на Си пишу, поэтому у меня "main.c" в крови…

 

Да зачем? Он же по функционалу повторяет скрипт ТС, просто немного другая реализация. Тем более скрипт «грязный», т.к. планировался более широкий функционал; да и я забросил проект.

По какой причине забросили проект ?

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


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

5-6 тысяч онлайна на весь мир

поржал.

 

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


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

NoNameUltima Да на здоровье!:wink:

Altair , Поддерживаю вопрос. Скрипт ведь классный на самом деле! 

elanc , ещё раз спасибо за скрипт!

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


Ссылка на сообщение
Поделиться на других сайтах
В 10.02.2019 в 16:38, PJIIOxa сказал:

 

Скажите есть ли возможность сделать так, чтоб у хим костюма ухудшалось состояние, или заражение всё равно проходило, но медленней чем без костюма. Просто уже есть мод такой в стиме, и есть даже щёлканье гейгера, и уровень заражения. Просто если можно реализовать это скриптом, то лучше чем подрубать 100500 модов. Спасибо.

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


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

Dony , Вы имеете в виду, чтоб состояние ОЗК ухудшалось под воздействием зоны заражения? Я, конечно, дико извиняюсь, раз спрашиваете - значит надо, но... А нафик?! Собрать полный сет ОЗК+противогаз это уже задача, а Вы ещё предлагаете сделать этот сет одноразовым и краткосрочным?! О-бал-деть... А ещё говорят у меня хардкор... И позвольте спросить, с какого перепугу ему (ОЗК) портиться? Ну фильтры противогаза, если реализовать - да, а вот чего ОЗКшке то сделается?! Кусок резины. 

 

Я ни в коем случае не с "наездом", просто интересно, чего Вы там мутите такое страшное? Я так понял, что Вы про мод "Радиоактивные зоны"? 

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


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

Dony , Вы имеете в виду, чтоб состояние ОЗК ухудшалось под воздействием зоны заражения? Я, конечно, дико извиняюсь, раз спрашиваете - значит надо, но... А нафик?! Собрать полный сет ОЗК+противогаз это уже задача, а Вы ещё предлагаете сделать этот сет одноразовым и краткосрочным?! О-бал-деть... А ещё говорят у меня хардкор... И позвольте спросить, с какого перепугу ему (ОЗК) портиться? Ну фильтры противогаза, если реализовать - да, а вот чего ОЗКшке то сделается?! Кусок резины. 

 

Я ни в коем случае не с "наездом", просто интересно, чего Вы там мутите такое страшное? Я так понял, что Вы про мод "Радиоактивные зоны"? 

Так собрав единажды кемперюги не будут вылазить из этих зон, вот тогда и теряется смысл от этих зон.

 

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


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

VIRrusR Нормальная задача. И реализованная давным давно, и сетами, и поломкой, и разными зонами. Все продумывается заранее, и урон и ремонт-починка объектов комплекта, и ресурсы на починку...

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


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

Dony , да тут, пожалуй соглашусь.:relaxed: Просто через призму своего сервера привык смотреть - у меня такие фортели не прокатывают априори, поэтому и не учёл такой момент. У меня зомбей много. Очень много. Очень-очень... Выстрелил - беги, прячься, отбивайся. Тут уж не посидишь с СВД и чашкой кофе под кустиком.:geek:

 

NoNameUltima , да я ж и не спорю! Более того, сам хотел реализовать контроль по комплектности и целостности (износу), но elanc выложил решение, которое меня лично устроило на 90%. Ешё бы фильтры противогазные, эх!.. 

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

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


Ссылка на сообщение
Поделиться на других сайтах
В 10.02.2019 в 10:46, elanc сказал:

class Zone {
	int id;
	int type;
	vector pos;
	float radius;
}

enum ZoneType {
	SAFE,
	GAS,
	RAD,
	BIO
}

ref array<ref Zone> ga_zones = new array<ref Zone>;

ref ControllerZones ctrl_zones = new ControllerZones;

class ControllerZones {
	void ControllerZones() {
		
		int id = 0;
		vector pos;
		float radius;
		int type = 0;

		id = 1; // Pavlovo
		pos = "2125 0 3400"; 
		radius = 200.0;
		AddZone(id, pos, radius);
		
		id = 2; // Zeleno
		pos = "2530 0 5112";
		radius = 150.0;
		AddZone(id, pos, radius);
		
		id = 3; // Dichina
		pos = "4524 0 8290";
		radius = 50.0;
		AddZone(id, pos, radius);
		
		id = 4; // Mushkino
		pos = "332 0 9368";
		radius = 100.0;
		AddZone(id, pos, radius);
		
		id = 5; // Aero SW
		pos = "4586 0 9533";
		radius = 220.0;
		AddZone(id, pos, radius);
		
		id = 6; // Aero SE
		pos = "5177 0 9960";
		radius = 350.0;
		AddZone(id, pos, radius);
		
		id = 7; // Aero W
		pos = "4228 0 10400";
		radius = 350.0;
		AddZone(id, pos, radius);
		
		id = 8; // Aero E
		pos = "4785 0 10530";
		radius = 250.0;
		AddZone(id, pos, radius);
		
		id = 9; // Aero N
		pos = "4290 0 10956";
		radius = 250.0;
		AddZone(id, pos, radius);
		
		id = 10; // Tisy
		pos = "1600 0 14030";
		radius = 600.0;
		AddZone(id, pos, radius);
		
		id = 11; // Troitskoe
		pos = "7893 0 14689";
		radius = 300.0;
		AddZone(id, pos, radius);
		
		GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(CheckZones, 5000, true);
	}
	
	void ~ControllerZones() {
	}
	
	void AddZone(int id, vector pos, float radius, int type = ZoneType.BIO) {
		ref Zone zone = new ref Zone;
		
		zone.id = id;
		zone.pos = pos;
		zone.radius = radius;
		zone.type = type;

		ga_zones.Insert(zone);
	}
	
	bool InZone(PlayerBase player, ref Zone zone) {
		vector player_position = player.GetPosition();
		player_position[1] = 0;

		if( (vector.Distance(player_position, zone.pos)) < zone.radius ) {
			
			EntityAI attachment;
			ItemBase item;
			string className;
			float biosafe = 0;
			
			attachment = player.FindAttachmentBySlotName("Mask");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("GP5GasMask") ) {
					//return true; // TEMP FIX
					biosafe = biosafe + 1.0;
				}
			}

			attachment = player.FindAttachmentBySlotName("Headgear");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("NBCHoodGray") ) {
					biosafe = biosafe + 1.0;
				}	
			}

			attachment = player.FindAttachmentBySlotName("Body");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("NBCJacketGray") ) {
					biosafe = biosafe + 1.0;
				}	
			}

			attachment = player.FindAttachmentBySlotName("Legs");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("NBCPantsGray") ) {
					biosafe = biosafe + 1.0;
				}	
			}

			attachment = player.FindAttachmentBySlotName("Feet");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("NBCBootsGray") ) {
					biosafe = biosafe + 1.0;
				}	
			}

			attachment = player.FindAttachmentBySlotName("Gloves");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("NBCGlovesGray") ) {
					biosafe = biosafe + 1.0;
				}
			}
			
			if ( biosafe > 5.0 )
				return true;
			
			float damage_player;
			float damage_zone = 6.0;
			damage_player = player.GetHealth("GlobalHealth", "Health");
			player.SetHealth("GlobalHealth", "Health", damage_player - (damage_zone - ((damage_zone / 6) * biosafe)));
			
			player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_COUGH);
			
			Param1<string> m_MessageParam = new Param1<string>("Вам нужны химзащита и противогаз!");
			GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, m_MessageParam, true, player.GetIdentity()); 
			
			return true;
		}
		
		return false;
	}
	
	void CheckZones() {
		ref array<Man> players = new array<Man>;
		GetGame().GetPlayers( players );
		
		for ( int i = 0; i < players.Count(); i++ )
		{
			PlayerBase player;
			Class.CastTo(player, players.Get(i));
			
			for ( int j = 0; j < ga_zones.Count(); j++ ) {
				if(InZone(player, ga_zones.Get(j))) {
					break;
				}
			}
		}
	}
}

Короче, как пример… Планов было много, но так и не дошли руки… Для нахождения в зонах нужна полная «химза» и противогаз, иначе игрок получает повреждения. Повреждения зависят от кол-ва одетых элементов защиты. Из эффектов: у игрока начинается кашель. Ковыряйте на здоровье.

Для работы скрипта достаточно подключить его через #include в init.c

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

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


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

danisimus замени из твоего текста 1 блок на такой

bool InZone(PlayerBase player, ref Zone zone) {
		vector player_position = player.GetPosition();
		player_position[1] = 0;

		if( (vector.Distance(player_position, zone.pos)) < zone.radius ) {
			
			EntityAI attachment;
			ItemBase item;
			string className;
			float biosafe = 0;
			
			attachment = player.FindAttachmentBySlotName("Mask");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("GP5GasMask") ) {
					//return true; // TEMP FIX
					biosafe = biosafe + 1.0;
				}
			
			
			if ( biosafe > 1.0 )
				return true;
			
			float damage_player;
			float damage_zone = 6.0;
			damage_player = player.GetHealth("GlobalHealth", "Health");
			player.SetHealth("GlobalHealth", "Health", damage_player - (damage_zone - ((damage_zone / 6) * biosafe)));
			
			player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_COUGH);
			
			Param1<string> m_MessageParam = new Param1<string>("Вам нужны химзащита и противогаз!");
			GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, m_MessageParam, true, player.GetIdentity()); 
			
			return true;
		}
		
		return false;
	}

 

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


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

123new А как добавить виды противогазов? 

Таким образом не работает

                if ( className.Contains("GP5GasMask", "MSFCIIIM6800GasMaskBlack", "MSFCIIIM6800GasMaskBlue", "MSFCIIIM6800GasMaskGreen", "MSFCIIIM6800GasMaskYellow", "MSFCGasMaskM50Black", "MSFCGasMaskM50Black", "MSFCGasMaskM50Tan", "MSFCGasMaskM50White", "MSFCGasMaskM04Black", "MSFCGasMaskM04Green", "MSFCGasMaskM04Tan", "MSFCGasMaskM04White") ) {
 

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


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

Кто нибудь видел где реализован урон по противогазу, так чтоб не модом?

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


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

Dony вот вам пример как добавлять противогазы

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

Изменено пользователем 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, в противном случае мы будем считать, что вы согласны с этим.