Jump to content
Sign in to follow this  
  • entries
    8
  • comments
    4
  • views
    173

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

Filin

30 views

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

 

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

 

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

 

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 Comments


Recommended Comments

There are no comments to display.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×

Important Information

By using this site, you agree to our Terms of Use.