У цьому розділі ми розповімо про те, що таке пакети і як їх налаштовувати.
- Як працюють набори пакетів.
- Як створити простий розпорядок дня для НІП.
- Як створити новий пакет.
Термін "Пакет" використовується в Creation Kit для позначення структури даних, яка описує поведінку персонажів. В один момент часу персонажем може управляти тільки один пакет, який управляє його діями, змушуючи спати, їсти, патрулювати територію, хитатися по окрузі, працювати в кузні, і так далі.
Як же персонаж визначає, який пакет він повинен використовувати? Ось тут і вступає в гру набір пакетів. Ідея проста - у кожного персонажа є набір пакетів, які він може використовувати. Періодично гра пробігає його зверху вниз. Перевіряє, чи можна використовувати пакет. Якщо перевірка пройшла успішно - включає його. Якщо немає - переходить до наступного. Перевірка проходить успішно, якщо:
Персонаж завжди слід першому правильному пакету. У персонажів поблизу від гравця оновлення пакетів відбувається дуже часто, у віддалених частинах світу - дуже рідко.
Давайте випробуємо це на практиці - може застосовуватись до бенду Оло (для продовження завершите урок зі створення персонажів).
Відкрийте 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" (пісочниця). Він дозволяє персонажу прогулюватися по окрузі, здійснюючи в деякій мірі випадкові дії. Він підходить в тих випадках, коли не важливо, чим конкретно буде займатися НІП у вільний час, але хочеться, щоб він поводився більш природно.
У нашому випадку, кращим вибором стане DefaultSandboxHomeowner. Відкрийте його і погляньте на таблицю Public Package Data:
Ще одним корисним параметром цього пакета є "Unlock On Arrival = True". Він повідомляє, що під час виконання пакета, персонаж відкриє всі свої двері, що не менш важливо - ви ж не хочете, щоб квестодателя ховався за зачиненими дверима.
Ви можете подивитися на вкладки умов (Conditions) і розкладу (Schedule), щоб переконатися, що вони порожні, отже, пакет буде виконуватися завжди, якщо до нього дійде черга (це вам і потрібно).
Перетягніть цей пакет в самий низ списку бенд. Простеньке розклад готове:
Якщо хочете перевірити всі на практиці, збережіть зміни і зайдіть в гру. Прокрутіть до бенду консольної командою:
Щоб побачити, як змінюється його поведінка в залежності від часу доби, використовуйте команди для зміни ігрового часу:
Тепер бенд їсть, спить, блукає по "своєму" будинку. Якщо він відмовиться спати, поки ви поруч, можете використовувати команду toggledetection. тоді він буде вас ігнорувати.
Тепер ви знаєте, як, використовуючи "default" пакети, можна скласти розклад персонажа. Прийшов час зайнятися написанням власного пакета бенд. Давайте навчимо його ходити навколо свого будинку в денний час.
Для початку створіть новий пакет. ПКМ в списку пакетів, і виберіть "New". Ви побачите порожнє вікно пакета:
За замовчуванням обраний шаблон Travel (подорож). Але вам потрібен Patrol (патруль), виберіть його зі списку. Зверніть увагу: змінилася таблиця Package Data - параметри шаблону Patrol відрізняються від параметрів Travel. Тепер у вас порожній пакет на основі шаблону Patrol:
На відповідній сторінці ви можете детально ознайомитися з кожним з параметрів цього пакета. Поки ж потрібно визначити:
- Patrol Start - звідки бенд почне свій маршрут.
- Schedule - в який час буде виконуватися даний пакет.
Маршруту поки ще немає, давайте зробимо його. (Якщо у вас вже завантажено житло бенд, двічі клацніть по жовтому маркеру у двері, інакше двічі клацніть по MixwaterMillExterior в списку осередків простору Tamriel.)
Якщо ви ще не читали Encounters Tutorial. то корисним буде ознайомитися, але це не є необхідністю. Все, що вам потрібно - створити маршрут з трьох точок:
- Перетягніть XMarkerHeading в вікно візуалізації.
- Двічі продублюйте їх поєднанням Ctrl + D.
- Перемістіть маркери так, як вам подобається, і об'єднайте їх в маршрут, використовуючи вкладку Linked Ref кожного маркера.
У підсумку вийде щось подібне (точне розташування маркерів значення не має):
Тепер у вікні пакета виберіть параметр Patrol Start і двічі клацніть по кнопці "Linked Reference" справа. У вікні переведіть тип посилання на "Specific Reference" і виберіть будь-яку з точок (не має значення яку саме, так як вони пов'язані в єдиний маршрут).
Також ми хотіли вказати проміжок часу, в який буде виконуватися цей пакет - з 10 до 12 годин. вказуємо:
Залишилося дати пакету яке-небудь ім'я. Наприклад GSQBenduPatrol10x2 (не забувайте про угоду про іменування). Клацніть по кнопці "ОК", щоб зберегти зміни і закрити вікно.
Ви створили свій перший пакет. Тепер потрібно додати його в набір пакетів бенд. Знайдіть свій пакет в списку об'єктів і перетягніть в список пакетів бенд. За замовчуванням всі додаються пакети розташовуються внизу списку. Але в цьому випадку чергу до нього ніколи не дійде, тому що вище розташована "пісочниця". Перемістіть його наверх:
Натисніть "ОК", щоб закрити вікно персонажа, і збережіть плагін. Зайдіть в гру і переконайтеся, що бенд слід прокладеному маршруту:
Тепер ви знаєте, як змінювати поведінку персонажів, використовуючи існуючі і свої власні пакети. Існуючі шаблони пакетів здатні поставити практично будь-яка поведінка, вам потрібно лише задати правильні параметри. Якщо ж буде потрібно щось зовсім екзотична, ви можеш створити і свої власні шаблони.