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

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

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

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

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

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

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

BorizzK , непосредственно в папке миссии. Всё подключено, ибо проверка на НАЛИЧИЕ работает чётко. 

Попробовал изменить даункаст, как ты и писал (на случай, если методы от ItemBase вдруг не унаследованы) - результат тот же...

 

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


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



VIRrusR Вам нужны химзащита и противогаз - сообщение судя по всему прилетает?

 

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


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

BorizzK ,да. Всё работает, кроме проверки на повреждение - как будто её вовсе нет. 

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


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

VIRrusR Есть у меня скромное подозрение, что дело связанно с оффлайном

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

Завтра запихаю в тестовый, понаставлю контрольных точек которые в лог будут выводить результаты и разберусь что к чему

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


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

А нельзя использовать

        float itemHealthLabel = pItem.GetHealthLevel();

и потом

        switch (itemHealthLabel)
        {
        case STATE_PRISTINE:
            healthFactor = ENVIRO_ISOLATION_HEALTHFACTOR_PRISTINE;
        break;
        case STATE_WORN:
            healthFactor = ENVIRO_ISOLATION_HEALTHFACTOR_WORN;
        break;........................

 

В Environment.c же расчитывают "мокрость" и "теплоизоляцию"с учётом повреждений. (сорри,я не скриптер)

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


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

paranoyk ,да использовать можно всё, что Вам в голову взбредёт! Есть же, например, вариант проверки от 123new в теме "Как проверить целостность костюма?"... Тут борьба не столько за результат, сколько за понимание. Скрипт то, сам по себе примитивнейший -всё пошагово, всё прямолинейно, никаких "продвинутых" методов, вроде перебора элементов массива. Просто пример для школьного учебника! И, вроде бы, "школяр" задачку то решил, и "тычер" признал решение верным... Всё хорошо, всё правильно,но... Не работает оно, дрянь такая! Надо понять, чего мы "не понять"? Надо!..

:relaxed:

BorizzK, а при чём тут онлайн или офлайн?! Всё, что используется в данном примере, вроде бы, есть и на серверной части, и на клиентской? Переменные что в проверке наличия, что в проверке целостности - одних и тех же типов/классов...

 

А я точно нигде число со строкой не сравниваю, например?.. 

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

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


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

По-моему, ошибка в логике проверки?.. 

У нас:

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("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 
				 	} 
				}
			}

То есть, нужно включить цикл проверки на целостность в тело проверки на наличие.:relaxed:

 

P.S. BorizzK, если есть возможность - потести, пожалуйста? Я до вечера не смогу ничего проверить...:dry:

 

P.P.S. И я всё равно не понимаю, почему в первоначальном варианте проверка целостности игнорируется?! По логике, у нас прошла проверка на наличие, переменные переопределили свои значения, если цикл if завершился по true, то должен быть переход на следующую функцию в теле цикла if ( attachment && attachment.IsItemBase() )... А у нас, насколько я понимаю, вместо этого перехода происходит завершение root - цикла. Почему?!

 

Совсем-совсем постскриптум: я понял! В первоначальном варианте, переход на проверку целостности происходил после завершения цикла проверки на наличие не по true, а как раз таки по false !!! Вот я балда тупоголовая (и ты, кстати тоже:wink::joy:)... Это же очевидно! То есть, проверка на целостность включалась бы, если бы противогаз небыл одет!

 

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

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


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

VIRrusR Кстати

Вот это

 

				item		=	Class.Cast(attachment);
				className	=	item.GetType();
				if ( className.Contains("NBCHoodGray") ) 
 

можно упростить до

 

				item		=	ItemBase.Cast(attachment);
				if ( item.GetType().Contains("NBCHoodGray") ) 
 

и избавиться от переменной className

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

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


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

Попробовал изменить даункаст, как ты и писал (на случай, если методы от ItemBase вдруг не унаследованы) - результат тот же...

:wink:

А вот это: if ( item.GetType().Contains("NBCHoodGray") ) - да. Убираем лишнюю переменную. Так и сделаю. Если это решение рабочее, надо будет попробовать другую реализацию - от 123new, через массивы. Если я её сюды кину, в продолжение темы как бы, это нормально будет?

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

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


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

if ( item.GetType().Contains("NBCHoodGray") ) - вопрос по синтаксису:

Я так понимаю, что в EnScript можно собирать простые функции в одну сложную, по AND ("И") через точку (".") ?

То есть, в приведённом примере, в переводе на человечачий: "(Если) взял из (коробки) "Итем" И это капюшон (,то...)".

Условие создания такой конструкции, как я понимаю, одно - все функции конструкции должны оперировать содержимым одной и той же переменной,так?

Тогда имеют право быть и более сложные конструкции, относящиеся к одной и той же переменной?

Ну что-то типа "(Если) взял из (коробки) "Итем" И это трусы И они семейные И они красные (,то...)", правильно?

 

if (item.GetType().Conteins("NBCHoodGray").GetHealth > 0.40 ) - это "в рамках приличий"?

Тогда наша проверка может иметь вид:

attachment = player.FindAttachmentBySlotName("Headgear");
			if ( attachment && attachment.IsItemBase() ) 
			{
				item		=	ItemBase.Cast(attachment);
				if ( item.GetType().Contains("NBCHoodGray").GetHealth > 0.40 ) 
  				{
					biosafe = biosafe + 1.0; 
				}
			}

Куда более изящно? Избавляемся от кучи переменных и циклов.

 

P.S. А ещё, мама говорила, что я самый красивый!:cool:

 

 

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

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


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

VIRrusR 

item.GetType().Contains("NBCHoodGray") возвращает false или true - ты у этого здоровье хочешь проверить? :joy:

 

Вобщем решил я переделать то что выше немного

 

и отучаемся использовать Class.Cast

Даункастим только в конкретный класс

ItemBase.Cast

EntityAI.Cast

Object.Cast и тп

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

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


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

BorizzK , кайфоломщик!:veryangry:

Поясняй давай! Почему не сработает? 

"(Если) Взял из (коробки) "Итем" И это капюшон ("Да") И он изношен менее, чем до 40% (,то...)"

Где нестыковка? Или я неправильно понимаю логику построения функции?

Мы же применяем GetHealth() не к значениям, которые возвращают GetType() и Contains, а к переменной, которую эти функции обрабатывают. Или я неверно понимаю?:sad:

 

P.S. Это щаз смеялся программер, который выход из цикла по true от выхода по false не отличает?:wink:

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

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


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

BorizzK , if (item.GetType().Conteins("NBCHoodGray").GetHealth > 0.40 ) - я проверю! :angry:

Ну и если ты всё же прав окажешься (:smilingimp:)  - вотЪ:

attachment = player.FindAttachmentBySlotName("Headgear");
			if ( attachment && attachment.IsItemBase() ) 
			{
				item		=	ItemBase.Cast(attachment);
				if ( item.GetType().Contains("NBCHoodGray") && item.GetHealth > 0.40 ) 
  				{
					biosafe = biosafe + 1.0; 
				}
			}

:angry: Наш ответ Чемберлену!

 

P.S. Мама лучше знает!:cool:

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


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

VIRrusR неверно понимаешь

 

 

 

item.GetType() возврашает имя класса в текстовом формате

 И передает его функции класса enString Cintains которая проверяет вхождение текста указанного в его параметрах в переданной ему строке и если таковое вхождение есть то вернет true

 

Те эсли сделать так

 

item.GetType().Contains("NBCHoodGray").GetHealth() это будет равносильно, грубо true.GetHealth или false.GetHealth()

 

Те в GetHealth будет передан параметр типа bool в классе которого нет такой функции...

 

 

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


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

BorizzK ,:angry: ответил выше. Я проверю! Так и знай!

 

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

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


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

VIRrusR там проверять нечего

 

например есть переменная variable

а = variable.функция1() передает содержимое переменной в функцию1 и та вовзращает результат в переменную а

а = variable1.функция1().функция2() передает содержимое переменной в функцию1 и результат в функцию 2 и результат функции2 передается в переменную а

 

можно делать так

а = variable1.функция1().функция2()

if (а = 10) делаем что-то

 

или

 

if (variable1.функция1().функция2() = 10) делаем что-то

 

важно что бы тип передаваемых данных был валиден - те соответсовал

 

нампример во всех классах кромер enString и array (всех видов) есть функция ToString() которая преобразует входные данные в строку

 

string a;

int b = 1;

a = b.ToString();

в итоге a = "1"

 

А вот в классе enString есть функция ToInt и ToFloat - догадайся что это и как и как пользоваться?

 

 

 

 

 

 

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


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

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

А жаль! Могли бы очень красивые по структуре скрипты вырисовываться. 

 

Цитата

А вот в классе enString есть функция ToInt и ToFloat - догадайся что это и как и как пользоваться?

Да чего тут догадываться?! В любом языке есть преобразование числа в строку и наоборот.

 

Нужно расширять "словарный запас" - больше функций. Опробую этот скрипт, предлагаю продолжить - рассмотреть логику нанесения урона? Там тоже не всё мне понятно... Далеко не всё. 

 

P.S. Кстати, у меня в этом вот скрипте, помимо кашля, добавлена ещё и рвота (так весело наблюдать за корчами геймеров, когда они из зон выбраться пытаются, бедняжки :joy::upsidedown::cool: ). Так вот, реализую-ка я, пожалуй, чтоб они в противогазе не блевали?.. Или лучше, чтоб захлёбывались?.. Не, не логично - сорвёшь противогаз рефлекторно, если дышать нечем... Вот только одного кашля как-то маловато будет?.. 

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

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


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

VIRrusR Конечно передача результата, а ты как думал

А вот как ты хочешь делать напрямую - неправильно вообще

Вот ты постепенно начинаешь врубаться

 

Как поймешь переменные и тп - перейдем к структурам, хотя я еще пока не все понимаю в этом СиШарповом энскрипте

 

взять хотя бы тот же enum

 

хотя в массив обьектов класса я уже вроде врубился

 

ЗЫ переделываю тот вариант что выше и проверяю - ну и будем его потом вместе разбирать

 

комплекты вещей будут в массиве

проверка будет в цикле

код меньше

готовить легче

 

ну и загрузку комплектов для проверки и зон будем делать из файла

 

а потому универсализируем на 4 вида зон

 

 

а затем прикрутим это к scripted entity и сделаем настоящий триггер, а не его подобие

 

 

 

 

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

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


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

BorizzK , ты погодь переделывать! Давай вот так потихоньку до конца скрипта и дойдём? Мне надо ПОЛНОСТЬЮ понять его работу, познакомиться с функциями и т.д. А уж тогда - будем модернизировать и оптимизировать? Смотри, как классно у нас с проверкой целостности получилось - а ведь я в начале даже вопрос сформулировать не мог, а не то, что написать строчку кода! А в итоге - не только решили задачу, но и модернизировали исходник, пусть и совсем чуть-чуть! И в процессе я много чего узнал и понял, о чём и спросить бы не догадался... Хороший такой самоучитель формируется у нас по-принципу "диалог учителя с учеником". Всё по классике! :smile:

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


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

VIRrusR Мне самому еще учиться и учиться

Я переделываю параллельно

сначала это проверю

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

 

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


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

BorizzK ,а я тебя подгоняю?!:relaxed: Наоборот, пока ты там своими делами занимался. я за сегодня раз пятнадцать всё перечитал, обдумал, проверил. Ошибку нашёл, ошибку допустил...:biggrin: Зато в процессе разбора этой ошибки, нашёл альтернативное решение! Это ж и есть учёба! А не так, что ты мне вывалил решение или тупо "теорией" засыпал. Сделал шаг - осмотрелся, проанализировал, отступил, сделал прыжок.

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


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

BorizzK , щаз буду ругаться матом!:veryangry::veryangry::veryangry:

			attachment = player.FindAttachmentBySlotName("Headgear");
			if ( attachment && attachment.IsItemBase() ) 
			{
				item		=	ItemBase.Cast(attachment);
				if ( item.GetType().Contains("NBCHoodGray") && item.GetHealth() > 0.40 ) 
  				{
					biosafe = biosafe + 1.0; 
				}
			}

Не работает проверка на целостность! Комплектность проверяет...

Приоритет математических действий? Что первое выполнит сравнение или логическое "И" ? 

У мну уже крыша едет...

И сообщение выводить перестало! Ну уж это то тут причём?!

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

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


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

VIRrusR  ну вы хоть погуглите значения то.
&& - логическое 'И' в с++, c# и разумеется в enscript

|| - логическое 'ИЛИ' в с++, c# и разумеется в enscript

матчасть: https://ru.wikipedia.org/wiki/Операторы_в_C_и_C%2B%2B

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

И да, перед строкой:

if ( item.GetType().Contains("NBCHoodGray") && item.GetHealth() > 0.40 ) 

советую хотя бы временно добавить:

Print("Type: " + item.GetType() + " Health: " + item.GetHealth().ToString()); 

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

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

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

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

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

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