Перейти к основному содержимому

Что могут моды

ВозможностьДобавить новоеЗаменить существующее
Внешность посетителей (одежда, причёски, лица, тела)Да: дубликат, новое имя, Generate data key tag; попадает в пулы генератора, Selection Weight на ассетеДа: дубликат базового ассета сохраняет его Key Tag Data и заменяет его. См. Внешность посетителей
Скины персонала блокпоста—Да: QzStaticNPCSkinDataAsset на каждый тег NPC
СимптомыДа: автоматически включаются в пул дня (см. Симптомы)Да: тот же тег Symptom.* побеждает базовый
ИнструментыДа: автоматически выдаются игроку в начале дня (или выдавайте сами: класс Qz Tool Data Asset (Manual Grant))Да: тот же тег Tool.* побеждает базовый и выдаётся, когда кампания выдаёт базовый инструмент
КартыДа: положите карту и QzLevelDataAsset (тег Level.*, soft-ссылка на карту) и сошлитесь на этот тег из своей кампании—
КампанииДа: QzCompanyDataAsset + дни QzDayDataAsset; на своей карте или на базовом уровне (Level.Chicago, Level.Miami). См. Своя кампанияНе по ключу; сделайте копию под своим тегом Company.*
Профили NPC, багаж, контрабанда, справочникДа: подхватываются сканированием ассетовТолько контент с ключами
Свои GameplayTagsДа: Config\Tags\*.ini внутри мода—

Скины персонала блокпоста​

Создайте QzStaticNPCSkinDataAsset и задайте NPCTag одним из значений:

  • NPC.Skin.Doc
  • NPC.Skin.Usmon
  • NPC.Skin.UsmonWhite
  • NPC.Skin.Military (все солдаты)
  • NPC.Skin.Scientist (хирург в рентген-зоне)

По желанию задайте новый Mesh и переопределения материалов по слотам. Каждым тегом NPC.Skin.* может владеть только один мод: если два мода задают один тег, применяется только один из них, и какой именно — не определено. Скины персонала применяются в каждой кампании, включая официальные. Перед публикацией уберите тестовые скины. Сюжетные NPC (Шульц, Торрес, Майор, MrWhite) заменить нельзя. Пошаговый разбор — в туториале по скин-модам.

Внешность посетителей​

Внешность посетителей (одежда, причёски, лица, тела) собрана в пулы по ключам. Ключ — это поле ассета Key Tag Data; вписать его вручную в панели деталей нельзя.

  • Заменить базовую вещь: продублируйте базовый ассет в свой мод. Копия сохраняет базовый Key Tag Data и заменяет базовую вещь везде, включая восстановление сейвов. Любой ассет из мода с тем же ключом, что у базового ассета, заменяет его; поле Generator Data Source на это не влияет.

  • Добавить новую вещь:

    1. Продублируйте базовый ассет в свой мод и переименуйте его. Копия пока хранит в Key Tag Data базовый ключ.
    2. Сначала сохраните ассет. Кнопка Generate data key tag на несохранённом новом ассете ничего не делает.
    3. Нажмите Generate data key tag. Key Tag Data станет Generator.DataKey.<Layer>.<ИмяАссета>.
    4. Редактор записывает строку тега в QZSim\Config\Tags\Generator.ini самого кита, а не в ваш мод. Перенесите строку в Config\Tags\<ИмяМода>Tags.ini своего мода (шаблон: Свои GameplayTags) и удалите её из файла кита, затем сохраните. После этого Package Mods включит ini в мод.
    5. У продублированного базового ассета может быть включено Use Only Custom Profile. Снимите галочку, если вещь должна появляться у случайных посетителей.

    Новая вещь сама попадает в пул генерации; частоту появления задаёт её Selection Weight.

    Продублированный ассет шляпы, у которого в Key Tag Data всё ещё базовый ключ

    До: у дубликата всё ещё базовый ключ (...DA_Hats_Beer_helmet).

    Тот же ассет после нажатия Generate data key tag

    После: Key Tag Data = Generator.DataKey.Accessory.Hat.DA_Hats_MyFirstHat.

Для аксессуаров, которые спавнят актора (Blueprint QzNPCAttachment), задайте актору тег NPC.Accessory.*, объявленный в ini с вашими тегами. Без него предмет выбирается, но никогда не показывается.

Симптомы​

QzSymptomDataAsset со своим тегом (объявите тег в Config\Tags\<ИмяМода>Tags.ini вашего мода) автоматически включается в пул дня, если его список Levels не исключает уровень, и только если его Section входит в Supported Sections кампании. Тот же тег, что у базового симптома, означает, что ваша версия его заменяет. Blueprint способности, который работает на заражённых посетителях, задаётся в поле Symptom Custom Logic.

Инструменты​

QzToolDataAsset со своим тегом Tool.* и определением предмета автоматически выдаётся игроку в начале каждого дня и после этого попадает в сейв.

Тот же тег, что у базового инструмента, — это замена: она выдаётся, когда кампания выдаёт базовый инструмент (не в день 1).

Чтобы выдавать новый инструмент самостоятельно:

  1. Создайте дата-ассет класса Qz Tool Data Asset (Manual Grant) (Data Asset → выберите этот класс; Tag и Item Data Asset задайте как обычно).
  2. Вызовите Get Game Flow → Add Tools из собственного Blueprint (например, из чего-то на уровне вашего мода или из предмета, найденного при досмотре). Нода принимает массив тегов: передайте ваш тег Tool.* через Make Array.

Инструмент сохраняется и остаётся на следующие дни. Инструменты Manual Grant обычно выдаёт ваша собственная кампания модификатором дня Give Tools. Мод не может редактировать уровни базовой игры. Ваши собственные карты могут содержать любых акторов. Чтобы запускать свою логику в базовых кампаниях, игра должна создать объект из ваших данных, например способность симптома, инструмент, аксессуар посетителя или скин персонала блокпоста (см. Запуск своей логики). Инструмент, уже автоматически выданный в кампании, остаётся в этом сейве, поэтому Manual Grant проверяйте в новой кампании.

Карты​

Положите карту в мод вместе с QzLevelDataAsset (тег Level.* и soft-ссылка Level) и сошлитесь на тег из QzCompanyDataAsset своей кампании. Проще всего начать с дубликата базового геймплейного уровня в вашем моде: в нём должны остаться геймплейные акторы (game flow, менеджер NPC, точки досмотра, точки спавна очереди, кровать). Затем замените окружение, например подуровнями.

Запуск своей логики​

Моды используют Blueprints. Ваш код запускается, когда игра создаёт объект из ваших данных:

  • Blueprint способности симптома (Symptom Custom Logic; работает на заражённых посетителях);
  • актор инструмента (когда игрок берёт его в руки);
  • актор аксессуара посетителя;
  • акторы, размещённые на вашей карте;
  • Post Process Anim Blueprint меша скина персонала блокпоста (работает везде, где появляется этот NPC; пусть граф анимации передаёт входную позу на выход, и спавните не более одного актора-менеджера).

Ввод​

Добавьте свои Input Action и Input Mapping Context и вызовите Add Mapping Context из вашего актора. Выберите клавишу, которую игра не использует (например, T). Не переназначайте E и другие клавиши игры.

Чтение состояния игры​

  • Посетители: Get NPC Data BP, Get State, Get Final Goal.
  • Фокус игрока: Get Actor In Focus.
  • Сейв и день: Get Gameplay Save Object -> Get Current Day, Get Game Flow.

Интерактивные объекты​

Используйте компоненты взаимодействия игры (Focus, Context Actions, Ability Set / Gameplay Ability) или делайте дочерние Blueprints базовых объектов (кровать, кот, автоматические двери). Дочерние Blueprints базового контента могут сломаться при изменении базового Blueprint.

Свои GameplayTags​

Кладите их в Config\Tags\*.ini внутри мода (загружается каждый .ini в этой папке). Они регистрируются автоматически при монтировании и автоматически попадают в упаковку Package Mods. Пример Config\Tags\<ИмяМода>Tags.ini:

[/Script/GameplayTags.GameplayTagsList]
GameplayTagList=(Tag="Symptom.MyMod.GreenSkin",DevComment="")

Что нельзя менять​

Сюжетных NPC (Шульц, Торрес, Майор, MrWhite) нельзя ни переодеть, ни заменить. Ваши Blueprints по-прежнему могут читать их данные, а ваша собственная кампания может переиспользовать базовые сюжетные дни и квесты.

UI: мод может добавлять свои виджеты и, внутри своей кампании, использовать свой Player Controller и реестр виджетов. Изменение виджетов базовой игры в рантайме возможно, но не поддерживается: оно может сломаться с любым обновлением игры.