Modding:JSON-патчинг

From Vintage Story Wiki
This page is a translated version of the page Modding:JSON Patching and the translation is 100% complete.
Other languages:

Эта страница проверялась в последний раз для версии Vintage Story 1.15.


Vintage Story поставляется с мощной системой исправлений, которая позволяет выполнять точечные модификации активов в формате JSON. Это значительно улучшает совместимость модов, поскольку вам не нужно полностью заменять эти файлы и перезаписывать другие изменения мода в процессе. Кроме того, вы можете изменить несколько файлов одновременно.

Ниже приведено основное руководство, которое поможет вам понять, как работают исправления. Однако также доступен полный справочный документ. Чтобы облегчить установку исправлений в долгосрочной перспективе, вы также можете использовать ModMaker 3000™, инструмент командной строки, который поставляется вместе с самой игрой. Если вы изменяете ванильные ресурсы, вы можете запустить ModMaker 3000™, чтобы создать мод, состоящий из набора исправлений, основанных на изменениях, внесенных вами в ресурсы. Затем вы можете отменить или переустановить игру, чтобы вернуть исходные файлы.

Основы

Первое, что вам нужно сделать, это установить общий мод, как описано в вики. Эту информацию можно найти на странице упаковки мода. В этом примере домен — это имя вашего мода. Исправление считается модом контента, но если в вашем моде есть .dll или .cs, это мод кода. Патчи идут в assets/domain/patches.

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

[
	{ file: "", op: "", path: "", value: }
]
  • File - это место, где находится файл, который вы хотите изменить.
  • 'Op означает операцию, и это то, что вы хотите сделать. Допустимые операции: «добавить», «добавить», «удалить», «заменить», «переместить» и «копировать». .
  • Path - это место, где находится значение, которое вы хотите изменить в файле.
  • Value - это то, что вы хотите поместить в файл.

Теперь давайте приведем пример. Для этих примеров я буду изменять файл wolf-male.json, потому что он был первым, который я изменил, я хорошо с ним знаком, и он обеспечивает хорошую основу для примеров. В этом первом примере мы изменим урон волка.

Для файла,

file: "game:entities/land/wolf-male"

game: — это домен. В данном случае это домен vanilla VS. Обратите внимание, что это не то же самое, что папка мода; все три ванильные папки (Survival, Game и Creative) используют домен «game».

Вы также можете изменить домен, чтобы изменить моды других людей.

Если вы заглянете в папки с ванильной игрой, в активах вы найдете файл, который мы модифицируем, в разделе entities/land/wolf-male. Вот почему эта часть идет после домена.

Далее поставить,

op: "replace"

Поскольку волки уже наносят урон, мы просто хотим заменить значение урона.

Теперь о пути,

path: "/server/behaviors/5/aitasks/0/damage"

Это действительно сложная часть. В этих файлах JSON вы найдете такие метки, как сервер: и поведение:. Вы узнаете, что это метка, потому что за ней следует двоеточие. Двоеточие  :

Далее у нас есть массивы. Они начинаются и заканчиваются квадратными скобками. Квадратные скобки [ ]

Внутри этих квадратных скобок вы найдете разделы между фигурными скобками. Фигурные скобки { }

Эти разделы не имеют метки, поэтому они должны быть пронумерованы. Чтобы вычислить число, нужно считать, начиная с 0.

Теперь, чтобы сломать пример. Мы видим значение, которое хотим изменить, в строке 52. Чтобы добраться до него, мы проследим его до первой метки, которая называется «сервер». Оттуда следующая метка — поведение. Здесь мы замечаем квадратные скобки, значит, надо считать. В данном случае до 5. Далее идет метка aitasks, затем мы нажимаем больше квадратных скобок. Счет для этого равен 0, потому что это номер, с которого вы начинаете. Наконец мы добираемся до метки damage.

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

value: 6

Поскольку значение является числом, мы просто помещаем число. Если бы это был текст, значение было бы "6".

Расширенное исправление

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

[ 
	{ file: "game:entities/land/wolf-male", op: "replace", path: "/server/behaviors/4/aitasks/0/damage", value: 6},
	{ file: "game:entities/land/wolf-male", op: "add", path: "/drops/-", value: { 
		type: "item", 
		code: "stick", 
		quantity: { avg: 2, var: 1 } 
	} } 
]

Во втором примере мы сразу перейдем к пути. Вы заметите метку «drops», а затем тире. Dash -

Этот тире означает добавление в конец массива. Это полезно, потому что это предотвращает перезапись другого дропа, и мы можем не знать количество дропов, если другие моды также добавили дропы.

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


Отключение ассетов

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

[
	{ file: "game:entities/land/wolf-male", op: "add", path: "/enabled", value: "false"}
]

Это все, что вам нужно сделать. Если в файле уже есть включенная метка, нам нужно переключить операцию с добавления на замену.


Рекомендации по пути и имени файла

По умолчанию, когда вы создаете мод с помощью ModMaker 3000™, структура папок будет использовать 'game в качестве домена и использовать то же имя файла, что и ванильный файл JSON. Это может привести к конфликтам модов.

Давайте воспользуемся приведенными выше примерами с волками. Если вы запустите ModMaker после внесения этих изменений в wolf-male.json', полученный ZIP-файл будет содержать файл assets\game\patches\survival-entities-land-wolf-male.json. '. Кажется, это предполагает два соглашения, которые ожидает VS; что вы должны поместить патчи JSON в папку game и что вы должны сопоставить имя исходного файла, используя обозначение папки-дефис. Однако ни то, ни другое не соответствует действительности.

Скажем, вы разделили два разных изменения волка на два разных мода. Первый — «WolvesAreWimps», а второй — «WolvesDropSticks». ModMaker будет генерировать идентичные структуры папок и файлы для этих двух разных модов; то есть оба будут содержать файл assets\game\patches\survival-entities-land-wolf-male.json. Эти два мода не будут работать вместе, потому что у них конфликт имен файлов. (Последний в алфавитном порядке будет иметь приоритет: WolvesDropSticks.)

Во избежание возможных конфликтов модов не используйте папку game. Вместо этого используйте папку с тем же именем, что и ваш modid; то есть домен вашего мода. Таким образом, в этом примере у WolvesAreWimps.zip должны быть папки assets\wolvesarewimps\patches, а у WolvesDropSticks.zip должны быть папки assets\wolvesdropsticks\patches. Имена файлов также произвольны, вам не нужно использовать survival-entities-land-wolf-male.json и можете назвать файл как угодно, так как его содержимое указывает игре на то, что и как патчить , а не имя файла.

Проблема с перезаписью

Во избежание возможных конфликтов модов не используйте папку game. Вместо этого используйте папку с тем же именем, что и ваш modid; то есть домен вашего мода. Таким образом, в этом примере у WolvesAreWimps.zip должны быть папки assets\wolvesarewimps\patches, а у WolvesDropSticks.zip должны быть папки assets\wolvesdropsticks\patches. Имена файлов также произвольны, вам не нужно использовать survival-entities-land-wolf-male.json и вы можете назвать файл как угодно, так как его содержимое направляет игру на то, что и как патчить , а не имя файла.

Проблема с перезаписью

Патчи, которые создают, например. поведение или атрибуты (например, если у предмета его нет) будут перезаписаны патчами из других модов, которые делают то же самое, но с другим значением.

Например, этот патч будет перезаписан патчем из примера ниже, даже если используется операция «добавить»:

[
  {
    op: "add",
    path: "/behaviors",
    value: [{ "name": "SealPlacedCrock" }],
    file: "game:itemtypes/resource/fat.json"
  }
]
[
  {
    op: "add",
    path: "/behaviors",
    value: [{ "name": "Placeable" }],
    file: "game:itemtypes/resource/fat.json"
  }
]

Примечание : см. страницу Совместимость для возможных способов разрешения конфликтов и зависимостей между модами.


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

Icon Sign.png

Wondering where some links have gone?
The modding navbox is going through some changes! Check out Navigation Box Updates for more info and help finding specific pages.