Перейти к содержанию
  • записей
    8
  • комментариев
    10
  • просмотра
    2 124

А в воде ли наш ГГ ? Или непись...

Авторизация  
Filin

1 645 просмотров

Вот маялся я в своей модификации таким вопросом: как определить, что мой гг в данный момент находится в воде? 

 

Казалось бы просто да не очень. Пришлось порыться в профильных модах (к примеру "Купание в Скайриме") и ответ таки нашелся. Для тех, кому интересно, описываю общую механику решения вопроса.

 

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

 

1. Есть в Ките такая штука, как Condition Functions Это некий набор функций-условий, позволяющих делать с магэффектами, спелами, зачарами всякое интересное :) Среди этих функций есть такая штука, как IsInDangerousWater. Это первая вещь, которая нас интересует. Данная функция позволяет определить находится ли наш ГГ или НПС в .... лаве :)

Да, в Скайриме она используется применительно к лаве. Но мы ее заюзаем для воды. В чем прикол? А в том, что в Скае лава и вода это по сути одно и тоже только с разными шейдерами и одной любопытной галочкой, которая их отличает друг от друга.

 

2. Вода. В Скайриме вода это по сути активатор вот такого типа:

31248920d223t.jpg
 

В параметрах данного активатора нас интересует поле Water Type. Для активатора-воды в нем проставляется объект WaterType, который описывает различные технические и визуальные свойства этой самой воды. Найти эти WaterType можно в ObjectWindow Кита в разделе WaterType

01e6bb7c0db6t.jpg

 

Параметры этого объекта выглядят так:

68d75947c130t.jpg

 

Во всей этой чудесной мешанине потенциальных возможностей нас интересуют только две вещи (на скриншоте выше они выделены красным):

 

1. Галочка "Causes" - определяет тот факт, что активатор-вода с этим типом будет наносить дамаг ГГ или НПС, если он в ней окажется.

2. Поле "damage per second" - указывает на количество дамага в секунду, который наносится ГГ или НПС пока он в воде этого типа.

 

Вы спросите, а на кой икс обычной воде выставлять дамаг? О_о  Вот в том и вся хитрость. 

 

Суть в следующем: если вы установите обычному типу воды (озера там или реки) галочку Causes, но при этом в поле "damage per second" оставите значение 0, то никакого дамага ГГ получать не будет. А теперь поясню суть приема. Предположим у вас есть озеро МояЛужа с типом воды Вода1. У вас есть Спелл1 который должен сработать только когда ГГ / НПС в озере МояЛужа. Вопрос - как вашему Спеллу1 определить что ГГ/НПС в этом озере? А очень просто. Делаем следующее:

 

1. Типу воды Вода1 ставим в Ките галочку Causes, но поле "damage per second" оставляем с 0

2. В условиях магэффекта Спелла1 ставим проверку  IsInDangerousWater == 1.

 

Все. Теперь когда ваш ГГ / НПС зайдет в воду озера МояЛужа ваш спел сработает. А вне этого озера - нет.

 

Почему так?  Функция IsInDangerousWater возвращает значение 1, когда актор находится в воде, типу которой выставлена галочка "Causes", а во всех остальных случаях функция возвращает значение 0. Именно для этой цели мы выставили типу воды Вода1 эту галочку а дамаг поставили в 0. Если же дамаг не 0 то у вас получится лава (только поверх воды придется еще положить шейдер-эффект лавы в Ките) или кислотная лужа, или лужа с кипятком при доп. эффекте пара поверху... 

 

Короче дальше полет вашей фантазии :)

 

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

 

Да, есть еще вопрос о глубине и проверке на то, что ГГ / НПС сечас плывет или просто стоит в воде. Первое решается скриптами путем определения положения ГГ относительно объектов мира, а второе еще одним условием-функцией в нашем магэффекте IsSwimming, которое в нашем случае должно == 0 (это значит что ГГ/НПС не плывет в момент каста спелла).

 

Примерно так:

 

a078a0e0fbb0t.jpg

Авторизация  


0 Комментариев


Рекомендуемые комментарии

Комментариев нет

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост требует одобрения модератора, прежде чем станет видимым.

Гость
Добавить комментарий...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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

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

By using this site, you agree to our Условия использования.