Схема mob_combat, mob_death. Работают точно также как и у сталкеров соответствующие схемы
Работают точно также как и у сталкеров соответствующие схемы.
Файлы: \gamedata\scripts\mob_combat.script, \gamedata\scripts\mob_death.script
Схема mob_jump (монстр-пружинка)
Схема mob_jump. Теперь mob_jump служит для задания прыжков монстров без каких либо проверок и ограничений (расстояние, углы и т.д.). Указывается позиция с помощью патрульного пути, смещение относительно этой позиции и физический фактор прыжка.
Пример:
[logic]
active = mob_jump
[mob_jump]
path_jump = path
ph_jump_factor =2.8
offset = 0,10,0
on_signal = jumped | nil
path_jump – путь, с помощью которого мы задаем 1 целевую точку прыжка (с нулевым индексом). Реальная точка учитывает позицию path_jump[0] + смещение, заданное с помощью offset.
offset – смещение по осям x,y,z соответственно, с помощью которого задается реальная точка в пространстве (может не находится на аи-ноде).
ph_jump_factor - влияет на время прыжка. Визуально с помощью него задается кривизна траектории полёта. Чем он больше, тем прыжок более острый, быстрый (меньше дуга). С помощью данной схемы можно делать: перепрыгивание со здания на здание, выпрыгивание из окна, перепрыгивание высоких ограждений и др. Дефолтное значение = 1,8
Примечание:
Фактически mob_jump - это не состояние, а разовое действие. При переходе в него монстр разворачивается в сторону прыжка и прыгает, поднимая сигнал jumped. Т.е. "on_signal = jumped | имя_схемы_или_nil" – является обязательным параметром в схеме, чтобы знать куда переходить дальше.
При выборе позиции используется первая точка патрульного пути (0-вой индекс)
Mob_camp
Механика:
1. Сидит на позиции, смотрит в точку
2. Можно задать несколько позиций и время смены позиции.
3. Перемещается между позициями бегом
4. При виде врага переходит под универсальную схему (комбат/паника и т.д)
5. Задаются минимальная и максимальная дистанции от врага до текущей camp-позиции
6. Если враг уходит далеко - монстр возвращается на позицию
Использование:
[logic]
active = mob_camp
[mob_camp]
path_look = way_look
path_home = way_home
time_change_point = 30000
home_min_radius = 20
home_max_radius = 50
skip_transfer_enemy – если прописать в кастом дату, то монстр не будет принимать врага от друших монстров, если его увидит (для этого нужно всех монстров в разные group разнести)
Описание параметров:
*path_home - путь, состоящий из точек, в которых будет находиться монстр
path_look - путь, состоящий из точек, в которые будет смотреть монстр
*time_change_point - время изменения текущей camp-точки (по-умолчанию10000), мс
* home_min_radius - минимальный радиус от врага до camp-точки (по-умолчанию 30), м
* home_max_radius - максимальный радиус от врага до camp-точки (по-умолчанию 40), м
Особенности:
Минимальный и максимальный радиус необходимы для игнорирования врага, если он убежал далеко и для возврата на текущую позицию. Учитывается дистанция от врага до текущей позиции. Если дистанция меньше home_min_radius - атакуем врага, пока враг не исчезнет или дистанция не будет больше home_max_radius.
Две дистанции необходимы для того, чтобы избежать ситуации, когда игрок стоит на границе радиуса действия и входит/выходит в зону и монстр бегает то в свою camp-позицию, то на врага.
Выбор текущей позиции производится случайным образом
Индексы точек пути для path_home и path_look должны совпадать (т.е. монстр сидит во второй точке path_home и смотрит во вторую точку path_look)
Единственным необходимым параметром является path_look
Если не установлен path_home, в качестве кемперской точки учитывается позиция и нода объекта на спауне.
Для того чтобы монстр смотрел в разные точки на кемпер-позиции, path_look может состоять из нескольких точек.
Обязательные требования:
home_min_radius < home_max_radius
Количество точек путей path_look и path_home должно быть равным
P.S. Mob_Camp можно использовать как альтернативу к монстрам под рестрикторами
Mob_home
Схема является ещё одним решением по замене рестрикторов. Рекомендую все следующие гулаги монстров делать на mob_home, а старые гулаги постепенно переводить на mob_home. У кого рестрикторы работают хорошо и красиво, их можно не трогать.
Пример:
[mob_home]
path_home = path1
home_min_radius = 10
home_max_radius = 30
aggressive_home - в назначенную точку path_home монстры бегут а не идут.
Описание:
Монстры держатся вокруг точек пути path_home. В атаке бросаются на врага, если враг внутри home_min радиуса, иначе прячутся в укрытия. Отсюда следует, что home_min -радиус желательно делать таким, чтобы внитри было достаточно каверов. В айдле тоже обычно расходятся по каверам. Home_max радиус сделан по принципу большого рестриктера в схеме «гнездо».
Добавлена возможность задания минимального и максимального радиусов для схемы mob_home в флагах первой точки пути (path_home). Для этого введены флаги minr и maxr. В случае, если радиусы заданы и в секции и во флагах, то значение радиуса берется из секции. Если не задано ни там, ни там, то берутся дефолтные значения 20 и 40 соответственно.
Mob_fake_death
Появилась схема mob_fake_death для зомби. Необходимо для сценок, когда игрок идёт, а вокруг него начинают подниматься зомби...
Использование:
[logic]
active = mob_fake_death
[mob_fake_death]
on_actor_dist_le = 5 | nil
При входе в схему зомби падает, при выходе из схемы встает.
3.6. Оверрайды для монстров:
actor_friendly = если true, то монстр не атакует актера, до первой атаки на него
npc_friendly = если true, то монстр не атакует сталкеров и монстров, до первой атаки на него
friendly = если true, то монстр не атакует никого до первой атаки на него
braindead = если true, то монстр игнорирует любые атаки.
Секции для монстров
[mob_death], [mob_hit]
Секция spawner
Эта секция, которая присутствует как у NPC, так и у монстров, спавнит их по определенному условию (выводит в онлайн). Для того, чтобы они появились в данной точке, им надо поставить в настройках в Level editor флажок no_move_in_offline и отключен can_switch_offline. Спавнер прописывается в кастом дату объекта перед секцией logic
Работает spawner следующим образом:
[spawner]
cond = {+info -info =func !func}
Примечание. Если условия спавна не будет выполняться, то объект не заспавниться, а если он заспавнился и условие перестает выполняться, то объект будет спавнером уведен в оффалйн.
Пример:
[spawner]
cond = {=is_day}
(объект заспавниться днем и уйдет в оффлайн ночью)
После того, как объект заспавнился, его берет под управление скрипт Logic