Difference between revisions of "Bethesda Tutorial Quest Objectives/ru"

m
no edit summary
imported>Vitamant
imported>Vitamant
m
 
(5 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{PageTitle|Ориентиры}}
{{PageTitle|Задачи}}


{{RussianPage|t}}
{{RussianPage|e}}


{{Tutorial Index/ru
{{Tutorial Index/ru
|titlename=Ориентиры
|titlename=Задачи
|Prev=Bethesda_Tutorial_Basic_Quest_Scripting/ru
|Prev=Bethesda_Tutorial_Basic_Quest_Scripting/ru
|Next=Bethesda_Tutorial_Quest_Loose_Ends/ru
|Next=Bethesda_Tutorial_Quest_Loose_Ends/ru
Line 11: Line 11:
}}
}}


=Кратки обзор=
=Краткий обзор=
В этой главе ты научишься задавать цели задания и пользоваться маркерами, ведя беспомощных игроков по огромному миру игры. Заодно, разберешься что делать после завершения квеста, чтобы он не висел в списке текущих заданий до конца времен.
В этой главе ты научишься задавать цели задания и пользоваться маркерами, ведя беспомощных игроков по огромному миру игры. Заодно, разберешься что делать после завершения квеста, чтобы он не висел в списке текущих заданий до конца времен.
<br><br>Ты узнаешь:
<br><br>Ты узнаешь:
* Как создавать цели задания и что такое псевдонимы
* Как создавать задачи и что такое псевдонимы.
* Как изменять активность целей
* Как изменять активность задач.
* Как завершить квест
* Как завершить квест.
* Как создать дополнительные стадии квеста
* Немного о дополнительных возможностях стадий квеста.


=Ориентиры=
=Задачи=
В процессе выполнения заданий, игроки могут заглянуть в журнал квестов, чтобы ''сориентироваться'', куда им нужно идти и что сделать, чтобы завершить текущую стадию задания.
В процессе выполнения квестов, игроки могут заглянуть в журнал, чтобы определиться, куда им нужно идти и что сделать, чтобы завершить текущую стадию задания. Для этого и существуют задачи.


И первым шагом на пути к созданию подобного ориентира, будет определение цели и погружение в удивительный мир ''Псевдонимов''.
И первым шагом на пути к ним, будет определение цели и погружение в удивительный мир ''Псевдонимов''.


=Псевдонимы=
=Псевдонимы=
Псевдонимы - это своего рода участники нашей истории. Различные существа, места, предметы, которые будут играть какую-либо роль в задании. Каждый псевдоним указывает на конкретную ссылку или место в игровом мире. В нашем случае, своими псевдонимами обзаведутся: квестодатель Бенду, вор и амулет.
Псевдонимы - это своего рода участники нашей истории. Различные существа, места, предметы, которые будут играть какую-либо роль в задании. Каждый псевдоним указывает на конкретную ссылку или место в игровом мире. В нашем случае, своими псевдонимами обзаведутся: квестодатель Бенду, вор и амулет.


Вернемся к нашем заданию. Открой окно квеста и перейди на вкладку {{ulink|Quest_Alias_Tab|Quest Aliases}}. Посередине ты увидишь большую таблицу. Щелкни ПКМ по ней и выбери "New Reference Alias", чтобы открыть еще большее окошко. К счастью, большая часть элементов этого окна нас не интересует. О ней ты прочитаешь позже, в {{ulink|Bethesda_Tutorial_Quest_Aliases|посвященном псевдонимам учебнике}}).
Вернемся к нашему заданию. Открой окно квеста и перейди на вкладку {{ulink|Quest_Alias_Tab|Quest Aliases}}. Посередине ты увидишь большую таблицу. Щелкни ПКМ по ней и выбери "New Reference Alias", чтобы открыть еще большее окошко. К счастью, большая часть элементов этого окна нас не интересует. О ней ты прочитаешь позже, в {{ulink|Bethesda_Tutorial_Quest_Aliases|посвященной псевдонимам статье}}).


Напечатай в поле "Alias Name" имя "Bendu". Ниже, в группе Fill Type, выбери "Unique Actor" и из списка - "GSQBenduOlo". В итоге окно должно выглядеть так:
Напечатай в поле "Alias Name" имя "Bendu". Ниже, в группе Fill Type, выбери "Unique Actor" и из списка - "GSQBenduOlo". В итоге окно должно выглядеть так:
Line 46: Line 46:


Как и прежде создай новый псевдоним. Назови его "Amulet" и измени тип на "Create Reference to Object". Идем слева направо:
Как и прежде создай новый псевдоним. Назови его "Amulet" и измени тип на "Create Reference to Object". Идем слева направо:
* Выбираем "GSQAmulet" из списка - базовый объект нашего амулета.
* Выбираем "GSQAmulet" из списка - прототип нашего амулета.
* Уровень сложности оставляем без изменений (поскольку мы имеем дело с предметом, а не персонажем, он ни на что не повлияет).
* Уровень сложности оставляем без изменений (поскольку мы имеем дело с предметом, а не персонажем, он ни на что не влияет).
* Изменяем режим на "Create '''In'''"
* Изменяем режим на "Create '''In'''"
* Выбираем Thief из последнего списка.
* Выбираем Thief из последнего списка.
Line 55: Line 55:
Как ты можешь догадаться, мы создали новую ссылку на амулет и поместили ее в инвентарь вора... Правильно, там теперь два амулета. Открываем GSQThief и удаляем амулет из инвентаря.
Как ты можешь догадаться, мы создали новую ссылку на амулет и поместили ее в инвентарь вора... Правильно, там теперь два амулета. Открываем GSQThief и удаляем амулет из инвентаря.


=Создание ориентиров=
=Создание задач=
Снова открываем окно квеста и идем на вкладку Quest Objectives. Вот здесь и создаются видимые игроку цели задания.
Снова открываем окно квеста и идем на вкладку Quest Objectives. Вот здесь и создаются видимые игроку цели задания.


У каждого ориентира есть индекс (номер, по которому на него можно сослаться); текст, демонстрируемый игроку; и список целей, на которые будут указывать стрелки на компасе, в игре.
У каждой задачи есть индекс (номер, по которому на нее можно сослаться); текст, демонстрируемый игроку; и список целей, на которые будут указывать стрелки на компасе, в игре.


Что бы создать новый ориентир щелкни ПКМ по верхней таблице и выбери "New" из меню. В группе "Quest Objective Data" под таблицей измени индекс на 10 и отображаемый текст на "Убить вора."
Что бы создать новую задачу щелкни ПКМ по верхней таблице и выбери "New" из меню. В группе "Quest Objective Data" под таблицей измени индекс на 10 и отображаемый текст на "Убить вора."


{{InDepth|Обычно, индекс ориентира задают такой же, как и индекс стадии квеста, которой он соответствует. В больших и сложных квестах это не всегда удобно, но в нашем случае, как мы скоро увидим, это существенно упростит нам жизнь.}}
{{InDepth|Обычно, индекс задачи задают такой же, как и индекс стадии квеста, которой она соответствует. В больших и сложных квестах это не всегда удобно, но в нашем случае, как мы скоро увидим, это существенно упростит жизнь.}}


Наконец, в таблице ниже щелкаем ПКМ и выбираем "New", чтобы задать цель квеста. Появится новая строка с большим и страшным "NO TARGET" в первой колонке. В списке "Target Alias", чуть ниже, выбери "Thief". (Страшная надпись изменится только после того, как ты щелкнешь после этого куда-нибудь еще [н.п. по той же самой таблице])
Наконец, в таблице ниже щелкаем ПКМ и выбираем "New", чтобы задать цель квеста. Появится новая строка с большим и страшным "NO TARGET" в первой колонке. В списке "Target Alias", чуть ниже, выбери "Thief". (Страшная надпись изменится только после того, как ты щелкнешь куда-нибудь еще [н.п. по той же самой таблице])


Теперь зададим другой ориентир:
Теперь создадим другую задачу:
* '''Index:''' 20
* '''Index:''' 20
* '''Display Text:''' Добудьте амулет Бенду Оло
* '''Display Text:''' Добудьте амулет Бенду Оло
* '''Target Alias:''' Amulet
* '''Target Alias:''' Amulet


И еще один:
И еще одну:
* '''Index:''' 30
* '''Index:''' 30
* '''Display Text:''' Верните амулет Бенду Оло.
* '''Display Text:''' Верните амулет Бенду Оло.
Line 80: Line 80:
[[Image:ObjectiveWindowFilled.png|600px]]
[[Image:ObjectiveWindowFilled.png|600px]]


Теперь, когда ориентиры определены, нам осталось "сказать" игре, когда она должна их отобразить.
Теперь, когда задачи определены, нам осталось "сказать" игре, когда она должна их отобразить.


=Установка ориентиров=
=Установка задач=


Помнишь ту страшную функцию <code>SetObjectiveDisplayed()</code>? Вот тут то она и используется. Если по какой-либо причине первая функция не вызовет обновление ориентиров, то эта гарантирует, что они все-таки будут обновлены. Советую указывать оба.
Помнишь ту страшную функцию <code>SetObjectiveDisplayed()</code>? Вот тут то она и используется. Если по какой-либо причине первая функция не вызовет обновление задач, то эта гарантирует, что они все-таки будут обновлены. Советую указывать обе. (''а я советую корректно настраивать стадии квеста (см.ниже) - прим.переводчика'')


Вернись на вкладку Quest Stages. Сейчас мы усложним квест, добавив в него немного логики.
Вернись на вкладку Quest Stages. Сейчас мы усложним квест, добавив в него немного логики.


Для того чтобы добавить логику или запись в журнал, квесту необходимо иметь хотя бы одну "{{ulink|Quest_Stages_Tab|стадию}}". Выбери вторую (под индексом 10) и, щелкнув ПКМ по таблице "Log Entry" (справа) выбери "New."  
Для того чтобы добавить скрипты или запись в журнал, необходимо иметь хотя бы один элемент в таблице "Log Entry" (справа), соответствующий нужной стадии. Выбери 10ую стадию, щелкни ПКМ по таблице "Log Entry" и выбери "New."  


Записанные здесь фрагменты текста будут появляться в журнале игрока. Отображаться будет только последняя запись, поэтому можешь использовать его для обновления ориентиров, когда это необходимо. В поле ввода "Log Entry" запиши следующее:
Записанные здесь фрагменты текста будут появляться в журнале игрока. Отображаться будет только последняя запись, поэтому можешь использовать его для обновления задач, когда это необходимо. В поле ввода "Log Entry" запиши следующее:


<blockquote><i>Я встретил Менду Оло. Он рассказал, что у него украли амулет. Он обещает заплатить двойную цену тому, кто вернет ему пропажу.</i></blockquote>
<blockquote><i>Я встретил Бенду Оло. Он рассказал, что у него украли амулет. Он обещает заплатить двойную цену тому, кто вернет ему пропажу.</i></blockquote>


Щелкни в поле справа (на вкладке Papyrus Fragment).
Щелкни в поле справа (на вкладке Papyrus Fragment).


Вводим: <code>SetObjectiveDisplayed(10)</code>. Нажми кнопку "Compile", чтобы убедиться, что все введено корректно. Как ты, наверное, догадался, это изменит текущий ориентир на 10, поставив перед игроком новые цели. Поскольку, это первый ориентир, отображаемый в квесте, это также пометит квест значком "STARTED" (начат).  
Вводи: <code>SetObjectiveDisplayed(10)</code>. Нажми кнопку "Compile", чтобы убедиться, что все введено корректно. Как ты, наверное, догадался, это изменит текущую задачу на 10, поставив перед игроком новые цели. Поскольку, это первая задача, отображаемая в квесте, это вызовет всплывающее сообщение о том, что задание начато.


[[Image:SettingObjective10.png|600px]]
[[Image:SettingObjective10.png|600px]]


{{InDepth|Ты спросишь - зачем же нужна эта таблица, если мы записали в ней всего одну строчку? Дело в том, что в более сложных квестах, может быть задействовано несколько таких строк, часть из которых (или все), связаны с определенными условиями, определяющими - отобразятся они в журнале или нет. (н.п. ветвление квеста в зависимости от того сделал что-нибудь игрок на предыдущих стадиях, или нет). В нашем случае всё просто и линейно, поэтому нам не нужны ни условия, ни дополнительные элементы.}}
{{InDepth|Ты спросишь - зачем же нужна эта таблица, если мы записали в ней всего одну строчку? Дело в том, что в более сложных квестах, может быть задействовано несколько таких строк, часть из которых (или все), связаны с определенными условиями, определяющими - отобразятся они в журнале или нет. (н.п. ветвление квеста в зависимости от того, как поступил игрок на предыдущих стадиях). В нашем случае всё просто и линейно, поэтому нам не нужны ни условия, ни дополнительные элементы.}}


Теперь выбери стадию 20 из списка слева и создай новую строку справа. Remember, stage 20 is after we've killed the thief but before we've gotten the amulet. We have two things to do here -- tell the player that the previous objective (to kill the thief) has been accomplished, and set their next goal. We do that with two lines of script:  
Теперь выбери стадию 20 из списка слева и создай новую строку справа. Как ты помнишь, эта стадия наступает, когда игрок убивает вора, но еще не взял амулет. Что мы хотим? Хотим мы сказать игроку две вещи: что предыдущая цель (убить вора) успешно выполнена, и что надо порыться в останках усопшего. Для этого нам потребуется всего две строчки скрипта:


<source lang="papyrus">
<source lang="papyrus">
SetObjectiveCompleted(10)
SetObjectiveCompleted(10) ; Успешно завершаем 10ую стадию
SetObjectiveDisplayed(20)
SetObjectiveDisplayed(20) ; Отображаем 20ую
</source>
</source>


{{Template:InDepth|Note that "Completed" and "Displayed" are two different flags -- you can complete an objective that the player has never seen.}}
{{InDepth|Ты ведь внимательно на них посмотрел и заметил различия, верно? Одна функция заканчивается на "Completed" (завершена), другая на "Displayed" (отображена) - будь внимателен, а не то завершишь задачу, которую игрок еще в глаза не видел!}}


We can leave the journal entry here blank, because the overall story of the quest hasn't changed.
Log Entry можно оставить пустым, так как общий сюжет квеста не изменился.


Do the same thing for stage 30, except this time your logic should be completing objective 20 and displaying objective 30.  
Сделай тоже самое для стадии 30, с той лишь разницей, что завершенной нужно сделать задачу 20, а отобразить - 30.


Finally, in stage 40, we just need to complete objective 30. You should also check the "Complete Quest" checkbox below the Log Entry text field, so that the "COMPLETED" banner will be shown when stage 40 is set. (This will also move the quest to the inactive portion of the player's journal, keeping it somewhat tidy.)
Наконец, в стадии 40 заверши задачу 30. Кроме того, отметь флажок "Complete Quest" под полем "Log Entry". Теперь, достигнув последней стадии, появится сообщение о том, что квест успешно завершен. (А задание переместится в соответствующий раздел журнала, дабы не мозолило глаза.)


The final journal entry should sum up what happened in the quest, since it's now in the past. For example:
Последняя запись в журнале должна подвести итог нашего приключения. Например так:


<blockquote><i>I met Bendu Olo and was rewarded handsomely for retrieving his stolen amulet.</i></blockquote>
<blockquote><i>Мой новый знакомый, Бенду Оло, сторицей вознаградил меня за возвращение похищенного амулета.</i></blockquote>


=Проверка результата=
=Проверка результата=
Anonymous user