Среда, 22.11.2017, 15:31
Under sky of Half-Life
Приветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход
Меню сайта

Категории каталога
На движке Valve Source [29]
На движке Half-Life 1 [1]

Главная » Статьи » Статьи по мэппингу » На движке Valve Source

Система Actbusy (перевод статьи)
Система Actbusy (перевод статьи)

Содержание

  1. Введение
  2. Структура
  3. Ограничения и баги
  4. Пути решения багов (debugging)
  5. Пример карты.

Введение

Система actbusy используется в картостроении чтобы делать NPC "занятыми". Данное действие NPC на карте устанавливается нодами и продолжает действовать как "занятый", пока одно из нескольких условий не будут выполнены (как например, обнаружение неприятеля). Мэппер имеет полный контроль за тем, когда NPC "занят", какие действия он должен выполнять при actbusy и какие условия должны заставлять его, чтобы он перестал быть "занятым".
Компоненты системы actbusy следующие:

  • actbusy.txt - текстовый файл, который находится в вашем mod\scripts директории. В нем находится список доступных действий actbusy.

  • ai_goal_actbusy - управляющая ентитя Actbusy. Используятся чтобы управлять NPC, как и когда должно включаться действие actbusy.

  • Один или более info_node_hints, установленных на карте с указанным в поле Hint параметром World: Act Busy Hint. Они (или он) определяют на карте места, где NPC может быть "занятым", при этом используется файл actbusy.txt. Он сообщает NPC, какое действие он должен выполнить в ноде.

Структура

Actbusy_structure.png

Ентити ai_goal_actbusy сообщает NPC или группе NPC действие "занято (actbusy)" и после NPC выбирает из hint'ов actbusy в их группе. Есть несколько способов для отличного соединения NPC с нодами, это:

  • В полях Hint у нодов должен стоять параметр World: Act Busy Hint

  • Расстояние до нода должно быть менее чем радиус, определенный Search Range for Busy Hints в ai_goal_actbusy.

  • Нод не должен быть блокирован любым другим NPC (т.е. NPC не должен стоять в ноде или на ноде).

  • NPC должен выполнять действие или анимацию, заданную нодом.

NPC проверяет самый близкий к нему нод, заблокирован он, или нет. Это очень помогает от столкновений данного NPC с другим или другими NPC в нодах.

actbusy.txt - данный текстовый файл находится в директории mod\scripts (в вашем моде), hl2\scripts, cstrike\scripts и т.д. Он содержит список действий actbusy, которые ноды с параметром Act Busy Hint могут использовать. Ниже пример из файла:

"act busy name" Название, которое будет описано в hint-ноде.
{
"busy_anim" "Имя Activity (Activity Name)".
"entry_anim" "Activity Name"
"exit_anim" "Activity Name"
"busy_sequence" "Название sequence (Sequence Name)".
Если определено, используется через activity name. Определяется в hint-ноде.
"entry_sequence" "Название sequence".
Если определено, используется черезentry_anim.
"exit_sequence" "Название Sequence".
Если определено, используется черезexit_anim.
"busy_sound" "Название звука (Sound Name)".
Если определено, NPC будет воспроизводить звук (напр. "Я занят!"), когда
выполняет какое-либо действие\анимацию
(напр. Sit_Chair03).
Может быть названием GameSound или ответом игроку.
"entry_sound" "Название звука".
Если определено, NPC будет воспроизводить звук, когда выполняет какое-либо
входящее действие\анимацию
(напр. Idle_to_Sit_Chair03).
Может быть названием GameSound или ответом игроку.
"exit_sound" "Название звука".
Если определено, NPC будет воспроизводить звук, когда выполняет какое-либо
входящее действие\анимацию
(напр. Sit_Chair03_to_Idle).
Может быть названием GameSound или ответом игроку.
"min_time" "Минимальное время, затраченное на busy-анимацию (Minimum time
to spend in this busy anim)
"
"max_time" "Максимальное время, затраченное на busy-анимацию (Maximum time
to spend in this busy anim)"
0 = остановить анимацию только при возникновении каких-либо событий.
"interrupts" Несколько из списка:
"BA_INT_NONE" останавливается, когда истечет время. Не
прерывается при возникновении каких-либо событий.

"BA_INT_DANGER" останавливается, если возникает какая-либо
угроза.

"BA_INT_PLAYER" останавливается, если игрок в поле зрения или
возникает какая-либо угроза.

"BA_INT_AMBUSH" останавливается, если враг в поле зрения.
"BA_INT_COMBAT" останавливается, если враг или любой признак
конфликта
(взрыв, пуля и т.п.) в поле зрения.
}

Например, один из действий мог выглядеть так:

"sit_in_chair_03"
{
"busy_sequence" "Sit_Chair03"
"entry_sequence" "Idle_to_Sit_Chair03"
"exit_sequence" "Sit_Chair03_to_Idle"
"min_time" "10.0"
"max_time" "20.0"
"interrupts" "BA_INT_COMBAT"
}

Чтобы использовать этот элемент, мэппер должен определить sit_in_chair_03 в Hint Activity нода Actbusy hint. Любая NPC, модель которой содержала необходимый элемент, "занят" и после выхода какого-либо действия (sequence) должен быть связан с нодом. Например, NPC использует ноды для того, чтобы
передвигаться по ним, воспроизвести входящее действие Idle_to_Sit_Chair03, а затем многократно зацикливать действие Sit_Chair03. Параметры min_time и max_time контролируют NPC выполнять действие actbusy в нодах с произвольным промежйтком времени между 10 и 20 секундами. При выборе Ba_Int_Combat NPC выполнит данное действие ранее, чем увидит неприятеля или услышит другие звуки (столкновение пули с другим предметом, взрыва, и т.п.). Когда NPC оставит нод с описанными выше действиями (из-за истеченного времени или если NPC видит врага), NPC перейдет в конечное действие Sit_Chair03_to_Idle перед сброса его AI в обычное состояние.

Следует отметить, что у некоторых actbusy min_time и max_time равны нулю. NPC, использующий эти параметры никогда не уйдет с нода из-за тайм-аута. Если NPC выполняет действие Ba_Int_None, то он будет стоять на ноде до тех пор, пока на него не подействует какой-либо инпут из системы I/O.

info_node_hint'ы - эти нод-ентити создают actbusy позиции. (Они не могут быть нодами info_hint или
info_node_air_hint.) Их значение в hinttype должно быть установлено на 12 (World: Act Busy Hint), чтобы определить их как actbusy хинтами, а значение hintactivity определяет название действия в файлеactbusy.txt. Действие должно являться actbusy activity, и должно относиться к конкретному NPC.

Если в значении hintactivity указан телепорт, то NPC телепортируется в состояние actbusy вместо последнего. Такой случай используется, когда хинт расположен на\около другой геометрии (prop'ов) карты, например, когда NPC сидит на стуле.

Ограничения и баги

  •  Только некоторые NPC могут выполнять действие actbusy:

  • Combine Soldiers

  • Metropolice

  • Союзники игрока (citizen'ы, Аликс, Барни, Григорий, Илай, Кляйнер)

  • Если в одном месте находятся две группы info_node_hint'ов с разными параметрами, то будет действовать только одна группа.

Пути решения багов (debugging)

ai_debug_actbusy ConVar - легчайший путь решения проблем, связанных с act busy. Следует установить значение от 1 до 4. Данные значения означают следующее:

  1. Постоянно прорисовывает линию от каждого NPC в выбранный ими actbusy-нод.

  2. Всякий раз, когда любой NPC выполняет действие actbusy, прорисовывается линия к выбранному NPC ноду и квадрат вокруг него.

  • Это полезно, чтобы определять ноды, установленные в местах, где NPC стоять не будет. Следует учитывать, что квадрат вокруг NPC не будет захватывать ноды.
  1. Показывает информацию о том, почему NPC не выбрал какой-либо actbusy-нод.

  • Для того, чтобы использовать данную фичу, следует выбрать любого NPC с помощью команды npc_select. Когда NPC будет передвигать к следующим actbusy-нодам, то можно увидеть небольшую текстовую строку, которая будет появляться на каждом ноде, объясняющая, почему NPC не выбрал и не пошел к какому-либо ноду.
  1. Отображает всю логику actbusy.

  • Показывает логические решения (AI), какие предпринимает каждый NPC, когда совершает какое-либо actbusy-действие. В основном полезно для обнаружения ентити с неправильной системой I/O на карте.
    5. Туториал-перевод + пример карты.


Источник: http://steamreview.org/
Категория: На движке Valve Source | Добавил: monolife (05.08.2008) | Автор: Pl@zmer
Просмотров: 1424
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Поиск

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

© 2017, MonoLife Сайт создан в системе uCoz