MSFD Функции для диалогов
Краткая инструкция по диалогам
Диалоги как искусство в себе не может быть полностью рассмотрено здесь.
Однако когда вы будете создавать квесты, вам часто придется смешивать диалоги и скрипты, чтобы контролировать квесты и добиваться определенных эффектов.
Так что я приведу небольшое вступление.
Концепция диалогов в Морре
В Морровинде диалоги организованы в базу данных. Эта база структурирована следующим образом:
Это новый раздел в МСФД 9! (ЕН)
Длинная – значит больше 512 символов. Таков лимит символов в одном ответе. (Прим. Gwathlobal)
Это раздел только по диалогам.
Поскольку здесь в МСФД в диалоги "впихнули" и описания скриптовых команд, то статья оставлена на своем месте.
Верхний уровень:
Различные «подразделения» диалога:
Темы (Topics): Само тематическое слово и отклики для диалогового окна в игре.
Приветствия (Greetings): Текстовые строки, которыми вас приветствуют, когда вы начинаете диалог с актером.
Убеждение (Persuasion): Ответы, которые вы получите для успешной или провальной попытки убеждения.
Журнал (Journal): Записи в журнал.
Голоса (Voices): Звуковые файлы формата .mp3 (и субтитры), которые персонажи "говорят", когда вы проходите мимо, во время удара, во время бегства и т.д.
Подуровень 1:
Каждый из этих подразделений верхнего уровня имеют подуровни, которые я называю топиками – для секции Topics, это обычные "ключевые слова" (темы), на которые актерам есть что сказать. Эти слова будут подсвечены ("гиперссылки") в тексте и перечислены с правой стороны панели диалогового окна.
Для Journal это различные заголовки (обычно один на задание).
Для Voices это различные категории звуковых ответов, которые "включаются" при определенных игровых условиях и т.д.
Для Greetings это просто основные категории приветствий (больной, предложения задания, стандартные и так далее).
Вот как Беседка их использует (Информация с форумов / Emma):
Greetings 0: NPC встревожен (походу это довольно условно, т.к. нужный диалог можно запихать в любой Greeting).
Greetings 1: Квесты (для которых не важно, является ли игрок вампиром, голым, больным, преступником и т.д.)
Greetings 2: Игрок вампир/раздет
Greetings 3: Предатели Мораг Тонг
Greetings 4: Преступления и болезни
Greetings 5: Квесты
Greetings 6: Фракции
Greetings 7: Классы, Конец игры, Рабы
Greetings 8: Одежда (общие приветствия на основании одежды игрока)
Greetings 9: Места
Для Persuasion это такие вещи, как отказ в услугах или успешная/неуспешная попытка дать взятку.
Подуровень 2:
Для каждого топика может быть еще один или несколько подразделов — это сами отклики.
Для Topic и Greetings это ответы актеров на фразу темы.
Для Journal это различные записи, описывающие прогресс выполнения задания.
Эти записи представлены связанным списком, что означает, что каждая запись содержит (невидимую) информацию о том, какая запись стоит перед ним, и какая после.
(Это приводит к обычному сообщению об ошибке, когда в диалоге удаляли записи или перемещали их, например, при чистке мода в TESAME или, загружая несколько модов, которые изменяют одну и ту же тему. Игра более не уверена, какая запись идет после какой. Иногда это не важно, но иногда означает, что некоторые отклики будут вырезаны, потому что порядок изменился — это зависит от условий).
Записи идут вместе с условиями, которые можно установить в окне редактора диалогов.
В окне тем (topic window), вы найдете список основных условий слева — здесь вы можете определить, какой актер (Actor ID) или их группа (Раса [Race], Класс [Class] и т.д.) должны знать эти отклики. Также есть два условия для игрока (Фракция игрока [PC faction] и ранг [rank]). Справа вы можете установить максимум 6 “свободных” условий, которые могут относиться к актеру, игроку или другим вещам, таким как состояние глобальных переменных — здесь много опций, с которыми вам придется разобраться самим. Это проверка записей журнала, состояние игрока, локальные или глобальные переменные, предметы в инвентаре и много других функций - некоторые эквивалентны скриптовым функциям, некоторые уникальны для диалогов. (см. ниже).
Важная и на первых порах смущающая функция редактора диалогов — фильтр (filter) (в левом нижнем углу).
Когда вы выбираете здесь actor ID, вы можете видеть только темы, которые этот актер может знать (как описано выше).
Помните, что когда вы создаете новую тему (topic) (возможно специально для этого актера), она не содержит ответов (responses).
Таким образом, актер “не знает” ее, и только что созданная тема не появляется!
Выберите пустой слот на самом верху, чтобы снова увидеть все темы, создайте ответ для новой темы, чтобы актер ее “узнал” — теперь можете снова включить фильтр, если хотите.
Как работает диалог
Чтобы определить, доступна ли тема для диалога с NPC, игра проверяет:
-
1.“Знает” ли NPC тему – это определяется условиями в поле "speaker conditions" – если NPC удовлетворяет условиям хотя бы для одного ответа из этой темы, он “знает” ее.
-
2.Знает ли ее игрок. Игрок знает тему, если она (тематическая фраза) появлялась ранее в откликах NPC или была специально добавлена функцией
AddTopic.
Например, игрок пытается торговать с продавцом оружия, а продавец отказывается, так как в инвентаре игрока – скуума.
Существует тема «скуума» и это слово использовано в диалоге, но торговцы оружием не знают эту тему, и она не будет добавлена игроку.
Так что игрок узнает ее только после того, как поговорит с кем-то, кто «знает» что-то о скууме. (Информация с форумов / Kir)
-
3.Если и игрок, и актер “знают” тему, тогда она показывается в списке тем и подсвечивается в тексте — теперь она может быть выбрана игроком, и на нее будет дан нужный ответ.
Когда игре нужно выбрать правильный ответ из списка ответов для данной темы, она делает это следующим образом:
Она начинает проверять сверху списка, проверяя соответствие условий ответа, что означает, что все условия, которые были определены для данного ответа, должны быть «истинны».
-
Если нет -> игра переходит к следующему элементу в списке и проверяет снова.
-
Если да -> эта запись выводится в диалоговое окно.
Особое правило для приветствий (greetings): если ни один из элементов списка не подходит, переходим на 1 элемент следующего уровня (например, если ни один из элементов из "Greeting 0" не возвращает «истину», начинаем проверять в "Greeting 1").
Особое правило для Журнала (Journal): здесь есть только одно условие, которое проверяется, - это индекс (вызываемый функцией Journal).
Он должен подходить точно.
Как только ответа выбран, игра
Выводит текстовую строку в диалоговое окно (или проигрывает файл mp3 для VoiceПричем, крики из раздела Voice/Hit будут показываться только в том случае, если непися ударить оружием. Действия магии непись сносит молча. (Прим. Gwathlobal))
Исполняет любые скриптовые команды в поле Result (в самом низу).
Вы можете использовать здесь все скриптовые функции, в том числе и конструкции if (спасибо Kir и Manauser)
Будьте осторожны, т.к. поле result позволяет вам менять информацию в скриптах (например, устанавливая переменные или добавляя записи в журнал) и скрипт также может влиять на диалог, ставя условия, которые можно проверять (например, вы можете устанавливать локальные или глобальные переменные в условиях диалога говорящего).
Простейший скрипт, который влияет на диалог — это скрипт nolore, который используется как флаг, чтобы актеры не использовали стандартные диалоги.
Примечание: Поля result не компилируются в CS!
Можно написать там что угодно и Морр не поперхнется до тех пор, пока этот ответ не будет выбран в диалоге и скрипт не исполнится.
Если скрипт достаточно сложен и можно беспокоится о возможных ошибках, то рекомендуется скопировать его в обычное окна скрипта и скомпилировать.
Это более надежно, чем использовать кнопку Error Test Results, так как она изменяет установленные значения глобальных переменных.
С другой стороны, некомпилируемые сразу скрипты могут использоваться для интересных возможностей, например, обращение к содержанию другого мода без дубликации его в данном моде, что не возможно сделать с нормальными скриптами (Информация с форумов / Kir)
-
Самые специфичные ответы должны быть сверху списка, ответы «для всех» должны быть в самом низу!
Помните, тот ответ, который возвращает «истину», тот и берется.
Так что вы не должны ставить ответ для всех в Вивеке выше, чем ответ для конкретного NPC в Вивеке.
-
Если вы хотите, чтобы NPC мог говорить с игроком о чем-то особенном, вы должны представить тематическую фразу, например в приветствии (greeting) или в отклике на тему "свежие сплетни". Как альтернативу можно использовать скрипт с функцией AddTopic.
-
Не используйте обычные слова как темы для журнала. Topic, Greeting, Journal на самом деле единая БД – вот почему журнальные темы используют
формат, вида A1_dreams. Если бы стояло просто "dreams", тогда журнальная запись для "dreams" могла появиться, как отклик на диалог для слова "dreams".
Нижеследующее суммирует некоторые наиболее распространенные проблемы с диалогами.
Это список был собран из дискуссий на форумах, которые прислали Klinn, Emma и GarryB.
Совет 1) Мои новые темы исчезают!
Зайдите в Фильтры внизу списка тем.
Выберете самый верхний пустой элемент в выпадающем меню. Рекомендуется вызвать окно диалогов с панели инструментов, а не из окон Актеров.
Совет 2) Мои NPC постоянно задают мне один и тот же вопрос!
Убедитесь, что ответы находятся выше вопроса. Звучит странно, но это работает.
Это не странно это нормально.
См. ранее, что скрипты читаются сверху вниз, но выполняются снизу вверх. И самое базовое условие (лучше) (должно быть) размещено в самом низу скрипта.
И если со скриптами работает условие вверху, то с диалогами такое не срабатывает.
Ответы (реплики) всегда должны стоять выше вопроса!
Т.е. реплика с выбором ответов (Choice "дада" 1 "нетда" 2) должна идти ниже по списку диалогов НПС, чем ответы на оную!
Если игра не найдет ответ, то "повеситься"! И придется выходить из нее, т.к. иной возможности закрыть окно диалога не будет.
Он войдет в петлю и на этом все закончится.
|
|
|
|
Вопрос с опциями диалога (Choice) находится ниже по списку реплик, чем ответы на оный.
Самый нижний диалог имеет условия опроса на дневник до, или после, успешной беседы.
Т.е. в нем (здесь) нет опций продолжения беседы.
|
Ответ (опция Function -> Choice) Находится правильно, выше вопроса.
|
Совет 3) Мой NPC говорит обо всем!
Чтобы NPC не говорил на стандартные Морровские темы, присоедините скрипт «nolore» к нему.
Если он уже имеет скрипт, то добавьте в него объявление переменной Short NoLore.
Совет 4) Мой NPC все равно имеет дополнительные темы!
Некоторые другие темы всегда будут появляться в зависимости от класса и фракции NPC.
Например, члены Имперского Легиона всегда будут говорить о своей фракции, Империи и т.д.
Совет 5) Как я могу добавить темы только для моего NPC?
После создания темы и ответов для нее, укажите в графе Speaker Conditions ID своего NPC.
Совет 6) Я добавил темы, но мой NPC их не имеет!
Две возможности: NPC должен употребить это слово до того, как вы можете его об этом спрашивать.
Обычно это делается тем, что слово добавляется в приветствие.
Второе: возможно Speaker Conditions не позволяют теме появится.
Даже когда вы фильтруете диалог для NPC, некоторые темы зависят от того, достиг ли игрок определенного места игры, имеет ли нужную запись в журнале и т.д.
Совет 7) Как можно поменять порядок ответов?
Используйте левую и правую стрелки на клавиатуре, чтобы передвигать ответы вверх и вниз.
Работает не всегда, при этом задевает все другие (топики) (и реплики) через которые (топик или реплика) были "протащены".
Иной раз, лучше создать новый (топик реплику) в самом верху списка (топиков реплик) и уже танцевать от этого.
Совет 8) Как можно создать диалог с существами?
Каждое существо может иметь свои диалог.
Это можно сделать так же как и диалога с NPC, кроме одного различия.
Отличие существ от НПС, что оные не имеют диалогов по умолчанию и все диалоги надо составлять адресно.
Существо ID addtopic ID и далее оный будет работать только с оным.
Т.е. для существ нет общих классовых фракционных и др. типов диалогов, поскольку всего этого им на завезли.
Хотя если создать расу скампов с анимация скампа, то будет НПС с модельку скампа и кучей тем для диалога... но тут будет проблема с броней и одеждой...
Нужно создавать диалог, не фильтруя его. После того как вы создали диалог, можете его фильтровать для этого существаИ еще. Если вы не создали приветствие для этого существа, то диалог с ним начинатся не будет, сколько бы тем у него не было. Также необходимо указывать ID вашего существа для каждого ответа, так как существа не говорят на обычные морровиндские темы, а только на те, которые были указаны специально для них. (Прим. Gwathlobal)
Совет 9) Как чаще всего используются поля result?
Emma приводит здесь полезные и часто используемые команды для полей result.
Player->AddItem "my item" 1 (нужный предмет добавляется игроку в инвентарь)
Player->RemoveItem "my item" 1 (нужный предмет удаляется из инвентаря игрока)
ModDisposition 5 (реакция NPC увеличится на 5 пунктов)
cast "my_new_spell" player (NPC скастует заклинание)
AiFollow Player 0 0 0 0 0 (NPC пойдет за игроком)
AiWander 0 0 0 0 0 0 0 0 0 0 0 0 (NPC перестанет ходить за игроком)
SetFight 100 (NPC нападет на игрока)
StartCombat->player (NPC нападет на игрока)
StopCombat (ааа, вы догадались. Прекратить бой)
StartScript "my_global_script" (начать определенный скриптПричем хочу заметить, что в качестве объекта по умолчанию для этого глобального скрипта будет этот самый непись, с которым инициировали диалог. (Прим. Gwathlobal))
Set companion to 1 (если вы добавили "short companion" в скрипт на NPC, то NPC станет с вами делится, требует Трибунал)
SetHealth 100 (установит здоровье NPC в 100, тоже самое можно использовать с другими скиллами и атрибутами, например SetMagicka, SetLongBlade и др.)
disable (NPC исчезнет)
goodbye (завершит разговор с игроком. Может быть полезно, чтобы избежать последующего разговора с NPC, который исчез)
Choice это одна из самых ходовых опций, после Goodbye, позволяет выбирать реплики и создавать развесистый диалог.
Совет 10) Я создал много диалогов, как я могу проверить их на орфографию?
Проверка орфографии осуществляется, используя функции экспорта-импорта в CS.
Экспортируйте “новые” диалоги в файл, проверьте его на ошибки своим текстовым редактором и импортируйте обратно.
Это гораздо проще, чем лазить по тысячам тем (Информация с форумов / GarryB)
Либо сперва набейте текст в Ворде, а затем начинайте вставлять оный в диалоги...
Хотя кто-то так делает??