Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скрипты Morrowind.doc
Скачиваний:
92
Добавлен:
29.10.2018
Размер:
2.81 Mб
Скачать

Как работает диалог

Чтобы определить, доступна ли тема для диалога с NPC, игра проверяет:

    1. “Знает” ли NPC тему – это определяется условиями в поле "speaker conditions" – если NPC удовлетворяет условиям хотя бы для одного ответа из этой темы, он “знает” ее.

    2. Знает ли ее игрок. Игрок знает тему, если она (тематическая фраза) появлялась ранее в откликах NPC или была специально добавлена функцией AddTopic. Например, игрок пытается торговать с продавцом оружия, а продавец отказывается, так как в инвентаре игрока – скуума. Существует тема «скуума» и это слово использовано в диалоге, но торговцы оружием не знают эту тему, и она не будет добавлена игроку. Так что игрок узнает ее только после того, как поговорит с кем-то, кто «знает» что-то о скууме. (Информация с форумов / Kir)

    3. Если и игрок, и актер “знают” тему, тогда она показывается в списке тем и подсвечивается в тексте — теперь она может быть выбрана игроком, и на нее будет дан нужный ответ.

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

  • Она начинает проверять сверху списка, проверяя соответствие условий ответа, что означает, что все условия, которые были определены для данного ответа, должны быть «истинны».

  • Если нет -> игра переходит к следующему элементу в списке и проверяет снова.

  • Если да -> эта запись выводится в диалоговое окно.

Особое правило для приветствий (greetings): если ни один из элементов списка не подходит, переходим на 1 элемент следующего уровня (например, если ни один из элементов из "Greeting 0" не возвращает «истину», начинаем проверять в "Greeting 1").

Особое правило для Журнала (Journal): здесь есть только одно условие, которое проверяется, - это индекс (вызываемый функцией Journal). Он должен подходить точно.

Как только ответа выбран, игра

  • Выводит текстовую строку в диалоговое окно (или проигрывает файл mp3 для Voice30)

  • Исполняет любые скриптовые команды в поле Result (в самом низу). Вы можете использовать здесь все скриптовые функции, в том числе и конструкции if (спасибо Kir и Manauser)

Будьте осторожны, т.к. поле result позволяет вам менять информацию в скриптах (например, устанавливая переменные или добавляя записи в журнал) и скрипт также может влиять на диалог, ставя условия, которые можно проверять (например, вы можете устанавливать локальные или глобальные переменные в условиях диалога говорящего). Простейший скрипт, который влияет на диалог — это скрипт nolore, который используется как флаг, чтобы актеры не использовали стандартные диалоги.

Примечание: Поля result не компилируются в CS. Можно написать там что угодно и Морр не поперхнется до тех пор, пока этот ответ не будет выбран в диалоге и скрипт не исполнится. Если скрипт достаточно сложен и можно беспокоится о возможных ошибках, то рекомендуется скопировать его в обычное окна скрипта и скомпилировать. Это более надежно, чем использовать кнопку Error Test Results, так как она изменяет установленные значения глобальных переменных. С другой стороны, некомпилируемые сразу скрипты могут использоваться для интересных возможностей, например, обращение к содержанию другого мода без дубликации его в данном моде, что не возможно сделать с нормальными скриптами (Информация с форумов / Kir)