XPath Тема объяснения моддинга

XPath Тема объяснения моддинга


XPath - это способ добавления, изменения или удаления строк и узлов XML без непосредственного редактирования файлов XML.

Это позволяет вам применять исправления к файлам XML без ручного редактирования обычных файлов XML.

SDX частично поддерживает это с момента своего первого выпуска, и многие SDX Modlets уже написаны таким образом.

Мы будем использовать некоторые из xpath SDX в качестве примеров в этой теме, но SDX не требуется для этого в A17 и далее.

Данная тема будет пополнятся со временем.

Следующая структура модов ожидается для A17 и последующих версий:

Mods/
   <ModName>/
       Config/
       UIAtlases/ItemIconAtlas/
       ModInfo.xml

   <ModName2>/
       Config/
       ModInfo.xml

Вы сможете загрузить несколько модов, и загрузка будет происходить, пока существует ModInfo.xml. Это не отличается от того, что мы делали с другими альфа-версиями, за исключением папки Config.

 Эта папка Config будет поддерживать загрузку файлов XML, написанных с использованием xpath, в следующей структуре папок:

Config/entityclasses.xml
Config/gamestages.xml
Config/items.xml

Файлы в папке Config не будут полной копией ванильного файла с вашими изменениями. Скорее, он будет содержать изменения, которые вы хотите внести в ванильные файлы. Файлы в разделе Config должны совпадать с обычным именем файла. Вы не можете создать файл entityclasses2.xml и ожидать, что он будет работать. Любые изменения в entityclasses.xml должны выполняться в том же файле. Однако у каждого мода может быть свой собственный entityclasses.xml.

Во время инициализации игры она выполняет слияние xpath только в памяти; на самом деле никакие файлы не будут изменены. Это позволит нам удалять моды, которые нам больше не нужны, без повторной проверки на Steam или предыдущие копии xml. Это большой вопрос. Больше никаких половинных слияний мода и того, что он не работает, а затем пытается вытащить его обратно.

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

Эти модлеты также могут существовать за пределами папки Data / Config, поэтому, если вы внесли прямые изменения XML в свои файлы Alpha 17.1 Data / Config, а Steam обновил игру до 17.2, вы потеряли бы свои изменения или вам пришлось бы заново - объединить их. Мы все были там раньше. Но если бы они существовали как модлеты в папке Mods, они были бы в безопасности. И пока ваш xpath по-прежнему действителен для нового XML, он должен загружаться без дополнительной работы с вашей стороны.

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


XPath Dissected

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

Посмотрим, сможем ли мы рассмотреть пример, объясняющий формат простого xpath. Для начала мы будем использовать команду xpath для set , которая позволяет нам изменять атрибут или значение. В другом посте будет показано больше команд xpath, но мы начнем с самых простых.

Все команды xpath принимают параметр xpath = "", который сообщает игре, где вы хотите внести изменения. Изменение - это либо изменение значения, либо удаление значения, либо добавление новой сущности, либо все, что вы пытаетесь сделать.

В этом примере мы хотим изменить размер контейнера минибайка.

<lootcontainers>
<!-- Other loot container lines -->
<!-- minibike storage -->
<lootcontainer id="62" count="0" size="4,3" sound_open="UseActions/open_shopping_basket" open_time="0" sound_close="UseActions/close_shopping_basket" loot_quality_template="baseTemplate">
</lootcontainer>
<!-- other loot container lines -->
</lootcontainers>

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

Когда мы хотим ссылаться на узлы XML в xpath, мы будем использовать разделитель /.

xpath="/lootcontainers/lootcontainer"

Дает нам хорошее представление . Однако существует много контейнеров с добычей, и мы хотим изменить только тот, с идентификатором 62. Идентификатор является атрибутом, поэтому нам нужно установить условие для проверки, чтобы убедиться, что атрибут соответствует 62.

xpath="/lootcontainers/lootcontainer[@id=62]

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

xpath="/lootcontainers/lootcontainer[@id=62]/@size"

дает нам прямой доступ к значению размера.

Итак, наша полная команда xpath будет выглядеть так:

 <set xpath="/lootcontainers/lootcontainer[@id='62']/@size">7,6</set>

64
10-10-2020, 00:45
+ Alpha 17

Этот сайт защищен reCAPTCHA и применяются Политика конфиденциальности и Условия использования Google.