Bethesda Tutorial Quest Aliases/ru

From the CreationKit Wiki
Revision as of 08:38, 14 April 2012 by imported>Vitamant (→‎Fixing Bendu)
Jump to navigation Jump to search

Псевдонимы



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


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


Краткий обзор

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

Ты узнаешь:

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

Мы делали это неправильно

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

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

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

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

Наложение псевдонимов

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

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

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

FilledFirstAliasWindow.png

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

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

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

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

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

Fixing Bendu

Important.pngРедактируется
Эта секция в настоящий момент редактируется. Чтобы избежать конфликтов, пожалуйста, не вносите в нее никаких изменений, пока это сообщение не исчезнет. Если с момента последней правки статьи прошло больше одного дня, пожалуйста, удалите этот шаблон со страницы.

But enough talk. Let's fix Bendu's alias so that his quest functionality lives here. As before, we have two approaches:

Immortal Bendu

Important.pngРедактируется
Эта секция в настоящий момент редактируется. Чтобы избежать конфликтов, пожалуйста, не вносите в нее никаких изменений, пока это сообщение не исчезнет. Если с момента последней правки статьи прошло больше одного дня, пожалуйста, удалите этот шаблон со страницы.

You can simply click the Essential checkbox at the top of the Alias window, and Bendu will now be unkillable while he is in this alias. When the quest stops, he'll drop out of the alias and again be mortal.

Handling the Death

Important.pngРедактируется
Эта секция в настоящий момент редактируется. Чтобы избежать конфликтов, пожалуйста, не вносите в нее никаких изменений, пока это сообщение не исчезнет. Если с момента последней правки статьи прошло больше одного дня, пожалуйста, удалите этот шаблон со страницы.

Or we can put a script on this alias to handle Bendu's death, just like we had previously scripted the base object. Note that we have to change the first line of the script so that it will attach to a ReferenceAlias instead of an actor. The script we would make this time would be called "GSQQuestgiver" and look like this:

Scriptname GSQQuestgiver extends ReferenceAlias

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

Note that we don't have to set the quest as a property this time around; every ReferenceAlias is aware of the quest that owns it, so we can access it with GetOwningQuest().

Now, setting a stage when an Actor dies is an exceedingly common task, so there's no need to make a specialized script for it. When you click the Add button to put a script on this alias, look for scripts that begin with "default" -- these are provided scripts that perform common tasks. They are generally named pretty descriptively, so you can guess what they do from what they're called. In this case, we want "defaultSetStageOnDeathRefAlias". In this case, we'll need to set properties:

  • myQST: GSQ01
  • preReqStage: <leave blank>
  • StageToSet: 200

(By using default scripts, we can drastically decrease the total number of scripts in the game, which has benefits for memory usage. Since you're modding for a PC that likely has copious memory, it may be less of a concern.)

Changing the Name

One final side note: you can even change the name of a reference when it's in an alias, so that players will see different text when they roll over it. You can define a Message with whatever text you want, and select it from the Display Name pulldown at the top of the alias window.

AliasDisplayName.png

By default, once you place a new display name on a reference, it will retain it even after your quest is over. This is so the player doesn't come back to a cleared-out dungeon to find that all the enemies are now called different things than they were when they were killed. You can override this behavior with the "Clears Name When Removed" checkbox in the upper right.

Packages

The package stack for the alias will be placed above an actor's normal package stack, effectively overriding it.


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



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