Bethesda Tutorial Packages/ru
Пакеты
На русском языке Требуется помощь редактора |
Пакеты | |
---|---|
Серия: Продвинутое квестописания, глава 1 | |
К другим учебникам | |
Предыдущая статья | Следующая статья |
Краткий обзорEdit
В этой главе мы расскажем о том, что такое пакеты (en) и как их настраивать
Ты узнаешь:
- Как работают наборы пакетов (en).
- Как создать простенький распорядок дня для НИП.
- Как создать новый пакет.
Пакеты и наборы пакетовEdit
Термин "Пакет" (en) используется в Creation Kit для обозначения структуры данных, описывающей поведение персонажей. В один момент времени персонажем может управлять только один пакет, который управляет его действиями, заставляя спать, есть, патрулировать территорию, шататься по округе, работать в кузнице, и т.д.
Как же персонаж определяет, какой пакет он должен использовать? Вот здесь и вступает в игру набор пакетов (en). Идея проста - у каждого персонажа есть набор пакетов, которые он может использовать. Периодически игра пробегает его сверху вниз. Проверяет, что пакет можно использовать. Если проверка прошла успешно - включает его. Если нет - переходит к следующему. Проверка проходит успешно, если:
- Все условия (en) истинны.
- Текущее время суток совпадает с указанным в расписании.
Персонаж всегда следует первому правильному пакету. У персонажей поблизости от игрока обновление пакетов происходит очень часто; в отдаленных частях мира - очень редко.
Создание простого распорядкаEdit
Итак, давай опробуем это на практике, применительно к нашему старому другу Бенду Оло (для продолжения, заверши урок по созданию персонажей).
Открой GSQBenduOlo и перейди на вкладку AI Packages, выглядит она так:
Список его пакетов пуст, а сам он день на пролет торчит на одном месте. Давай сделаем его более похожим на живого человека.
Чтобы добавить пакет персонажу, нужно щелкнуть ПКМ по списку Package List и выбрать "Add", или просто перетащить уже готовый из окна Object Window. Так и поступим - выбери узел Package в списке объектов (внутри Character). Введи в фильтре "Default" и найди в списке пакеты, начинающиеся с этого слова. Эти пакеты не имеют территориальной привязки и могут быть использованы для любого персонажа.
Используя базовые пакеты, мы легко можем научить Бэнду завтракать и ужинать, спать ночью, а днем бродить по своему дому.
Для еды мы используем стандартные пакет, в которому поминается еда ("eat") - выбери DefaultEatEditorLoc8x1 (завтрак) и DefaultEatEditorLoc18x1 (ужин). Примечание: по соглашению об именовании, в имени пакета указывается его время в формате: НачалоxПродолжительность". Значит "8x1" означает, что пакет может быть выполнен в 8 часов утра и займет персонажа на 1 час; "18x1" - соответственно в 6 вечера и продлиться также 1 час. Один игровой час равен трем минутам реального времени. Разумеется, нельзя безоговорочно верить названию пакета - оно может оказаться неверным. Так что давайте убедимся, что время задано верно:
Открой оба пакета и перейди на вкладку Schedule. Выглядеть это будет так:
Как мы видим, имя не врет - время указано верное. Перетащи, если еще этого не сделал их в список пакетов Бэнду Оло.
Как мы уже говорили, очень важен порядок следования пакетов. Выполняться будет первый, отвечающий всем условиям. Для этих двух пакетов это не принципиально, так как их расписание не пересекается. С 8 до 9 будет выполняться DefaultEatEditorLoc8x1, а с 18 до 19 - DefaultEatEditorLoc18x1. В остальное время суток ни тот, ни другой не пройдут проверку и не будут управлять действиями персонажа. Но не расслабляйся - следующие пакеты, которые мы добавим Бенду, нарушат его распорядок, если будут расположены не в том порядке.
Мы хотели, чтобы Бенду спал по ночам. Найди пакет DefaultSleepEditorLoc1x8, не самый лучший выбор, но он наглядно продемонстрирует о том, как важен порядок следования пакетов.
В результате несложных расчетов, ты заметишь, что новый пакет будет верным с 1 ночи до 9 утра, то есть наложится на пакет завтрака (DefaultEatEditorLoc8x1). Сейчас мы посмотрим - что же будет, если порядок пакетов неверен...
Перемести пакет сна на самый верх набора пакетов Бенду. Вот так:
Поскольку верхний пакет будет проходить проверки на протяжении всего заявленного действия, то, до его окончания, очередь до пакета завтрака, находящегося ниже, так и не дойдет. Когда же закончится время сна, будет уже поздно завтракать.
Чтобы все работало правильно, перемести пакет сна ниже пакета завтрака:
Теперь в 8 часов утра заработает DefaultSleepEditorLoc1x8, перехватив управление персонажем. И последний час сна Бенду потратит на завтрак.
Итак, мы расписали уже не маленький фрагмент распорядка Бенду - 2 часа в день он есть, и еще 7 спит. Можно продолжить заполнять его распорядок дня, но в нашем случае (и во многих других) лучшим вариантом будет дать ему "запасной" пакет. Без каких-либо условий и распорядка, который будет выполняться всегда, когда персонаж не управляется другими пакетами. Естественно, его нужно разместить в самом низу списка пакетов.
Чаще всего, для этого мы используем пакеты "Sandbox" (en) (песочница). Он позволяет персонажу прогуливаться по округе, совершая в некоторой степени случайные действия. Он подходит в тех случаях, когда нам не важно, чем конкретно будет заниматься НИП в свободное время, но хочется, чтобы он вел себя более естественно.
В нашем случае, лучшим выбором станет DefaultSandboxHomeowner. Открой его и взгляни на таблицу Public Package Data:
Для "Location" указано значение "Near editor location, radius 1500" - это и задает размеры и положение "песочницы" в мире - окружность радиусом 1500 единиц вокруг точки расположения персонажа, заданной в редакторе (обычно, этого достаточно, чтобы позволить персонажу бродить по небольшому дому). Если ты посмотришь на остальные пакеты Бэнду, то увидишь, что все они также используют "Near editor location", поскольку не привязаны к определенной локации в мире и могут быть использованы где и кем угодно.
Еще одним полезным параметром этого пакета является "Unlock On Arrival = True". Он сообщает, что во время выполнения пакета, персонаж откроет все свои двери, что немаловажно - мы ведь не хотим, чтобы квестодатель прятался за закрытой дверью!
Можешь заглянуть на вкладки условий (Conditions) и расписания (Schedule), чтобы убедиться, что они пусты, а следовательно пакет будет выполняться всегда, если до него дойдет очередь (что нам и нужно).
Перетащи этот пакет в список Бэнду и расположи в самом низу. Всё. Простенькое расписание готово:
Если хочешь проверить всё на практике, сохрани изменения и зайди в игру. Переместись к нему консольной командой:
coc MixwaterMillWorkersHouse
Чтобы увидеть, как меняется его поведение в зависимости от времени суток, используй команды для изменения игрового времени:
set gamehour to 2
Теперь Бенду ест, спит, бродит по "своему" дому. Если он откажется спать, пока ты рядом, можешь использовать команду toggledetection, тогда он будет тебя игнорировать.
Создание нового пакетаEdit
Теперь ты знаешь, как, используя "default" пакеты, можно составить расписание персонажа. Пришло время заняться написанием собственного пакета Бенду. Давай научим его ходить вокруг своего дома в дневное время.
Для начала, создай новый пакет. ПКМ в списке пакетов, и выбери "New". Ты увидишь пустое окно пакета:
По-умолчанию, выбран шаблон Travel (путешествие). Но нам нужен Patrol (патруль), выбери его из списка. Обрати внимание: изменилась таблица Package Data - параметры шаблона Patrol отличается от параметров Travel. Теперь у нас пустой пакет на основе шаблона Patrol:
На соответствующей страничке (en) ты можешь детально ознакомиться с каждым из параметров этого пакета. Пока же нам нужно определить:
- Patrol Start - откуда Бенду начнет свой маршрут.
- Schedule - в какое время будет выполняться данный пакет.
Маршрута у нас пока еще нет, давай сделаем его. (Если у тебя уже загружено жилище Бенду, дважды щелкни по желтому маркеру у двери; иначе дважды щелкни по MixwaterMillExterior в списке ячеек пространства Tamriel.)
Если ты еще не читал Encounters Tutorial (en), то настоятельно советуем ознакомиться. Но это не является жизненно необходимым. Всё, что нам нужно - создать маршрут из трех точек:
- Перетащи XMarkerHeading в окно визуализации.
- Дважды продублируй их сочетанием Ctrl+D.
- Перемести маркеры так, как тебе нравится и объедини их в маршрут, используя вкладку Linked Ref каждого маркера.
В итоге получится нечто вроде этого (точное расположение маркеров значения не имеет):
Теперь, в окне пакета, выбери параметр Patrol Start и дважды щелкни по кнопке "Linked Reference" справа. В появившемся окне переключи тип ссылки на "Specific Reference" и выбери любую из точек (не имеет значения какую, так как они связаны в единый маршрут).
Также мы хотели указать промежуток времени, в который будет выполняться этот пакет - с 10 до 12 часов. Указываем:
Осталось дать пакету какое-нибудь имя. Например GSQBenduPatrol10x2 (не забывай следовать соглашению об именовании). Щелкни по кнопке "ОК", чтобы сохранить изменения и закрыть окно.
Вот мы и создали свой первый пакет. Теперь нужно добавить его в набор пакетов Бенду. Найди свой пакет в списке объектов и перетащи в список пакетов Бенду. По-умолчанию, все добавляемые пакеты располагаются внизу списка. Но в этом случае. очередь до него никогда не дойдет, так как выше расположена "песочница". Перемести его наверх:
Нажми "ОК", чтобьы закрыть окно персонажа и сохрани плагин. Зайди в игру и убедись, что Бенду следует проложенному маршруту:
coc MixwaterMillExterior set gamehour to 10
Вот и всё. Теперь ты знаешь, как изменять поведение персонажей, используя существующие и свои собственные пакеты. Существующие шаблоны пакетов (en) способны задать практически любое поведение, тебе нужно лишь задать правильные параметры. Если же потребуется что-то совсем уж экзотическое, ты можешь создать и свои собственные шаблоны (en).
Предыдущая статья | К другим учебникам | Следующая статья |
Language: | English • français • русский |
---|