Difference between revisions of "Bethesda Tutorial Packages/ru"

From the CreationKit Wiki
Jump to navigation Jump to search
imported>Vitamant
imported>Vitamant
Line 27: Line 27:
Персонаж всегда следует первому правильному пакету. У персонажей поблизости от игрока обновление пакетов происходит очень часто; в отдаленных частях мира - очень редко.
Персонаж всегда следует первому правильному пакету. У персонажей поблизости от игрока обновление пакетов происходит очень часто; в отдаленных частях мира - очень редко.


=Creating a Simple Schedule=
=Создание простого распорядка=
So let's see how these ideas play out in practice by giving our old friend Bendu Olo a schedule. (Complete the [[Bethesda_Tutorial_Creating_an_Actor|Creating an Actor tutorial]] before continuing.)
Итак, давай опробуем это на практике, применительно к нашему старому другу Бенду Оло (для продолжения, заверши [[Bethesda_Tutorial_Creating_an_Actor/ru|урок по созданию персонажей]]).


Open GSQBenduOlo and go to the AI Packages tab, which currently looks like this:
Открой GSQBenduOlo и перейди на вкладку AI Packages, выглядит она так:


[[Image:Package_Tutorial_PackageList.jpg]]
[[Image:Package_Tutorial_PackageList.jpg]]


Since he has no packages at all in his list, he'll simply stand in place all day long. Let's give him something to do, so he seems more like a human being.
Список его пакетов пуст, а сам он день на пролет торчит на одном месте. Давай сделаем его более похожим на живого человека.


To add packages to an actor, you can right-click on the Package List and select "Add", or drag packages into the list from the Object Window. Let's do the latter - select Package in the Object list (under the Character section). Scroll down to the packages named "Default...". (This is a naming convention we use to indicate packages that are not tied to a particular spot in the world, and thus can be used by any actor.)
Чтобы добавить пакет персонажу, нужно щелкнуть ПКМ по списку Package List и выбрать "Add", или просто перетащить уже готовый из окна Object Window. Так и поступим - выбери узел Package в списке объектов (внутри Character). Введи в фильтре "Default" и найди в списке пакеты, начинающиеся с этого слова. Эти пакеты не имеют территориальной привязки и могут быть использованы для любого персонажа.


[[Image:Package_Tutorial_DefaultPackages.jpg]]
[[Image:Package_Tutorial_DefaultPackages.jpg]]


We can build a simple schedule for Bendu Olo using these premade packages. Let's say we want him to eat breakfast and dinner at home, sleep at night, and otherwise just hang around his house.
Используя базовые пакеты, мы легко можем научить Бэнду завтракать и ужинать, спать ночью, а днем бродить по своему дому.


For eating, let's check the existing default "eat" packages - let's pick '''DefaultEatEditorLoc8x1''' (breakfast) and '''DefaultEatEditorLoc18x1''' (dinner). Note: we use a naming convention to indicate packages which have a schedule: "STARTTIMExDURATION". So "8x1" indicates a package starting at 8 am and lasting for 1 hour; "18x1" indicates a package starting at 6 pm and also lasting for 1 hour. But of course the naming could be wrong - let's check the actual data on the packages to make sure their schedules match their names. 1 hour in game lasts 3 minutes in real life (20 minutes in-game equals 1 minute rl; 24h equals 72min).
Для еды мы используем стандартные пакет, в которому поминается еда ("eat") - выбери '''DefaultEatEditorLoc8x1''' (завтрак) и '''DefaultEatEditorLoc18x1''' (ужин). Примечание: по соглашению об именовании, в имени пакета указывается его время в формате: НачалоxПродолжительность". Значит "8x1" означает, что пакет может быть выполнен в 8 часов утра и займет персонажа на 1 час; "18x1" - соответственно в 6 вечера и продлиться также 1 час. Один игровой час равен трем минутам реального времени. Разумеется, нельзя безоговорочно верить названию пакета - оно может оказаться неверным. Так что давайте убедимся, что время задано верно:


Open the two packages and select their Schedule tabs, which look like this:
Открой оба пакета и перейди на вкладку Schedule. Выглядеть это будет так:


[[Image:Package_Tutorial_DefaultEatEditorLoc8x1.jpg]]
[[Image:Package_Tutorial_DefaultEatEditorLoc8x1.jpg]]




Their names didn't lie - these packages are valid at the times we expected. Great, so let's add these to Bendu Olo's package list, which now looks like this:
Как мы видим, имя не врет - время указано верное. Перетащи, если еще этого не сделал их в список пакетов Бэнду Оло.


[[Image:Package_Tutorial_PackageList2.jpg]]
[[Image:Package_Tutorial_PackageList2.jpg]]


Now as we discussed earlier, order is important in the package list, since the actor will always run the highest valid package in his list. For these two packages, however, it doesn't matter, because they are never valid at the same time - if it's between 8am and 9am, DefaultEatEditorLoc8x1 is valid; if it's between 6pm and 7pm, DefaultEatEditorLoc18x1 is valid; at any other time neither are valid. So the order of these packages doesn't matter. But stay tuned - for the next packages we add to Bendu Olo's list, the order will be crucial to making his schedule work correctly.
Как мы уже говорили, очень важен порядок следования пакетов. Выполняться будет первый, отвечающий всем условиям. Для этих двух пакетов это не принципиально, так как их расписание не пересекается. С 8 до 9 будет выполняться DefaultEatEditorLoc8x1, а с 18 до 19 - DefaultEatEditorLoc18x1. В остальное время суток ни тот, ни другой не пройдут проверку и не будут управлять действиями персонажа. Но не расслабляйся - следующие пакеты, которые мы добавим Бенду, нарушат его распорядок, если будут расположены не в том порядке.


We said we wanted him to sleep at night, so let's find a sleep package in the "default" list - let's pick '''DefaultSleepEditorLoc1x8''', which isn't actually the best choice but it will help illustrate the importance of stack order in the package list.
Мы хотели, чтобы Бенду спал по ночам. Найди пакет '''DefaultSleepEditorLoc1x8''', не самый лучший выбор, но он наглядно продемонстрирует о том, как важен порядок следования пакетов.


If you're paying close attention, you may have noted that this sleep package, which is valid from 1am to 9am, overlaps Bendu's breakfast package (DefaultEatEditorLoc8x1), which is valid from 8am to 9am. Here's where the order of the package stack starts to matter.
В результате несложных расчетов, ты заметишь, что новый пакет будет верным с 1 ночи до 9 утра, то есть наложится на пакет завтрака (DefaultEatEditorLoc8x1). Сейчас мы посмотрим - что же будет, если порядок пакетов неверен...


Say we put the sleep package at the top of Bendu's list, like this:
Перемести пакет сна на самый верх набора пакетов Бенду. Вот так:


[[Image:Package_Tutorial_PackageList3.jpg]]
[[Image:Package_Tutorial_PackageList3.jpg]]


Since the highest valid package "wins", at 8am Bendu will continue running his sleep package - the eat package lower in the stack will never be run, even though it is also valid at this time.
Поскольку верхний пакет будет проходить проверки на протяжении всего заявленного действия, то, до его окончания, очередь до пакета завтрака, находящегося ниже, так и не дойдет. Когда же закончится время сна, будет уже поздно завтракать.


To make this work, all we have to do is make sure that the sleep package is below the breakfast package in Bendu's list, like this:
Чтобы все работало правильно, перемести пакет сна ниже пакета завтрака:


[[Image:Package_Tutorial_PackageList4.jpg]]
[[Image:Package_Tutorial_PackageList4.jpg]]


Now, he will start his DefaultSleepEditorLoc1x8 at 1 am, as we intended - it's the only valid package at that time. When 8am rolls around, Bendu will switch to DefaultEatEditorLoc8x1, because it is now the highest valid package - so Bendu will only get 7 hours of sleep instead of the 8 specified by his sleep package, but he won't miss his breakfast.
Теперь в 8 часов утра заработает DefaultSleepEditorLoc1x8, перехватив управление персонажем. И последний час сна Бенду потратит на завтрак.
   
   
We've now got a good chunk of Bendu's day covered - he eats for 2 hours a day, and sleeps for 7. We could continue to fill in his day with scheduled packages, but it's almost always a good idea to give him a "fallback" package to run when nothing else is valid. This package should have no conditions, and no schedule so it is always valid - and because of that, it should sit at the very bottom of his package list.
Итак, мы расписали уже не маленький фрагмент распорядка Бенду - 2 часа в день он есть, и еще 7 спит. Можно продолжить заполнять его распорядок дня, но в нашем случае (и во многих других) лучшим вариантом будет дать ему "запасной" пакет. Без каких-либо условий и распорядка, который будет выполняться всегда, когда персонаж не управляется другими пакетами. Естественно, его нужно разместить в самом низу списка пакетов.


We often use a [[Sandbox_(Procedure)|Sandbox]] package for just this purpose - it lets the NPC move around a space, picking semi-randomly what to do. Very useful when we don't particularly care what the NPC is doing but want him to continue to behave naturally.
Чаще всего, для этого мы используем пакеты {{ulink|Sandbox_(Procedure)|"Sandbox"}} (песочница). Он позволяет персонажу прогуливаться по округе, совершая в некоторой степени случайные действия. Он подходит в тех случаях, когда нам не важно, чем конкретно будет заниматься НИП в свободное время, но хочется, чтобы он вел себя более естественно.


For our purposes, '''DefaultSandboxHomeowner''' is a good choice. Let's open it up and take a look at its data:
В нашем случае, лучшим выбором станет '''DefaultSandboxHomeowner'''. Открой его и взгляни на таблицу Public Package Data:


[[Image:Package_Tutorial_DefaultSandbox.jpg]]
[[Image:Package_Tutorial_DefaultSandbox.jpg]]


Its "Location" field specifies "Near editor location, radius 1500" - this means that he will "sandbox" around the spot he is placed in the editor, with a radius of 1500 units (which is usually enough to cover a small interior building). If you look at the other default packages in Bendu's list, you'll notice they're all using "Near editor location" - because they don't specify an exact location in the world, they can be used by any actor.
Для "Location" указано значение "Near editor location, radius 1500" - это и задает размеры и положение "песочницы" в мире - окружность радиусом 1500 единиц вокруг точки расположения персонажа, заданной в редакторе (обычно, этого достаточно, чтобы позволить персонажу бродить по небольшому дому). Если ты посмотришь на остальные пакеты Бэнду, то увидишь, что все они также используют "Near editor location", поскольку не привязаны к определенной локации в мире и могут быть использованы где и кем угодно.


Another useful feature of this package is "Unlock On Arrival = True". This means that whenever he starts running this package, he will unlock his doors, which is good since he's supposed to be a questgiver - we don't want him hiding behind a locked door.
Еще одним полезным параметром этого пакета является "Unlock On Arrival = True". Он сообщает, что во время выполнения пакета, персонаж откроет все свои двери, что немаловажно - мы ведь не хотим, чтобы квестодатель прятался за закрытой дверью!


You can flip to its Conditions and Schedule tabs to verify that it has no conditions, and no specified schedule, which means that it is always valid (which is what we wanted).
Можешь заглянуть на вкладки условий (Conditions) и расписания (Schedule), чтобы убедиться, что они пусты, а следовательно пакет будет выполняться всегда, если до него дойдет очередь (что нам и нужно).


So, let's drop this into Bendu's list at the bottom. He now has a complete, simple schedule:
Перетащи этот пакет в список Бэнду и расположи в самом низу. Всё. Простенькое расписание готово:


[[Image:Package_Tutorial_PackageList5.jpg]]
[[Image:Package_Tutorial_PackageList5.jpg]]


If you want to see him in action, load up the game and move yourself to him:
Если хочешь проверить всё на практике, сохрани изменения и зайди в игру. Переместись к нему консольной командой:


  coc MixwaterMillWorkersHouse
  <pre>coc MixwaterMillWorkersHouse</pre>


To see his behavior at different times, you can change the time in the game as follows:
Чтобы увидеть, как меняется его поведение в зависимости от времени суток, используй команды для изменения игрового времени:


  set gamehour to 2
  <pre>set gamehour to 2</pre>


He now has some simple eat/sleep/wander behaviors inside "his" house. If he does not want to sleep and asks you to leave, you can use the command ''toggledetection'' so he ignores you.
Теперь Бенду ест, спит, бродит по "своему" дому. Если он откажется спать, пока ты рядом, можешь использовать команду ''toggledetection'', тогда он будет тебя игнорировать.


=Making a New Package=
=Making a New Package=

Revision as of 04:51, 14 April 2012

Пакеты



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 • русский