Создание скриптов
Для создания скриптов в 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, и так далее. 
Если вы будете добавлять свои речи, не забудте их также прописать по аналогии в этом файле, который приложите к своему моду. 
  
  
  
Вот вроде и все, удачных и интересных вам скриптов! 
  
  
  |