.
Примеры сделок от библиотекаря, специализирующегося на зачарованиях максимального уровня, защиты и связанных с водой.
Переосмысление механики торговли с жителями, целью которого является избавление от больших торговых залов, заполненных жителями с преимущественно бесполезными сделками. Вместо этого модификация позволяет получить все необходимое от меньшего числа жителей, которые со временем могут стать специалистами через целенаправленную торговлю. Для достижения этого мод вносит два изменения:
- Жители выбирают свои сделки на основе предыдущих взаимодействий с игроком. Например, библиотекарь, у которого вы купили много книг с «Грабежом», с большей вероятностью будет предлагать зачарования для мечей и связанные с удачей в будущем.
- Жители меняют свои сделки каждый раз при пополнении запасов/каждый день (настраивается). Это устраняет необходимость разведения большого числа жителей в надежде, что они продадут нужное, и добавляет небольшой вызов торговой механике. Чем больше вы покупаете или продаете конкретный предмет, тем выше вероятность, что житель выберет эту сделку после пополнения запасов.
Дополнительно, этот мод позволяет добавлять или заменять сделки жителей через датапаки. В мультиплеере мод требуется только на сервере.
Примечание о модах, добавляющих сделки: Конфигурация по умолчанию генерируется автоматически с учетом всех сделок, добавленных другими модами, которые присутствовали бы без этого мода. Генератор старается создавать осмысленные ассоциации между сделками на основе материалов инструментов, названий зачарований и т.д. Для настройки этих сделок можно создать датапак с текущей конфигурацией, используя команду /dynamicvillagertrades export
. Некоторые сделки из модов не могут быть закодированы в датапаке (например, случайная карта из Supplementaries) и приводят к сбою экспорта для этой профессии, но эти сделки все равно добавляются во время выполнения, если профессия не заменяется датапаком целиком. В таких случаях дополнительные сделки можно настроить с помощью датапака, который не заменяет проблемную профессию.
Примечание о NeoForge 1.21: Для работы Fabric-версии с ним можно использовать Sinytra Connector.
Формат датапака
Примеры настроенных сделок можно посмотреть в сгенерированном ванильном датапаке. Каждый JSON-файл расширяет или заменяет (если replace установлен в true) сделки конкретной profession (профессии), которые указаны в словаре offers. Каждая запись в словаре представляет группу trades (сделок) и определяет min_trades и max_trades, которые могут быть выбраны из группы, а также опционально affinity (сродство) группы и randomness (случайность) внутри группы (меньшие значения указывают, что житель быстрее остановится на конкретных сделках). Если replace равен false, сделки будут добавлены к существующей группе с тем же именем, иначе группа заменяется целиком. Хотя имя группы (ключ) произвольно, оно влияет на порядок появления сделок в GUI, поэтому имена групп в датапаке по умолчанию начинаются с цифры (иначе порядок был бы алфавитным). Каждая запись в списке сделок указывает минимальный level (уровень), на котором сделка может быть выбрана (например, apprentice), тип offer (документирован в вики SJVT* для 1.18-1.20; для 1.21+ см. новый пример датапака), приращение attributes (атрибутов), которое сделка применяет к жителю при использовании, и опционально affinity. Атрибуты жителя представляют память о прошлых взаимодействиях с игроками и функционируют как под-профессия, придающая больший вес одним сделкам по сравнению с другими. Каждый атрибут состоит из произвольного имени (например, "luck") и числового значения, изначально равного 0. Значение корректируется каждый раз при использовании сделки с этим атрибутом (например, при покупке книги с «Грабежом» или «Удачей») на основе приращений "attributes", указанных в сделке (каждый житель обладает всеми атрибутами, упомянутыми в конфигурации). Сродство (affinity) сделки к каждому атрибуту определяет, как значение атрибута жителя влияет на вероятность выбора этой сделки. Если сродство не указано явно, оно автоматически рассчитывается из приращений атрибутов (большие приращения дают большее сродство). Чтобы сделка увеличивала атрибут без сродства к нему (или наоборот), можно указать и приращения атрибутов, и сродства сделки. Словарь affinity также может быть указан для группы сделок. Это означает, что сделки между разными группами не конкурируют напрямую: мод сначала выбирает группу на основе сродства, а затем сделку внутри группы. Это полезно, если число сделок в группах сильно различается, предотвращая более частый выбор больших групп только из-за их размера. Имеет смысл только если max_trades > min_trades.
Если конфигурация для определенной профессии (например, добавленной модом) отсутствует, мод автоматически сгенерирует ее во время выполнения. Сделки в этой конфигурации будут близки к ванильным, но предложения, не гарантированные в ваниле, получат уникальный атрибут и будут принадлежать группе со сделками того же уровня (житель специализируется на конкретных сделках, но только тех, для которых в ваниле ему обычно нужно было сделать выбор; сделки разных уровней не конкурируют).
* Этот мод добавляет два дополнительных типа предложений: enchant_specific_book и sell_specific_potion_holding_item.
Примечания по добавлению сделок с зачарованными книгами для профессии библиотекаря
Конфигурация библиотекаря по умолчанию генерируется во время выполнения и использует четыре идентичные группы для сделок с зачарованными книгами, различающиеся только выдаваемым опытом, чтобы сделки максимально соответствовали ванильным. Это означает, что если вы не хотите заменять профессию библиотекаря целиком, каждую новую сделку следует добавлять во все четыре группы. Для атрибутов рекомендуется использовать существующие (offense, defense, bow и т.д.), чтобы сохранить баланс весов сделок. При выборе атрибутов учитывайте:
- Сделки с чрезмерно схожим сродством могут помешать жителю специализироваться на нужных игроку сделках. Например, если добавить сделку со сродством к атрибутам "tool" и "fast", житель, специализирующийся на них, будет случайно переключаться между «Эффективностью» и новой книгой, независимо от того, сколько раз игрок купит ту или иную книгу. Это не всегда плохо, если игрок действительно хочет покупать эти книги у одного жителя, так как уменьшение размера торговых залов является одной из целей мода.
- Сделки со сродством, слишком отличным от большинства других сделок, также могут затруднить специализацию на них, потому что большую часть времени игрок будет получать сделки, не увеличивающие желаемые атрибуты. Например, если добавить две сделки с двумя новыми уникальными атрибутами, единственный способ заставить жителя специализироваться на этих книгах – покупать именно их. Однако из-за большого количества книг эти сделки изначально будут появляться редко, и игроку придется ждать многочисленных пополнений запасов в надежде, что одна из этих книг будет выбрана. Если бы атрибуты этих сделок были новым кастомным и "fire", игрок мог бы увеличить шанс появления этих книг, покупая книги вроде «Огненный аспект».
- Приращения атрибутов и сродство должны быть отрицательными только если книги действительно несовместимы с этими атрибутами. Например, если нужно сделать маловероятным появление вашей книги вместе с «Огненным аспектом» (возможно, потому что она связана с водой), можно установить "fire" в отрицательное значение. Чаще всего это плохая идея.
- Конфигурация по умолчанию использует 1 для приращения атрибута enchanter (предпочитает зачарованные книги другим сделкам), от -1 до 0.5 для low_level (предпочитает книги низкого уровня; уровень относителен к максимуму зачарования, поэтому Fire Aspect II и Efficiency V уменьшают его на 1, а Efficiency II увеличивают на 0.5), 1 для основной категории книги (armor, sword, tool, bow, fishing, trident, crossbow, all) и 1, разделенное между вторичными категориями (например, если книга принадлежит к "melee", "luck" и "resource", каждый атрибут увеличивается на 0.333). Старайтесь следовать этим правилам при добавлении сделок для сохранения баланса. Категории являются атрибутами, можно создавать новые, но это может затруднить получение ваших сделок.
Настройки
global_randomness (по умолчанию 1.0): Меньшие значения приводят к тому, что жители быстрее сосредотачиваются на подмножестве своих сделок, большие значения увеличивают время, необходимое для получения желаемых сделок. Умножается на случайность группы, указанную в датапаке.
refresh_delay (по умолчанию 0): Сколько раз житель должен пополнить запасы, прежде чем его сделки изменятся. Примечание: сделки всегда меняются при повышении уровня независимо от этого значения.
no_book_duplicates (по умолчанию true): Должен ли каждый библиотекарь не продавать одновременно книги с одним и тем же зачарованием (например, Защита III и Защита IV).
enchant_repair_compat (по умолчанию false): Добавляет «Проклятие исчезновения» к каждой книге, продаваемой библиотекарями (для совместимости с Enchant & Repair).