Difference between revisions of "Bethesda Tutorial Dialogue/ru"

From the CreationKit Wiki
Jump to navigation Jump to search
imported>Vitamant
imported>Cyrius
 
(27 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{PageTitle|Диалоги}}
{{PageTitle|Диалоги}}


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


{{Tutorial Index/ru
{{Tutorial Index/ru
Line 12: Line 11:
}}
}}


=Обзор=
=Краткий обзор=
В этой главе мы будем создавать диалоги к тренировочному квесту "Единственная надежда Бенду Оло".
В этой главе мы будем создавать диалоги к тренировочному квесту "Единственная надежда Бенду Оло".
<br><br>Ты узнаешь:
<br><br>Ты узнаешь:
* Как писать диалоги для Skyrim в Creation Kit.
* Как писать диалоги для Skyrim в Creation Kit.
* Как привязать события к выбранным игроком пунктам диалога.
* Как привязать события к выбранным игроком темам диалога.


=Диалоговые виды=
=Представления диалогов=


Creation Kit визуализирует весь процесс создания диалога, предоставляя удобный интерфейс взаимодействия.  
Creation Kit визуализирует весь процесс создания диалога, предоставляя удобный интерфейс взаимодействия.  


{{Template:NewFeature|Если ты писал диалоги для предыдущих игр серии TES или Fallout 3, то можешь воспользоваться родной вкладкой {{ulink|Player_Dialogue_Tab|Player Dialogue}} (на самом деле, система диалогов осталась прежней, просто прячется за новым интерфейсом).}}
{{NewFeature|Если ты писал диалоги для предыдущих игр серии TES или Fallout 3, то можешь воспользоваться родной вкладкой {{ulink|Player_Dialogue_Tab|Player Dialogue}} (на самом деле, система диалогов осталась прежней, просто прячется за новым интерфейсом).}}
{{WarningBox|Если ты намерен писать диалоги на языках не использующих латинский алфавит, то рекомендую сконцентрироваться на изучении именно этого способа, так как на данный момент (13 апреля 2012г.) Creation Kit отказывается адекватно отображать русскоязычный текст в представлении (да и не сам интерфейс скорее кривой, нежели удобный), что делает невозможным поддержку сложных диалогов. Если данную ошибку исправили - убери данную заметку со страницы - прим.переводчика}}


Для начала, дважды щелкни по своему заданию (в нашем случае GSQ01), чтобы открыть окно квеста. Перейди на вкладку {{ulink|Dialogue_Views_Tab|Dialogue Views}}. Выглядеть это должно как-то так:
Для начала, дважды щелкни по своему заданию (в нашем случае GSQ01), чтобы открыть окно квеста. Перейди на вкладку {{ulink|Dialogue_Views_Tab|Dialogue Views}}. Выглядеть это должно вот так:


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


Чтобы создать новый диалог, щелкни правой кнопкой по таблице в левой части окна и выбери пункт "New." Тебе предложат указать ему ID, а ID квеста будет автоматически использован в качестве префикса. Дай ему имя: "GSQ01BenduView." Щелчком в таблице выбери его.
Чтобы создать новый диалог, щелкни ПКМ по таблице в левой части окна и выбери пункт "New." Тебе предложат указать ему ID, а ID квеста будет автоматически использован в качестве префикса. Дай ему имя: "GSQ01BenduView." Щелчком в таблице выбери его.


We haven't added anything to the view yet, so it's a boring white expanse. Right-click in that expanse, and select "Create Branch." That will prompt you to name this branch, which you should call "GSQ01MeetingBenduBranch". One more prompt for naming a topic (you can just accept the default of "GSQ01MeetingBenduBranchTopic"), and on hitting Enter you'll see a series of rectangles that probably doesn't mean much to you.  
Справа ты видишь белый девственно чистый холст без единого намека на что-нибудь интересное. ПКМ по нему и выбирай "Create Branch" из меню. Да-да, и снова тебе нужно указать ID, на этот раз ветви диалога. Называй: "GSQ01MeetingBenduBranch"... и еще один ID для темы (впрочем, тут можешь оставить вариант по-умолчанию "GSQ01MeetingBenduBranchTopic"). Еще одно нажатие на Enter и пред тобой несколько прямоугольников мерзкого цвета, которые, наверняка, тебе ни о чем не говорят.


[[Image:DialogueStartingBranch.png]]
[[Image:DialogueStartingBranch.png]]


Before we go on, there's some terminology that can be confusing and we need to get straight:  
Перед тем как продолжить, давай разберемся с терминами:
* '''[[Topic_Info#The_Response_Form|Response]]:''' A single line of dialogue said by an NPC. The text is limited to 150 characters. It can be assigned an emotion and animation for the NPC to play physically while saying it.  
* '''{{ulink|Dialogue_Branch|Ветвь}}:''' Набор связанных по смыслу тем.
* '''[[Topic_Info|Info]]:''' A collection of responses put together for a single circumstance. When a character says multiple lines one after the other, that's a single Info with multiple responses.  
* '''{{ulink|Topic|Тема}}:''' Выбираемая игроком тема диалога, на которую последует монолог персонажа.
* '''[[Topic]]:''' A collection of infos that an NPC might say in a given situation, often in response to a specific dialogue choice.  
* '''{{ulink|Topic_Info|Монолог}}:''' Набор произносимых подряд рерлик.
* '''[[Dialogue_Branch|Branch]]:''' A collection of topics that comprise a particular piece of conversation flow from the player's perspective.  
* '''[[Topic_Info/ru#The_Response_Form|Реплика]]:''' Одна строка монолога, произносимая NPC. Длина строки ограничена 150 символами. С ответом могут быть связаны эмоции и анимации, проигрываемые говорящим.  
 


So in that set of clicks and typings above, we created a branch, which automatically created a topic for itself. The topic currently contains no infos.  
Итого ты создал ветвь диалога, содержащую одну тему, которая пока что не содержит монолога персонажа.  


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


=Topics=
=Темы=
Двойной ЛКМ по теме (рыжей полоске над серым пространством) откроет {{ulink|Topic Window|окно темы}}.


Double-click on the topic to open the Topic Window.  
[[Image:EmptyTopicWindow.png|450px]]


[[Image:EmptyTopicWindow.png|450px]]
Пока тебя интересует только поле "Topic Text". Его содержимое будет выведено игроку в качестве варианта диалога во время разговора с персонажем. Делаем из игрока стандартного героя-дурачка, готового помогать всем и каждому. Пишем: "Тебе чем-нибудь помочь?"


The only thing we need to worry about here is the "Topic Text" field. This will be the prompt that the player will select from a list of dialogue options when talking to an NPC. We're going to set the player up to be a standard helpful adventurer, so fill this in with "Do you need help with anything?"
{{WarningBox|Как только поле ввода потеряет фокус, может выскочить окошко Check Spelling. Не пугайся. Это всего лишь окно проверки орфографии, которое не знает русских слов и будет постоянно тебя донимать. К сожалению, это донельзя кривой и неудобный инструмент даже в оригинале. Возможно, с ним можно было бы свыкнуться, однако он (на данный момент) на отрез отказывается корректно работать кирилицей (например воспринимает букву "ч" в качестве разделителя). Так что самым правильным (возможно, временным) решением будет отключить проверку правописания и возложить всю ответственность на себя и редактора, если такой имеется. Для этого:
# Закрой Creation Set.
# Перейди в каталог игры.
# Открой файл SkyrimEditorPrefs.ini любым текстовым редактором (н.п. блокнотом).
# Найди категорию [SpellCheck].
# Измени значение единственного параметра bSpellCheckEnabled с "1" на "0".
# Сохрани изменения.}}


Double-click in the Info table, and we'll be able to write the NPC's response.  
Ниже расположена таблица монолога. Дважды щелкни по ней, чтобы создать новую фразу.


[[Image:EmptyResponseWindow.png|300px]]
[[Image:EmptyResponseWindow.png|300px]]


In the "Response Text" field, enter: "Why, yes, now that you mention it. Some dirty thief has made off with my amulet. Would you be so kind as to... ahem... fetch it back?"
В поле "Response Text" введи: "Странно, что вы спросили... Как раз недавно один грязный ворюга утащил мой амулет! Не могли бы вы... ммм... вернуть его?"


Now hit the OK button at the bottom of the window '''twice'''. The window will disappear and you'll see the Topic Info window.  
Теперь щелкни по кнопке ОК внизу окна. Оно исчезнет, и ты увидишь новое - окно монолога.


{{Template:InDepth|The first time you hit the "OK" button in the response window, the editor runs a simple spell-check on what you just entered. If you copied that precisely, there are no spelling errors, so the first button press won't do anything.}}
=Монологи=


=Topic Infos=
[[Image:TopicInfoWindowStart.png|600px]]
[[Image:TopicInfoWindowStart.png|600px]]


There is a lot of data in this window, but most of it is superfluous for our purposes. What we care about is the [[:Category:Conditions|Conditions]] table in the middle. This is where we narrow down who is capable of saying this info. If we just hit "OK" from here and left the conditions blank, every NPC in the world would now have a dialogue topic saying "Do you need help with anything?"  
В этом окне огромное количество всевозможных настроек, но тебя интересует лишь их малая часть. В первую очередь таблица {{ulink|:Category:Conditions|условий}} в центре. Условия описывают - у кого может появиться этот монолог. Если ты оставишь условия пустыми, то каждый персонаж во всем мире обзаведется темой "Тебе чем-нибудь помочь?"


Right-click in the Conditions list and select "New" to make our first condition for this info.  
ПКМ в таблице условий, выбираешь "New" для создания нового условия.


[[Image:ConditionItem.png]]
[[Image:ConditionItem.png]]


Each condition is an independent check that is definitively True or False. If all of the conditions in the list are valid, then this Info will be valid. Our first condition will simply limit who is able to say this line. "GetIsID" is selected by default, because it's so commonly used for dialogue conditions. Click on the button in the middle that currently says "INVALID" so we can choose the appropriate actor. Select "GSQBenduOlo" from the pull-down menu and hit OK.  
Каждое из условий может быть либо ложным (False) либо истинным (True). Если все условия в списке истинны, монолог проходит проверку и появляется у персонажа. Твое условие будет простым и не замысловатым - нужно задать одного единственного персонажа, которому была предназначена тема. Нужная проверка "GetIsID" выбрана по-умолчанию, так-как является наиболее часто используемой ввиду большого количества личных диалогов, привязанных к конкретным персонажам. Щелкни по здоровенной кнопке с надписью "INVALID" и выбери ID Бенду Оло: "GSQBenduOlo" (поле поддерживает быстрый поиск при вводе с клавиатуры). Затем нажми "ОК".
 
{{InDepth|Особо обрати внимание и запомни, что условия задаются '''не''' для темы, выбираемой персонажем, а для '''ответного монолога'''. Если хоть один монолог проходит проверку - тема появляется в окне диалога. Но сама тема не содержит условий. Это кажется странным, но написав несколько собственных диалогов, ты поймешь, почему сделано именно так.}}


[[Image:ConditionItemFilled.png]]
[[Image:ConditionItemFilled.png]]


Hit OK on the condition window to close it out, and you should then see it in the list. Now only Bendu can say it, but we don't want him saying it all the time; just before he's given the quest to the player. So we're going to add one more condition. Right-click in the condition list and select "New" again.  
Вновь нажми "OK" чтобы сохранить изменения и закрыть окно условий. Свежесозданное появится в списке. Теперь только Бенду сможет общаться на эту тему. Однако, ты ведь не хочешь, чтобы он делал это постоянно? Правильно, тема должна быть доступна только до момента взятия квеста. Добавляем еще одно условие. Уверен, ты запомнил, как это делается.


We're going to further limit this bit of dialogue based on the quests current stage. So click on the Condition Function pull-down and select "GetStage." (You can type the first few letters to skip around in the list -- much faster than scrolling.) Now if you click the "INVALID" button to select parameters, it will bring up a list of quests rather than base objects (since it knows that the GetStage condition only deals with quests). Select "GSQ01" from the menu and hit OK.  
Ограничим тему диалога еще и стадией квеста. В списке проверочных функций (Condition Function) выбери "GetStage". Затем кликни по любимой кнопке "INVALID" и выбери квест с нужным ID ("GSQ01"). Функция знает, что в качестве первого параметра ей должны передать ID квеста, а не чего-либо еще, поэтому других объектов в списке параметров не будет, только квесты.


Now all that's left is to tell the condition which quest stage we care about. Since we know the quest is starting at stage 0, we could select "==" for our comparison and set the value to "0," but that might break this condition if we ended up adding some stage before this one. The safer way to set the condition is to check that our current stage is lower than 10, so choose "<" from the Comparison list and put "10" in the value field.  
Теперь нужно задать метод сравнения результата функции с некоторым значением. У большинства людей первым желанием будет задать проверку на равенство ("==") с числом "0" (наша начальная стадия квеста). Но жесткое сравнение в программировании (а мы сейчас пишем своего рода программу) никогда не считалось хорошим тоном. Например, в последствии вы решите добавить еще одну стадию между "0" и "10", когда игрок еще не встретился с Бенду Оло, но, например, слышал слухи о том, что у бедняги украли амулет, и условие придется переписывать. Дабы этого избежать, и зная, что разговор Бенду Оло станет стадией квеста под номером "10", запишем условие так: "если стадия меньше 10". То есть меняем метод сравнения на "<" и значение на "10".


[[Image:ConditionItemGetStage.png]]
[[Image:ConditionItemGetStage.png]]


{{Template:InDepth|Note that you can reorder conditions with the left and right arrow keys or the buttons at the bottom left of the condition window. In this example the order doesn't matter, but if you started setting up your conditions with ORs as well as ANDs, it would.}}
{{InDepth|Обрати внимание, что порядок следования условий можно изменять стрелками на клавиатуре "вправо" и "влево" (да, не логично) и аналогичными кнопками под нижним левым углом таблицы условий. В нашем случае порядок значения не имеет, но когда ты будешь составлять сложные условия связанные не только AND (и), но и OR (или), это будет играть важную роль.}}


Our final topic info window should look like this:
Вот что должно получиться у тебя в итоге:


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


Hit OK to close the Topic Info window, then OK again in the Topic window to close it.
Кнопкой ОК подтверждаешь изменения и закрываешь окно монолога. Еще раз по ОК, закрывая окно темы.


=Linking Dialogue=
=Связи=
Finally, we're back at the Dialogue View! With our new bit of dialogue present. If you want to actually see all the text (and why wouldn't you?), click the "Show All Text" checkbox at the bottom of the view.  
И вот пред тобою вновь представление диалогов! Теперь уже не пустое. Если тебе захочется увидеть весь текст, отметь флажок "Show All Text" в нижней части окна.
{{WarningBox|Ты ведь помнишь предупреждение относительно кириллицы? Вот и сравни то, что видишь ты, со скриншотом ниже.}}


[[Image:DialogueViewWithStuff.png]]
[[Image:DialogueViewWithStuff.png]]


Since Bendu is posing a question with his line, we want to give the player a chance to answer. Right-click in the branch area and select "Add Topic." (If you don't see that in the contextual menu, you probably did not click in the branch.)
Теперь неплохо бы добавить игроку возможность ответить на просьбу Бенду о помощи. ПКМ в области ветви. Выбираешь "Add Topic." (Если "Add Topic" отсутствует, значит ты промахнулся и щелкнул не туда [см.картинку выше])


This will open up another topic window. You'll have to assign an ID to this one; "GSQ01MeetingBenduYes" works, since this will be our choice where the player agrees to help. Put "Sure, I can do that." as the topic text, and double click in the info table to make a response. For the text, enter "Oh, thank you so much. It's been taken to Reachwind Eyrie. Please hurry! I'll give you twice what it's worth!" This time when you hit OK the spell-check will complain about "Reachwind." Just hit the Ignore button to dismiss it, hit OK one more time, and you're back to the Topic Info window.  
Откроется новое окно редактирования темы. И вновь тебе придется ввести ID. Вводишь: "GSQ01MeetingBenduYes", в переводе, если игрок ответит "Да" на просьбу Бенду. В качестве текста укажи: "Конечно, я тебе помогу". Дважды щелкни по таблице монологов, чтобы добавить ответ, и собственно укажи сам ответ: "О, спасибо, спасибо вам огромное! Он убежал в сторону Reachwind Eyrie. Пожалуйста, скорее! Я... я выкуплю его у тебя, за двойную цену!" Нажми "ОК".  


Now that you're here, double click on the response text again to bring it back up. Notice the list of sound files at the bottom of this window.  
Чтобы вернуться к редактированию дважды щелкни по ответу в списке Responses. Обрати внимание на список аудио-файлов в нижней части.


[[Image:BadSoundExport.png|300px]]
[[Image:BadSoundExport.png|300px]]


Since we haven't put any conditions on this dialogue, the game still thinks everyone in the world can say it, and will try to make appropriate sound files for every voice type. This is a big waste of disk space and (if you're planning to record voice) a waste of time recording unnecessary performances. So close this window and add a GetIsID condition looking for GSQBenduOlo (like we did in the previous topic info). Now if you look at the response again, you'll see that it knows that this line is only said by a MaleDarkElf voicetype, and so only lists the one file.  
Поскольку, ты еще не задал ни одного условия, редактор отображает все доступные голоса, которыми может быть озвучена реплика. Это существенно увеличивает затраты дискового пространства (и времени, если собираешься записывать голос [и если не собираешься, тоже...]). Закрываем окно редактирования фразы и добавляем новое условие. Функция GetIsID, проверяющая, что ID говорящего GSQBenduOlo (как и в предыдущем случае). Если ты теперь вновь откроешь редактирование фразы, то увидишь, что в списке звуковых наборов остался только MaleDarkElf.


[[Image:GoodSoundExport.png|300px]]
[[Image:GoodSoundExport.png|300px]]


Now hit OK on the Topic Info window and the Topic window until you're back looking at the dialogue view again. You'll have a new topic floating in your branch, which has expanded to accommodate it.  
Нажимая ОК, возвращайся к окну с представлением диалогов. Область ветви расширилась, чтобы в ней поместилась новая тема.


[[Image:MultiTopicBranch.png|450px]]
[[Image:MultiTopicBranch.png|450px]]


The beauty of Dialogue Views is that we can arrange these topics however makes sense for us. At runtime, the game doesn't care about this positioning; it's purely for the designer's convenience. So grab the new topic by its top bar and drag it to a convenient spot.  
Вся прелесть представления диалогов в том, что ты можешь как угодно компоновать темы в одной ветви. На игре это не скажется, зато ты можешь расположить их так, как тебе удобно, в том порядке, в котором захочешь. Схвати любую из тем за верхнюю часть и тащи в нужное место.


Make one more topic, this time with a Topic Text of "Sorry, not right now." Set Bendu's response to be "Well, fine then." Don't forget to put a GetIsID condition on the Topic Info. Once you've created those two, the Dialogue View should look something like this.  
Создай еще одну тему с текстом: "Извини, не сейчас". И задай ответ Бенду: "Ну, ладно". Не забудь задать условие, как ты уже делал прежде. После создания, нового топика представление будет выглядеть так:


[[Image:UnconnectedDialogue.png|450px]]
[[Image:UnconnectedDialogue.png|450px]]


All these topics exist within the branch, but the game doesn't know anything about the flow between them. We have to link them together. Click on GSQ01MeetingBenduBranchTopic to make it active. Then click once more on the text of the line (you'll see the cursor turn into a little hand when you roll over it) and drag a line to the GSQ01MeetingBenduYes. Do the same thing, dragging a line from the initial topic to the GSQ01MeetingBenduNo topic.  
Все имеющиеся темы расположены в одной ветви, но игра не имеет ни малейшего представления о том, как они взаимодействуют. Так что теперь ты будешь учиться их связывать. Кликни по GSQ01MeetingBenduBranchTopic, чтобы сделать тему активной. Щелкни еще раз, теперь уже в области текста (курсор изменится на маленькую руку). Зажми ЛКМ и тащи линию к GSQ01MeetingBenduYes. Отпусти ЛКМ. Аналогичным образом свяжи начальную тему с GSQ01MeetingBenduNo.  


[[Image:ConnectedDialogue.png|450px]]
[[Image:ConnectedDialogue.png|450px]]


Now, when the player selects the prompt "Do you need help with anything?", Bendu will say his line and then present the player with another list of choices based on the links from that topic. The choices will be listed in the order they were linked from that topic.
Теперь, когда игрок выберет "Тебе чем-нибудь помочь?", Бенду произнесет свой монолог, а затем предложит выбрать одну из двух связанных тем. Темы будут отображаться в том порядке, в котором они были привязаны к главной теме.


=Scripting Dialogue=
=Скрипты в диалогах=
We're going to make our first foray into the scripting system here, but it will be very straightforward, so don't worry if that's not your cup of tea.  
Пора тебе познакомиться с местной системой скриптов. Не переживай, ничего сложного, даже если это не твой конёк.


Right now we have a dialogue flow set up, but the game has no notion of what the various choices mean. When the player says, "Yes," we have to tell it that the player has accepted the quest and we're now at the next stage.  
Итак, у тебя есть простенький диалог с двумя вариантами ответов. Но игра понятия не имеет, что должна делать, когда игрок выбирает тот или иной вариант. Зато это знаешь ты. Осталось донести эти знания до игры.


Double-click on the text "Oh, thank you..." under the GSQ01MeetingBenduYes topic. (Note that this brings us directly to the Info window without first bringing up the Topic window.)
Дважды щелкни по тексту "О, спасибо..." под темой GSQ01MeetingBenduYes. (Заметь, что тебе сразу же открылось окно редактирования монолога, без промежуточного окна темы)


At the bottom of this window, you see fields for Scripts marked "Begin" and "End." The Begin script runs when the NPC starts saying the line, and the End script will run when he finishes. (In scripting terminology, these little pieces of script are called "script fragments" - see [[Topic_Info_Fragments|Topic Info Fragments]] for more details.)
В нижней части этого окна есть два поля: "Begin" и "End." Скрипт в первом выполняется, когда персонаж начинает произносить первую фразу, скрипт во втором - когда, заканчивает последнюю. (В терминологии скриптописания эти маленькие кусочки зовутся фрагментами скрипта (см. {{ulink|Topic_Info_Fragments|Topic Info Fragments}} для дополнительной информации.)


In the End field, enter this script command: <br />
В поле End записывай следующие скриптовые команды (смотри не ошибись!): <br />
<code>GetOwningQuest().SetObjectiveDisplayed(10) <br />
<code>GetOwningQuest().SetObjectiveDisplayed(10) <br />
GetOwningQuest().SetStage(10)</code>
GetOwningQuest().SetStage(10)</code>


You don't need to worry about the <code>SetObjectiveDisplyed(10)</code> part yet. It will be explained later on.
О том, что делает <code>SetObjectiveDisplyed(10)</code> ты узнаешь позже.


The <code>SetStage(10)</code> portion, as you might expect, sets a quest's current stage to 10. The <code>GetOwningQuest()</code> part just says that the quest we care about is the one that contains this dialogue. (Sometimes you might want a line in your quest to muck around in a different quest, so we have to be specific.)
Функция <code>SetStage(10)</code>, как не трудно догадаться, устанавливает "10" текущей стадией квеста. Код <code>GetOwningQuest()</code> вернет экземпляр квеста, которому принадлежит диалог. Зачем это нужно? Затем, что игра не уверена, что ты хочешь изменить стадию именно этого квеста. Возможно, ты хочешь изменить стадию другого квеста, к которому текущий диалог не имеет никакого отношения. Приходится вдаваться в конкретику.


If you press "Compile" you'll see some gobbledygook pop up under "Script Name" to the right. You can ignore that. (If you typed something wrong, though, the Editor will complain at you.)
Нажми кнопку "Compile" и в списке скриптов справа увидишь нечто невнятное и трудно читаемое. Не обращай внимания. (Если ты все-таки ошибся в написании, вместо скрипта со странным названием, ты увидишь сообщение об ошибке).


When you're ready to close the window, it should look like this:  
Перед закрытием окно должно выглядеть примерно так:


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


And that's it! Close the window, and you're good to go. You'll note that in the dialogue view, this info's text now has "[S]" at the front of it, so we can easily spot which bits of dialogue have game logic attached to them without having to open each one.
Вот и всё! Закрывай окно (естественно кнопкой "ОК") и радуйся жизни. Заметь, что перед текстом монолога появился префикс "[S]", означающий, что в этом монологе присутствуют какие-то скрипты.
 
-- Правка от Cyrius --
При добавлении скрипта ошибка может не спадать, даже если все написано верно.
Для  решения этой проблемы откройте расположение Skyrim и папку Data в нем. В папке Data найдите '''архив''' с названием Scripts. Извлеките из него все, что там есть в папку Data. Это поможет.
 
=Ветви и условия=
Только что ты создал ветвь диалога. По умолчанию это верхняя ветка (поэтому при просмотре она окрашена в рыжий). Об остальных пока не задумывайся, просто запомни, что верхняя ветвь первой отобразится игроку, если выполняются необходимые условия.


=Branches and Conditions=
Тема с желто-рыжей плашкой наверху помечена как начальная тема ветви. Когда персонаж определяет, какие варианты вопросов и ответов предложить игроку, он проверяет все начальные темы на выполнение условий и выводит их, если таковые есть. Как ты помнишь, для начальной темы было задано условие: стадия квеста должна быть меньше 10. Когда игрок соглашается начать задание, ты изменяешь стадию квеста на 10, следовательно условие не выполняется и в списке возможных тем персонажа она не появится.
What we've just done is craft a Branch of dialogue. By default it's a "Top-Level" branch (which is why it's colored orange in the view). You don't need to worry about the other branch types right now; just know that a top-level branch is available as one of the first things an actor is able to say to the player.  


The topic that has a yellow-orange bar at the top of it has been flagged as the branch's Starting Topic. When an actor is determining what choices to offer the player, it looks for starting topics and displays the prompts for all of them which are valid. If you remember, we put a condition on our starting topic that the quest stage had to be less than 10. Once the player chooses to accept the quest, we set the quest stage to 10, which means that starting topic is no longer valid; it won't appear in the actor's topic list anymore.
Не-начальные темы, обычно, имеют куда более скудные списки условий, потому что выполняются только в том случае, если верны все условия стартовой темы. Поэтому мы указали в качестве условий только ID говорящего. и то лишь для того, чтобы не плодить дополнительных голосовых файлов. На самой игре его отсутствие никак бы не сказалось.


Non-starting topics can have much smaller lists of conditions, since they are typically only accessed if the starting topic for their branch is valid. That's why we just limited them to a specific NPC so we wouldn't have extra voice files. From a gameplay perspective, it wouldn't have mattered.  
Когда игрок выбирает тему без связанных с ней тем, игра снова ищет удовлетворяющие условиям верхние темы. Если ни одной темы не найдено, персонаж выходит из диалога.


Once the player chooses a topic with no links out of it, the game will again look for valid top-level topics to give the player choices. If none are valid, the NPC will release the player from dialogue.  
=Проверка результата=
Запусти игру с подключенным плагином и поприветствуй Бенду. (Помнишь? Чтобы добраться до него, воспользуйся консольной командой <code>COC MixwaterMillWorkersHouse</code>.) Если все сделано правильно, он тебе что-нибудь скажет.


=Try It Out=
{{WarningBox|ВНИМАНИЕ! Если диалог не выводится, и персонаж реагирует простыми стандартными фразами типа: "привет" - ничего страшного. Попробуйте сохранить игру и загрузиться с того же места. Это скорее всего поможет}}
Load the game with your plugin and go meet Bendu. (Remember, you can hop right there with <code>COC MixwaterMillWorkersHouse</code>.) He should now have something to say to you.  


[[Image:DialogueInGame.png|500px]]
[[Image:DialogueInGame.png|500px]]


There are a few problems with the dialogue as it currently stands:
Как ты быстро заметишь, есть несколько малоприятных особенностей:
# It flashes directly to the next choice list. (Since there's no audio, if you don't have captions on, you won't have any idea what he said. Even if you do, they probably flashed by so quickly you couldn't read.)
# Диалоги мелькают с такой скоростью, что прочитать текст не представляется возможным.
# If you refuse to help, he'll just go right back to the same top level topic, which feels odd.  
# Если отказаться от помощи, Бенду вновь предложит игроку стартовую тему.


Luckily these are easily addressed.
К счастью, все это очень просто исправить.


=Recording a Temp Track=
=Запись звуковой дорожки=
Open up the GSQ01MeetingBenduBranchTopic and navigate through to its Response window. At the bottom of the window, you'll see a "Record" button.
Любым уже известным тебе способом открой окно редактирования первой фразы Бенду в теме GSQ01MeetingBenduBranchTopic. В нижней части окна притаилась неприметная кнопка записи: "Record".


[[File:RecordButton.jpg|200px]]
[[File:RecordButton.jpg|200px]]


Press this button and, if you have a microphone hooked up to your computer, you can record a performance of the line yourself. If you don't (or you're self-conscious and don't like the sound of your own voice) you can just record a few seconds of silence, enough to give the captions time to be read. (Note: you MUST have a microphone to record anything. If no microphone was plugged in at the time you started the Creation Kit, the record button will not do anything) Hit the Save button to commit this file to disk.  
Нажми на нее. Если микрофон подключен к компьютеру, можешь самостоятельно озвучить фразу. Если микрофона нет (или ты слишком застенчив, или тебе не нравится, как звучит в записи твой голос), ты можешь просто записать несколько секунд тишины, в течении которых игрок успеет прочитать текст (Учти: чтобы что-нибудь записать, ты должен подключить микрофон до того, как запустишь Creation Kit, в противном случае ты ничего не запишешь!). Кликни по кнопке Save, чтобы сохранить записанный файл на диск.


Do the same thing for the other two topics we made. (While you're in there, consider setting the emotions for those lines, so that Bendu will show Disgust or Happiness depending on your choice.)
Аналогичным образом запиши дорожки или заглушки для фраз в двух других темах. (Пока ты не закрыл это окно, можешь поиграться с различными эмоциями, которые изобразит Бенду в зависимости от твоего выбора; выбери Disgust (отвращение) или Happiness (счастье).)


In the "No" topic, click the box that says "Goodbye." This will drop the player out of dialogue when it's selected, so you won't end up back at the topic list after the line is done. (You should also make the "Yes" topic a goodbye. Since Bendu only has one top-level topic right now, that's not necessary, because we know he'll have nothing else to say when he's done here. But if another quest had dialogue for him, it might be confusing to the player.)
В теме, где игрок отказывается от выполнения квеста, поставь флажок "Goodbye". Это нужно для того, чтобы диалог окончился после завершения монолога Бенду. (Также неплохо бы пометить флажком и монолог во второй теме. Да, на данный момент это не нужно, изменившееся условие не позволит персонажу продолжить диалог, но кто знает - возможно, в будущем у него появятся и другие диалоги, не зависящие от стадии твоего квеста. В этом случае может возникнуть путаница, так что не ленись и поставь галку.)




{{ProTip|Currently there is a rare bug: if you already got audio files (with correct file paths, (read table in "Edit Response" window)), but it does not work inside the Skyrim game (does not matter in Creation Kit, test just in the game itself), then you need to convert sound files from WAV to XWM, then XWM to FUZ, for more info and converter links visit http://forums.bethsoft.com/topic/1347417-dialogue-troubles/page__p__20346206#entry20346206 <br>
{{ProTip|В настоящий момент существует редкая ошибка: если у тебя уже есть аудио-файлы (с корректными путями [см. таблицу в окне "Edit Response"]), но в игре они не проигрываются (не смотри в Creation Kit, тут все будет работать, проверять нужно именно в игре), то тебе нужно конвертировать записанные файлы из WAV в XWM, а затем из XWM в FUZ. Более подробную информацию и ссылку на конвертер найдешь на [http://forums.bethsoft.com/topic/1347417-dialogue-troubles/page__p__20346206#entry20346206 форуме].<br>
For some people it is the only way to make recorded tracks working in game.}}
Для некоторых людей это единственный способ заставить работать записи в игре}}


=Additional Dialogue=
=Новая ветвь=
While we're here, let's also make the dialogue that will close out the quest when we come back with the amulet.  
Пока ты не закрыл окно, давай ка создадим еще одну ветвь, которой встретит нас радостный Бенду после возвращения амулета.  


In the dialogue view, right-click to create a new branch, and call it "GSQ01BenduFinishBranch." Accept the default name for the starting topic, and make the topic text, "I've brought your amulet." Give him something good as a response (I went with "I hope you gave that thief a good thrashing!"). It will want two conditions; one that restricts it to Bendu, and another that limits it to stage 30 of the quest. Finally, set it to be a Goodbye, and set the quest to stage 40 when it's said.  
В представлении диалога ПКМ по пустому пространству и "Create Branch". Называешь ветвь "GSQ01BenduFinishBranch". Соглашайся на имя по-умолчанию для начальной темы, задавай теме текст: "Я добыл амулет". Дай ей какой-нибудь подходящий случаю ответ (например "Надеюсь, этому ворюге не сабо досталось!). Теперь нужно задать два условия. Одно, которое привяжет тему к Бенду, и другое, которое проверит, что игрок на 30ой стадии квеста. Наконец, отметь завершающие монологи флажком "Goodbye", и установи стадию квеста на 40.


You should be able to do all this by now. It will look like this when you're done.  
Ты все это уже делал, справишься. В итоге окошко должно выглядеть так:


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


We still haven't dealt with the amulet itself yet, and the quest has no way to proceed from stage 10 to 30, so we have work to do!
Правда, амулет ты еще не сделал, а значит и переход от 10ой стадии к 30ой невозможен. Займемся этим в следующей главе.


{{Template:InDepth|This might seem like a lot of work and unnecessary data-fumbling to just get characters to say a few lines. Part of the complexity is historical -- because it evolved from the old Morrowind text-based dialogue system, the organization can seem a little sideways and non-directed. But the same system also handles multiple characters saying the same line, combat barks, player greetings, hit responses, etc. Flexibility sometimes means complexity.  
{{InDepth|На первый взгляд, все это очень сложно и муторно. А в итоге получаем персонажа, который произносит пару слов. Да, система бесспорно не совершенна, и многие элементы тащит за собой еще со времен диалогов в игре Morrowind. Однако, она же предоставляет очень гибкую систему диалогов, позволяющую привязывать несколько тем различным персонажам, проигрывать анимацию, изображать эмоции, и еще много-много всего. А гибкость всегда подразумевает некоторую сложность.  


With some practice, all of this becomes second nature, and you'll be able to mechanically work the dialogue system as fast as you can write the lines themselves.}}
Главное - практика. В скором времени, эта система станет твоей второй натурой, и большую часть действий ты будешь выполнять механически, также быстро, как набираешь строчки текста (если опустить тормоза редактора).}}





Latest revision as of 16:10, 22 June 2015

Диалоги



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


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


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

В этой главе мы будем создавать диалоги к тренировочному квесту "Единственная надежда Бенду Оло".

Ты узнаешь:

  • Как писать диалоги для Skyrim в Creation Kit.
  • Как привязать события к выбранным игроком темам диалога.

Представления диалогов[edit | edit source]

Creation Kit визуализирует весь процесс создания диалога, предоставляя удобный интерфейс взаимодействия.

NewFeature.jpg Если ты писал диалоги для предыдущих игр серии TES или Fallout 3, то можешь воспользоваться родной вкладкой Player Dialogue (en) (на самом деле, система диалогов осталась прежней, просто прячется за новым интерфейсом).
Achtung.png Если ты намерен писать диалоги на языках не использующих латинский алфавит, то рекомендую сконцентрироваться на изучении именно этого способа, так как на данный момент (13 апреля 2012г.) Creation Kit отказывается адекватно отображать русскоязычный текст в представлении (да и не сам интерфейс скорее кривой, нежели удобный), что делает невозможным поддержку сложных диалогов. Если данную ошибку исправили - убери данную заметку со страницы - прим.переводчика

Для начала, дважды щелкни по своему заданию (в нашем случае GSQ01), чтобы открыть окно квеста. Перейди на вкладку Dialogue Views (en). Выглядеть это должно вот так:

EmptyDialogueTab.png

Чтобы создать новый диалог, щелкни ПКМ по таблице в левой части окна и выбери пункт "New." Тебе предложат указать ему ID, а ID квеста будет автоматически использован в качестве префикса. Дай ему имя: "GSQ01BenduView." Щелчком в таблице выбери его.

Справа ты видишь белый девственно чистый холст без единого намека на что-нибудь интересное. ПКМ по нему и выбирай "Create Branch" из меню. Да-да, и снова тебе нужно указать ID, на этот раз ветви диалога. Называй: "GSQ01MeetingBenduBranch"... и еще один ID для темы (впрочем, тут можешь оставить вариант по-умолчанию "GSQ01MeetingBenduBranchTopic"). Еще одно нажатие на Enter и пред тобой несколько прямоугольников мерзкого цвета, которые, наверняка, тебе ни о чем не говорят.

DialogueStartingBranch.png

Перед тем как продолжить, давай разберемся с терминами:

  • Ветвь (en): Набор связанных по смыслу тем.
  • Тема (en): Выбираемая игроком тема диалога, на которую последует монолог персонажа.
  • Монолог (en): Набор произносимых подряд рерлик.
  • Реплика: Одна строка монолога, произносимая NPC. Длина строки ограничена 150 символами. С ответом могут быть связаны эмоции и анимации, проигрываемые говорящим.


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

DialogueStartingBranchLabeled.png

Темы[edit | edit source]

Двойной ЛКМ по теме (рыжей полоске над серым пространством) откроет окно темы (en).

EmptyTopicWindow.png

Пока тебя интересует только поле "Topic Text". Его содержимое будет выведено игроку в качестве варианта диалога во время разговора с персонажем. Делаем из игрока стандартного героя-дурачка, готового помогать всем и каждому. Пишем: "Тебе чем-нибудь помочь?"

Achtung.png Как только поле ввода потеряет фокус, может выскочить окошко Check Spelling. Не пугайся. Это всего лишь окно проверки орфографии, которое не знает русских слов и будет постоянно тебя донимать. К сожалению, это донельзя кривой и неудобный инструмент даже в оригинале. Возможно, с ним можно было бы свыкнуться, однако он (на данный момент) на отрез отказывается корректно работать кирилицей (например воспринимает букву "ч" в качестве разделителя). Так что самым правильным (возможно, временным) решением будет отключить проверку правописания и возложить всю ответственность на себя и редактора, если такой имеется. Для этого:
  1. Закрой Creation Set.
  2. Перейди в каталог игры.
  3. Открой файл SkyrimEditorPrefs.ini любым текстовым редактором (н.п. блокнотом).
  4. Найди категорию [SpellCheck].
  5. Измени значение единственного параметра bSpellCheckEnabled с "1" на "0".
  6. Сохрани изменения.

Ниже расположена таблица монолога. Дважды щелкни по ней, чтобы создать новую фразу.

EmptyResponseWindow.png

В поле "Response Text" введи: "Странно, что вы спросили... Как раз недавно один грязный ворюга утащил мой амулет! Не могли бы вы... ммм... вернуть его?"

Теперь щелкни по кнопке ОК внизу окна. Оно исчезнет, и ты увидишь новое - окно монолога.

Монологи[edit | edit source]

TopicInfoWindowStart.png

В этом окне огромное количество всевозможных настроек, но тебя интересует лишь их малая часть. В первую очередь таблица условий (en) в центре. Условия описывают - у кого может появиться этот монолог. Если ты оставишь условия пустыми, то каждый персонаж во всем мире обзаведется темой "Тебе чем-нибудь помочь?"

ПКМ в таблице условий, выбираешь "New" для создания нового условия.

ConditionItem.png

Каждое из условий может быть либо ложным (False) либо истинным (True). Если все условия в списке истинны, монолог проходит проверку и появляется у персонажа. Твое условие будет простым и не замысловатым - нужно задать одного единственного персонажа, которому была предназначена тема. Нужная проверка "GetIsID" выбрана по-умолчанию, так-как является наиболее часто используемой ввиду большого количества личных диалогов, привязанных к конкретным персонажам. Щелкни по здоровенной кнопке с надписью "INVALID" и выбери ID Бенду Оло: "GSQBenduOlo" (поле поддерживает быстрый поиск при вводе с клавиатуры). Затем нажми "ОК".

InDepth.jpg Особо обрати внимание и запомни, что условия задаются не для темы, выбираемой персонажем, а для ответного монолога. Если хоть один монолог проходит проверку - тема появляется в окне диалога. Но сама тема не содержит условий. Это кажется странным, но написав несколько собственных диалогов, ты поймешь, почему сделано именно так.

ConditionItemFilled.png

Вновь нажми "OK" чтобы сохранить изменения и закрыть окно условий. Свежесозданное появится в списке. Теперь только Бенду сможет общаться на эту тему. Однако, ты ведь не хочешь, чтобы он делал это постоянно? Правильно, тема должна быть доступна только до момента взятия квеста. Добавляем еще одно условие. Уверен, ты запомнил, как это делается.

Ограничим тему диалога еще и стадией квеста. В списке проверочных функций (Condition Function) выбери "GetStage". Затем кликни по любимой кнопке "INVALID" и выбери квест с нужным ID ("GSQ01"). Функция знает, что в качестве первого параметра ей должны передать ID квеста, а не чего-либо еще, поэтому других объектов в списке параметров не будет, только квесты.

Теперь нужно задать метод сравнения результата функции с некоторым значением. У большинства людей первым желанием будет задать проверку на равенство ("==") с числом "0" (наша начальная стадия квеста). Но жесткое сравнение в программировании (а мы сейчас пишем своего рода программу) никогда не считалось хорошим тоном. Например, в последствии вы решите добавить еще одну стадию между "0" и "10", когда игрок еще не встретился с Бенду Оло, но, например, слышал слухи о том, что у бедняги украли амулет, и условие придется переписывать. Дабы этого избежать, и зная, что разговор Бенду Оло станет стадией квеста под номером "10", запишем условие так: "если стадия меньше 10". То есть меняем метод сравнения на "<" и значение на "10".

ConditionItemGetStage.png

InDepth.jpg Обрати внимание, что порядок следования условий можно изменять стрелками на клавиатуре "вправо" и "влево" (да, не логично) и аналогичными кнопками под нижним левым углом таблицы условий. В нашем случае порядок значения не имеет, но когда ты будешь составлять сложные условия связанные не только AND (и), но и OR (или), это будет играть важную роль.

Вот что должно получиться у тебя в итоге:

TopicInfoWindowFilled.png

Кнопкой ОК подтверждаешь изменения и закрываешь окно монолога. Еще раз по ОК, закрывая окно темы.

Связи[edit | edit source]

И вот пред тобою вновь представление диалогов! Теперь уже не пустое. Если тебе захочется увидеть весь текст, отметь флажок "Show All Text" в нижней части окна.

Achtung.png Ты ведь помнишь предупреждение относительно кириллицы? Вот и сравни то, что видишь ты, со скриншотом ниже.

DialogueViewWithStuff.png

Теперь неплохо бы добавить игроку возможность ответить на просьбу Бенду о помощи. ПКМ в области ветви. Выбираешь "Add Topic." (Если "Add Topic" отсутствует, значит ты промахнулся и щелкнул не туда [см.картинку выше])

Откроется новое окно редактирования темы. И вновь тебе придется ввести ID. Вводишь: "GSQ01MeetingBenduYes", в переводе, если игрок ответит "Да" на просьбу Бенду. В качестве текста укажи: "Конечно, я тебе помогу". Дважды щелкни по таблице монологов, чтобы добавить ответ, и собственно укажи сам ответ: "О, спасибо, спасибо вам огромное! Он убежал в сторону Reachwind Eyrie. Пожалуйста, скорее! Я... я выкуплю его у тебя, за двойную цену!" Нажми "ОК".

Чтобы вернуться к редактированию дважды щелкни по ответу в списке Responses. Обрати внимание на список аудио-файлов в нижней части.

BadSoundExport.png

Поскольку, ты еще не задал ни одного условия, редактор отображает все доступные голоса, которыми может быть озвучена реплика. Это существенно увеличивает затраты дискового пространства (и времени, если собираешься записывать голос [и если не собираешься, тоже...]). Закрываем окно редактирования фразы и добавляем новое условие. Функция GetIsID, проверяющая, что ID говорящего GSQBenduOlo (как и в предыдущем случае). Если ты теперь вновь откроешь редактирование фразы, то увидишь, что в списке звуковых наборов остался только MaleDarkElf.

GoodSoundExport.png

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

MultiTopicBranch.png

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

Создай еще одну тему с текстом: "Извини, не сейчас". И задай ответ Бенду: "Ну, ладно". Не забудь задать условие, как ты уже делал прежде. После создания, нового топика представление будет выглядеть так:

UnconnectedDialogue.png

Все имеющиеся темы расположены в одной ветви, но игра не имеет ни малейшего представления о том, как они взаимодействуют. Так что теперь ты будешь учиться их связывать. Кликни по GSQ01MeetingBenduBranchTopic, чтобы сделать тему активной. Щелкни еще раз, теперь уже в области текста (курсор изменится на маленькую руку). Зажми ЛКМ и тащи линию к GSQ01MeetingBenduYes. Отпусти ЛКМ. Аналогичным образом свяжи начальную тему с GSQ01MeetingBenduNo.

ConnectedDialogue.png

Теперь, когда игрок выберет "Тебе чем-нибудь помочь?", Бенду произнесет свой монолог, а затем предложит выбрать одну из двух связанных тем. Темы будут отображаться в том порядке, в котором они были привязаны к главной теме.

Скрипты в диалогах[edit | edit source]

Пора тебе познакомиться с местной системой скриптов. Не переживай, ничего сложного, даже если это не твой конёк.

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

Дважды щелкни по тексту "О, спасибо..." под темой GSQ01MeetingBenduYes. (Заметь, что тебе сразу же открылось окно редактирования монолога, без промежуточного окна темы)

В нижней части этого окна есть два поля: "Begin" и "End." Скрипт в первом выполняется, когда персонаж начинает произносить первую фразу, скрипт во втором - когда, заканчивает последнюю. (В терминологии скриптописания эти маленькие кусочки зовутся фрагментами скрипта (см. Topic Info Fragments (en) для дополнительной информации.)

В поле End записывай следующие скриптовые команды (смотри не ошибись!):
GetOwningQuest().SetObjectiveDisplayed(10)
GetOwningQuest().SetStage(10)

О том, что делает SetObjectiveDisplyed(10) ты узнаешь позже.

Функция SetStage(10), как не трудно догадаться, устанавливает "10" текущей стадией квеста. Код GetOwningQuest() вернет экземпляр квеста, которому принадлежит диалог. Зачем это нужно? Затем, что игра не уверена, что ты хочешь изменить стадию именно этого квеста. Возможно, ты хочешь изменить стадию другого квеста, к которому текущий диалог не имеет никакого отношения. Приходится вдаваться в конкретику.

Нажми кнопку "Compile" и в списке скриптов справа увидишь нечто невнятное и трудно читаемое. Не обращай внимания. (Если ты все-таки ошибся в написании, вместо скрипта со странным названием, ты увидишь сообщение об ошибке).

Перед закрытием окно должно выглядеть примерно так:

ScriptedDialogue.png

Вот и всё! Закрывай окно (естественно кнопкой "ОК") и радуйся жизни. Заметь, что перед текстом монолога появился префикс "[S]", означающий, что в этом монологе присутствуют какие-то скрипты.

-- Правка от Cyrius -- При добавлении скрипта ошибка может не спадать, даже если все написано верно. Для решения этой проблемы откройте расположение Skyrim и папку Data в нем. В папке Data найдите архив с названием Scripts. Извлеките из него все, что там есть в папку Data. Это поможет.

Ветви и условия[edit | edit source]

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

Тема с желто-рыжей плашкой наверху помечена как начальная тема ветви. Когда персонаж определяет, какие варианты вопросов и ответов предложить игроку, он проверяет все начальные темы на выполнение условий и выводит их, если таковые есть. Как ты помнишь, для начальной темы было задано условие: стадия квеста должна быть меньше 10. Когда игрок соглашается начать задание, ты изменяешь стадию квеста на 10, следовательно условие не выполняется и в списке возможных тем персонажа она не появится.

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

Когда игрок выбирает тему без связанных с ней тем, игра снова ищет удовлетворяющие условиям верхние темы. Если ни одной темы не найдено, персонаж выходит из диалога.

Проверка результата[edit | edit source]

Запусти игру с подключенным плагином и поприветствуй Бенду. (Помнишь? Чтобы добраться до него, воспользуйся консольной командой COC MixwaterMillWorkersHouse.) Если все сделано правильно, он тебе что-нибудь скажет.

Achtung.png ВНИМАНИЕ! Если диалог не выводится, и персонаж реагирует простыми стандартными фразами типа: "привет" - ничего страшного. Попробуйте сохранить игру и загрузиться с того же места. Это скорее всего поможет

DialogueInGame.png

Как ты быстро заметишь, есть несколько малоприятных особенностей:

  1. Диалоги мелькают с такой скоростью, что прочитать текст не представляется возможным.
  2. Если отказаться от помощи, Бенду вновь предложит игроку стартовую тему.

К счастью, все это очень просто исправить.

Запись звуковой дорожки[edit | edit source]

Любым уже известным тебе способом открой окно редактирования первой фразы Бенду в теме GSQ01MeetingBenduBranchTopic. В нижней части окна притаилась неприметная кнопка записи: "Record".

RecordButton.jpg

Нажми на нее. Если микрофон подключен к компьютеру, можешь самостоятельно озвучить фразу. Если микрофона нет (или ты слишком застенчив, или тебе не нравится, как звучит в записи твой голос), ты можешь просто записать несколько секунд тишины, в течении которых игрок успеет прочитать текст (Учти: чтобы что-нибудь записать, ты должен подключить микрофон до того, как запустишь Creation Kit, в противном случае ты ничего не запишешь!). Кликни по кнопке Save, чтобы сохранить записанный файл на диск.

Аналогичным образом запиши дорожки или заглушки для фраз в двух других темах. (Пока ты не закрыл это окно, можешь поиграться с различными эмоциями, которые изобразит Бенду в зависимости от твоего выбора; выбери Disgust (отвращение) или Happiness (счастье).)

В теме, где игрок отказывается от выполнения квеста, поставь флажок "Goodbye". Это нужно для того, чтобы диалог окончился после завершения монолога Бенду. (Также неплохо бы пометить флажком и монолог во второй теме. Да, на данный момент это не нужно, изменившееся условие не позволит персонажу продолжить диалог, но кто знает - возможно, в будущем у него появятся и другие диалоги, не зависящие от стадии твоего квеста. В этом случае может возникнуть путаница, так что не ленись и поставь галку.)


Protip.jpg В настоящий момент существует редкая ошибка: если у тебя уже есть аудио-файлы (с корректными путями [см. таблицу в окне "Edit Response"]), но в игре они не проигрываются (не смотри в Creation Kit, тут все будет работать, проверять нужно именно в игре), то тебе нужно конвертировать записанные файлы из WAV в XWM, а затем из XWM в FUZ. Более подробную информацию и ссылку на конвертер найдешь на форуме.

Для некоторых людей это единственный способ заставить работать записи в игре

Новая ветвь[edit | edit source]

Пока ты не закрыл окно, давай ка создадим еще одну ветвь, которой встретит нас радостный Бенду после возвращения амулета.

В представлении диалога ПКМ по пустому пространству и "Create Branch". Называешь ветвь "GSQ01BenduFinishBranch". Соглашайся на имя по-умолчанию для начальной темы, задавай теме текст: "Я добыл амулет". Дай ей какой-нибудь подходящий случаю ответ (например "Надеюсь, этому ворюге не сабо досталось!). Теперь нужно задать два условия. Одно, которое привяжет тему к Бенду, и другое, которое проверит, что игрок на 30ой стадии квеста. Наконец, отметь завершающие монологи флажком "Goodbye", и установи стадию квеста на 40.

Ты все это уже делал, справишься. В итоге окошко должно выглядеть так:

FinishingQuestDialogue.png

Правда, амулет ты еще не сделал, а значит и переход от 10ой стадии к 30ой невозможен. Займемся этим в следующей главе.

InDepth.jpg На первый взгляд, все это очень сложно и муторно. А в итоге получаем персонажа, который произносит пару слов. Да, система бесспорно не совершенна, и многие элементы тащит за собой еще со времен диалогов в игре Morrowind. Однако, она же предоставляет очень гибкую систему диалогов, позволяющую привязывать несколько тем различным персонажам, проигрывать анимацию, изображать эмоции, и еще много-много всего. А гибкость всегда подразумевает некоторую сложность.

Главное - практика. В скором времени, эта система станет твоей второй натурой, и большую часть действий ты будешь выполнять механически, также быстро, как набираешь строчки текста (если опустить тормоза редактора).


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



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