Difference between revisions of "Bethesda Tutorial Quest Aliases/ru"
imported>Vitamant (Created page with "{{PageTitle|Псевдонимы}} {{RussianPage|t}} {{Tutorial Index/ru |titlename=Псевдонимы |Prev=Bethesda_Tutorial_Packages/ru |Next=Bethesda_Tutorial_Advanced...") |
imported>Vitamant |
||
(8 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
{{PageTitle|Псевдонимы}} | {{PageTitle|Псевдонимы}} | ||
{{RussianPage| | {{RussianPage|e}} | ||
{{Tutorial Index/ru | {{Tutorial Index/ru | ||
Line 17: | Line 17: | ||
* Как правильно построить логику квеста, используя псевдонимы. | * Как правильно построить логику квеста, используя псевдонимы. | ||
= | =Мы делали это неправильно= | ||
То, что мы делали прежде - неверно. | |||
Ну, не всё, конечно, но логика нашего квеста разнесена по всему мастер-файлу, что очень затрудняет ее изменение (в программировании это называется плохой инкапсуляцией). | |||
Вот смотри: На Бэнду висит скрипт, который переводит стадию квеста GSQ01 на 200, когда тот умирает. Для изолированного случая, все как будто бы нормально. Но представь, что кто-то еще решил использовать Бэнду для своего квеста. Разработчик может изменить наш скрипт, или добавить собственный. Если это нормальный персонаж, без приставки "GSQ" в имени, то будет довольно сложно отследить и узнать, что же стало причиной внезапных багов в нашем квесте. | |||
Та же проблем с амулетом и вором. Конечно, пока мы еще помним - где и что писали, и всё работает корректно, но будет намного лучше, если все будет лежать в одном месте, не правда ли? Вот тут нам и помогут псевдонимы! | |||
= | =Наложение псевдонимов= | ||
Думайте о псевдонимах, как об участниках нашей истории. Мы используем их, пока квест выполняется. Когда же они нам больше не нужны, мы можем с чистой совестью от них избавиться. При таком подходе, получится чистая, намного лучше организованная структура квеста. Удобная и менее ресурсоемкая. | |||
Открой окно персонажа GSQBenduOlo, которого мы создали [[Bethesda_Tutorial_Creating_an_Actor/ru|ранее]]. После главы про [[Bethesda_Tutorial_Quest_Loose_Ends/ru|"хвосты"]], он обзавелся скриптом обработки собственной смерти или был отмечен флажком "Essential". В любом случае, это избыточная и в большинстве случаев ненужная информация. Спроси себя: если квест GSQ01 не существует, есть ли какие-либо причины следить за дальнейшей судьбой Бенду? Правильный ответ: "нет". Очистим прототип от этого мусора. Убери флажок "Essential", если он стоит, и кнопкой "Remove" удали скрипт, если такой имеется. | |||
А теперь открой псевдоним "Bendu", созданный на этапе[[Bethesda_Tutorial_Quest_Objectives/ru|постановки задач]]. В тот раз мы проигнорировали большую часть всевозможных настроек, а теперь присмотримся к ним повнимательнее. Не пугайся раньше времени. | |||
[[File:FilledFirstAliasWindow.png|600px]] | [[File:FilledFirstAliasWindow.png|600px]] | ||
Что уже у нас здесь есть? Много всего. Панель скриптов. Набор пакетов. Инвентарь. Эт кетера. Все эти элементы ты можешь рассматривать, как его собственные. Как только у персонажа появляется псевдоним, тот принимает в себя все его параметры и использует, как свои собственные. Более того - стоит квесту завершиться, как все это бесследно исчезнет. | |||
Это очень важный аспект, поэтому повторим еще раз: '''Персонаж использует данные псевдонима только, пока выполняется квест, и существует этот псевдоним'''. Когда квест завершится, персонаж избавится от псевдонима и всех его свойств. Кроме того, псевдоним можно снять и {{ulink|Clear_-_ReferenceAlias|самостоятельно}}, во время выполнения квеста.) | |||
Вот несколько очевидных преимуществ: | |||
* | * Наши скрипты не будут смешиваться с чужими, и будут относиться только к конкретному квесту, а потому останутся простыми и легко отлаживаемыми. | ||
* | * Мы можем задать индивидуальные пакеты поведения на время выполнения задания. (Примечание: пакеты псевдонимов будут расположены над обычными пакетами, а значит получат приоритет при выполнении.) | ||
* | * Мы можем применять заклинания (включая пассивные способности) или задавать фракции персонажам на время выполнения задания, что несомненно повлияет на поведение персонажа (особенно в бою). | ||
* | * Если квест изменится и мы решим использовать другого персонажа, нам будет необходимо изменить лишь ссылку, к которой привязан псевдоним, и '''все будут работать'''. Восхитительно, правда? | ||
{{ProTip| | {{ProTip|Чтобы возможные изменения было проделать еще проще, лучше всего использовать в диалогах проверку GetIsAliasRef вместо GetIsID. Придется, правда, пройтись по всем нашим диалогам и заменить условие "GetIsID GSQBenduOlo <nowiki>==</nowiki> 1" на "GetIsAliasRef Bendu <nowiki>==</nowiki> 1".}} | ||
Одно маленькое "но": все предметы, которые персонаж получит через свой псевдоним, останутся у него и после отключения псевдонима. Если тебе все же понадобится убрать такие предметы, следует сделать это при помощи скриптов. Помни об этом. | |||
= | =Исправление Бенду= | ||
Но довольно теории. Давайте изменим псевдоним Бенду так, чтобы вернуть то, что мы только что испортили: | |||
== | ==Бессмертие== | ||
Нет ничего проще - просто отметь флажок "Essential" вверху окна псевдонима и Бэнду будет невозможно убить, пока он обладает этим псевдонимом. Когда квест будет завершен, он вновь станет смертным. | |||
== | ==Обработка смерти== | ||
Что же касается провала квеста в случае смерти нашего квестодателя, то и тут нет ничего сложного. Точно также, как мы писали скрипт для прототипа Бенду, напишем и для его псевдонима. Обрати внимание, что первая строчка изменилась, так как скрипт будет принадлежать уже не персонажу, а псевдониму. Назовем же мы его "GSQQuestgiver" (квестодатель). | |||
<source lang="papyrus"> | <source lang="papyrus"> | ||
Line 69: | Line 68: | ||
</source> | </source> | ||
Также заметь, что в этот раз мы не стали устанавливать свойство для связи с квестом. Любой псевдоним (ReferenceAlias) знает, какому квесту принадлежит, и мы можем сослаться на него, вызвав функцию <code>GetOwningQuest()</code>. | |||
Однако, это можно сделать и иным способом, без создания нового скрипта. Установить стадию квеста, если умрет персонаж - это настолько распространенная задача, что она вынесена в список стандартных задач. Когда ты добавляешь новый скрипт псевдониму, то видишь список скриптов. Найди те, что начинаются с "default". Выбери "defaultSetStageOnDeathRefAlias" и установи свойства: | |||
* myQST: GSQ01 | * myQST: GSQ01 | ||
* preReqStage: < | * preReqStage: <оставь пустым> | ||
* StageToSet: 200 | * StageToSet: 200 | ||
Использование стандартных скриптов позволяет сократить их общее число и сэкономить немного памяти. Не то что бы это было архиважно, но лучше использовать их, если есть такая возможность. | |||
= | =Изменение имени= | ||
В финале еще одно замечание: ты можешь изменить имя объекта, через его псевдоним. Определи любое {{ulink|Message|сообщение}} с любым текстом, и выбери его из списка "Display Name" вверху окна псевдонима. | |||
[[File:AliasDisplayName.png]] | [[File:AliasDisplayName.png]] | ||
По-умолчанию, имя '''не''' изменяется на прежнее, после того, как псевдоним перестанет существовать. Это сделано для того, чтобы вернувшийся после сдачи квеста в очищенное подземелье игрок, не обнаружил груду трупов с совершенно другими именами. Но ты можешь изменить это, отметив флажок "Clears Name When Removed" в верхнем-правом углу. | |||
= | =Пакеты= | ||
Пакеты, определенные в псевдониме, располагаются выше стандартных для их эффективного перекрытия. | |||
Latest revision as of 09:21, 14 April 2012
Псевдонимы
На русском языке Требуется помощь редактора |
Псевдонимы | |
---|---|
Серия: Продвинутое квестописания, глава 2 | |
К другим учебникам | |
Предыдущая статья | Следующая статья |
Краткий обзор[edit | edit source]
Эта глава расскажет немного больше о псевдонимах, и почему же они так важны.
Ты узнаешь:
- Как использовать условные псевдонимы.
- Как правильно построить логику квеста, используя псевдонимы.
Мы делали это неправильно[edit | edit source]
То, что мы делали прежде - неверно.
Ну, не всё, конечно, но логика нашего квеста разнесена по всему мастер-файлу, что очень затрудняет ее изменение (в программировании это называется плохой инкапсуляцией).
Вот смотри: На Бэнду висит скрипт, который переводит стадию квеста GSQ01 на 200, когда тот умирает. Для изолированного случая, все как будто бы нормально. Но представь, что кто-то еще решил использовать Бэнду для своего квеста. Разработчик может изменить наш скрипт, или добавить собственный. Если это нормальный персонаж, без приставки "GSQ" в имени, то будет довольно сложно отследить и узнать, что же стало причиной внезапных багов в нашем квесте.
Та же проблем с амулетом и вором. Конечно, пока мы еще помним - где и что писали, и всё работает корректно, но будет намного лучше, если все будет лежать в одном месте, не правда ли? Вот тут нам и помогут псевдонимы!
Наложение псевдонимов[edit | edit source]
Думайте о псевдонимах, как об участниках нашей истории. Мы используем их, пока квест выполняется. Когда же они нам больше не нужны, мы можем с чистой совестью от них избавиться. При таком подходе, получится чистая, намного лучше организованная структура квеста. Удобная и менее ресурсоемкая.
Открой окно персонажа GSQBenduOlo, которого мы создали ранее. После главы про "хвосты", он обзавелся скриптом обработки собственной смерти или был отмечен флажком "Essential". В любом случае, это избыточная и в большинстве случаев ненужная информация. Спроси себя: если квест GSQ01 не существует, есть ли какие-либо причины следить за дальнейшей судьбой Бенду? Правильный ответ: "нет". Очистим прототип от этого мусора. Убери флажок "Essential", если он стоит, и кнопкой "Remove" удали скрипт, если такой имеется.
А теперь открой псевдоним "Bendu", созданный на этапепостановки задач. В тот раз мы проигнорировали большую часть всевозможных настроек, а теперь присмотримся к ним повнимательнее. Не пугайся раньше времени.
Что уже у нас здесь есть? Много всего. Панель скриптов. Набор пакетов. Инвентарь. Эт кетера. Все эти элементы ты можешь рассматривать, как его собственные. Как только у персонажа появляется псевдоним, тот принимает в себя все его параметры и использует, как свои собственные. Более того - стоит квесту завершиться, как все это бесследно исчезнет.
Это очень важный аспект, поэтому повторим еще раз: Персонаж использует данные псевдонима только, пока выполняется квест, и существует этот псевдоним. Когда квест завершится, персонаж избавится от псевдонима и всех его свойств. Кроме того, псевдоним можно снять и самостоятельно (en), во время выполнения квеста.)
Вот несколько очевидных преимуществ:
- Наши скрипты не будут смешиваться с чужими, и будут относиться только к конкретному квесту, а потому останутся простыми и легко отлаживаемыми.
- Мы можем задать индивидуальные пакеты поведения на время выполнения задания. (Примечание: пакеты псевдонимов будут расположены над обычными пакетами, а значит получат приоритет при выполнении.)
- Мы можем применять заклинания (включая пассивные способности) или задавать фракции персонажам на время выполнения задания, что несомненно повлияет на поведение персонажа (особенно в бою).
- Если квест изменится и мы решим использовать другого персонажа, нам будет необходимо изменить лишь ссылку, к которой привязан псевдоним, и все будут работать. Восхитительно, правда?
Одно маленькое "но": все предметы, которые персонаж получит через свой псевдоним, останутся у него и после отключения псевдонима. Если тебе все же понадобится убрать такие предметы, следует сделать это при помощи скриптов. Помни об этом.
Исправление Бенду[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" вверху окна псевдонима.
По-умолчанию, имя не изменяется на прежнее, после того, как псевдоним перестанет существовать. Это сделано для того, чтобы вернувшийся после сдачи квеста в очищенное подземелье игрок, не обнаружил груду трупов с совершенно другими именами. Но ты можешь изменить это, отметив флажок "Clears Name When Removed" в верхнем-правом углу.
Пакеты[edit | edit source]
Пакеты, определенные в псевдониме, располагаются выше стандартных для их эффективного перекрытия.
Предыдущая статья | К другим учебникам | Следующая статья |
Language: | English • français • русский |
---|