Jump to content
  • entries
    8
  • comments
    10
  • views
    2,288

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

Sign in to follow this  
Filin

1,701 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

Sign in to follow this  


0 Comments


Recommended Comments

There are no comments to display.

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

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