Bethesda Tutorial Packages/ru

From the CreationKit Wiki
Revision as of 04:51, 14 April 2012 by imported>Vitamant (→‎Creating a Simple Schedule)
Jump to navigation Jump to search

Пакеты



RoundRussianFlag.pngНа русском языке
Требуется помощь переводчика


Пакеты
Серия: Продвинутое квестописания, глава 1
К другим учебникам
LeftArrow.png Предыдущая статья Следующая статьяRightArrow.png


Краткий обзор

В этой главе мы расскажем о том, что такое пакеты (en) и как их настраивать

Ты узнаешь:

  • Как работают наборы пакетов (en).
  • Как создать простенький распорядок дня для НИП.
  • Как создать новый пакет.

Пакеты и наборы пакетов

Термин "Пакет" (en) используется в Creation Kit для обозначения структуры данных, описывающей поведение персонажей. В один момент времени персонажем может управлять только один пакет, который управляет его действиями, заставляя спать, есть, патрулировать территорию, шататься по округе, работать в кузнице, и т.д.

Как же персонаж определяет, какой пакет он должен использовать? Вот здесь и вступает в игру набор пакетов (en). Идея проста - у каждого персонажа есть набор пакетов, которые он может использовать. Периодически игра пробегает его сверху вниз. Проверяет, что пакет можно использовать. Если проверка прошла успешно - включает его. Если нет - переходит к следующему. Проверка проходит успешно, если:

Персонаж всегда следует первому правильному пакету. У персонажей поблизости от игрока обновление пакетов происходит очень часто; в отдаленных частях мира - очень редко.

Создание простого распорядка

Итак, давай опробуем это на практике, применительно к нашему старому другу Бенду Оло (для продолжения, заверши урок по созданию персонажей).

Открой GSQBenduOlo и перейди на вкладку AI Packages, выглядит она так:

Package Tutorial PackageList.jpg

Список его пакетов пуст, а сам он день на пролет торчит на одном месте. Давай сделаем его более похожим на живого человека.

Чтобы добавить пакет персонажу, нужно щелкнуть ПКМ по списку Package List и выбрать "Add", или просто перетащить уже готовый из окна Object Window. Так и поступим - выбери узел Package в списке объектов (внутри Character). Введи в фильтре "Default" и найди в списке пакеты, начинающиеся с этого слова. Эти пакеты не имеют территориальной привязки и могут быть использованы для любого персонажа.

Package Tutorial DefaultPackages.jpg

Используя базовые пакеты, мы легко можем научить Бэнду завтракать и ужинать, спать ночью, а днем бродить по своему дому.

Для еды мы используем стандартные пакет, в которому поминается еда ("eat") - выбери DefaultEatEditorLoc8x1 (завтрак) и DefaultEatEditorLoc18x1 (ужин). Примечание: по соглашению об именовании, в имени пакета указывается его время в формате: НачалоxПродолжительность". Значит "8x1" означает, что пакет может быть выполнен в 8 часов утра и займет персонажа на 1 час; "18x1" - соответственно в 6 вечера и продлиться также 1 час. Один игровой час равен трем минутам реального времени. Разумеется, нельзя безоговорочно верить названию пакета - оно может оказаться неверным. Так что давайте убедимся, что время задано верно:

Открой оба пакета и перейди на вкладку Schedule. Выглядеть это будет так:

Package Tutorial DefaultEatEditorLoc8x1.jpg


Как мы видим, имя не врет - время указано верное. Перетащи, если еще этого не сделал их в список пакетов Бэнду Оло.

Package Tutorial PackageList2.jpg

Как мы уже говорили, очень важен порядок следования пакетов. Выполняться будет первый, отвечающий всем условиям. Для этих двух пакетов это не принципиально, так как их расписание не пересекается. С 8 до 9 будет выполняться DefaultEatEditorLoc8x1, а с 18 до 19 - DefaultEatEditorLoc18x1. В остальное время суток ни тот, ни другой не пройдут проверку и не будут управлять действиями персонажа. Но не расслабляйся - следующие пакеты, которые мы добавим Бенду, нарушат его распорядок, если будут расположены не в том порядке.

Мы хотели, чтобы Бенду спал по ночам. Найди пакет DefaultSleepEditorLoc1x8, не самый лучший выбор, но он наглядно продемонстрирует о том, как важен порядок следования пакетов.

В результате несложных расчетов, ты заметишь, что новый пакет будет верным с 1 ночи до 9 утра, то есть наложится на пакет завтрака (DefaultEatEditorLoc8x1). Сейчас мы посмотрим - что же будет, если порядок пакетов неверен...

Перемести пакет сна на самый верх набора пакетов Бенду. Вот так:

Package Tutorial PackageList3.jpg

Поскольку верхний пакет будет проходить проверки на протяжении всего заявленного действия, то, до его окончания, очередь до пакета завтрака, находящегося ниже, так и не дойдет. Когда же закончится время сна, будет уже поздно завтракать.

Чтобы все работало правильно, перемести пакет сна ниже пакета завтрака:

Package Tutorial PackageList4.jpg

Теперь в 8 часов утра заработает DefaultSleepEditorLoc1x8, перехватив управление персонажем. И последний час сна Бенду потратит на завтрак.

Итак, мы расписали уже не маленький фрагмент распорядка Бенду - 2 часа в день он есть, и еще 7 спит. Можно продолжить заполнять его распорядок дня, но в нашем случае (и во многих других) лучшим вариантом будет дать ему "запасной" пакет. Без каких-либо условий и распорядка, который будет выполняться всегда, когда персонаж не управляется другими пакетами. Естественно, его нужно разместить в самом низу списка пакетов.

Чаще всего, для этого мы используем пакеты "Sandbox" (en) (песочница). Он позволяет персонажу прогуливаться по округе, совершая в некоторой степени случайные действия. Он подходит в тех случаях, когда нам не важно, чем конкретно будет заниматься НИП в свободное время, но хочется, чтобы он вел себя более естественно.

В нашем случае, лучшим выбором станет DefaultSandboxHomeowner. Открой его и взгляни на таблицу Public Package Data:

Package Tutorial DefaultSandbox.jpg

Для "Location" указано значение "Near editor location, radius 1500" - это и задает размеры и положение "песочницы" в мире - окружность радиусом 1500 единиц вокруг точки расположения персонажа, заданной в редакторе (обычно, этого достаточно, чтобы позволить персонажу бродить по небольшому дому). Если ты посмотришь на остальные пакеты Бэнду, то увидишь, что все они также используют "Near editor location", поскольку не привязаны к определенной локации в мире и могут быть использованы где и кем угодно.

Еще одним полезным параметром этого пакета является "Unlock On Arrival = True". Он сообщает, что во время выполнения пакета, персонаж откроет все свои двери, что немаловажно - мы ведь не хотим, чтобы квестодатель прятался за закрытой дверью!

Можешь заглянуть на вкладки условий (Conditions) и расписания (Schedule), чтобы убедиться, что они пусты, а следовательно пакет будет выполняться всегда, если до него дойдет очередь (что нам и нужно).

Перетащи этот пакет в список Бэнду и расположи в самом низу. Всё. Простенькое расписание готово:

Package Tutorial PackageList5.jpg

Если хочешь проверить всё на практике, сохрани изменения и зайди в игру. Переместись к нему консольной командой:

coc MixwaterMillWorkersHouse

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

set gamehour to 2

Теперь Бенду ест, спит, бродит по "своему" дому. Если он откажется спать, пока ты рядом, можешь использовать команду toggledetection, тогда он будет тебя игнорировать.

Making a New Package

We've seen how to use existing "default" packages to build a schedule. What about making a new package specifically for Bendu? Let's say we want him to patrol the exterior around his house at a specific time during the day.

First, make a new package by right-clicking on the Package list and selecting "New". You'll get a blank package window that looks like this:

Package Tutorial NewPackage1.jpg

By default, the Travel template is selected - but we want to make a Patrol, so change the dropdown to Patrol. Note that the list of Package Data changes - the Patrol template requires different data than the Travel template. Now we have a blank Patrol package, ready to fill in some data for the specific package for Bendu:

Package Tutorial NewPackage2.jpg

The Patrol procedure page has the details for the data on this package. For now, the only things we need to specify on this package are:

  • Patrol Start - where should Bendu start his patrol route?
  • Schedule - what time of day should he run this package?

We haven't yet made a patrol route for Bendu, so let's load up the exterior and set up a simple one for him. (If you have the interior loaded, double-clicking on the yellow door marker is a quick way to get to the exterior; otherwise double-click on MixwaterMillExterior in the cell list for the Tamriel worldspace.)

If you're not familiar with linked references, the Encounters Tutorial is a good place to start. For now, let's just create a quick 3-point patrol route:

  1. Drop an XMarkerHeading into the render window.
  2. Duplicate it twice with CTRL-D.
  3. Move the 3 markers into a nice patrol route, then link them together using the Linked Ref tab on each reference.

You should end up with something looking like this (the exact locations of the patrol markers doesn't matter):

Package Tutorial NewPackage3.jpg

Now, in the package window, select Patrol Start and click the button on the right (it will initially say "Linked Ref". This will allow you to select the data for the Patrol Start - select the "Specific Reference" radio button and select one of your new patrol points (it doesn't matter which since they are all linked together in a circle).

Package Tutorial NewPackage4.jpg

The second thing we wanted to do was specify when Bendu should run this package (otherwise this will be the only thing he does when we put it on his package stack). Switch to the Schedule tab in the package window, and let's say he should walk around outside during the morning between 10am and 12pm:

Package Tutorial NewPackage5.jpg

The only thing left to do is give the package a name - let's say GSQBenduPatrol10x2, keeping with the standard naming conventions. Hit OK to close the window and we're done making a new package.

Now that we've made the new package, we have to add it to Bendu's package list in order to actually change his behavior. Find the new package in the Package section of the Object window, and drag it into Bendu's AI Package List. By default, all new packages are placed at the bottom of the actor's package list, but we want this new package to go to the top (or at least above the DefaultSandboxHomeowner package - otherwise it will never run because the DefaultSandboxHomeowner package is always valid). Use the << arrow key to move it to the top of Bendu's stack:

Package Tutorial NewPackage6.jpg

Hit OK to close Bendu's actor window and save your plugin. Go into the game to see Bendu do his new patrol:

coc MixwaterMillExterior
set gamehour to 10

That's it - you now know how to set up an actor's packages using existing or new packages. Most of the time, the premade Package Templates will provide all the functionality you need. But, if you find you need even more specialized behavior, you can even build your own Package Template.


LeftArrow.png Предыдущая статья К другим учебникам Следующая статья RightArrow.png



Language: English  • français • русский