Форум » Записи участника [Myprism]

Результаты поиска
Myprism  Offline  Сообщение №1441 | Тема: Вопросы по моделированию написано: 12 октября 2019, 03:01


Физик


Овсян, не это главное. Полигональность повышена, но только в некоторых местах - губы, нос, подбородок. Изменена форма. У одной моей расы тоньше и длиннее шея, у дреморок надбровные выступы сделаны в модели.
Чтобы разобраться в морфах, мне помогли утилиты Антона https://modgames.net/index/8-208989 Ими и пользуюсь.

Myprism  Offline  Сообщение №1442 | Тема: Вопросы по моделированию написано: 17 октября 2019, 10:54


Физик


Овсян, А я только Блендером и работаю. Макса не знаю совсем. Для морфов вообще не нужен скининг на лицевые кости. Я вообще не знаю никаких лицевых костей. Морфы лица работают точно так же как и морфы тела (толстое и тонкое). Для тела нужны две модели - толстая и тонкая. Только для тела эти модели лежат отдельно, а модели морфов лица упакованы в один файл. Там просто набор отдельных моделей отвечающих всем разновидностям мимики. Отдельный файл, который отвечает за модели расовых различий и т.д. Утилиты Антона позволяют вытащить из этого файла отдельные модели и запаковать туда свои. Свои должны соответствовать по топологии своей голове. Игра распознаёт отдельные морфы по их названиям. А редактировать можно чем угодно.

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

Добавлено (17 Октября 2019, 15:21)
---------------------------------------------
Тут надо пояснить некоторые вещи. Создатели Скайрима используют одновременно разные механизмы для перемещения объектов. Прежде всего, это анимация. Для неё все вертексы привязаны с соответствующими коэффициентами к соответствующим костям. Но это ресурсоёмкий процесс, ведь для каждого вертекса учитывается положение до четырёх костей. Другой способ, это морфы. Это способ заключается в том, что используются две крайние модели, а промежуточные между ними положения получаются линейной интерполяцией. По скорости обработки это как обычная трансформация объекта, т.е. очень быстрый процесс. Это способ выбран для формирования толстых и тонких (и всех промежуточных) тел. И он же используется для модификаций лица. Но реализовано это иначе, чем для тела. В файлах Скайрима каждое тело и одёжка лежат в двух вариантах. Лежит там и голова... но только одна! А где вторая? Ведь для второго тела нужна другая голова. Лежат там и текстуры для разных рас, а где их головы? Они тоже есть, но лежат в файлах с расширением Tri. Так вот, Антон (отличный программист) разобрался с устройством этих файлов и написал две утилиты TriExtractor и TriCreator, которые позволяют распаковать содержимое файлов Tri и запаковать их обратно. TriExtractor выдаёт набор файлов Obj. Это текстовые файлы моделей и просмотрщик десятой винды сразу откроет их как модели. Но на самом деле, это просто текстовый файл, который можно посмотреть блокнотом. Именно эти файлы оказываются предельно простыми. Там только координаты вертексов, текстурные координаты и список треугольников. Нет никаких нормалей и, тем более бинормалей и т.д. В результате, такое представление получается более компактным, чем набор полных моделей. В списке есть исходная модель и набор её модификаций. Топология их должна быть строго одинаковой.


Myprism  Offline  Сообщение №1443 | Тема: Вопросы по Creation Kit (продолжение старой темы) написано: 21 октября 2019, 13:16


Физик


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

Myprism  Offline  Сообщение №1444 | Тема: Вопросы по Creation Kit (продолжение старой темы) написано: 22 октября 2019, 16:40


Физик


valambar, понятно. Дело в том, что редактор, это как бы несколько разных утилит, связанных вместе. Сам редактор со скриптами никак не работает, только позволяет ставить им значения свойств. Но в его состав входит компилятор. Компилятор действует тупо - находит все нужные для компиляции файлы, даёт результат. Не находит - ругается. Поэтому компилятору нужен не весь SKSE, а только его файлы скриптов. Вот для этого в комплект SKSE и входят все эти файлы. Редактору всё это до лампочки, он всё равно никак к SKSE не обращается. Да и скрипты в редакторе никак проверить нельзя. Они там не работают. Можно только в компиляторе проверить синтаксис. А действие скриптов видно только в игре. Вот её и надо запускать через SKSE.

Myprism  Offline  Сообщение №1445 | Тема: Вопросы по моделированию написано: 26 октября 2019, 05:42


Физик


Овсян, файлы .tri  нельзя открыть блокнотом. Это бинарные файлы. Но их можно распаковывать (и запаковывать обратно) на модели .obj, которые уже являются текстовыми. Выше я давал ссылку на утилиты Антона, которые это делают. Никто и не говорил, что будет просто :)

Myprism  Offline  Сообщение №1446 | Тема: Вопросы по скриптам Papyrus написано: 6 ноября 2019, 17:17 | Отредактировано: Myprism - 6 ноября 2019, 17:18


Физик


yakor77, автоматически скрипты не склеиваются. Точно так же, как автоматически объединять можно только самые примитивные моды. Задача ваша решается написанием нового скрипта для манекенов под тем же названием. Чтобы это сделать, вы должны разобрать детально, что делают эти скрипты и написать свой с нужным вам функционалом. Менять позы - без проблем. Живые манекены? - Это самое лёгкое. Они же сделаны как живые персонажи. Заморозить манекен уже потруднее. Расы меняются легко, а вот пол - фигушки, скриптом не делается.

Бага с головой, который исправляют Ctri-F4 в Скайриме нет. А есть непонимание, как в Скайриме работают головы. Персонажа можно создать в редакторе. Но эти изменения игра не примет. Игре нужна сохранённая модель головы с применением соответствующих морфов и полноты. Вот только с этой моделью (и текстурами к ней) игра и будет работать. Чтобы приготовить такую модель и текстуры для игры, нужно нажать Ctri-F4. Сделано это для оптимизации производительности. Движок игры не успевает синтезировать головы со всеми морфами и раскрасками налету, поэтому всё должно быть приготовлено заранее.

А проблем с головой у вас не будет, если вы сделаете её не как голову с мимикой и соответствующими морфами, а как шлем имеющий форму головы. Она вообще может быть просто продолжением тела. Т.е. одна единственная модель - тело. Включает все части и голову в том числе, которые просто привязаны к соответствующим костям. И не будет ни шва на шее, ни сохранения заготовки по Ctri-F4. Но это уже не для темы по скриптам.

Myprism  Offline  Сообщение №1447 | Тема: Вопросы по Creation Kit (продолжение старой темы) написано: 18 ноября 2019, 16:05


Физик


Miranda_Kusland, проверьте, есть ли раса персонажа, на котором должны показываться штаны, в списке рас в АА. И ещё надо убедиться, что штаны именно надеты, а не находятся в инвентаре.

Myprism  Offline  Сообщение №1448 | Тема: Вопросы по Creation Kit (продолжение старой темы) написано: 19 ноября 2019, 01:27


Физик


Miranda_Kusland, из того, что вы написали, следует, что мод работать должен. А он не работает. Значит, причина в том, что вы не написали. Есть что-то, что отличает этот мод от работающего. Надо придумать способ постепенного исключения возможных причин. Например, если работают стандартные слоты, взять и поставить этим штанам стандартный слот. Или стандартной модели поставить слот этих штанов (57). Ещё, в игре различается работа шмотки в виде от первого лица и от третьего. От первого лица показываются только стандартные слоты и те, которые принудительно назначены для вида от первого лица в свойствах расы.

Myprism  Offline  Сообщение №1449 | Тема: Аззи написано: 7 декабря 2019, 09:13


Физик


Ezik66russ, на 10-ю Винду легендарка прекрасно ставится. Вообще без проблем. Так что дело не в Винде и не в легендарке. Не помню, сделал Серафим Азьке физику или нет. Если сделал, то под SE вообще сконвертировать нельзя, там нет прежней физики. Кроме того, Аззи это бездна текстов и диалогов. Переводить это в SE (там другая поддержка языков) - геморрой ещё тот!

Myprism  Offline  Сообщение №1450 | Тема: Поиск модов для TES-V: Skyrim написано: 19 декабря 2019, 01:34


Физик


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

Myprism  Offline  Сообщение №1451 | Тема: Вопросы по Creation Kit (продолжение старой темы) написано: 19 декабря 2019, 04:46


Физик


crafty77, понятно. Ну, это нормально, что NPC пользуются любыми доступными маркерами. Теперь бы понять, что такое "находясь как бы внутри них"? :) У них, что, пропали коллизии и один NPC проникает внутрь другого? В принципе, в Скайриме дела с коллизиями обстоят не очень хорошо. Мне вспоминается, что если кузница уже занята, но игрок всё равно на ней настаивает, то можно наблюдать как игрок обнимается с кузнецом, а потом кузнец проходит сквозь игрока, чтобы освободить кузницу.

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

Добавлено (21 Декабря 2019, 17:23)
---------------------------------------------
Все знают, что в окошке настройки свойств ArmorAddon в правом верхнем углу есть окошко установки Art Object. Там можно выбрать Art Object установленный в игре. Art Object это некоторая модель. Видел ли кто-нибудь, чтобы в ArmorAddon в этом окошке стояло хоть что-нибудь кроме "none"? Как поставить туда Art Object, чтобы он отображался в игре?


Myprism  Offline  Сообщение №1452 | Тема: Вопросы по скриптам Papyrus написано: 19 декабря 2019, 04:51


Физик


trorhold, есть такой мод Мелисса. Он написан очень хорошими отечественными мододелами. Там персонажка сама раздевается в бане и даже потеет! Если память мне не изменяет, то и в реках она тоже раздевается. Вот надо посмотреть, как там это устроено. Вообще, на этом моде можно учиться, как их правильно делать.

Myprism  Offline  Сообщение №1453 | Тема: Вопросы по скриптам Papyrus написано: 20 декабря 2019, 13:22


Физик


myav, я не большой специалист в скриптах. Поэтому выскажу только предположение. Мне кажется, что дело в различии актёра и базового актёра. Базовый актёр это объект, копии которого размещаются в Скайриме. А просто актёр это и есть такая копия. Изменение свойства базового актёра это изменение свойств всех его копий. Именно поэтому selfactor.StopCombat() применяется просто к актёру, а не к базовому актёру, ведь данный бой ведёт копия. Так что, не очевидно, как MyBase.SetCombatStyle(csStyle) срабатывает на данном актёре.

Myprism  Offline  Сообщение №1454 | Тема: Вопросы по скриптам Papyrus написано: 31 декабря 2019, 20:04


Физик


Как заполняются камни душ?
Нужно знать, каким скриптом это делается. Проблема в том, что в редакторе есть только один маленький камень душ, один большой, один великий и т.д. А в результате сбора камней и их заполнения обнаруживаются РАЗНЫЕ маленькие камни с разной ценой (хотя и с одной душой), разные большие и т.д. Игра считает их разными объектами и мне нужно понять, откуда они берутся. Я сделал разный внешний вид для полных и пустых камней. Но в игре обнаруживаются полные камни душ, которые выглядят как пустые. Они всегда дешевле тех камней душ, которые выглядят как полные. Нужно понять, как игра создаёт эти камни душ и как она даёт им изображение пустых камней.

Добавлено (01 Января 2020, 16:53)
---------------------------------------------
Немножко продвинулся с камнями душ. Похоже, они неправильно заполняются душами в ванильной игре. Вместо того, чтобы поменять игроку пустой камень душ на полный, там просто камню ставится галочка полного, а остальные свойства (цена и модель) остаются от пустого.
В скрипте Scriptname Actor extends ObjectReference Hidden
есть заголовок функции bool Function TrapSoul(Actor akTarget) native которая, видимо, и осуществляет наполнение камней душ. Но где её содержание и как его править, я пока не знаю.


Myprism  Offline  Сообщение №1455 | Тема: Вопросы по скриптам Papyrus написано: 1 января 2020, 16:14


Физик


Dsion, грустно :(

Добавлено (01 Января 2020, 19:42)
---------------------------------------------
А идея, как это всё-таки исправить, у меня есть :)
Заполнение камней находится в скрипте:

Код
ScriptName magicSoulTrapFXScript extends ActiveMagicEffect
;...................
Event OnEffectFinish(Actor Target, Actor Caster)
;...................
            if Caster.TrapSoul(victim) == true ; Вот, оно, заполнение.
                ; Вот если я сюда вставлю поиск и замену в инвентаре игрока дефектно
                ; образованного заполненного камня душ правильно заполненным, то всё будет правильно.
            endif
;...................
endEvent

Добавлено (02 Января 2020, 03:35)
---------------------------------------------
Dsion, наверное, только ты мне сможешь помочь. Объясню всё подробно. В игре есть два типа камней душ - пустые и полные. Это разные типы объектов с разной ценой (им можно ещё и вес сделать разный). Я сделал для них специальные прозрачные и очень красивые модели. Таким образом, у меня сразу видно, заполнен ли камень душ. Но это не работает на тех душах, которые игрок заполняет сам с помощью заклятия отбирания душ. Дело в том, что игра использует для таких камней только объекты пустых камней душ, которым назначает заполнение. Цена, вес, модель остаются пустыми, но значится наполнение. Мне нужно это исправить. Т.е. мне нужно вычленить в инвентаре игрока "неправильные" камни и заменить их правильными того же типа и заполнения. Для частично заполненных камней душ мне не трудно сделать и соответствующие объекты и даже специальные модели для них. Проблема заключается в том, чтобы вычленить в инвентаре игрока неправильно заполненные камни душ.
В качестве обработчика, куда вставлять код, годится Event OnEffectFinish(Actor Target, Actor Caster)
Вопрос в том, как выделить дефектный камень? Алгоритм возможен такой: я ставлю всем пустым камням кейворд (например) "EmtySoulGem". Тогда все камни в инвентаре игрока с таким кейвордом, но имеющие душу, являются дефектными и подлежат замене. (В SKSE есть функции определения типа камня и типа его души.) Но как быть с инвентарём игрока? Как получить доступ к нему или выделить из него массив камней душ с нужным кейвордом (или хоть один камень, который был заполнен только что). Ещё мне нужно знать число элементов в массиве для возможности его перебирания.
Ещё дело осложняется тем, что непонятно, какие именно камни душ лежат в инвентаре. В принципе, инвентарь является контейнером. Если в контейнер положить несколько штук предметов разом, то им не выделяются отдельные ID. Они будут лежать просто как несколько штук базового объекта одной строчкой. Если же их туда положить несколько раз по одному предмету (несколькими строчками), то каждому будет выделен отдельный ID и это будут раздельные предметы. При заполнении камней душ, каждый раз создаётся новый камень, который лежит в инвентаре игрока отдельной строкой, причём одинаковые по всем параметрам так созданные камни не объединяются вместе. Это создаёт проблемы при прокрутке неоправданно длинных списков. Инвентарь игрока их не объединяет. Если все эти камни выгрузить в какой-нибудь сундук, а потом забрать оттуда, то все одинаковые камни окажутся объединены в одну строку с одним числом камней в строке. Инвентарь игрока тоже объединяет одинаковые предметы, но только не для заполненных заклятием камней душ. Может быть, вот эти не объединяющиеся камни душ в инвентаре, имеют свои особенности (те, что не дают им объединяться) и эти особенности позволяют их оттуда вычленять?

Добавлено (02 Января 2020, 09:42)
---------------------------------------------
Ещё, как можно повесить скрипт на игрока? Там бы я мог отслеживать добавление объектов и если это неправильный камень душ, заменять его.

Добавлено (02 Января 2020, 13:05)
---------------------------------------------
Со скриптом на алиас игрока получился пролёт. Добавление души в камень душ не добавляет камень в инвентарь, а изменяет его там. Так что, событие OnItemAdded() не срабатывает :(

Добавлено (02 Января 2020, 16:11)
---------------------------------------------
Второй пролёт:
Int GetSoulSize()
Int GetGemSize()
Обе функции возвращают одну и ту же цифру от 1 до 5, которая соответствует размеру камня и никак не зависит от того, заполнен он игроком или нет и в какой степени. Т.е. нет даже способа определить скриптом, есть ли в камне душа :(


Myprism  Offline  Сообщение №1456 | Тема: Вопросы по скриптам Papyrus написано: 2 января 2020, 20:33 | Отредактировано: Myprism - 2 января 2020, 20:39


Физик


Цитата Dsion

А GetSoulSize() не работает на объектах, выброшенных в мир? Тех, кто не в контейнере.

Не в контейнере, это не актуально, так как нужно это делать именно у игрока. Тут ещё обнаружилась вот какая гадость. Заполненные камни душ игра в папирусе не отличает от пустых. Чтобы вычленить камни душ из инвентаря, я применил FormList из пустых душ. Так вот, игра считает, что все заполненные игроком относятся туда же, т.е. к пустым. Т.е. она пишет, что там есть заполнение, но не позволяет его обнаруживать папирусом.

Myprism  Offline  Сообщение №1457 | Тема: Вопросы по скриптам Papyrus написано: 3 января 2020, 04:23 | Отредактировано: Myprism - 3 января 2020, 04:24


Физик


Multigone, разные модели для заполненных и пустых камней душ я уже сделал. Очень красивые. На этом и заметил все глюки заполнения камней душ в Скайриме. Хотел сделать и специальные модели для частично заполненных душ, но склоняюсь к мысли отказаться от частичного заполнения вообще. Во-первых, мне очень не нравится, когда великий камень поганится мелкой душой крысы, во-вторых, не правильно будет, дать игроку возможность заполнить великий камень всего лишь пятью крысами (это если сделать дозаполнение). Наверное, надо сделать так, чтобы душа полностью заполняла собой самый большой из имеющихся у игрока камней, который она превосходит. Таким образом, мамонт заполнит крохотный камень, если у игрока есть только такой (всё равно душа улетает), но крыса не осквернит собой великий камень. Кстати, для звезды Азуры это не годится.
Заменять нужно только нативную функцию Bool TrapSoul(). Но она не вешается на эффекты, а вызывается скриптами, которые вешаются туда. Т.е.
нужно заменять только её.
Цитата Multigone

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


Всегда об этом мечтал! (Ещё бы спутники руды добывали :) )
Кстати, а в каком состоянии твой мод на камни душ? Может, объединим усилия?

Myprism  Offline  Сообщение №1458 | Тема: Вопросы по скриптам Papyrus написано: 3 января 2020, 16:57


Физик


Multigone, ну, если реализовывать все твои задумки (их много), то это можешь сделать только ты сам. Я могу тогда предоставить тебе свои модели (они разные для пустых и полных душ). Могу даже сделать тебе специальные модели для частично заполненных камней душ. Это в случае, если тебе захочется вернуться к этому моду
Цитата Multigone

если принять уровни душ от мелкой до великой как 1-5, то объемы душ будут соответственно 1/2/4/8/12, исходя из даваемой ими энергии для чар, т.е., к примеру, для заполнения великого камня требуются 12 крохотных душ

Отлично! Это как раз то, что мне нужно знать. Ещё, чего мне не хватает, это знания, как определить размер души жертвы. Жертва в скрипте определена, но её душа должна зависеть от её уровня (вроде, это так в игре?). Большинство противников, это левельные игроки, уровень которых случаен и зависит от уровня игрока.
Сейчас у меня есть желание сделать самому этот скрипт, точнее, одну единственную функцию Bool TrapSoul(). Последние идеи такие:
1. Отказаться от частичного заполнения камней душ. Т.е. камни только пустые, либо полные. Инвентарь не будет перегружаться длиннющим списком разных камней душ с разным заполнением.
2. Заполняется в первую очередь самый большой из имеющихся у игрока камней и которому данной души достаточно для полного заполнения. Таким образом, частично заполненных камней не будет, а мелкие души не будут ловиться, если у игрока нет маленьких камней. Это лучше, чем потеря великого камня на крохотную душу. Заполнение великого 12 крохотными тоже не есть хорошо. Слишком легко.
3. Хочу сделать заполнение многих мелких камней одной большой душой, если у игрока нет больших душ. Алгоритм такой: проверка возможности заполнения начинается с листа, где, самые большие камни лежат в начале. После заполнения самого большого из доступных камней величина души жертвы уменьшается на количество души в этом камне и остаток проверяется на соответствие оставшимся у игрока камням душ для дальнейшего заполнения, пока остаток не станет меньше ёмкости крохотного камня.
4. Звезду Азуры надо просто ставить на проверку заполнения самой первой. Технически легко.

Myprism  Offline  Сообщение №1459 | Тема: Вопросы по скриптам Papyrus написано: 4 января 2020, 19:24 | Отредактировано: Multigone - 21 апреля 2020, 20:16


Физик


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

yakor77,
1. Существуют гораздо более простые способы сломать систему добычи душ. Например, просто сделать неисчезаемый полный камень душ :) Это я ещё в устройство станка не лазил, там, скорее всего, вообще можно отключить необходимость камней душ. Но это всё совершенно неважно. Главное, что это ломает ванильную систему баланса. Вот работаешь над модом, стараясь сохранить тот баланс, что создали разработчики, а тут появляется человек, которому эта система просто не нужна.
2. Довольно глупо сравнивать эту задачу с задачей решённой Григорием Перельманом.
3. Вы лжёте, утверждая, сто я сказал, что это невозможно. Перечитайте моё сообщение. Там первым пунктом утверждается обратное. А вот глупость содеянного мне по-прежнему очевидна.
4. 0 255 модах. Вы их что, объединять не умеете? :)

Myprism  Offline  Сообщение №1460 | Тема: Вопросы по скриптам Papyrus написано: 7 января 2020, 12:26 | Отредактировано: Myprism - 7 января 2020, 17:13


Физик


Multigone, Дело со скриптом хорошо пошло. Уткнулся как раз в то, о чём ты предупреждал - наложение сразу нескольких эффектов.
Зависимость заполнения камней от уровня убиваемой неписи аппроксимировал полиномом. Достаточно гладкий получился. Звёзды сделал с дозаполнением душами до верха. Разумеется, звёзды заполняются в первую очередь. Раз игрок звезду с собой таскает, значит, именно ей и хочет работать.
Прочие камни душ сделал с полным заполнением каждого камня, но если нет больших, то заполняются несколько мелких, если нет мелких, то души копятся (только если в инвентаре у игрока есть хоть один пустой камень), пока не заполнят самый маленький из имеющихся камней. Куча разных камней (а то и одинаковых, но не объединившихся) в инвентаре игрока ушла в прошлое.
В качестве потребителя душ поставил не заклинателя, а ГГ. В этом случае компаньон тоже может заполнять души в инвентаре ГГ.
И вот тут уткнулся в то, что на персонаже могут быть сразу 2 одинаковых заклинания. Если быстро стрелять по мамонтам, то выбиваются две великие души из каждого мамонта :) А подруга с зачарованным мечом выбивает из саблезубов двойное количество камней душ, причём такое, какое при моём алгоритме заполнения невозможно, например 3 крохотных (должно получиться 1 маленький и 1 крохотный). Выходит, что при смерти персонажа завершаются сразу несколько заклятий (два, как минимум) и выполняются скрипты обоих. Как ты это разрулил? Мне пока не приходят в голову достаточно красивые решения. Самое простое - прекращать предыдущее заклятие, накладывая новое, но тогда новое с коротким временем (от меча) может заменять длинное от лука, что не есть хорошо. Можно не накладывать новое, пока не закончилось старое. Это приемлемо, когда непись валит один человек, но не очень хорошо, когда двое и зачарованное оружие только у одного из них.

Добавлено (07 Января 2020, 20:11)
---------------------------------------------
Ну, как первый блин, работает такая конструкция:
Код
ScriptName magicSoulTrapFXScript extends ActiveMagicEffect

Event OnEffectStart(Actor Target, Actor Caster)
While target.HasMagicEffect(Self.GetBaseObject())
    Dispel()
endWhile
.............................
По крайней мере, удвоения камней нет, если валить неписей совместно с напарницей и оба зачарованным на отъём душ оружием. Вроде, адекватно получается. Можно чего-нибудь лучше придумать?

Myprism  Offline  Сообщение №1461 | Тема: Вопросы по скриптам Papyrus написано: 8 января 2020, 05:49 | Отредактировано: Myprism - 8 января 2020, 06:39


Физик


Цитата Multigone

Зависимость заполнения камней от уровня убиваемой неписи аппроксимировал полиномом.

Мы можем посмотреть уровень души каждого персонажа, но только ванильных, а есть ещё и модовые. Кроме того, уровень встречающихся игроку персонажей зависит от уровня игрока. Во-первых, это реализуется уровневыми персонажами, во-вторых в игре могут быть и другие модификаторы уровня, которых мы и не знаем. Уровень жертвы всегда можно посмотреть
Код
Target.GetLevel()
Но уровень энергии в камне душ нелинейно зависит от уровня жертвы:
уровень НПС - заряд камня душ
до 4             - 250
до 16           - 500
до 28           - 1000
до 38           - 2000
свыше 38     - 3000
Вот эти цифры, это то, что мы знаем точно. Но ведь нужно определять количество души во всех персонажах, в том числе и у персонажей с уровнями 1, 2, 3 или 32. Я просто провёл через точки ( уровни 0, 4, 16, 28, 38) параболу четвёртой степени и получил все промежуточные уровни душ. Конкретно у меня: 3,37*x - 0,25*x*x + 0,0086*x*x*x - 0,000075*x*x*x*x. Таким образом, я получаю величину пропорциональную заряду камней душ, а именно: 0, 10, 20, 40, 80 для персонажей уровней 0, 4, 16, 28, 38. Ну и эта функция даёт мне также все промежуточные значения.
Большое спасибо за подробное объяснение работы заклинаний. В этом я слаб.

yakor77, по сути я это и реализовал - долг игре игроку за недозагруженные в камни души. Ввёл глобальную переменную, в которой хранится долг по душам. При каждом новом поглощении душ этот долг добавляется к поглощаемой душе, сумма распределяется по имеющимся у игрока камням, остаток сохраняется в эту глобальную переменную до следующего поглощения. Остаток может быть большим, если у игрока нет мелких камней душ.
Но тут есть подводные камни. Если у игрока вообще нет пустых камней душ, то остаток у меня обнуляется. Иначе игрок будет ходить и собирать души в долг, совсем не имея камней душ, чтобы гораздо позже залить эти души в камни, которые он найдёт потом. Правда, остаётся у меня одна лазейка (пока не закрыл): если у игрока есть хотя бы один пустой чёрный камень душ, он может накапливать у игры долг обычных душ.

To all, Как думаете, должна ли чёрная звезда заполняться обычными душами? Из игровых диалогов следует, что - нет. Но из многочисленных обзоров следует, что заполняется. Так же из обзоров следует, что простыми душами заполняются и чёрные камни, если у игрока нет пустых обычных камней (это я уже запретил).

Myprism  Offline  Сообщение №1462 | Тема: Вопросы по скриптам Papyrus написано: 8 января 2020, 12:40


Физик


Multigone, уровень персонажа читается в игре. Но это не даёт ответа, сколько у него души, если он только не имеет уровень 4, 16, 28, 38. А мне нужно определять для всех. Ты совершенно правильно предложил аппроксимировать ломаной. Такой вариант тоже годится. Я не принял его для себя из-за перфекционизма :) Во-первых, мне хотелось иметь гладкую функцию, во-вторых хотелось избежать некрасивых неравенств определяющих интервалы, на которых проводится линейная интерполяция и определения коэффициентов для четырёх интерполирующих прямых. На самом деле, первым вариантом у меня была линейная интерполяция до уровня 24 и обычная парабола выше. Текущие Коэффициенты определил программой Origin. Это очень продвинутая рисовалка для научных графиков и я пользовался ею ещё очень давно и она позволяет проводить полиномы через набор точек.

У меня есть только один аргумент в пользу захвата чёрной звездой обычных душ: я уже сделал модели для её частичного заполнения :)

Myprism  Offline  Сообщение №1463 | Тема: Вопросы по скриптам Papyrus написано: 8 января 2020, 14:54 | Отредактировано: Multigone - 21 апреля 2020, 20:10


Физик


Multigone,
Код
SoulSize = Target.GetLevel()    
SoulSize = (SoulSize*(3.37 + SoulSize*(-0.25 + SoulSize*(0.0086 - 0.000075*SoulSize)))) as Int
По-моему, красивее.

Multigone, кстати, о совместимости. Существует ли способ вызова функции из второго скрипта, не заполняя второй скрипт в свойствах первого? Смысл вот в чём. Мне нужно подменить нативную функцию Bool Caster.TrapSoul(Actor victim) на функцию (аналогичную) из своего скрипта. Ванильная функция стоит в ванильном скрипте, который используется в пяти объектах. Если я поменяю один только скрипт, не добавляя ему внешних переменных, то я оставлю эти 5 объектов девственно чистыми. А если я ещё каким способом подменю эту функцию за пределами скрипта, то и сам скрипт оставлю чистым.

Myprism  Offline  Сообщение №1464 | Тема: Вопросы по скриптам Papyrus написано: 9 января 2020, 00:55 | Отредактировано: Myprism - 9 января 2020, 02:01


Физик


Multigone, просто это желание ограничить вносимые изменения только крайне необходимыми. В данном случае, всё, что я хочу изменить, это работу функции SoulTrap. Так как она нативная, то изменить её саму я не могу, зато могу постараться перехватить её как можно ближе к ней самой.

Огромное спасибо за код вызова другого скрипта!
Работает! Таким образом, у меня из мода улетели 5 магических эффектов. Мой мод больше не затрагивает магические эффекты совсем, только в их скрипте подменяется всего одна функция.
Ведь так же можно обращаться по ID к другим объектам других модов...

Myprism  Offline  Сообщение №1465 | Тема: Вопросы по Creation Kit (продолжение старой темы) написано: 14 января 2020, 12:45


Физик


UnlimitedCloud, TES5Edit :)

Myprism  Offline  Сообщение №1466 | Тема: Вопросы по текстурированию написано: 22 января 2020, 05:44


Физик


dionisiy333, как правильно заметил Lexo, в редакторе этого сделать нельзя.
Можно сделать полупрозрачность в модели. В НИФ-файле в BSLightingShaderProperty параметр Alpha от 0 до 1 задаёт непрозрачность. По умолчанию стоит 1, при 0 будет полная прозрачность, т.е. невидимость. Работает грубо, нигде не используется.
Можно сделать прозрачность текстурами. так в игре сделана вся броня. Для этого текстуре кроме трёх цветовых каналов добавляется канал альфа. В нём всё прозрачное красится чёрным, непрозрачное - белым, полупрозрачное - серым соответствующей темноты. Но одним редактирование текстуры тут не обойтись. Чтобы она заработала, надо в модели добавлять NiAlphaProperty с соответствующими настройками. Лучше посмотреть как это сделано в одёжке, где это Property используется.
Можно сделать и стекло с "преломлением". Преломление там фальшивое (имитация) но выглядит красиво. Так делают модовую стеклянную броню и оружие. Там добавляется отдельная модель отвечающая за преломление и ей вместо диффузной текстуры ставится карта нормалей. Тонкостей много, объяснять долго.
Самая большая проблема заключается в том, что если мы делаем объект прозрачным, то должны побеспокоиться, что увидит игрок за прозрачной моделью. Большинстов моделей Скайрима не готовы становиться прозрачными :) , так как игрок увидит там фигню, которую ему видеть не следовало :) В частности, купола используют в интерьерах, где неба нет вообще. Можно поставить, но это будет суррогатное небо без атмосферных явлений. Дождь в интерьерах не идёт.

Myprism  Offline  Сообщение №1467 | Тема: Вопросы по Creation Kit (продолжение старой темы) написано: 22 января 2020, 05:47


Физик


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

Myprism  Offline  Сообщение №1468 | Тема: Вопросы по Creation Kit (продолжение старой темы) написано: 23 января 2020, 09:20


Физик


Gigazold, про МО ничего сказать не могу, так как я им вообще никогда не пользовался. Creation Kit тоже ничего ни о каких МО не знает. Так что, этот вопрос к авторам МО.

Myprism  Offline  Сообщение №1469 | Тема: Вопросы по Creation Kit (продолжение старой темы) написано: 24 января 2020, 03:46


Физик


Miranda_Kusland, я тоже очень хотел бы иметь такую.

Myprism  Offline  Сообщение №1470 | Тема: Вопросы по Creation Kit (продолжение старой темы) написано: 25 января 2020, 03:36


Физик


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

Форум » Записи участника [Myprism]
Поиск:





Ответ на жалобу смотрите в разделе жалоб