Підручник bethesda пакети

Цей підручник покаже Новомосковсктелю як налаштовувати пакети (структури даних, що керують поведінкою актора) для актора, щоб змусити його пересуватися по світу.

  • Як працюють пакетні стеки
  • Як створити просте щоденне розклад дня для NPC
  • Як створити новий пакет

Пакет - це термін, що використовується в Creation Kit для структури даних, яка керує поведінкою актора. У будь-який момент часу, актор одночасно може виконувати один і тільки один пакет, який і повідомляє акторові, що йому робити - спати, їсти, ходити навколо, слідувати патрульному маршруту, працювати в кузні і ін.

Так звідки актор знає, який пакет він повинен почати виконувати в будь-який заданий час? Тут приходить на допомогу Package Stack. Основна ідея якого полягає в тому, що кожен актор має стек пакетів, які він може виконувати. Гра періодично запускає пакети по списку, починаючи з пакета, що знаходиться у верхній частині стека, і перевіряє кожен пакет по одному за раз, щоб визначити, який з них відповідає заданим умовам в даний момент часу. Пакет є дійсним, якщо:

  • Його умови визначаються як true, і
  • Поточний час дня потрапляє в рамки, зазначені в його розкладі.

Актор завжди виконує перший відповідає умовам пакет з стека. Актори, які містяться близько гравця, будуть дуже часто переглядати свій стек пакетів; актори в не завантаженою області ігрового світу, відповідно рідше.

Отже, давайте подивимося, як ці ідеї працюю на практиці, дамо нашому старому другові Бенду Оло розклад. (Завершіть підручник по створенню актора перед тим, як йти далі.)

Відкрийте GSQBenduOlo і перейдіть на вкладку AI Packages, яка в даний момент виглядає так:

Підручник bethesda пакети

Так як він не має жодного пакета в списку, то він весь день буде стояти на місці. Отже, давайте змусимо його щось робити, щоб він був більше схожий на людину.

Щоб додати пакети акторові, ви можете натиснути правою кнопкою в списку AI Package List і вибрати "Add", або перетягнути в цей список потрібний пакет з вікна Object Window. Давайте зробимо останній варіант - клацніть по Package в списку об'єктів (що знаходиться в секції Character). Прокрутіть до пакетів, що починаються з "Default.". (Ця угода по іменування, яке ми використовуємо для позначення пакетів, які не прив'язані до конкретних місць в світі, і таким чином вони можуть використовуватися будь-яким актором.)

Підручник bethesda пакети

Ми можемо створити для Бенду просте розклад, використовуючи ці, вже готові пакети. Отже, давайте повідомимо йому, що ми хочемо, щоб він снідав і вечеряв вдома, спав ночами, або ж просто бовтався навколо по його дому.

Для їжі, давайте подивимося існуючі за умовчанням "eat" (їсти) пакети - візьміть DefaultEatEditorLoc8x1 (сніданок) і DefaultEatEditorLoc18x1 (вечеря). Примітка: ми використовуємо угоду по іменування пакетів щоб вказати, які з них мають розклад: "ВРЕМЯНАЧАЛАxДЛІТЕЛЬНОСТЬ". Тому "8x1" вказує, що пакет буде запускатися в 8 ранку і триватиме 1 годину; "18x1" вказує, що пакет буде запущений в 6 вечора, і також буде тривати 1 годину. Але, звичайно, іменування може бути і неправильним - давайте перевіримо фактичні дані в пакетах, щоб переконатися, що їх розкладу відповідають їх іменами. 1 годину в грі триває 3 хвилини реального часу (20 хвилин ігрового дорівнює 1 хвилині реального; 24 години еквівалентно 72 хвилинам реального).

Тепер, відкрийте обидва ці пакета, і перейдіть на вкладки Schedule, які виглядають так:

Підручник bethesda пакети


Їх імена не брешуть - ці пакети вірні для того часу, на яке ми і розраховували. Чудово, тепер додамо їх до списку пакетів Бенду Оло, який зараз буде виглядати так:

Підручник bethesda пакети

Тепер, як ми обговорювали раніше, в списку пактів важливе значення має їх порядок, так як актор завжди виконує задовольняє умовам пакет починаючи перевірку зверху списку - вниз. Що стосується цих двох пакетів, то тут це не грає значення, тому що вони не можуть задовольняти умови в один і той же час - якщо час між 8 і 9 ранку, пакет DefaultEatEditorLoc8x1 діє; якщо ж між 6 і 7 вечора, то DefaultEatEditorLoc18x1 діє; в інший час ні той ні інший пакет не діятимуть. Так що порядок пакетів в цьому випадку не грає ролі. Але будьте уважні - ми додамо наступний пакет в список Бенду Оло, і вже тут порядок буде грати вирішальне значення, щоб його розклад працювало правильно.

Ми говорили що хочемо, щоб він спав вночі, тому давайте знайдемо пакет відповідає за сон в списку пакетів, що починається з "default" - візьміть пакет DefaultSleepEditorLoc1x8. який, насправді, не є найкращим прикладом, але зате допомагає проілюструвати важливість порядку стека в списку пакетів.

Якщо ви звернули увагу, то напевно зрозуміли, що цей пакет дійсний з 1 ночі до 9 ранку, і потрапляє на пакет сніданку Бенду (DefaultEatEditorLoc8x1), який дійсний з 8 до 9 ранку. Так що ось де порядок в стеці починає грати значення.

AM (лат. Ante meridiem) - час до полудня, PM (лат. Post meridiem) - після полудня, наприклад 6pm це 18 годин і т.п.

Скажімо ми перетягнули пакет сну в верхню частину списку Бенду, як на зображенні:

Підручник bethesda пакети

Оскільки верхній дійсний пакет в списку має "пріоритет" над іншими, в 8 ранку Бенду буде продовжувати виконання пакету сну - пакет же їжі знаходиться нижче його в стеці і тому ніколи не буде запущений, навіть якщо поточний час відповідає вказаному у нього в умовах.

Щоб він теж працював, все що нам потрібно зробити, це розмістити пакет сну нижче пакета зі сніданком в списку Бенду, ось так:

Підручник bethesda пакети

Щоб пересунути пакет в стеці, використовуйте кнопки і

Тепер він буде виконувати свій пакет DefaultSleepEditorLoc1x8 о 1 годині ночі, як ми планували - це єдиний дійсний пакет в цей час. Коли настане 8 ранку, Бенду переключиться на пакет DefaultEatEditorLoc8x1, тому що зараз це дійсний пакет, що знаходиться вище в стеку - тому Бенду спатиме 7 годин замість зазначених 8 в пакеті сну, але зате він не пропустить сніданок.

Тепер у нас є хороший розпорядок дня для Бенду - він їсть 2 години на день, і спить 7. Ми б і далі могли заповнювати його день пакетами з розкладом, але в більшості випадків, краще буде зробити йому пакет "на всякий пожежний", який буде запускатися, коли жоден інший не дійсний. Цей пакет не повинен містити умов, і розкладу, тому він завжди дійсний - і тому, він повинен знаходитися в самому низу списку пакетів.

Для цих цілей ми часто використовуємо пакет Sandbox - він дозволяє NPC рухатися в просторі, вибираючи напів-випадковим чином, що робити. Це дуже корисно, коли ми не особливо хвилюємося про те, що NPC роблять, але хочемо, щоб вони продовжував вести себе природно.

Для наших цілей, хорошим вибором буде пакет DefaultSandboxHomeowner. Давайте відкриємо його і подивимося на його дані:

Підручник bethesda пакети

Підручник bethesda пакети

Бенду вечеряє шматком хліба, який звідкись дістав

Інша корисна можливість цього пакета - "Unlock On Arrival = True". Це означає, що всякий раз, коли актор виконує цей пакет, він буде відкривати двері в своєму приміщенні, що добре, так як він повинен давати квест - ми ж не хочемо, щоб він переховувався за замкненими дверима.

Ви можете пройтися по вкладках Conditions і Schedule щоб переконатися, що вони не містять умов, і немає конкретного розкладу, для того, щоб пакет завжди був дійсний (чого ми якраз і хочемо).

Отже, помістіть цей пакет в список пакетів Бенду, в самий низ. Тепер у нього є готове, просте розклад на день:

Підручник bethesda пакети

Якщо ви хочете побачити його в дії, запустіть гру і перейдіть до Бенду:

Щоб поспостерігати за різною поведінкою, ви можете змінювати час доби в грі:

Тепер у нього є кілька простих поводжень - є / спати / бродити, які будуть виконуватися всередині "його" вдома. Якщо він не захоче спати і попросить вас залишити приміщення, ви можете використовувати команду toggledetection. щоб він ігнорував гравця.

Ми подивилися як використовувати існуючі "стандартні" (default) пакети для побудови розкладу дня. А як на рахунок того, щоб зробити новий пакет, конкретно для Бенду? Припустимо, ми хочемо, щоб він патрулював екстер'єр навколо свого будинку в певний час протягом дня.

По-перше, створіть новий пакет, клікнувши правою кнопкою мишки в списку пакетів вікна Object Window і виберіть "New". Вам відкриється порожнє вікно пакета, яке виглядає ось так:

Підручник bethesda пакети

За замовчуванням обраний шаблон Travel (подорож) - але ми хочемо зробити патрулювання, тому оберіть зі списку Patrol. Зверніть увагу, що список Package Data змінився - шаблоном Patrol необхідні інші дані, ніж шаблоном Travel. Тепер у нас є порожній пакет за шаблоном Patrol, давайте заповнимо деякі дані для конкретного пакета для Бенду:

Підручник bethesda пакети

На сторінці процедури Patrol докладно описані дані цього пакета. На даний момент, єдине, що нам потрібно вказати в цьому пакеті:

  • Patrol Start - коли Бенду повинен почати патрулювати маршрут?
  • Schedule - в який час дня він повинен використовувати цей пакет?

Ми ще не зробили патрульний маршрут для Бенду, так що давайте завантажимо екстер'єр і створимо простий маршрут для нього. (Якщо у вас завантажений інтер'єр, зробіть подвійне клацання по жовтому маркеру двері, і ви швидко переміститеся в екстер'єр біля вхідних дверей; а якщо йти іншим шляхом, то завантажте осередок MixwaterMillExterior в списку осередків ігрового простору Tamriel.)

  1. Перетягніть XMarkerHeading в вікно render window.
  2. Двічі дублюйте його використовуючи комбінацію клавіш CTRL-D.
  3. Розмістіть 3 маркера так, щоб створити найбільш хороший маршрут для патрулювання, потім зв'яжіть їх разом, використовуючи вкладку Linked Ref у кожного з маркерів.

У підсумку ви повинні отримати щось на зразок цього (точне місце розташування маркерів патрулювання не має значення):

Підручник bethesda пакети

Тепер, у вікні Package, виберіть у списку Patrol Start і натисніть на кнопку праворуч (спочатку вона буде називатися "Linked Ref". Це дозволить вам вибрати дані для початкової точки патрулювання (Patrol Start) - натисніть радіо кнопку "Specific Reference" і виберіть один з щойно створених маркерів патрулювання (який саме не має значення, тому що вони пов'язані між собою по колу).

Підручник bethesda пакети

Друге, що нам потрібно зробити, вказати коли Бенду повинен використовувати цей пакет (в іншому випадку це єдине, що він буде робити, коли ми ставимо йому стек пакетів). Перейдіть на вкладку Schedule у вікні package, і, скажімо, що він повинен ходити поза домом вранці між 10am і 12pm:

Підручник bethesda пакети

Єдине, що залишилося зробити, це дати ім'я пакету - назвемо його GSQBenduPatrol10x2, відповідаючи стандартним правилам іменування. Натисніть OK щоб закрити це вікно, ну ось і закінчили створення нового пакета.

Тепер після того, як ми створили новий пакет, нам потрібно додати його в список пакетів Бенду, для того, щоб реально змінити його поведінку. Знайдіть наш новий пакет в секції Package вікна Object window, і перетягніть його в список AI Package List нашого Бенду. За замовчуванням, всі нові пакети розміщуються внизу списку пакетів, але ми хочемо, щоб цей пакет знаходився в верху списку (або принаймні над пакетом DefaultSandboxHomeowner - інакше він ніколи не буде працювати, тому що пакет DefaultSandboxHomeowner завжди дійсний). Використовуйте кнопку щоб пересунути його в верхню частину стека Бенду:

Підручник bethesda пакети

Натисніть OK щоб закрити вікно актора Бенду і збережіть ваш плагін. Тепер зайдіть в гру і подивіться як Бенду патрулюватиме околиця:

Ось і все - тепер ви знаєте як настроювати існуючі пакети для акторів або створювати і використовувати нові. У більшості випадком, готові Шаблони Пакетів надаватимуть всю необхідну функціональність. Але, якщо вам раптом знадобилося більш конкретну поведінку, ви навіть можете створити ваш власний Шаблон Пакета.

попередній підручник

Схожі статті