Bethesda Tutorial Quest Aliases/ru

From the CreationKit Wiki
Revision as of 09:21, 14 April 2012 by imported>Vitamant
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Псевдонимы



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


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


Краткий обзор[edit | edit source]

Эта глава расскажет немного больше о псевдонимах, и почему же они так важны.

Ты узнаешь:

  • Как использовать условные псевдонимы.
  • Как правильно построить логику квеста, используя псевдонимы.

Мы делали это неправильно[edit | edit source]

То, что мы делали прежде - неверно.

Ну, не всё, конечно, но логика нашего квеста разнесена по всему мастер-файлу, что очень затрудняет ее изменение (в программировании это называется плохой инкапсуляцией).

Вот смотри: На Бэнду висит скрипт, который переводит стадию квеста GSQ01 на 200, когда тот умирает. Для изолированного случая, все как будто бы нормально. Но представь, что кто-то еще решил использовать Бэнду для своего квеста. Разработчик может изменить наш скрипт, или добавить собственный. Если это нормальный персонаж, без приставки "GSQ" в имени, то будет довольно сложно отследить и узнать, что же стало причиной внезапных багов в нашем квесте.

Та же проблем с амулетом и вором. Конечно, пока мы еще помним - где и что писали, и всё работает корректно, но будет намного лучше, если все будет лежать в одном месте, не правда ли? Вот тут нам и помогут псевдонимы!

Наложение псевдонимов[edit | edit source]

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

Открой окно персонажа GSQBenduOlo, которого мы создали ранее. После главы про "хвосты", он обзавелся скриптом обработки собственной смерти или был отмечен флажком "Essential". В любом случае, это избыточная и в большинстве случаев ненужная информация. Спроси себя: если квест GSQ01 не существует, есть ли какие-либо причины следить за дальнейшей судьбой Бенду? Правильный ответ: "нет". Очистим прототип от этого мусора. Убери флажок "Essential", если он стоит, и кнопкой "Remove" удали скрипт, если такой имеется.

А теперь открой псевдоним "Bendu", созданный на этапепостановки задач. В тот раз мы проигнорировали большую часть всевозможных настроек, а теперь присмотримся к ним повнимательнее. Не пугайся раньше времени.

FilledFirstAliasWindow.png

Что уже у нас здесь есть? Много всего. Панель скриптов. Набор пакетов. Инвентарь. Эт кетера. Все эти элементы ты можешь рассматривать, как его собственные. Как только у персонажа появляется псевдоним, тот принимает в себя все его параметры и использует, как свои собственные. Более того - стоит квесту завершиться, как все это бесследно исчезнет.

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

Вот несколько очевидных преимуществ:

  • Наши скрипты не будут смешиваться с чужими, и будут относиться только к конкретному квесту, а потому останутся простыми и легко отлаживаемыми.
  • Мы можем задать индивидуальные пакеты поведения на время выполнения задания. (Примечание: пакеты псевдонимов будут расположены над обычными пакетами, а значит получат приоритет при выполнении.)
  • Мы можем применять заклинания (включая пассивные способности) или задавать фракции персонажам на время выполнения задания, что несомненно повлияет на поведение персонажа (особенно в бою).
  • Если квест изменится и мы решим использовать другого персонажа, нам будет необходимо изменить лишь ссылку, к которой привязан псевдоним, и все будут работать. Восхитительно, правда?
Protip.jpg Чтобы возможные изменения было проделать еще проще, лучше всего использовать в диалогах проверку GetIsAliasRef вместо GetIsID. Придется, правда, пройтись по всем нашим диалогам и заменить условие "GetIsID GSQBenduOlo == 1" на "GetIsAliasRef Bendu == 1".

Одно маленькое "но": все предметы, которые персонаж получит через свой псевдоним, останутся у него и после отключения псевдонима. Если тебе все же понадобится убрать такие предметы, следует сделать это при помощи скриптов. Помни об этом.

Исправление Бенду[edit | edit source]

Но довольно теории. Давайте изменим псевдоним Бенду так, чтобы вернуть то, что мы только что испортили:

Бессмертие[edit | edit source]

Нет ничего проще - просто отметь флажок "Essential" вверху окна псевдонима и Бэнду будет невозможно убить, пока он обладает этим псевдонимом. Когда квест будет завершен, он вновь станет смертным.

Обработка смерти[edit | edit source]

Что же касается провала квеста в случае смерти нашего квестодателя, то и тут нет ничего сложного. Точно также, как мы писали скрипт для прототипа Бенду, напишем и для его псевдонима. Обрати внимание, что первая строчка изменилась, так как скрипт будет принадлежать уже не персонажу, а псевдониму. Назовем же мы его "GSQQuestgiver" (квестодатель).

Scriptname GSQQuestgiver extends ReferenceAlias

Event OnDeath(Actor akKiller)
	if (!GetOwningQuest().IsCompleted())
		GetOwningQuest().SetStage(200)
	endif
EndEvent

Также заметь, что в этот раз мы не стали устанавливать свойство для связи с квестом. Любой псевдоним (ReferenceAlias) знает, какому квесту принадлежит, и мы можем сослаться на него, вызвав функцию GetOwningQuest().

Однако, это можно сделать и иным способом, без создания нового скрипта. Установить стадию квеста, если умрет персонаж - это настолько распространенная задача, что она вынесена в список стандартных задач. Когда ты добавляешь новый скрипт псевдониму, то видишь список скриптов. Найди те, что начинаются с "default". Выбери "defaultSetStageOnDeathRefAlias" и установи свойства:

  • myQST: GSQ01
  • preReqStage: <оставь пустым>
  • StageToSet: 200

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

Изменение имени[edit | edit source]

В финале еще одно замечание: ты можешь изменить имя объекта, через его псевдоним. Определи любое сообщение (en) с любым текстом, и выбери его из списка "Display Name" вверху окна псевдонима.

AliasDisplayName.png

По-умолчанию, имя не изменяется на прежнее, после того, как псевдоним перестанет существовать. Это сделано для того, чтобы вернувшийся после сдачи квеста в очищенное подземелье игрок, не обнаружил груду трупов с совершенно другими именами. Но ты можешь изменить это, отметив флажок "Clears Name When Removed" в верхнем-правом углу.

Пакеты[edit | edit source]

Пакеты, определенные в псевдониме, располагаются выше стандартных для их эффективного перекрытия.


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



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