• Страница 1 из 2
  • 1
  • 2
  • »
Форум - gamer-mods » Модостроение » Модостроение по игре Skyrim SE-AE » ESL плагины (описание, преобразование, работа) (Подробно о плагинах типа ESL)
ESL плагины (описание, преобразование, работа)
06.03.2020 в 17:59:20, сообщение 1
Offline
Локализатор
На все руки мастер
827 постов
Тема посвящена сравнительно новому формату файлов плагинов Bethesda - ESL.

Введение

До определённого времени в игре The Elder Scrolls V: Skyrim Special Edition, как и в его предшественнике The Elder Scrolls V: Skyrim Legendary Edition существовало только два формата файлов плагинов Bethesda - это esm (elder scrolls master file), мастер-файл, и esp (elder scrolls plugin file), плагин-файл.
Начиная с патча 1.5.3 в Skyrim Special Edition была добавлена поддержка нового формата файлов плагинов, известных как esl (elder scrolls light plugin file).
Плагин-файл esl - это новый, облегчённый формат обычного плагин-файла, который впервые появился в ходе обновлений игры Fallout 4.
Внимание игроков и модмейкеров он привлёк тем, что позволяет обойти предел в 255 загружаемых плагинов.

Немного теории

Что-же такое предел 255, и откуда он взялся?
Как известно, все элементы, к которым происходит обращение в игре, имеют свои уникальные идентификаторы, называемые Form ID или просто ID.
ID представляет собой октет шестнадцатиричных цифр. Формат ID имеет следующий вид: ХХ00000. Здесь два левых разряда (ХХ) отведены для определения номера плагина в порядке загрузки в игру. Каждый разряд представлен шестнадцатиричной цифрой. Тогда, максимальное количество загружаемых плагинов определяется следующим образом:
162 = 256.
С учётом того, что плагин с номером 00 это сам Skyrim.esm, то получаем максимальное количество загружаемых плагинов модов:
 
256  -  Skyrim.esm = 255.

Вот так и получается лимит в 255 модов. (Учите математику, ребята      ).


Оставшиеся шесть разрядов октета отводятся уже под адресуемый элемент. Это его жёсткий идентификатор, который является уникальным для каждого элемента в пределах плагина. Таким образом, в пределах одного мода (плагина) может быть проадресовано  166 = 16777216 элементов.
 
Полный адрес элемента в игре состоит из номера плагина в порядке загрузки (ХХ), и шести разрядов октета идентификатора. Следовательно, изменяться в ID могут только два левых разряда, значение которых зависит от места плагина в плагин-листе, при загрузке игры.

Как-же плагин esl позволяет обойти предел 255?
Тут есть одна хитрость, которая заключается в особом формате Form ID в плагинах esl. Такой Form ID называется компактным (Compact Form ID). Особенности такого формата заключаются в том, что два левых разряда октета ID здесь имеют жёсткий номер - FE. Это значит, что все ID элементов в плагинах esl начинаются с FE. Например, FE001А45.
В таком формате ID есть и другая хитрость. Порядок загрузки плагина в игре определяется следующими  после FE тремя разрядами октета. А именно, как пример:
FE000А45 - первый esl в списке загрузки;
FE001А45 - второй esl;
FE002А45 - третий, и т. д.
Таким образом, максимальное количество загружаемых esl-файлов может быть 4096. Но на самом деле, загрузка такого количества файлов сопряжена с рядом трудностей, и, скорей всего, будет невозможна. Например, если плагины содержат 2048 записей типа ALCH, то таких плагинов можно загрузить не более 331, а если плагины содержат одну запись типа CELL и 2047 записей REFR, то уже можно будет загрузить 970 таких плагинов. Также накладываются ограничения дескриптора файла и длины ссылки.
Для непосредственной идентификации самих элементов в пределах плагина esl, отводятся оставшиеся три разряда. Это значит, что в плагинах esl может быть проадресовано 4096. Но это в теории. На практике этот диапазон ограничен от 800 до FFF, что позволяет адресовать лишь 2048 форм. (Для Fallout 4 начиная с версии 1.10.162 стало возможно использование 4096 в диапазоне от 000 до FFF - уточнение от wim95).

Специфические особенности esl-файлов

Формат esl-плагина разрабатывался прежде всего для Клуба творчества (Creation Club), а вовсе не для преодоления предела 255. В связи с этим, плагины esl имеют ряд специфических, и не всегда приятных, особенностей:
- они не могут напрямую редактироваться в Creation Kit (имеют атрибут "только для чтения");
- плагины, выпущенные  Creation Club, помечаются как мастер-файлы и всегда загружаются сразу после официальных мастер-файлов Bethesda в порядке, указанном в файле .ccc игры. Эти esl-файлы не могут быть деактивированы (уточнение от wim95);
- плагины, выпущенные независимыми модмейкерами помечаются так же, как обычные файлы esp, но они загружаются с мастер-файлами в порядке, указанном в plugins.txt. Такие esl-файлы необходимо активировать перед загрузкой игры;
- конвертировать обычные esp-плагины в esl в текущей игре не допускается, так как это может сломать сохранение;
- скрипты модов, содержащие функции прямого обращения к ID, например GetFormFromFile(), должны быть перекомпилированы, после преобразования мода в esl;
- для модов, преобразованных в esl-плагины скорей всего могут потребоваться патчи. Существующие патчеры не полностью поддерживают плагины esl, особенно те, в которых содержаться записи типа CELL, FACT, PACK, PERK, RACE, SCEN, WRLD. Верификацию таких плагинов придётся выполнять вручную в xEdit;
- esl-файлы, выпущенные независимыми модмейкерами не могут, а скорее - не должны, использовать в качестве мастер-файлов обычные esp-плагины. Дело в том, что из-за особенностей игрового движка Skyrim Special Edition v1.5.3, любые зависимости от esp-плагина как мастер-файла, не будут загружаться ДО загрузки дочернего esl-файла.

 Важно!
Чтобы избежать путаницы в дальнейшем, нужно чётко различать два понятия:
- файл имеющий флаг ESL и расширение .esl - называется esl-мастером, или лайт-мастером;
- файл имеющий флаг ESL и расширение .esp - называется esl-плагином, или лайт-плагином, или ESPFE.
В чём между ними разница будет пояснено в следующем примере преобразования esp-плагина в esl.

Преобразование esp-плагина в esl

Преобразовать esp-плагин в esl можно тремя способами - с помощью xEdit, в Creation Kit или с помощью Vortex.
Как преобразовывать esp-плагины в esl в Creation Kit описано здесь.
С помощью Vortex esp-плагины преобразовываются в лайт-плагины через вкладку "Plugins".
Ниже приведен порядок преобразования с помощью xEdit.
В качестве подопытного используем мод Лук Ренос от TarkArk (надеюсь, он на меня не обидится).
Итак, запускаем SSEEdit.exe, в окне отключаем все ненужные моды (правая кнопка мыши (ПКМ) --> Select None), выделяем наш плагин и открываем:



В загрузившемся окне видим привычный ID предмета, и незаполненную строчку Record Flags:



Далее, нажимаем ПКМ на строке плагина, и в выпадающем окне нажимаем Compact FormIDs for ESL.



Смотрим грозное предупреждение, дожидаемся активации зелёной кнопки со стрелкой и нажимаем.



Снова читаем предупреждения, что это может сломать текущее сохранение игры и т. д., и жмём YES.



Ждём завершения процесса, по окончании которого будет следующее сообщение:



Далее, переходим на вкладку File Header, выделяем строку Record Flags, нажимаем ПКМ, и в контекстном меню нажимаем Edit:



Появится такое окно:



В этом окне устанавливаете флаг ESL и нажимаете OK. Теперь в строке Record Flags появится запись ESL.



Закройте xEdit. Перед закрытием программа предложит сохранить изменённый файл. Обратите внимание - сохраняемый файл имеет прежнее расширение - .esp. Нажимаем ОК.



Для проверки, снова запустите xEdit, и откройте преобразованный файл. В нём проверьте ID, например, предмета - самого лука.
Как видите, при загрузке файл определяется как ESL, хотя расширение у него .esp.



Form ID предмета теперь имеет характерный для esl-файлов формат.



Таким образом, нами был получен лайт-плагин, или ESPFE, о котором упоминалось выше.
Для того, чтобы получить полноценный ESL, а точнее - лайт-мастер, достаточно просто заменить расширение в имени файла. В нашем случае, заменить SE_RenosBow_rus.esp на SE_RenosBow_rus.esl.
Теперь, после переименования расширения, посмотрим как он проявит себя в загрузчике. Для этого снова запускаем xEdit. В порядке загрузки, как видно на рисунке 13, SE_RenosBow_rus.esl переместился вверх, в сектор мастер-файлов.



Вот, собственно, и всё. Как видно, преобразование esp в esl не представляет собой особой сложности. Но учитывая особенности esl-файлов, вам самим нужно решать - стоит ли ради увеличения числа загружаемых модов проводить такие преобразования, или же уменьшать количество модов путём их объединения.
На этом пока всё.
07.03.2020 в 22:04:29, сообщение 2
Offline
Проверенный
Адепт
92 постов
Займусь гнусным критиканством, подчеркнуто специально

Цитата ąnizórđą ()
В таком формате ID есть и другая хитрость. Порядок загрузки плагина в игре определяется следующими после FE тремя разрядами октета.

Что ведет к лимиту в 4096 esl-плагинов

Цитата ąnizórđą ()
в плагинах esl может быть проадресовано 4096. Но это в теории. На практике этот диапазон ограничен от 800 до FFF, что позволяет адресовать лишь 2048 форм.

В ноябре 2019 с версии 1.10.162 Fallout 4 / Creation Kit: Fallout 4 (за Skyrim не следил, но уверен, тоже было) стало можно использовать все 4096 записей, с 000 до FFF. Версия плагинов поменялась с 0.95 на 1.00.

Цитата ąnizórđą ()
плагины esl являются порядконезависимыми в при загрузке в игре. Относительно друг-друга, esl-моды сортируются в алфавитном порядке


Неверно. Порядок загрузки официальных esl определен файлом Fallout4.ccc/Skyrim.ccc, лежит рядом с Fallout4.exe/Skyrim.exe
Порядок загрузки сторонних esl можно изменять через Plugins.txt.
08.03.2020 в 01:36:07, сообщение 3
Offline
Локализатор
На все руки мастер
827 постов
wim95, я ещё не всё написала, и не полностью отредактировала. Но за замечания и уточнения Вам спасибо! smile
Выражение "порядконезависимые" наверно не удачное. Имелось ввиду, что esl-файлы, не важно, из СС они или от сторонних модмейкеров, грузятся сразу после сектора мастеров. А это вызывает проблему при назначении обычного esp мастером по отношению к esl. Решением такой проблемы является гибрид ESPFE. Но о нём тоже будет написано позже.
17.03.2020 в 18:07:22, сообщение 4
Offline
Проверенный
Адепт
92 постов
У меня опять лишних 5 копеек.

Не рекомендую менять расширение с esP на esL. Достаточно оставить esP. Потому что:

1. Нужно обязательно перепроверять скрипты. Исходники редко выкладывают, а значит декомпилировать -> проверять -> компилировать (при необходимости). На слове скрипты у неопытных может произойти истерика. К удивлению даже опытные спотыкаются на слове декомпилировать.

2. Распаковывать и проверять BSA (BA2) архивы и пути в самом плагине для фиговин жестко привязанных к имени плагина. Например голоса (voice):
Fallout 4\Data\Sound\Voice\Fallout4.esm\Vault111Voice\000A6C07_1.fuz.

3. Усложниться разруливание конфликтов с другими модами. Если два esP можно было разрулить порядком загрузки. Грузить ModA.esP после ModB.esP.
Код
ModB.esP
ModA.esP

То с ModA.esL такой фокус не пройдет. Нужно клепать патч совместимости.
Код
ModA.esL
ModB.esP
ModC.esP


Ну и в общем
Перед тем как бросаться перенумеровывать Id-ы можно проверить а нужно ли это. Закопипастю сам себя:

Проверяйте плагины в FO4Edit-е перед конвертацией. Не меняйте расширение плагина. Достаточно добавить флаг ESL.

1. Запустить FO4Edit версии 4.x.x
2. Правой кнопкой на любом плагине, выбрать "Apply script..."
3. В открывшемся окошке выбрать скрипт "Find plugins which could be turned into ESL"
4. Нажать "OK"
5. Дождаться появления в логе надписи "[xx:xx] Done: Applying script "Find plugins which could be turned into ESL", Elapsed Time: xx:xx"
6. Начать читать лог
Плохие слова:
"Warning: Plugin has new CELL(s) which won't work when turned into ESL and overridden by other mods due to the game bug"
"Can be turned into ESL by compacting FormIDs first, then adding ESL flag in TES4 header"
Хорошие слова:
"Can be turned into ESL by adding ESL flag in TES4 header"
7. Для плагинов с хорошими словами и без плохих слов добавить флаг ESL в заголовке плагина
8. Закрыть FO4Edit. Сохранить плагин
9. Не менять расширение плагина
10. Профит

Пример лога

11.04.2020 в 00:15:56, сообщение 5
Offline
Проверенный
Ученик
24 постов
Выражаю особую благодарность Всем , кто взялся за эту статью , так как Вопрос о файлах ESP c пометкой ESL , был поднят мной. Все получилось очень информативно и понятно. Буду пробовать. По сути я и не собирался перегонять файлы в которых есть скрипты , но а вот для модов типа прически , броня простенькая , где только материалы меши и текстуры , этот вариант плагина может стать выходом.
08.05.2020 в 15:31:06, сообщение 6
Offline
Проверенный
Горожанин
17 постов
Интересуюсь:   максимальное количество загружаемых плагинов модов  для Fallout 4 такое же-255?
08.05.2020 в 16:47:09, сообщение 7
Offline
Локализатор
На все руки мастер
827 постов
Долговязый, да. Для обычных плагинов лимит 255
08.05.2020 в 16:50:04, сообщение 8
Offline
Проверенный
Горожанин
17 постов
Цитата ąnizórđą ()
Для обычных плагинов лимит 255
Спасибо! 
13.10.2020 в 00:42:49, сообщение 9
Offline
Проверенный
Горожанин
6 постов
Есть порядок преобразования мода, когда он есть в действующем сохранении? Конечно, если это простенькие моды без скриптов? Если я отключу мод, сохранюсь без него, то ЕСЛ-версия этого мода игру не сломает?
13.10.2020 в 09:56:37, сообщение 10
Offline
Локализатор
На все руки мастер
827 постов
EzicSky, если решили преобразовать esp в esl в процессе игры, то сохранение может сломаться. 
При преобразовании меняются ID.
Поэтому лучше отключить плагин, сделать чистое сохранение, и тогда потом уже подключать преобразованный esl.
Но это будет выглядеть так, словно вы этот мод подключили впервые.
Да, если в старом сохранении у Вас в инвентаре были какие-то предметы из этого мода, то перед созданием чистого сохранения следует от них избавиться (продать, выкинуть).
24.10.2020 в 18:08:59, сообщение 11
Online
Проверенный
Покоритель глубин
160 постов
Добрый день.  Друзья, создатели темы, спасибо вам за пошаговый мануал. Вопрос такой  (сорри за дилетантскую фрмулировку), если не переводить .есп полностью в .есЛ, а только ставить флаг, то ограничение размера мода в 4000 форм уже не обязательно соблюдать? Где и как вообще "увидеть" это количество форм, покажите на скриншоте, пожалуйста!
24.10.2020 в 18:29:18, сообщение 12
Offline
Локализатор
На все руки мастер
827 постов
Krendell, количество форм вычисляется.
Если в идентификаторе ID в обычном esp для адресации форм используется 6 шестнадцатеричных разрядов, то это будет 166 = 16777216. Вот столько форм в обычном плагине.
А в esl, и esp с флагом esl для адресации форм используется только 3 шестнадцатеричных разряда. А это значит 163 = 4096.
Вот и вся премудрость.
24.10.2020 в 19:07:24, сообщение 13
Online
Проверенный
Покоритель глубин
160 постов
Цитата ąnizórđą ()
А в esl, и esp с флагом esl для адресации форм используется только 3 шестнадцатеричных разряда. А это значит 163 = 4096.
Понял, значит, ограничение должно сохраняться, только для меня "форма" - опять осталась непонятной абстракцией. Но, вот, к примеру, мод для Ф4 - https://www.nexusmods.com/fallout4/mods/12104?tab=description . Вот, что я вижу в редакторе, как понять возможно его пометить флагом ЕСЛ?
24.10.2020 в 20:15:42, сообщение 14
Offline
Локализатор
На все руки мастер
827 постов
Krendell, а_а, нужно узнать сколько в плагине форм, чтобы не промахать?
Смотрите File Header/Number of Records. Это, грубо, и будет число форм.
24.10.2020 в 20:56:48, сообщение 15
Online
Проверенный
Покоритель глубин
160 постов
Цитата ąnizórđą ()
Смотрите File Header/Number of Records
ąnizórđą, большое спасибо за разъяснения!
Форум - gamer-mods » Модостроение » Модостроение по игре Skyrim SE-AE » ESL плагины (описание, преобразование, работа) (Подробно о плагинах типа ESL)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:
Gamer-mods.ru © 2012 - 2024. Все права защищены. Копирование материалов без указанной активной ссылки на данный сайт запрещено.