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

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

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

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

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

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

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

3 часа назад, Schigari сказал:

Вот и я думаю, от куда может взяться этот класс на новом, вчера скачанном, локальном сервере, где из модов только:
"-mod=@CF;@ToxicZone;@MedicalAttention;@AP Zombie Animals;@VPPAdminTools;@VPPNotifications"
Посмотрел в init.c и там такого класса нет.
Загадка!
В самом скрипте это есть только в двух строках.
enum ZoneType {

void AddZone(int id, vector pos, float radius, int type = ZoneType.BIO) {

Отключал мод Toxic Zone, не помогло.
идеи закончились...

Все моды отключи и по 1 включай

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


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



Гдет ZoneType еще обьявлена

Поиском в папке модов ZoneType
оно в pbo 100% найдет

 

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


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

В medicalAttention есть такое

 

1273052361_.png.76b5dbbc450f320b6ec6c0e59d3d38c3.png

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


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

Все моды отключи и по 1 включай


Не работает только с MedicalAttention. Как же быть? Это очень важный мод на моей сборке.

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


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

А переименовать в main.c ZoneType в MyZOneType везде где встретится - вроде как там 2 места - религия не позволяет?

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


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

А переименовать в main.c ZoneType в MyZOneType везде где встретится - вроде как там 2 места - религия не позволяет?

Пришлось стать атеистом))). Заработало. Спасибо ребята.

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


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

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

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

Ок, я добавил противогазы, сервер запустился, всё отлично. Только даже если на морде лица противогаз, перс всё равно кашляет и теряет здоровье, наслаждаясь надписью "Сталкер ты охренел? одень противогаз!"
Я попробовал зайти в зону с противогазом GP5GasMask и GasMask.
К GP5GasMask можно приладить фильтр GP5GasMask_Filter, что я и сделал, но это не помогло. Продолжает кашлять.

Вот мой файл.

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

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


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

у вас обрабатывается только противагаз, если он одет то переменная биосэйф =1, а дальше условие если биосэф > 5 то все нормально а у вас получается биосэйф =1

if ( biosafe > 5.0 )
                return true;
            

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


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

у вас обрабатывается только противагаз, если он одет то переменная биосэйф =1, а дальше условие если биосэф > 5 то все нормально а у вас получается биосэйф =1

if ( biosafe > 5.0 )
                return true;
            

Ага, помогло. Спасибо).

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


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

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

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

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


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

Названия правильно прописаны?

в тайпсе прописали?

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


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

Названия правильно прописаны?

в тайпсе прописали?

Разумеется прописаны. Это я выяснил в первую очередь, чего в общем то не требовалось, так как я добавил их ради этой цели.

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


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

все прописаны строчными буквами в моде?

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


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

все прописаны строчными буквами в моде?

В types и в main прописаны и теми и другими буквами. Все названия совпадают в этом плане. А это имеет какое то значение?)

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


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

Я заметил что не работают все противогазы кроме самого первого. А как тогда задать перечисление?

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


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

Не, тут что то другое. Я даже сам давай запятые ставить что бы задать перечисление но сервер сказал ататай)). Я поменял местами ванильные противогазы, и думал что в этот раз заработает GasMask/Боевой противогаз, но он оказавшись на первом месте не работал. А вот GP5GasMask по прежнему работал и на втором месте. В общем ни один из перечисленных в скрипте противогазов, кроме GP5GasMask, не работает.
 

	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("GasMask") ) {
					//return true; // TEMP FIX
					biosafe = biosafe + 5.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 + 5.0;
				}	
			}

			attachment = player.FindAttachmentBySlotName("Mask");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("ToxicZoneGP5GasMask_black") ) {
					//return true; // TEMP FIX
					biosafe = biosafe + 5.0;
				}	
			}

			attachment = player.FindAttachmentBySlotName("Mask");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("stalker_gasmask_colorbase_mung") ) {
					//return true; // TEMP FIX
					biosafe = biosafe + 5.0;
				}	
			}

			attachment = player.FindAttachmentBySlotName("Mask");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("stalker_gasmask_white_mung") ) {
					//return true; // TEMP FIX
					biosafe = biosafe + 5.0;
				}	
			}
			
			attachment = player.FindAttachmentBySlotName("Mask");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("stalker_gasmask_black_mung") ) {
					//return true; // TEMP FIX
					biosafe = biosafe + 5.0;
				}	
			}		

			attachment = player.FindAttachmentBySlotName("Mask");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("mag3_gasmask_mung") ) {
					//return true; // TEMP FIX
					biosafe = biosafe + 5.0;
				}	
			}

			attachment = player.FindAttachmentBySlotName("Mask");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("MVS_S10Respirator_OD") ) {
					//return true; // TEMP FIX
					biosafe = biosafe + 5.0;
				}	
			}	

			attachment = player.FindAttachmentBySlotName("Mask");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("MVS_S10Respirator_Tan") ) {
					//return true; // TEMP FIX
					biosafe = biosafe + 5.0;
				}	
			}	

			attachment = player.FindAttachmentBySlotName("Mask");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("MVS_S10Respirator_Black") ) {
					//return true; // TEMP FIX
					biosafe = biosafe + 5.0;
				}	
			}	

			attachment = player.FindAttachmentBySlotName("Mask");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("MVS_S10Respirator_FS") ) {
					//return true; // TEMP FIX
					biosafe = biosafe + 5.0;
				}	
			}			

			attachment = player.FindAttachmentBySlotName("Mask");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("PMK_5A_Gas_Mask") ) {
					//return true; // TEMP FIX
					biosafe = biosafe + 5.0;
				}	
			}					

			attachment = player.FindAttachmentBySlotName("Mask");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("FP4_DrMask") ) {
					//return true; // TEMP FIX
					biosafe = biosafe + 5.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>("Оденьте противогаз GP5!");
			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;
				}
			}
		}
	}
}

Заметил ошибку в коде который предлагался вначале на тему как добавить противогаз.  if ( attachment && attachment.IsItemBase() ) {  эта строка не закрыта скобкой, или это не ошибка?
 

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

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

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


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

@Schigari обложи функцию отладочными Print(...) и смотри, в какой момент что идёт не так:

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

		if( (vector.Distance(player_position, zone.pos)) < zone.radius ) {
			Print("InZone radius ok"); // <<<
			ItemBase item;
			string className;
			float biosafe = 0;
			
			EntityAI attachment = player.FindAttachmentBySlotName("Mask");
			if ( attachment && attachment.IsItemBase() ) {
				Print("InZone has mask 1") // <<<
				item =	Class.Cast(attachment);
				className =	item.GetType();
				Print("InZone class name: "+className); // <<<
				if ( className.Contains("GasMask") ) {
					Print("InZone contains GasMask"); // <<<
					biosafe = biosafe + 5.0;
				}
			}

			attachment = player.FindAttachmentBySlotName("Mask");
			if ( attachment && attachment.IsItemBase() ) {
				Print("InZone has mask 2") // <<<
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				Print("InZone class name: "+className); // <<<
				if ( className.Contains("GP5GasMask") ) {
					Print("InZone contains GP5GasMask") // <<<
					biosafe = biosafe + 5.0;
				}	
			}
...

 

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

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


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

Не могу найти переменную вложения.
Я скопировал print и заметил что второй стоит на месте EntityAI attachment; 
Так и надо было сделать?

image.png.842c6e1509d0ac79876d38b1c8839312.png

 

(201) attachment = player.FindAttachmentBySlotName("Mask");

 

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

		if( (vector.Distance(player_position, zone.pos)) < zone.radius ) {
			
			Print("InZone radius ok"); // <<<
			ItemBase item;
			string className;
			float biosafe = 0;
			
			attachment = player.FindAttachmentBySlotName("Mask");
			if ( attachment && attachment.IsItemBase() ) {
				Print("InZone has mask 1") // <<<
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				Print("InZone class name: "+className); // <<<
				if ( className.Contains("GasMask") ) {
					Print("InZone contains GasMask"); // <<<
					biosafe = biosafe + 5.0;
				}
			}

			attachment = player.FindAttachmentBySlotName("Mask");
			if ( attachment && attachment.IsItemBase() ) {
				Print("InZone has mask 2") // <<<
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				Print("InZone class name: "+className); // <<<
				if ( className.Contains("GP5GasMask") ) {
					Print("InZone contains GP5GasMask") // <<<
					biosafe = biosafe + 5.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>("Оденьте противогаз GP5!");
			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;
				}
			}
		}
	}
}

Я добавил EntityAI attachment; и получилось так:
 

			Print("InZone radius ok"); // <<<
			EntityAI attachment;
			ItemBase item;
			string className;
			float biosafe = 0;

Тогда сервер запустился но ничего не изменилось. Я правда не знаю каким образом смотреть при помощи отладочной функции что не так.

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

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


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

Подскажите как добавить звук счетчика гейгера

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


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

Друзья и  соратники!
Перечитал ветку несколько раз, но не могу понять где идет проверка по типу зоны? Если есть желание разделить типы комплектов хим костюма по разным зонам. Биологическая опасность - один набор, химическая другой и так далее. Подскажите в какой момент идет проверка в какой зоне находится игрок!
Подсказавшему прям 100500 в карму.

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


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

делать надо два инклуда, например дамагзоне1 и дамагзоне2

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


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

Тоесть мне надо сделать копию этого кода

	void AddZone(int id, vector pos, float radius, int type = MyZoneType.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("Mask");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("ToxicZoneGP5GasMask_black") ) {
					//return true; // TEMP FIX
					biosafe = biosafe + 1.0;
				}
			}
			
			attachment = player.FindAttachmentBySlotName("Mask");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("ToxicZoneGP5GasMask_green") ) {
					//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("Headgear");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("ToxicZoneSuits_Hood_yellow") ) {
					biosafe = biosafe + 1.0;
				}	
			}
			
			attachment = player.FindAttachmentBySlotName("Headgear");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("ToxicZoneSuits_Hood_black") ) {
					biosafe = biosafe + 1.0;
				}	
			}
			
			attachment = player.FindAttachmentBySlotName("Headgear");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("ToxicZoneSuits_Hood_green") ) {
					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("Body");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("ToxicZoneSuits_Jacket_yellow") ) {
					biosafe = biosafe + 1.0;
				}	
			}
			
			attachment = player.FindAttachmentBySlotName("Body");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("ToxicZoneSuits_Jacket_black") ) {
					biosafe = biosafe + 1.0;
				}	
			}
			
			attachment = player.FindAttachmentBySlotName("Body");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("ToxicZoneSuits_Jacket_green") ) {
					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("Legs");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("ToxicZoneSuits_Pants_yellow") ) {
					biosafe = biosafe + 1.0;
				}	
			}
			
			attachment = player.FindAttachmentBySlotName("Legs");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("ToxicZoneSuits_Pants_black") ) {
					biosafe = biosafe + 1.0;
				}	
			}
			
			attachment = player.FindAttachmentBySlotName("Legs");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("ToxicZoneSuits_Pants_green") ) {
					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("Feet");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("ToxicZoneSuits_Boots_yellow") ) {
					biosafe = biosafe + 1.0;
				}	
			}
			
			attachment = player.FindAttachmentBySlotName("Feet");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("ToxicZoneSuits_Boots_black") ) {
					biosafe = biosafe + 1.0;
				}	
			}
			
			attachment = player.FindAttachmentBySlotName("Feet");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("ToxicZoneSuits_Boots_green") ) {
					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;
				}
			}
			
			attachment = player.FindAttachmentBySlotName("Gloves");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("ToxicZoneSuits_Gloves_yellow") ) {
					biosafe = biosafe + 1.0;
				}
			}
			
			attachment = player.FindAttachmentBySlotName("Gloves");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("ToxicZoneSuits_Gloves_black") ) {
					biosafe = biosafe + 1.0;
				}
			}
			
			attachment = player.FindAttachmentBySlotName("Gloves");
			if ( attachment && attachment.IsItemBase() ) {
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("ToxicZoneSuits_Gloves_green") ) {
					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;
	}

Но в этой строке указывать что это не BIO а GAS
 

void AddZone(int id, vector pos, float radius, int type = MyZoneType.GAS)

Но в самих зонах нет маркировки к какому типу они относятся.

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



 

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


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

Но в самих зонах нет маркировки к какому типу они относятся.

а перед координатами ведь написано зона а ниже уже действие ее

и да зону вторую нужно переименовывать например zone2

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


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

а перед координатами ведь написано зона а ниже уже действие ее

и да зону вторую нужно переименовывать например zone2

Перед координатами id зоны. Но задача разделить действия. 
 

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

Вот к примеру в Павлово у меня хим зона. При заходе туда без противогаза отнимается здоровье. А в зелено к примеру у меня в здании госпиталя здоровье должно пополняться. Как разделить эти действия?

 

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


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

зелено надо в другой файл пихать

я же говорю два инклуда надо делать

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

 

DamagZone это газ там и пиши координаты палово

DamagZoneR это радейка там и пиши координаты зелено

 

ну или возможно дальше условие задать если например ид зоны такой то делать это (хотя тут хз будет работать так или нет)

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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