Своя кампания
- Продублируйте базовый ассет кампании (
QzCompanyDataAsset) в свой мод. Дайте ему собственный TagCompany.<Префикс>.<Имя>и объявите его в ini с вашими тегами. Никогда не используйтеCompany.Main.*: он зарезервирован для официальных кампаний. Заполните Title, Campaign Psevdonim (название в главном меню), Description, Logo (карточка кампании), Supported Sections (секции симптомов), Supported Blocks (базовые здания), Days и Priority. Проверьте, что Debug выключен, иначе кампания видна в Play In Editor, но не в игре. Endless Repeat Day можно редактировать, только когда включён Endless. - Продублируйте нужные ассеты дней (
QzDayDataAsset) и отредактируйте их модификаторы дня, например Give Tools, Add available symptom, Open symptoms, OpenFeatures, Set Symptom Weight, Weather, Override profiles и Add Money. Перечислите дни в поле Days кампании. - Выберите уровень. Задайте в Level Tag базовый уровень (например,
Level.Chicago) или положите свою карту вместе сQzLevelDataAsset(см. Карты). - По желанию: собственный
LossConditionsDataAsset(см. свои правила поражения); профили посетителей (QzNPCProfileDataAsset) с тегом вашей кампании; свои Blueprint-акторы, размещённые на вашей карте (см. Запуск своей логики). - Проверьте. Кампания появляется в списке кампаний автоматически. Тестируйте её в новом сейве.
- Сейвы. Сейв, сделанный в кампании мода, требует этот мод. Без него игра не загружает сейв и называет отсутствующий мод (начиная со следующего обновления игры). См. Моды и сохранения.
Рецепт: погода по дням
День может нести модификатор дня Weather (QzDayModifier_Weather). Добавьте его в QzDayDataAsset нужного дня. Он заменяет погоду этого дня на то, что вы опишете в его поле Environment:
- Start Time и End Time: диапазон игрового времени дня (по умолчанию 900 и 1700).
- Animate Time: двигается ли время суток в течение дня.
- Presets: список пресетов погоды. В каждой записи есть ассет Preset, Weight (чем больше, тем чаще выбирается), Duration Range (минимум и максимум, по умолчанию от 5 до 20: как долго держится эта погода) и Change Time (сколько длится переход).
Без этого модификатора день использует обычную погоду. Пресеты являются ассетами системы неба игры; в ките они лежат в UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets (например, Clear_Skies, Cloudy, Foggy, Rain).
Рецепт: свои правила поражения
У кампании может быть собственный LossConditionsDataAsset: список условий поражения. Создайте его в своём моде, добавьте условия и назначьте в поле Loss Conditions Asset (категория QZ Settings | Data) у актора Game Flow на вашей карте. Это работает со своей картой (см. Карты); базовый уровень использует базовый ассет. Проще всего начать с дубликата базового ассета: Data/DA_LossGameV2 или Data/DA_LossGame_Miami.
Встроенные условия:
- Money (
LossConditionMoney): поражение, когда деньги падают ниже Min Money. Check Reward Next Day сейчас ни на что не влияет. - NPC Kill (
LossConditionNPCKill): поражение после Kill Condition Count убитых посетителей. Каждая проверка этого условия засчитывает одно убийство. - NPC Dead Resource (
LossConditionNPCDeadResource): пока не реализовано и никогда не срабатывает, что бы ни стояло в Min Alive In Block Condition Count. - Kill Quest NPC (
LossConditionKillQuestNPC): поражение, когда квестовый NPC убит способом, заданным в Kill Reason.
У каждого условия также есть Enabled, Defeat Widget Class, название и сообщения поражения, картинка поражения и скорость игры на экране поражения. Условие без Defeat Widget Class никогда не завершает игру. Ненужные условия удалите или отключите.
У Loss Subsystem есть Blueprint-ноды Check All Conditions, Check Specific Condition и Get Specific Condition. Обе ноды Check проверяют условия и завершают игру, если какое-то выполнено; проверка условия NPC Kill к тому же засчитывает убийство. Не вызывайте их просто чтобы прочитать состояние. Возвращаемое значение true = поражения нет.