Как сделать зомби режим?

Как сделать зомби режим пока не пропал?

1 лайк

Разместить некоторые объекты:

  • zombie_spawn_mode - Включает режим и поведение ИИ, где он ищет и бежит к целям. Кроме этого содержит пару настроек режима и волн. Свойства:

    • entity_spawner__waves = Количество волн и их наполнение.
    • entity_spawner__winOnWave = Финальная волна.
    • entity_spawner__nextWavePeriod = Время перерыва между волнами.
    • entity_spawner__maxWaveTimeAfterLastSpawned = Время до следующей волне, если игроки не завершили волну, а все противники уже появились на поле боя.
    • entity_spawner__genericWavesRepeat = Вероятно отвечает за повторение волн. Добавление врагов к текущей волне.
    • entity_spawner__nextWavePoints = Награда за выживание волны. В виде Х количества очков всем игрокам.
    • entity_spawner__aliveZombiesLimit = Максимальный лимит противников. Лучше сильно не редактировать.
  • zombie_spawn_zone = Точка появления для зомби.

  • zombie_tank_spawn_zone = Точка появления для танка. Стоит разместить так же…

    • custom_ai_tank_objective_position = Точка назначения для техники.
    • zombie_tank_spawn_zone__objectiveId = Настройки для техники. Шансы куда она поедет и т.п…
    • Cвойства:
      • zombie_tank_spawn_zone__objectiveId = Создает связь между zombie_tank_spawn_zone и zombie_tank_spawn_zone__objectiveId.
      • ai_tank_objective__positionId = Тоже самое. Но связь с точкой назначения.
  • Разместить боевую зону. По умолчанию 3ая команда - это команда мотивированных.

В объекте уровня (level, его можно найти используя Find Entity) обязательно стоит добавить tank в свойстве level__loadExtraNavMeshes. Иначе может быть сбой в игре после появления техники на карте.

В текущий момент… Если я не ошибаюсь… Редактор не может создавать/переделывать navMesh для техники (тем не менее переделывать navMesh для пехоты рекомендуется, если карта была немного изменена). Как можно узнать есть ли на карте navMesh для техники и где он? Для этого включаем navMesh в toolbox, а затем пишем консольную команду app.debug_navmesh_index 1 (консоль открывается при нажатии на ё или ~ клавишу). Если поставить 0 вместо 1, то он будет показывать navMesh для бойцов.

Менее важное, но часть режима:

Ящик с случайными предметами можно создать разместив random_weapon_box. Cвойства:

  • paid_loot__cost = Стоимость открытия ящика.
  • paid_loot__weapTemplates = Список возможных предметов в ящике.
  • paid_loot__weapRandomizeWeight и paid_loot__weapChanceRange = Шанс выпадения того или иного предмета.
  • animchar__res = Внешний вид ящика. Можно поменять его, взяв у другого предмета.
    • Примечание: Желательно использовать оружие с zombie в названии. Иначе оно будет без патрон.

Ящик с патронами - это base_fortification_build c (их нужно заранее прописать) +tutorial_ammunition_box_a+paid_ammo_box_ressuply+undestroyable_ri_extra постфиксами. Постфиксы пишем над кнопкой Close. Там будет поле Template Postfix.
image
Они расширяют возможности. Cвойства:

  • useful_box__maxUseCount = Количество возможных использовании ящика перед опустошением.
  • paid_loot__ressuplyDefCost = Количество очков за патроны (работает если у оружия не задана стоимость патрон).
  • builder_info__team и team = Команда, которая может использовать ящик.

Ящик с аптечками - это tutorial_placed_medic_box_item с +placeable_item_in_world+base_ri_building+paid_medkit_box_use+undestroyable_ri_extra. Свойства:

  • ri_extra__name = Внешний вид ящика с аптечками. Изначально будут мешки с песком. Обычный внешний вид ящика - это dummy_wooden_box_a.
  • useful_box__maxUseCount = Количество возможных использовании ящика перед опустошением.
  • paid_box__ressuplyCost и useful_box__uiPrice = Стоимость.
  • medic_box__isOpen желательно должен быть включен.
  • builder_info__team, placeable_item__ownerTeam и team = Команда, которая может использовать.

Покупаемый предмет - это тот же предмет оружия, но с +paid_loot_item+gun_with_initial_ammo постфиксами. Свойства:

  • gun__initialAmmoHoldersCount = Количество магазинов после покупки.
  • paid_loot__cost = Стоимость.

Ценность патрон для оружия указаны только у оружия с zombie в названии (например thompson_m1928a1_50_drum_gold_zombie). Иначе будет в зависимости от ящика (по умолчанию - это 5). Так же их количество тоже там указано. Если в планах использовать оружие только с zombie в названии, то постфикс +gun_with_initial_ammo не нужно добавлять. Если есть сильное желание настроить стоимость для оружия, которого не было в режиме, то для этого используется entities.blk (шестой раздел в неофициальном гайде). Приблизительно так выглядит код измененного одного золотого оружия (thompson_m1928a1_50_drum_gold):

thompson_m1928a1_50_drum_gold_zombie_gun{
  _use:t="thompson_m1928a1_50_drum_gold_gun"
  _use:t="paid_loot_ressuply"

  item__template:t="thompson_m1928a1_50_drum_gold_zombie_gun_item"
  item__weapTemplate:t="thompson_m1928a1_50_drum_gold_zombie_gun"
  paid_loot__ressuplyCost:i=130
}

thompson_m1928a1_50_drum_gold_zombie_gun_item{
  _use:t="thompson_m1928a1_50_drum_gold_zombie_gun"
  _use:t="gun_with_initial_ammo"

  collres__res:t="thompson_m1928a1_50_drum_collision"

  _group{
    _tags:t="server"

    "gun__initialAmmoHoldersCount:list<i>"{
      item:i=4
    }
  }
}

Cвойство paid_loot__ressuplyCost отвечает за стоимость патрон, а gun__initialAmmoHoldersCount за количество получаемых магазинов от ящика с патронами.

Про гайд о entities.blk: Если что вместо _extends уже используется _use.

Внешний вид:

  • Для добавления звука/музыки во время волн нужно разместить battle_music_with_spawn_waves объект и изменить свойства:

    • Внутри battle_music__intro прописать events/z/music/z_battle_start
    • battle_music__waveStartPath - events/z/music/z_wave_new
    • battle_music__waveEndPath - events/z/music/z_wave_end
  • Для того, чтобы поменять погоду на ту, что используется в режиме… Нужно отключить любой шанс на генерацию погоды. Это можно сделать в объекте level. Просто в свойстве level__weatherChoice ставим 0.0 рядом с названием объектов (иногда нужно их открыть и внутри настроить свойство weight). После чего можем размесить любую свою погоду или из режима (weather_zombie_night_a).

  • Для того, чтобы поменять время на уровне нужно изменить в объекте level свойство level__timeVec (если что оно содержит только real). Иногда он может быть прописан внутри погоды, внутри level__weatherChoice.

  • Возможно стоит удалить все postfx_color_grading_tonemap объекты на карте и размесить из режима (postfx_color_grading_tonemap_zombie_night_enlisted). Немного меняет цвета.

  • Rendinst объекты режима:

    • Доска с оружием - это RI firefight_post_a_board_a
    • Текст GUNS * SHOP - это объект poster_guns_c
    • Иконка оружия - это объекты guns_decal_a. Вместо a может быть b, c, d, e и f.

Во время создания комнаты/поста на портале Sandbox:

Советуется не ставить большое количество игроков (не более 10-16 для бойцов-одиночек или 4-8 для отрядов). Сервер может не выдержать.

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

5 лайков

Ещё можно зомби поменять id команды на 2 и игроки второй команды будут дружественны для зомби, они будут умирать и спаунится на своих респах.Если периодеть в скин зомби и выдать какую-нибудь винтовку, то будут продвинутые игроки - зомби .

1 лайк

Можно и так. Хотя я не уверен насчет “будут дружественны”. Ибо игроки/боты второй команды по прежнему будут целью для ИИ-зомби, а если не убрать тэг включающий огонь по своим, то зомби без оружия и убить могут союзника.

Или у тебя как-то получилось сделать так, чтобы зомби не бегали за игроками/ботами или хотя бы не пытались атаковать их?

Я через entities.blk поменял всем зомби команду и еще сделал это в самом режиме. В самом моем моде думаю использовать вторую команду как командиров или навигаторов для ИИ.

Есть такое. Можно сделать что-то в духе некоторых миссии COD, где надо защищаться в течение Х времени от кучи ботов.

1 лайк

Надо как-то получше этим заняться, но да у меня зомби не трогали ось, а бегали только за союзниками.

1 лайк