При хостинг поддержке Интернет-сообщества VBIOS CS-Mapping.com.ua
Создание сценариев

“Создание сценариев”.

Для создания сценариев (aka скриптов) в Half-Life существуют две энтити: scripted_sequence и scripted_sentence. Первая отвечает за движения, выполняемые монстром/персонажем, будь то ходьба, бег, нажатие кнопки, тряска атомата с кока-колой, или почесывание подбородка. Вторая служит для того, чтобы монстр произнес какую-то фразу. При этом его голова повернется в сторону слушателя, и рот будет открываться в соответствии с амплитудой звука.

scripted_sequence

Основные параметры настраиваются следующим образом:

  • Name - имя, используемое для активации сценария. Активатором, как и везде, может быть любая энтитя, включая самого монстра.

  • Angle - сторона, куда повернется лицом монстр, когда доберется до нужной точки.

  • Target - энтитя, которая активируется после завершения этого сценария, т.е., после того, как монстр доберется до точки и проделает необходимую анимацию. Обычно этой энтитей бывает другой scripted_sequence для этого же монстра, или кнопка, на которую он нажал.

  • Delay before trigger - задержка между завершением анимации и срабатыванием target-энтити.

  • Kill Target - энтитя, которая будет удалена с карты после завершения сценария (часто сюда ставят имя этого-же монстра, если нужно сделать так, чтобы тот зашел за угол и исчез).

  • Target Monster - имя того самого монстра, который выполняет скрипт. Это может быть также имя класса (например, moster_scientist) - в таком случае scripted_sequence выберет любого монстра этого класса в пределах радиуса, задаваемого в поле Search Radius.

  • Action Animation - имя анимации, которую монстр проделает, когда доберется до расположения этого scripted_sequence. Если вам нужно, чтобы монстр просто подошел куда-то без дополнительной анимации, то оставьте это поле пустым.

  • Idle Animation - имя зацикленной анимации, которую монстр будет выполнять до тех пор, пока scripted_sequence не активируется. Например, падение ученого в шахте лифта - пока вы не добрались до верху, он будет дергаться, а при прохождении игроком триггера, он выполнит анимацию падения. Или поедающий труп зомби, подскакивающий при виде игрока. Если вам нужно, чтобы монстр всегда выполнял Idlе-анимацию (как сидящий с кружкой кофе профессор в самом начале), то оставьте поля Name и Action animation пустыми.

  • Search Raduis - если в поле Target Monster задан класс монстра, то монстр будет выбираться внутри радиуса, задаваемом в этом поле. Также это применяется для создания ученых и барней, который надо подвести к кнопке или сканеру, чтобы они их активировали - поле Name оставляется пустым, в поле Target Monster указывается класс монстра (ученый или барни), здесь указывается радиус, и устанавливается некое значение поля Repeat Rate ms (например, 10).

  • Repeat Rate ms - поиск монстра в радиусе, задаваемом выше, производится с указываемой в этом поле частотой в миллисекундах.
  • Move to position - определяет способ передвижения монстра на пути к позиции.
  • No - монстр не пойдет к scripted_sequence, а выполнит анимацию там, где стоит.
  • Walk - подойдет, и затем выполнит анимацию.
  • Run - подбежит, и выполнит анимацию.
  • Instantaneous - он телепортируется в место scripted_sequence и выполнит анимацию (это хорошая альтернатива монстермейкеру, если монстры должны иметь какие-то настройки, типа имени и т.д.).
  • No, Turn o Face - то же, что и No, правда перед анимацией он повернется в направлении, указываемом в angle.


  • Теперь её флаги:

  • Repeatable - поставьте, если сценарий нужно активировать много раз (например, ходящие ученые между компами в начале игры).
  • Leave corpse - если в конце анимации монстр умирает (например, падение), то с этим флагом труп не исчезнет.
  • No interruptions - если в момент проигрывания сценария игрок попытается повести монстра за собой или выстрелить в него, то скрипт не прервется.
  • Override AI - обычно сценарии игнорируются, если монстр в состоянии боя. Но этот флаг заставляет монстра выполнить сценарий независимо от того, чем тот занимается.
  • No script move - после проигрывания анимации монстр сместится обратно туда, где он был в ее начале.


  • Чтобы задать анимацию, вам необходимо знать ее имя. Для этого возьмите PakExplorer и из pak0.pak/models извлеките нужную вам модель. Просматривается она с помощью Model Viewer. Внимание - некоторые модели, например, ученые или барни, состоят из нескольких mdl-файлов (barney.mdl, barney01.mdl, barneyt.mdl), если вы не извлекаете их все, то при открытии главного файла Model Viewer'ом возникнет ошибка.
    Примечание: с определенных пор Model Viewer научился открывать модели прямо из pak-файлов.

    Есть одна небольшая хитрость - если есть две scripted_sequence с одинаковыми именами, и действующие на разных монстров, то поведение монстров будет синхронизировано следующим образом - тот из монстров, кто раньше подошел к своей scripted_sequence, не будет сразу выполнять анимацию, а подождет, пока другой тоже не достигнет своей точки, и потом они вместе выполнят свои анимации. Пример этого можно увидеть прямо перед реактором, когда ученые одновременно включают сканеры. Если один из монстров прервал выполнение сценария, то и другой прервет тоже.

    Отдельный вопрос, имеющий косвенное отношение к сценариям - сидящие в креслах ученые. Для этого используется энтитя monster_sitting_scientist. Теоретически, располагать ее можно на любой высоте от сиденья (желательно где-то на высоте около ста пикселей), она все-равно опустится до нужного уровня, главное проследите, чтобы под ней и на некотором расстоянии от нее (~4 единиц) было только седалище, а не ручки или спинка, иначе игра неправильно определит высоту и ученый окажется либо слишком высоко, либо слишком низко.

    При передвижении монстра в нужную точку он всегда пытается использовать сетку из нодов, даже если движение вызвано сценарием.
    Ноды - это своеобразные узловые точки путей, наподобие тех, по которым бегают боты в многопользовательском режиме. Ставить их довольно просто - выбираете энтитю info_node и кидаете.

    Высота над полом может быть любая, игра их все-равно опустит их до его уровня самостоятельно. Параметров никаких не нужно, игра, опять же, сама просчитает, какой узел из какого виден (появится надпись при загрузке карты - "Node graph is out of date. Rebuilding...") и сохранит в папочку nodes. Ставьте их в основном на перекрестках и углах. Не делайте расстояние между ними слишком большим и не наваливайте их в кучу. Около дверей ставьте под два нода - с одной стороны, и с другой. Если будет проблема с лестницами, то сделайте ступеньки пониже (8-12 пикс.) и на каждой поставьте по такому узлу, хотя это не всегда обязательно.

    scripted_sentence

    Местоположение энтити не имеет значения. Настраивается схожим образом с предыдущей:

  • Name - имя для активации.
  • Target - имя энтити, которая сработает после завершения фразы. Это часто используют для активации ответной реплики другого монстра.
  • Sentence Name - имя звукового события, т.е., описание звукового файла для фразы. Важно - в начале надо поставить восклицательный знак и писать имя события заглавными буквами.
  • Speaker Type - имя монстра, который произносит фразу.
  • Sentence Time - время звучания. Скорее всего, служит показателем, как долго объект будет смотреть на слушающего.
  • Lishtener Type - имя слушающего монстра, к которому этот, обращаясь с репликой, повернет голову. Как правило, тот тоже повернется, слушая реплику. Если реплика обращена к игроку, то напишите здесь player.

  • Если слушатель будет слишком далеко, то реплика не прозвучит.

    Как и в случае со scripted_sequence, нам надо знать специальное имя звукового события. Это не совсем то же, что и имя wav-файла, а, скорее, их группа. Опять лезем в pak0.pak и в папке sound находим файл sentences.txt, внутренности которого имеют примерно такой вид:

  • SC_IDLE0 scientist/ipredictedthis
  • SC_IDLE1 scientist/containfail
  • SC_IDLE2 scientist/chaostheory

  • Сначала заглавными буквами идет имя самого звукового события, которое мы подставим в scripted_sentence, а потом, через пробел, список wav'ок без расширения, которые по очереди проиграются в этом событии. В данном примере их только по одному, но в звуковых событиях десантников вы увидите их массовое использование. Учтите, что для каждого монстра существует своя группа событий - для ученых их имена начинаются на SC, для барни - на BA, для десов - HG, и так далее...
    Если вы будете добавлять свои речи, не забудьте их также прописать по аналогии в этом файле, который приложите к своему моду.


    Вот вроде и все, удачных и интересных вам скриптов!

    BUzer

    Последние темы
    Сейчас на форуме
    Всего: 363
    Гостей: 357
    Невидимок: 2
    Пользователей: 4
    Flash
    KorteZZ
    mittorn
    Skrip***
    CSM Game Server
    Loading...
    Counter
    Validation
    CS-Mapping Crew