Перейти к содержанию

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

Опубликовано
19.08.2021 18:27:41, Капитан Немо сказал(-а):
Действительно, зачем такие сложности. Создайте новую фракцию, пропишите этой фракции нужное вам отношение к фракции игрока, а затем включите в эту фракцию того NPS, которому хотите установить отношение.

Задача была несколько иной. Например у NPC отношение к игроку 70 пунктов. Игрок ударил NPC, затем помирился с ним зажав блок + использовать. Отношение NPC уменьшилось до 50 пунктов. Позже, когда игрок переместился к клону того самого NPC, отношение клона к игроку так же изменилось до 50 пунктов.

Опубликовано
19.08.2021 19:23:43, Pimple03 сказал(-а):

Задача была несколько иной. Например у NPC отношение к игроку 70 пунктов. Игрок ударил NPC, затем помирился с ним зажав блок + использовать. Отношение NPC уменьшилось до 50 пунктов. Позже, когда игрок переместился к клону того самого NPC, отношение клона к игроку так же изменилось до 50 пунктов.

Сори. Невнимательно прочитал. Тогда действительно, только скриптом.

Опубликовано
19.08.2021 17:52:47, Pimple03 сказал(-а):

Как задать значение отношения (Disposition) NPC к игроку? У меня возникла необходимость перенести показатель Disposition от NPC к его клону. Но как оказалось команды SetDisposition (аналога SetActorValue) не существует.  С помощью GetDisposition я могу сохранить текущий показатель (Disposition) в виде вещественной переменной. Но вот как присвоить это значение клону? Есть только ModDisposition, но она изменяет значение на конкретно указанную величину.

А что мешает воспользоваться банальной математикой? Зачем целых 3 переменных то?

Short sDisp

Let sDisp := NPCRef.GetDisposition PlayerRef*-1 (получаем полный уровень расположения и умножаем на "-1", чтобы получить отрицательное значение)
NPCRef.ModDisposition PlayerRef sDisp (таким образом делаем расположение к игроку в 0 единиц)
NPCRef.ModDisposition 200 (улучшаем отношение к нам на 200 единиц или на любое другое число).

100 единиц - не предел, расположение может быть и 500 и 1000, я лично тестировал это как-то раз. Просто отображается всегда, как 100.
Для постоянного поддержания конкретного уровня расположения, в своем [CCE] я использовал следующий блок:

Short sDispLvL

if (NPCRef.GetDisposition PlayerRef < 100)
     Let sDispLvL := 100 - NPCRef.GetDisposition PlayerRef
     if (sDispLvL > 0)
      NPCRef.ModDisposition PlayerRef sDispLvL
      Return
     Endif
    Endif

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

  • Нравится 2

Ничто не истинно, все потрачено

Опубликовано
19.08.2021 20:58:22, Takirell сказал(-а):
А что мешает воспользоваться банальной математикой?

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

  • Нравится 2
Опубликовано

Вопрос к тем, кто занимался озвучкой, как сделать новые звуки для новой расы- возгласы при ударе и силовой атаке. Подставляю звуки дремор и скелетов, переименовывая в обычные generic_hit и generic_powerattack и ничего не звучит, раса остается немой. Хотя в самой игре дремора нормально звучат и файлы их озвучки (lip и mp3) вроде бы кардинально не отличаются от файлов для других рас. И в моде M.O.E.-Lichcraft наш персонаж вполне себе использует озвучку от скелета.

Опубликовано
26.08.2021 23:30:24, piramis сказал(-а):
Подставляю звуки дремор и скелетов

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

Опубликовано
26.08.2021 23:30:24, piramis сказал(-а):

Вопрос к тем, кто занимался озвучкой, как сделать новые звуки для новой расы- возгласы при ударе и силовой атаке. Подставляю звуки дремор и скелетов, переименовывая в обычные generic_hit и generic_powerattack и ничего не звучит, раса остается немой. Хотя в самой игре дремора нормально звучат и файлы их озвучки (lip и mp3) вроде бы кардинально не отличаются от файлов для других рас. И в моде M.O.E.-Lichcraft наш персонаж вполне себе использует озвучку от скелета.

Это все специальные топики, которые находятся в квестах с ID "Generic". Там есть вкладки "Combat", "Misc" и так далее. Я уже не помню просто, можно посмотреть, как в оригинале сделано и создать на основе "ванили" свой собственный квест для конкретной расы (рас), залив туда диалоги. У самого руки никак не дойдут до этой темы.

Ничто не истинно, все потрачено

Опубликовано

Вообщем махнул рукой и использовал для своей цели озвучку от модерской расы ксеноморфа, все отлично звучит и работает даже без lip-файлов. Так что определенно какая-то проблема там в этих mp3 есть, которая не дает использовать их напрямую, и видимо дело не в названии файла. Даже залез посмотреть их свойства, ничего там такого особенного не видно, но не воспроизводятся.

Опубликовано
27.08.2021 18:15:58, Pimple03 сказал(-а):

Как вставить имя игрока в виде текста в какой-нибудь документ или книгу? Или в TES4 такой возможности попросту нет?

а в начале игры, император вроде спрашивал твое имя и потом повторил его.  Было такое где-то в игре же...

0e36bc18048d9fcc300f326cc927b20a.gif

Опубликовано
28.08.2021 03:32:59, Laion сказал(-а):
а в начале игры, император вроде спрашивал твое имя и потом повторил его.

Император спрашивал знак рождения, а потом комментировал сделанный выбор. Имя игрока вроде как вообще нигде не фигурирует за всю игру. В том же Морровинде имя игрока можно было указать в тексте набрав %PCName, но в TES4 такое не прокатывает.

Опубликовано
27.08.2021 18:15:58, Pimple03 сказал(-а):

Как вставить имя игрока в виде текста в какой-нибудь документ или книгу? Или в TES4 такой возможности попросту нет?

Есть такой мод, FormID Finder. Так вот там, вроде бы, используется скриптовое заполнение пустой записки через String_Var'ы. Стоит смотреть в ту сторону.

  • Нравится 1

Ничто не истинно, все потрачено

  • 2 недели спустя...
Опубликовано (изменено)

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

 

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

Изменено пользователем piramis
Опубликовано
07.09.2021 15:07:50, piramis сказал(-а):

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

 

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

Фракция дает только модификатор расположения на указанное кол-во единиц. Если агрессия актера больше, чем уровень его расположения к другому НПС смежной фракции, то первый НПС будет атаковать второго.
Я, как правило, когда создаю новую фракцию, то для сопартийцев всегда ставлю расположение в 200 единиц, а у самих НПС - агрессию 100. Ибо даже если кто-то кого-то зацепит в бою (пусть и не раз), то актеры не начнут друг друга валить.
Стоит еще помнить, что фракции пишутся в сейвы и чтобы их обновить, нужно загружаться на более раннее сохранение, где актеры еще не были заспавнены в мире. У меня лично была такая проблема и приходилось вовсе отключать плагин для обновления этих параметров. Не берусь утверждать, что так будет везде и у всех, но такую странность стоит учитывать.
Никакого штрафа не будет, если был атакован априори агрессивный актер.
На счет оружия у личей - ничего не могу сказать, как-то не встречался с таким дефектом.

  • Нравится 1

Ничто не истинно, все потрачено

  • 2 недели спустя...
Опубликовано (изменено)
21.03.2021 23:47:05, piramis сказал(-а):
где в NIF файлах привязка/отвязка частей тела к расовой текстуре ?

Сам нашел, за это отвечает подпись skin в свойствах текстуры. Чтобы изменить на привязку к любой другой обычной текстуре, нужно  написать что угодно другое, например default.

e47yrujm89.jpg

e47yrujm90.jpg

Изменено пользователем piramis
  • 4 недели спустя...
Опубликовано

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

Опубликовано
16.10.2021 06:29:27, Ed101 сказал(-а):

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

Поможет связка OBSE-функций "GetNumChildRefs" и "GetNthChildRef". Если дочерний объект один, то получит реф можно по типу:

Ref rChild

Let rChild := ObjectRef.GetNthChildRef 0

Где "0" - индекс первого такого объекта. Все дочерние объекты можно извлечь с помощью цикла while-loop.

  • Нравится 1

Ничто не истинно, все потрачено

Опубликовано
16.10.2021 07:11:14, Takirell сказал(-а):

Поможет связка OBSE-функций "GetNumChildRefs" и "GetNthChildRef". Если дочерний объект один, то получит реф можно по типу:

Ref rChild

Let rChild := ObjectRef.GetNthChildRef 0

Где "0" - индекс первого такого объекта. Все дочерние объекты можно извлечь с помощью цикла while-loop.

Спасибо. Правда, я и сам уже нашел эту функцию. Странно, что в базовой игре такого важного функционала не завезли.

Опубликовано

Как вывести в консоль значение переменной? Я видел, что в консоль можно добавлять какие-либо сообщения.

И, я так понимаю, другого способа дебажить код нет в игре?

Опубликовано
16.10.2021 07:53:34, Ed101 сказал(-а):

Как вывести в консоль значение переменной? Я видел, что в консоль можно добавлять какие-либо сообщения.

И, я так понимаю, другого способа дебажить код нет в игре?

Ну да, нет другого способа.
Выводить значения переменных можно примерно вот так:

PrintToConsole "Значение величины - %g" sValue

Где "%g" - числовое значение, "%n" - имя объекта, "%i" - его RefID. В документации к OBSE есть еще несколько подобных кодировок для передачи величин в текстовые значения. Ну, а "sValue" - переменная, в конкретном случае типа Short или Float.

  • Нравится 1

Ничто не истинно, все потрачено

Опубликовано (изменено)

Есть подсвечник и объект Light. Light является дочерним объектом для подсвечника (во вкладке Enable Parent указан объект подсвечника). На подсвечнике скрипт

ref current
ref children

begin OnActivate
	set current to this;
	set children to current.GetNthChildRef 0;
	
	if ( IsActionRef Player )
		if children.GetDisabled
			children.Enable
			current.AddFlames
		else
			current.Disable
			current.RemoveFlames
		endif
	endif
end

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

Изменено пользователем Ed101
Опубликовано
16.10.2021 15:04:16, Ed101 сказал(-а):
т.е. нельзя отключить дочерний объект, не отключив родителя?

Все верно. Это - механика и тут ничего не сделаешь.

Ничто не истинно, все потрачено

Опубликовано (изменено)

Есть какой-то способ хранить состояния копий объектов (рефов)? Я уже заметил, что если в скрипте, допустим, есть onLoad и onActivate, и если, допустим, в onLoad присвоить переменной short значение (5 например), то в onActive будет 0, дефолтное значение, т.е. значение переменной не хранится в копии объекта.

Изменено пользователем Ed101
Опубликовано
17.10.2021 06:40:02, Ed101 сказал(-а):

Есть какой-то способ хранить состояния копий объектов (рефов)? Я уже заметил, что если в скрипте, допустим, есть onLoad и onActivate, и если, допустим, в onLoad присвоить переменной short значение (5 например), то в onActive будет 0, дефолтное значение, т.е. значение переменной не хранится в копии объекта.

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

Ничто не истинно, все потрачено

Опубликовано (изменено)
17.10.2021 07:48:27, Takirell сказал(-а):
Покажи свой скрипт.
short a

begin OnLoad
	set a to 5;
end

begin OnActivate
	print $a;
end

Вот пример. Создаю новый объект-подсвечник. Вешаю скрипт на  него, размещаю в ячейке. Активирую, и в консоли будет 0, а не 5.
 

Вообще что я пытаюсь сделать. Есть подсвечники со светом. И для каждого подсвечника сделан отдельный скрипт на вкл.\откл. света. Я хотел сделать один универсальный. Но в итоге, свет нельзя отключить без родителя-подсвечника, состояния переменных объектов не сохраняются или я не понимаю чего-то.

Изменено пользователем Ed101

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

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

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
×
×
  • Создать...