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

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

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

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

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

DAYZ enScript (вопросы, ответы)

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

123new 

 

Можно попробывать поковырять

 

class BloodContainerBase extends ItemBase

void SetBloodTypeVisible( bool visible )

 

class PlayerBase extends ManBase

void SetBloodyHands( bool show )
void SetBloodTypeVisible( bool show )

 

 

 

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


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



BorizzK ну это я так понимаю лишь визуальные эффекты. А на стату персонажа то что влияет?

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


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

123new 
SetHealth

через нее все устанавливается и кровь и итд итп вроде

 

глянь

Bleeding.c

class BleedingCheck: ModifierBase

player.SetHealth("","",-1000); - вроде как сразу вытекает вся кровищща

Я еще это не рыл почти - я просто изучаю язык и его возможности

 

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

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


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

BorizzK не не, сама кровь и здоровье я в курсе, что через нее. Я имею ввиду не визуальная часть кровотека, а сам кровотек персонажа, который на показатели в углу экрана влияет.

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


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

Кажись чето нахожу.
scripts\4_World\Classes\BleedingSources\BleedingSourcesManager.c

функция

void AddBleedingSource(string zone, vector position)
player.GetBleedingManager().AddBleedingSource(string zone, vector position)

правда с параметрами пока не совсем понимаю.

там же кстати и функция

void ProcessHit(float damage, string component, string ammo, vector modelPos)

обрабатывает урон по игроку

Даже примеры есть в scripts\4_World\Classes\PlayerModifiers\Modifiers\diseases\TestDisease.c

player.GetBleedingManager().AddBleedingSource("RightArm", "1 1 1");
player.GetBleedingManager().AddBleedingSource("LeftArm", "1.2 1.2 1.2");
player.GetBleedingManager().AddBleedingSource("RightLeg", "1.3 1.3 1.3");

 

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

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


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

123new 
Ну наверное как-то так

player.GetGame().GetBleedingManager().AddBleedingSource("RightArm", "1 1 1");

 

И кстати есть еще пример в EEHitBy

 

  if ( damageResult != null && GetBleedingManager() )
  {
   float dmg = damageResult.GetDamage(component, "Blood");
   GetBleedingManager().ProcessHit(dmg, component, ammo, modelPos);
  }
 

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

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


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

BorizzK  ну пример такой, попробую методом 'тыка' потестить на днях, может что получится. А по поводу статусов остальных, ну что скидывал, нет никакой инфы?

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


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

Собственно вопрос адресован лично BorizzK , ибо он выразил желание помочь разобраться. Если кто-то ещё подключится - буду искренне благодарен, но прошу учесть, что я абсолютно не умею писать скрипты и если уж Вы что-то подсказывает, то... ну совсем для дебилов, пожалуйста.

 

Вопрос такой: как получить состояние предмета, надетого на игрока и передать значение в переменную? Приеменительно к вот этому куску кода:

			EntityAI attachment;		//Переопределяем переменную attachment класса EntityAI 
			ItemBase item;			//Переопределяем переменную item класса ItemBase
			string className;		//Определяем строковую переменную className
			float biosafe = 0;		//Определяем числовую переменную biosafe
			
			attachment = player.FindAttachmentBySlotName("Mask");	//Считываем тип(???) предмета, одетого на игрока в слоте "маски"
			if ( attachment && attachment.IsItemBase() )		//Если предмет в слоте "маски" и ???
			{							//..,то
				item		=	Class.Cast(attachment);	//...присваиваем переменной item тип(???) предмета из слота "маски"		        		
				className	=	item.GetType();		//Присваиваем переменной className ИМЯ полученного из слота "маски" предмета
				if ( className.Contains("GP5GasMask") )         //Если переменная className содержит имя "GP5GasMask"... 
				{						//...,то
										//return true; // TEMP FIX
					biosafe = biosafe + 1.0;		//...инкрементируем переменную biosafe
				}
			}

Прошу пояснить, правильно ли я понимаю логику скрипта (извиняюсь за косноязычие в комментариях к коду), прошу пояснить, что означает то, что я отметил в комментариях  вопросами. Например, как выглядит "тип предмета"?

Далее, насколько я понимаю, мы уже определили в этом скрипте, что переменная item содержит тип предмета "противогаз", верно? Значит, мы вполне можем использовать функцию GetHealth() для получения состояния противогаза? Вот тут я просто не знаю, как правильно записать...

Damage_Coef = item.GetHealth();		//Возвращаем значение "здоровья" предмета в переменную Damage_Coef
	if (Damage_Coef <= Coef_Check)	//Если значение "здоровья" предмета ниже порога, заданного в переменной Coef_Check...	
	{				//...,то
	biosafe = biosafe - 1.0;	//...Декрементируем переменную biosafe 
	}                                 

Нужно ещё заранее определить переменную Coef_Chek. 

BorizzK ,ругайся...

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

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


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

Для начала давай для общего понимания рассмотрим некоторые элементы вышеуказанной картины

 

EntityAI attachment;

 

Мы не переопределяем переменную.

Мы ее ОБЬЯВЛЯЕМ.

Теперь ей можно пользоваться как переменной которая  содержит в себе данные типа EntityAI которые относятся к классу Еntity (или не содержит тогда она = NULL)

 

Далее

 

attachment && attachment.IsItemBase()

 

Если attachment содержит в себе данные (а не NULL) и содержимое attachment относится (не является, а относится - те родственный тип) к типу ItemBase услвоие будет выполнено

 

Далее

 

item у нас какого класса/типа? А attachment?

 

Вот что бы из переменной класса EntityAI данные поместить в переменную класса ItemBase ее "даункастят" 

Какой из них в данном случае является родительским, а какой дочерним классом я не в курсе

Было где-то тут описание наследования классов - но факт в том что они родственные

 

item = Class.Cast(attachment);

на самом деле правильней  (и об этом уже говорилось)  - делать это надо так

item = ItemBase.Cast(attachment);

 

Далее с этими данными (переменной item) можно работать используя функции класса ItemBase

 

Вот скажем есть переменная типа PlayerBase - player - содержит в себе ссылку на игрока (персонажа)

Нам надо поработать чисто с его телом как собьектом (тип Object)

 

Object object = Object.Cast(player);

Далее с object делаем что надо именно как с обьектом

 

Просто у разных классов есть свои присущие только им специфические нативные функции и что бы ими воспользоваться нужно из одного класса даункастить в другой (родственный)

Если делать это с неродственными классами результат конечно же будет NULL

 

Например для item которая класса ItemBase можно задать количество

ItemBase.SetQuantity(6);

Но только если содержимое относится к классу itemBase и сам предмет поддерживает это свойство

 

А если ты например создашь обьект авто

Object m_SpawnedObject = GetGame().CreateObject("OffroadHatchback", position);

и далее нам надо навесить на нее двери

для этого нам надо перегнать ее в переменную типа EntityAI тк только в том классе есть специфические функции позволяющие навешивать аттачменты

 

EntityAI MyCar = EntityAI.Cast(m_SpawnedObject); // перегнали

MyCar.GetInventory().CreateAttachment("HatchbackDoors_Driver"); //Создали в инвентаре машинки аттачмент дверь

 

и кстати - проверка MyCar.IsItemBase() вернет false тк машина (ее тип) сама по себе не родственна к классу ItemBase

 

Но она родственна к классу Car

например нам надо ее заправить

 

Car f_car = Car.Cast(MyCar); // перегнали

 

и теперь с помощью присущих только классу Car функций

 

   f_car.Fill(CarFluid.FUEL, 1000);
   f_car.Fill(CarFluid.COOLANT, 1000);
   f_car.Fill(CarFluid.OIL, 1000);
   f_car.Fill(CarFluid.BRAKE, 1000);
 

Заправили ее всеми жижами

 

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

 

вот тут в общих чертах еще

https://vk.com/@dayzundergound-chto-zhe-predstavlyaet-iz-sebya-enfusion-scripts-novyi-yazyk

 

 

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

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


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

EntityAI attachment;

 

Мы не переопределяем переменную.

Мы ее ОБЬЯВЛЯЕМ.

Кажется понял (ниже по тексту), я просто подумал, что это переопределение для использования в другом классе. Неверно! Далее будет про это...

Вообще по структуре:

класс -

определение общих параметров объекта (основные параметры типа "длина, ширина, высота") - переменные,

набор базовых  функций (что вообще можно с объектом делать), те самые "нативные функции".  Именно там, где создаётся класс и надо искать функции?

набор базовых методов (как делать с объектом то, что можно, исходя из предыдущего пункта). Чем метод отличается от функции?

Верно понимаю?

 

7 часов назад, BorizzK сказал:

attachment && attachment.IsItemBase()

 

Если attachment содержит в себе данные (а не NULL) и содержимое attachment относится (не является, а относится - те родственный тип) к типу ItemBase услвоие будет выполнено

Зачем? Не понимаю зачем нужна такая проверка?.. У меня нет возможности смотреть в файлы, ибо я на работе, но подозреваю, что в ItemBase задаются предметы инвентаря, верно? Мы проверяем предмет из слота инвентаря игрока - откуда там может быть "мотоцикл"?! Он же просто туда не оденется никак...

 

7 часов назад, BorizzK сказал:

item у нас какого класса/типа? А attachment?

 

Вот что бы из переменной класса EntityAI данные поместить в переменную класса ItemBase ее "даункастят"

А! Вот оно. То есть, чтобы использовать данные из одного класса в другом их нужно "отвязать" от класса?

item = Class.Cast(attachment); - это просто присвоение значения переменной класса другой переменной? Просто перекладывание из одной коробки в другую? А item = ItemBase.Cast(attachment); - это уже прямая передача из переменной одного класса в переменную другого, заданного? В нашем случае из переменной класса Entity типа AI в переменную класса ItemBase. Я правильно понял?

При этом наследуются все методы (?), которые были доступны для этих данных в исходном классе/типе.

7 часов назад, BorizzK сказал:

Вот скажем есть переменная типа PlayerBase - player - содержит в себе ссылку на игрока (персонажа)

Нам надо поработать чисто с его телом как собьектом (тип Object)

 

Object object = Object.Cast(player);

Далее с object делаем что надо именно как с обьектом

?.. Зачем "Object object"?.. 

 

7 часов назад, BorizzK сказал:

Если делать это с неродственными классами результат конечно же будет NULL

То есть, если мы попытались бы найти противогаз не в слоте "маски", а, скажем где-нибудь в классе "животные", то функция Class.Cast(attachment) вернула бы нам в переменную item значение NULL, то есть "пусто", верно? Думаю, такое вполне себе используемый метод, когда нужно получить заведомый результат...

7 часов назад, BorizzK сказал:

Например для item которая класса ItemBase можно задать количество

ItemBase.SetQuantity(6);

Но только если содержимое относится к классу itemBase и сам предмет поддерживает это свойство

Как пример - тряпки в стартовом луте в init.c: предмет "стакуется" и таким вот образом задаётся количество тряпок в стеке. Понял.

 

P.S. BorizzK , ещё раз ОГРОМНОЕ человеческое спасибо! Я по-преджнему не знаю, как прикрутить эту чёртову проверку :wink:, но, кажется в моей бошке начинает складываться общее представление о структуре скриптов. Пошёл читать по ссылке (*тяжело вздохнул... *очень тяжело вздохнул:joy:)...

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

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


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

Object object =

 

Тут мы одновременно обьявляя переменную типа Object присваивем ей значение

 

attachment && attachment.IsItemBase()

 

Такая проверка нужна

1 если attachment не NULL и класса ItemBase работаем с ней 

2 если NULL или не ItemBase пропускаем иначе при обработке будет ошибка, да и вообще смысл в таком случае с ней работать?

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

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


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

Такая проверка нужна

Кажется понял! Проверка на наличие предмета в слоте ВООБЩЕ? Верно? Ведь слот может быть пустым.

В принципе, зная заранее, что в слоте не может быть предмета НЕ класса ItemBase можно было бы просто проверить на то, что там не NULL, так? Но так нагляднее, ну и сгарантией, что там не "волк".

 

Только что, BorizzK сказал:

Object object =

 

Тут мы одновременно обьявляя переменную типа Object присваивем ей значение

То есть переменная "object" типа Object ?

Никак не вдуплю:

Метод - ?

Переменная типа - ну, то есть есть класс, в нём переменные различных типов (числовые, строковые, булевы...), а вот это Object ? Я так понимаю, что это пользовательский тип? Ну, в смысле для нас, для игры, его можно считать нативным, но он определён при создании класса, так?

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

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


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

VIRrusR Object тип относящийся к классу Object, так шта с мой тз монописуально

Вот если эта переменная обьявлена в конкретном классе - это переменная класса определенного типа

А если не в классе, то переменная определенного типа

 

Вот напрмер тип vector

Есть и такой класс

В этом классе есть константа  Zero (ее значеие 0,0,0) потому если Вам нужно задать позицию обьекту 0,0,0 можно это сделать так

object.SetPosition(Vector(0,0,0));

object.SetPosition(vector.Zero);

 

Тк константа не private, то к ней можно получить доступ из другого класса, указав ее класс. Переменных и функций (методов) это то же касается

 

Переменные и константы и обьекты класса, доступны

1 вне класса указанием класса (см выше)

2 в любой функции класса

 

А вот переменные определенные в функции доступны только внутри нее

 

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

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

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


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

BorizzK ,я всё равно не вижу ошибки в предложенном мной решении...

Объявляем переменные Damage_Coef и Coef_Check - состояние предмета и пороговое значение:

			EntityAI attachment; 
			ItemBase item;			
			string className;	
			float biosafe = 0;
			float Coef_Check = 0.40;	//Пороговое значение "здоровья" предмета
			float Damage_Coef = 0;		//Сюда вернём "здоровье" проверяемого предмета

Далее ВНУТРИ проверки на наличие противогаза (перед последней закрывающей скобкой) вставляем

	Damage_Coef = item.GetHealth();	//Возвращаем значение "здоровья" предмета в переменную Damage_Coef
	if (Damage_Coef <= Coef_Check)	//Если значение "здоровья" предмета ниже/равно порогу, заданному в переменной Coef_Check...	
	{				//...,то
	biosafe = biosafe - 1.0;	//...Декрементируем переменную biosafe 
	}                                 

Что не так то?! Ведь после считывания из слота, переменная item ТОЧНО содержит противогаз, иначе до проверки целостности попросту ход не дойдёт... 

Ошибка, если она есть, в синтаксисе или в логике проверки? 

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

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


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

BorizzK ,я спрашиваю, есть ли ошибка? Я ж не могу проверить код на исполнение. Вроде всё логично?

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


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

VIRrusR 

float biosafe = 0;

 

а потом ты ее

biosafe = biosafe - 1.0; (кстати можно и biosafe--; или biosafe = biosafe - 1;)

 

и оно уходит в отрицательное значение

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


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

BorizzK , да блин, дружище!.. Оно НИКАК не может уйти в отрицательное значение, ибо изначально оно равно нулю, затем мы УЖЕ нашли противогаз и переменная biosafe у нас biosafe = biosafe + 1,0 ,то есть, к моменту проверки на целостность противогаза она у нас равна 1. И она останется равной 1, если состояние противогаза выше, чем Coef_Check, то есть выше 0.40. А вот если оно равно или ниже Coef_Check, то biosafe снова примет значение 0, что впоследствии и приведёт к нанесению урона по игроку. 

Тут же весь смысл в том, что последовательно проходят 6 (шесть) проверок на наличие предметов сета ОЗК и, соответственно, переменная biosafe к завершению цикла проверок принимает значение от 0 до 6 - в каждой проверке она либо инкрементируется, либо нет. Если мы обнаружили противогаз, то мы инкрементировали biosafe, если противогаз "битый", то отменили инкрементирование - вычли единицу.

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

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


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

VIRrusR 

Ну раз biosafe у тебя играет роль флага - 0 наносим урон, 1 нет, логичнее было бы использовать булеву переменную


Вобщем тащи сюда весь код
Будем посмотреть
 

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


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

логичнее было бы использовать булеву переменную

Да, я понимаю - через OR (или), но давай пока погодим с оптимизацией? Для меня ценность этого примера именно в его простоте - тут всё пошагово, линейно и наглядно. Счаз заброшу сюда полный листинг, со своими правками...

 

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


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

Вот:

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;
			float Coef_Check = 0.40;	//Пороговое значение "здоровья" предмета
			float Damage_Coef = 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;
				}
				Damage_Coef = item.GetHealth();	//Возвращаем значение "здоровья" предмета в переменную Damage_Coef
				if (Damage_Coef <= Coef_Check)	//Если значение "здоровья" предмета ниже/равно порогу, заданному в переменной Coef_Check...
				{				//...,то
					biosafe = biosafe - 1.0;	//...Декрементируем переменную biosafe 
				}                                                                       
			}

			attachment = player.FindAttachmentBySlotName("Headgear");
			if ( attachment && attachment.IsItemBase() ) 
			{
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("NBCHoodGray") ) 
  				{
					biosafe = biosafe + 1.0;
				}
				Damage_Coef = item.GetHealth();	//Возвращаем значение "здоровья" предмета в переменную Damage_Coef
				if (Damage_Coef <= Coef_Check)	//Если значение "здоровья" предмета ниже/равно порогу, заданному в переменной Coef_Check...					{				//...,то
					biosafe = biosafe - 1.0;	//...Декрементируем переменную biosafe 
				 } 
			}

			attachment = player.FindAttachmentBySlotName("Body");
			if ( attachment && attachment.IsItemBase() ) 
			{
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
					if ( className.Contains("NBCJacketGray") ) 
					{
					biosafe = biosafe + 1.0;
					}
					Damage_Coef = item.GetHealth();	//Возвращаем значение "здоровья" предмета в переменную Damage_Coef
					if (Damage_Coef <= Coef_Check)	//Если значение "здоровья" предмета ниже/равно порогу, заданному в переменной Coef_Check...	
					{				//...,то
					biosafe = biosafe - 1.0;	//...Декрементируем переменную biosafe 
					} 
			}

			attachment = player.FindAttachmentBySlotName("Legs");
			if ( attachment && attachment.IsItemBase() ) 
			{
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("NBCPantsGray") ) 
				{
					biosafe = biosafe + 1.0;
				}
				Damage_Coef = item.GetHealth();	//Возвращаем значение "здоровья" предмета в переменную Damage_Coef
				if (Damage_Coef <= Coef_Check)	//Если значение "здоровья" предмета ниже/равно порогу, заданному в переменной Coef_Check...
				{				//...,то
				biosafe = biosafe - 1.0;	//...Декрементируем переменную biosafe 
				} 
			}

			attachment = player.FindAttachmentBySlotName("Feet");
			if ( attachment && attachment.IsItemBase() ) 
			{
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("NBCBootsGray") ) 
				{
					biosafe = biosafe + 1.0;
				}
				Damage_Coef = item.GetHealth();	//Возвращаем значение "здоровья" предмета в переменную Damage_Coef
				if (Damage_Coef <= Coef_Check)	//Если значение "здоровья" предмета ниже/равно порогу, заданному в переменной Coef_Check...
				{				//...,то
				biosafe = biosafe - 1.0;	//...Декрементируем переменную biosafe 
				} 
			}

			attachment = player.FindAttachmentBySlotName("Gloves");
			if ( attachment && attachment.IsItemBase() ) 
			{
				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("NBCGlovesGray") ) 
				{
					biosafe = biosafe + 1.0;
				}
				Damage_Coef = item.GetHealth();	//Возвращаем значение "здоровья" предмета в переменную Damage_Coef
				if (Damage_Coef <= Coef_Check)	//Если значение "здоровья" предмета ниже/равно порогу, заданному в переменной Coef_Check...
				{				//...,то
				biosafe = biosafe - 1.0;	//...Декрементируем переменную biosafe 
				} 
			}
			
			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;
				}
			}
		}
	}
}

Оставил комментарии только там, где добавлено мной. Чё-то как-то мной добавлено всего пара строк, даже обидно...

 

P.S. У товарища elanc преотвратнейшая привычка ставить открывающие скобки в конце строки, что сильно затрудняет читаемость...

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


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

Проверка не работает!:sad:

Проверил в оффлайне, довёл ботинки до состояния "повреждено" - урон не наносится.

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


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

VIRrusR 

1 Где расположен сей код?

2 Класс вообще подключен?

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

    • Автор: RedWoodGamer
      Ищу мододела который напишет мод на поиск предметов в ванильной фурнитуре с возможностью конфигурации лутабельных объектов и лута внутри них, а так-же КД на лутаемый объект (Простыми словами чтобы нельзя было лутать один и тот же объект двум игрокам одновременно, если один залутал, включается определённый таймер и второй игрок может залутать его через прошедшее время, либо же завязать это время на рестарт сервера.)
      Бюджет есть, оценивайте свою работу и предлагайте цену, кто не хочет в комментариях вот Discord : RedWood#6323
    • Автор: CubeIn
      Приветствую друзья, возникла неприятная ошибка.
      Подписал все ключи через DS Utils, вставил ключ в северную часть, но все равно при заходе на сервер пишет данную ошибку.
      Client contains PBO which is not part of server data
       
    • Автор: CubeIn
      Есть ли у кого ни будь шаблон или инструкция как создать свой шеврон?
      Нашел видео от Фидова, но ссылка на шаблон не действительна

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

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

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

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