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

Takirell

Модмейкер
  • Постов

    928
  • Зарегистрирован

  • Посещение

Весь контент Takirell

  1. Takirell

    Лилит Мерунес

    Приветствую. Творческий кризис, нехватка времени, осень и чудовищные наплывы лени мешают мне нормально продолжать работу. С 9 числа выхожу в отпуск, дело двинется с мертвой точки. Новые видео есть, но выкладывать их не буду, поскольку они спойлерят некоторые моменты, которые желательно видеть в живую.
  2. Ждем "новый" движок компаньонов, любезно извлеченный из AFT, UFO и так далее. А че нет то?
  3. Бласко, братишка, ты выжил <3
  4. Takirell

    "Dead Lands" - Reaper Companion (WIP)

    Что за ведьмин трон? :D
  5. Takirell

    "Dead Lands" - Reaper Companion (WIP)

    © Laion, Takirell (SRxSINEDPro).

  6. Если создаешь собственный скелет, то будь готов пройти в Gameplay - Idle Anims и увидеть, что там появилась новая директория с твоим новым скелетом. Если в неё не вписать все анимации сна, сидения, принятия пищи, активации предметов\сундуков, вставание из нокаута\нокдауна и так далее, то на выходе будешь иметь багованные анимации взаимодействий с предметами\объектами (или их полное отсутствие), что приведет к невыполнению некоторых пакетов. Ну и все в этом духе. Самое смешное, что все анимашки нужно прописывать вручную в точности, как это есть в оригинальном скелете Облы. Копировать их из оригинала НЕВОЗМОЖНО. Никак. Совсем. Даже через TES4Edit. Я серьезно. Поверьте мне, занятие это очень геморройное.
  7. Эм... Вы вообще что делаете? Все НПС создаются с уже имеющихся, задавая им уникальный ID. Никаких проблем с анимациями там быть не может, даже при условии нераспакованных BSA архивов. Весь фейсген настраивается во вкладке Face. В КС этим заниматься тяжело, посему лучше создать нужного актера в игре (как своего персонажа) и уже потом, с помощью Wrye Bash, портануть из сейва лицо в плагин.
  8. Takirell

    Это не для PC - это для Xbox!

    4й фрейм, чужой такой: "ПАААП! НУ Я ХОЧУ ПОИГРАТЬ!"
  9. Takirell

    Companion Margarett Lena

    1). Заспавнить перед собой, используя функцию: Player.PlaceAtMe 0002FB2B, 1. Затем попытаться с ним поговорить. После разговора, открыть консоль, щелкнуть на него мышкой и ввести SetRefEssential 0, а затем Kill. Вуаля. Труп пропадет сам, через какое-то время. Даже если квест не обновиться и нужных диалогов не будет, все равно убить необходимо... или загрузиться на более ранний сейв, до того, как Филида был заспавнен консолью 2). Вызвать функцию Prid 00015EB0, затем Resurrect, затем 00015EB0.MoveTo Player (или наоборот - Player.MoveTo 00015EB0). А вообще - это косяк автора, раз он не предусмотрел вариант, что Филида может быть мертв. В таких случаях обычно либо клонируют НПС, либо при запуске квеста воскрешают (что в данном случае было бы... странно). Ну или просто отказываются от идеи использовать именного этого актера.
  10. Takirell

    Лилит Мерунес

    С данным багом я лично не встречался. Могу предположить, что это из-за Deadly Reflex, ибо в оригинальном Обливионе я не испытывал таких проблем. Так или иначе, я уже переделал систему воскрешений более, чем полностью. Она сильно отличается от стандартной, ибо последний удар (который является для игрока фатальным), будет ловиться специальной функцией. Короче говоря - вы умрете визуально, но по факту - нет. Так же я знаю, что после воскрешения, некоторые навыки и знаки рождения сбрасываются. Такого тоже не будет в новой системе. Спасибо за отзыв)
  11. Takirell

    Лилит Мерунес

    Я вообще не знаю, как подобная система воскрешения будет работать с Deadly Reflex. Мод этот, довольно "грязный", потому ставить я его себе не горю желанием. С воскрешениями проблем не видел, да и квалификацию она вряд ли может терять, поскольку скрипт один и тот же. Баг не пропадает после перезагрузки игры?
  12. 1). Я точно не понял сам, как и почему это срабатывает, но почему-то именно в OnAdd есть такая проблема с условием-ограничителем. Нужно тестить дополнительно. Лично я больше не добавляю DoOnce в OnAdd, если знаю, что предмет будет в какой-то момент добавлен игроку не один раз. 2). А как кол-во предмета может быть дробным? Значение - да, но кол-во уж точно нет. А людям с "того сайта, на котором советовали компенсировать отсутствие собственного AV фракциями", я бы сам посоветовал "учить матчасть", поскольку функция SetFactionRank изменяет БАЗОВЫЙ объект точно также, как и SetAV со всеми вытекающими. Это даже не костыль, а инвалидное кресло.
  13. 1). Случается. Заспавненные актеры в мире хоть и имеют динамический ID (начинается на fff), тем не менее - они все имеют базовый объект. Но не все функции меняют базовый объект. Нужно внимательно читать их описание. 2). OnAdd срабатывает и на игроке постоянно, если в этом блоке нет условий-ограничителей, на примере того, что я писал выше. 3). Ммм... теоретически, в токене можно задать Float переменные (или любые другие), которые бы обновлялись каждый фрейм из квеста в GameMode, и уже от них менять значение в самом токене. Почему бы и нет? И зачем спавнить тонну токенов? Вы всегда можете задать конкретному токену цену, и по ней ориентироваться дальше. Easy (правда вновь встает вопрос о базовых объектах). 4). Да, верно. Но даже так, элементы инвентаря обрабатываются иначе + удаление этого же предмета можно осуществить через RemoveItem. Функция найдет копию этого объекта и выпилит её. 5). Боксы лучше всего ограничивать переменными. А лучше всего, используйте PrintToConsole иди DebugPrint, правда последнее пашет только в режиме отладки Облы. На счет потери производительности - не уверен, что все будет НАСТОЛЬКО плохо. В Обле есть 3 степени обработки AI. Низкий, средний и высокий. Как правило, большинство НПС имеют флаг "No Low Level Processing", означает это, что все НПС, которые находятся в других локациях от игрока, тупо не обрабатываются. А что это значит? Верно. Ваши токены тоже не будут обрабатываться. Исключениями являются НПС с отсутствием этого флага и те, у которых установлен Quest Item. Делайте выводы.
  14. Я бы хотел взглянуть на систему удаление токенов у всех актеров, кроме текущего. Вообще, Вы можете убрать токен с помощью консоли, достаточно узнать его FormID. Узнаете ID, щелкаете мышкой в консоли по НПС, и вводите RemoveItem <ID> 999. Проблема решена. И что вообще за мод такой?
  15. Любой объект, вынесенный в мир, представляет из себя копию (Ref ссылку) своего базового объекта. Функции AddSpell\AddSpellNS, SetAV, оказывают влияние на БАЗОВЫЙ объект. Т.е если взять FormID Гоблина, и вынести таких Гоблинов 4 штуки в мир (или разместить через PlaceAtMe), после чего зайти в игру и в консоли прописать ОДНОМУ ИЗ НИХ SetAV Health 1000, то помимо того, кому мы прописали 1к ХП, у всех остальных, имеющих тот же самый базовый объект, станет такое же кол-во здоровья. С токенами все не на столько плохо, но в OSFM написано, что при добавлении предмета с помощью AddItem\AddItemNS, блок OnAdd, якобы, не обрабатывается, поскольку предмет генерируется внутри инвентаря актера. Могу лишь сказать - вранье и провокация. Блок обрабатывается отлично, правда вот, если в нем стоят условия вот такого типа; Short DoOnce Begin OnAdd if DoOnce == 0 ;Здесь Мы что-то делаем Let DoOnce := 1 Endif End мы натыкаемся на то, что после удаления этого токена и добавления нового, точно такого же (не обязательно сразу), скрипт посылает нас лесом и не срабатывает. Такой баг встречается только в случае, если получатель токена - игрок. Единственно, чего Вы не сможете сделать, это напрямую вносить значение переменных в токен извне, впрочем, как и с заклинаниями. Локальные переменные сохраняются в игровой сессии (и даже после перезагрузки игры), единственным условием является то, что необходимо делать сохранения (после выпитого зелья, например). Ну это логично. Простой пример - это создание токена с таймером. В блоке OnAdd инициализируем получателя, задаем кол-во секунд и запускаем таймер уже в GameMode. Например мы хотим, что бы получателя убивало спустя 3 секунды. Даем токен, делаем сохранение и ждем. Через 3 секунды цель откидывается. Ради интереса, загружаемся на сделанное сохранение - цель так же откинется, спустя 3 секунды. Тоже самое будет если мы выйдем из игры и зайдем в неё снова, загрузившись на сделанный сейв. Стоит помнить, что некоторые OBSE функции не записывают изменения в сохранки, и здесь, для их возврата, необходимо использовать связку: if GetGameLoaded || GetGameRestarted ​;Здесь Вы снова что-то возвращаете Endif И да, я видел мод, который позволяет игроку вести дневник, записывая прямо в игре свой текст, который потом написан в книге. Используя эффекты, я имел ввиду, что есть практика использования скриптовых заклинаний, которые работают подобно токенам, но имеют килотонну затупов и багов. Особенно бесит принцип обработки блоков в таких заклинаниях. Ну, не о том речь. А на счет того OBSE плагина я ничего не смогу сказать, поскольку, как уже писал, разобраться в нем не смог... ну и не захотел.
  16. Конечно. Кто Вам вообще сказал, что локальные переменные не сохраняются? Я все недоумеваю. Пока токен лежит в инвентаре у актера, он продолжает выполняться как будто находится на объекте. Правда вот, если по какой-то причине предмет будет удален\утерян, само собой, все сбросится и прервется, поскольку скрипт обрабатывается на копии токена, а не на его базовом объекте. Базовый объект будет всегда возвращать нулевые значения. Но даже тут есть некоторые тонкости... Получателя токена считывать необходимо через GetContainer. Получаем Ref актера и работаем с ним. А вообще, есть OBSE плагин "Add Actor Values". Возможно это именно то, что Вам так не хватает. Я не вкурил как работает этот мод, да и надобности особой не было. Единственно, я бы не советовал использовать маг. эффекты. С ними в Обле полная дичь, однако были ситуации, что кроме них мне ничто не могло помочь.
  17. Токены - это заскриптованные предметы (как правило эти предметы - неиграбельные пустышки и делаются из одежды\брони или прочих предметов), которые добавляются игроку\актеру и выполняют скрипт, после чего "самоуничтожаются" с помощью RemoveMe. Это позволяет сэкономить ресурсы игры и не обрабатывать скрипт просто так, пока Вам это не нужно. Ну а DLL файлы - это уже программирование. Эти вещи пишут забугровые авторы и тру проггеры, ибо наши только и умеют, что создавать порно-баннеры пока что не освоили это... искусство. Да, верно, .01 это тоже самое, что и 0.01.
  18. Я пробовал ловить на интервале .01 (именно так пишется это значение) в скрипте с ловлей клавиши. Работало всегда. Старайтесь использовать токены, они лучше всего работают. Функции иногда ведут себя крайне странно при их вызове... Или не работают вообще. А так - да, под фиксацию кнопок, кроме как через квест, больше ничего придумать невозможно. Ну или пишите DLL плагин, он обрабатывается игрой... очень быстро. Я бы сказал - запредельно быстро. Как я уже сказал, небольшие скрипты с таким интервалом не должны сильно сожрать ФПС.
  19. Да, функция работает несколько. кхм, странно. Скорее всего идет ориентирование на глобальное освещение. Знаю только, что функция хорошо реагирует на источники света или их отсутствие в той или иной ячейке. Значение ниже 20 — темнота (по мнению игры).   В смысле 10% шанс? Не знаю, как в Скайриме, но в Обле скрипты работают намноооого шустрее. Есть 60 кадров в секунду. Иными словами, в обычных условиях, в режиме GameMode, скрипт на объекте обрабатывается 60 раз в секунду. При ФПС больших\меньших значениях — соответственно. Это не для квестов. В оригинале квестовый скрипт обрабатывается 1 раз в 5 секунд. Что бы сделать его шустрее, мы используем fQuestDelayTime. ЖЕЛАТЕЛЬНО, в обычных квестах, делать интервал 1 сек., 0.5 сек. Максимум — 0,1 сек. Это предел, в противном случае (даже если у Вас мощный комп, у юзера-то он может быть совсем другой), начнутся заметные просадки ФПС. Возводя эту переменную в значение 0.01, 0.001 и так далее, мы заставляем скрипт, в ущерб производительности, обрабатываться 100 и 1000 раз в секунду. Этого делать ОЧЕНЬ, ОЧЕНЬ не желательно. Такого рода величины, обычно, используют в MenuMode, поскольку там ФПС, как правило, свыше 160–250. И что бы поймать нажатие клавиши, присваивают это значение. И все равно, даже имея такой огромный фреймрейт в меню моде, иногда заметны дикие фризы при работе с инвентарем. Тут все еще зависит от величины исполняемого (квестового скрипта). На самом деле, 1000 ФПС у Вас не будет. Никогда. Потому что движок игры — говна кусок очень плох в оптимизации. P.S Возможно, Вы уже все это знаете. Если да — простите за потраченное время… Другим, возможно, будет интересно. Так или иначе, написанное выше, не является 100% истиной, ибо где-то возможны огрехи и неточности (потому приветствую поправки). Но исходя из моего опыта, наблюдений и экспериментов, я пришел к этим выводам.
  20. 1). Старый унылый способ, при котором в мире размещается активатор, присваивается ему Ref, и в нужный момент с помощью связки "Ref.Disable, Ref.MoveTo PlayerRef, Ref.Enable, а только потом уже Ref.Cast VampireSpell PlayerRef (например)". Стоит также помнить, что мгновенный перенос активатора таким способом + каст умения - это высокий риск CTD. Поэтому необходимо после перемещения использовать Return, а уже потом кастовать спелл, дабы пропустить 1 кадр. Тоже самое можно делать и с активатором, размещенным с помощью PlaceAtMe, только здесь лучше всего его удалять связкой "Ref.Disable, Ref.DeleteReference". Дабы убрать заспавненный объект из игры. Вообще. 2). Ну, как бы, здесь уже все зависит от Вас, Ваших желаний и так далее. Это просто как вариант. Ночное зрение можно включать тем же квестом, и что бы проверить когда врубать - использовать функцию GetActorLightAmount.
  21. Ну, как вариант, можно ловить кнопку, перетаскивать активатор к игроку и кастовать на него эту способность. Можно сделать триггерно, т.е активироваться будут при получении урона и\или каких-то отдельных условий. Функция ловли клавиш - OnKeyDown. В документации к OBSE Вы можете узнать более подробно об этих функций.
×
×
  • Создать...