Morrowind:Инструкция от Qwertiss по работе с TES 3: Construction Set - часть 4

Материал из Tiarum
Перейти к: навигация, поиск
Инструкции по работе с TES 3: Construction Set. Часть 4.
45px-Scroll.png

автор: Qwertiss
редактирование: Garin
ccылка на оригинал: Библиотека проекта Gidras Men
ссылка на сайт: Сайт проекта Gidras Men


Навигация по руководству:


Часть 1 - Часть 2 - Часть 3 - Часть 4



Предисловие (Garin):


Данная статья размещена на Румор Вики с любезного разрешения Qwertiss`a, за что ему наша признательность и благодарность.

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




Инструкции по работе с TES 3: Construction Set, часть 4

или ликбез для энтузиастов.



Содержание

Часть 4. Диалоги и квесты в Морровинде

Друзья, пришло время для разговоров... Мы создали персонажа и обозвали его гордым именем - "Jason Snow skeleton"!


Как его теперь заставить говорить, бедолагу?


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


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


Инструкция построена по принципу PLUG in PLAY - "вставляй и поехали"! Инструкция является смысловым и логическим продолжением предыдущих инструкций, ну а если что не ясно - читайте предыдущие страницы.


Глава 1. Практико-теоретическая часть

Основные сведения

Диалоги в Morrowind - это одна большая база данных, из которой каждый NPC или существо (Creature) получает необходимую информацию для разговоров. Основной принцип построения заключается в том, что NPC или существо будет говорить диалог, имеющий самый высокий приоритет. Приоритеты передают все условия (состояния) для говорящего. Если они не передают NPC и существу никаких условий, они ничего не будут говорить относительно той темы (раздела).


Примечание: Это крайне важно понять, друзья! Это принцип, по которому движок игры будет отыскивать и определять необходимый в данный момент диалог. Как это происходит? Всякий раз, как требуется найти диалог, движок начинает поиск соответствующего СВЕРХУ ВНИЗ, это важно! И как только натыкается на первый подходящий по условию - выводит его "нагора". Обратите внимание (столько ошибок случилось именно из-за незнания, непонимания этого) - ПЕРВЫЙ ПОДХОДЯЩИЙ по условию диалог! И если вы забили супер-гипер-приоритетами диалог, но разместили его ниже в списке - движок его не увидит.


Открываем окно диалогов (Dialogue Window) в CS


Примечание: Разрешение экрана нужно установить не ниже 1024 х 768, т.к. окно большое и при меньшем разрешении вы полноценно с ним работать не сможете. У одного моего знакомого, например, был монитор 12 дюймов, при установке такого разрешения экрана текст ему приходилось в лупу рассматривать, но теперь он приобрел 43 дюймовый монитор и горя не знает...


QW 701.JPG


Что мы видим в открывшемся окне?


Красной рамкой обведен раздел Tabs (Закладки).

Он позволяет выбрать один из существующих типов диалога:

  • Topic (Тема)
  • Voice (Голоса персонажей)
  • Greeting (Приветствия)
  • Persuasion (Способы убеждения)
  • Journal (Записи в журнале)


Синей рамкой обведен раздел Info/Response (Информация / Ответ ), в которой содержатся все сообщения, связанные с какой-либо темой и условия, назначенные для них. В маленьком окошке с прокруткой ниже можно набирать и редактировать текст.


Зеленой рамкой обведен раздел Speaker Condition (Условия для говорящего), который позволяет определять условия, при которых игрок увидит какое-либо сообщение только при разговоре с определенным NPC или NPC определенной расы, класса, гильдии или ранга.


Желтой рамкой обведен раздел Shared By (Разделения Для:). Здесь помечаются результаты (итоги) совершенного диалога.


Все понятно, надеюсь?


Начинаем работу

Итак... Персонаж у нас создан (читайте инструкцию № 1 по созданию NPC) и имя ему - Jason Snowskeleton. Нам нужен диалог.


Для этого:

  • Выбираем в Tabs (Закладки) раздел Greeting (Приветствия), выбираем подходящее разделение, щелкаем правой кнопкой мыши, выбираем "New" (Новый) и набираем текст, которым будет приветствовать игрока наш скелетон.
Примечание: Раздел Greeting содержит ряд разделений - от 0 до 9 (т.е., их всего 10), но эти разделения весьма условны, они введены для удобства и какое из них вы выберете для разговоров вашего перса - это сугубо ваше личное дело.
  • Вводим текст, например:
Привет, я Jason Snowskeleton, Повелитель скелетов!
  • Все, первый диалог создан, но теперь нужно, чтобы движок его увидел и присвоил нашему скелетону.
  • Спускаемся ниже, в раздел Speaker Condition (Условия для говорящего) и в закладке ID (Идентификатор) проставляем ID нашего персонажа - "_Jason_Snow".
  • Далее в разделе Shared By ( Разделения для:) шелкаем на Update Shared By и в окошке появляется ID нашего _Jason_Snow. Все! Теперь он нас будет приветствовать такими словами!
  • Сохраняем плагин, идем в игру, находим там нашего скелетона и наслаждаемся беседой. Заговорила, пташка!


Наговорились? Идем далее... Действительно грустно, что в Morrowind никто не знает нашего нового персонажа и ничего о нем не может поведать... Но это поправимо!

  • Открываем Окно Диалогов и в Tabs (закладки) выбираем Topic (Тема).
Примечание: Это та часть, которая в игре будет справа, в меньшей половине окна.
  • Щелкаем правой кнопкой мыши, выбираем "New" (новый) и пишем названия тем для диалогов, например, создадим сразу три темы "Jason" , "Snowskeleton" и "Повелитель скелетов".
  • В разделе Speaker Condition (Условия для говорящего) для тем "Jason", "Snowskeleton" в закладке ID (Идентификатор) не проставляем ничего (нет условий! - поэтому эти темы будут общими для всех), а вот для темы "Повелитель скелетов" находим и проставляем ID (Идентификатор) нашего скелетона - _Jason_Snow.
  • Все, темы созданы!
  • Теперь, как только в игре появятся слова или словосочетания "Jason", "Snowskeleton" и "Повелитель скелетов", они сразу же пометятся как активные (синим цветом) и на них можно будет кликнуть, выбирая тему диалога.
  • У нас стоит разделение для темы "Повелитель скелетов" - значит, на нее будет отзываться только наш персонаж.
  • Сохраняемся, идем в игру и проверяем...
  • Кликая на темы, видим, что поле диалога пустое... Правильно, мы ведь ничего там не набрали!
  • Открываем CS, идем во вкладку Topic (Тема), находим там созданные нами темы.
  • В теме "Jason" в окне Info/Response (Информация / Ответ ) щелкаем правой кнопкой мыши, выбираем "New" (новый) и пишем, чего захотим, например:
Да, я о нем слышал! Он крутой малый! 
  • Здесь же щелкаем правой кнопкой мыши, выбираем "New" (новый) и пишем, например:
Да, это я! Я Повелитель скелетов!
  • После этого проставляем в раздел Speaker Condition (Условия для говорящего) ID (Идентификатор) нашего скелетона - _Jason_Snow.
  • Далее в разделе Shared By ( Разделения для:) щелкаем на Update Shared By (обновить разделение для:) и в окошке появляется ID нашего _Jason_Snow.

Надеюсь, это понятно, друзья? Если бы мы этого не сделали, то все в игре, в том числе и наш скелетон на тему "Jason" отвечали бы:

Да, я о нем слышал! Он крутой малый!

И теперь, ВНИМАНИЕ, вот он, подводный камень преткновения! У нас получилось два диалога в этой теме... ВАЖНО, просто необходимо, чтобы диалог, адресованный только нашему скелетону, находился выше по списку, чем диалог для всех! Иначе (смотри выше про главный принцип) движок, наткнувшись на первый диалог, выведет именно его, и NPC, как полный придурок, будет талдычить:

Да, я о нем слышал! Он крутой малый!

Напоминаем, что движок читает СВЕРХУ ВНИЗ, поэтому выбирает первое, что подходит по условиям. Если мы все сделали правильно, то в случае разговора со всеми, кроме нашего скелетона (ID которого _Jason_Snow), их ID не подойдет по условиям и движок просто проскочит их и выберет следующий диалог. В разговоре со скелетом движок наткнется на условие (его ID) и выведет именно его диалог, т.к он стоит первым в очереди. Надеюсь, это понятно...


Идем далее...

  • Выбираем нашу следующую тему - "Snowskeleton", в Окне Info/Response (Информация/Ответ), щелкаем правой кнопкой мыши, выбираем "New" (новый) и пишем, что нам нужно, например:
Да, я слышал это прозвище! Так именуется Jason. Он крутой малый!
  • И далее, щелкаем на этом созданном для всех диалоге, выделяем его, щелкаем правой кнопкой мыши, выбираем "New" (новый) и пишем:
Да, это мое прозвище! Так меня называют потому, что я Повелитель скелетов!
  • Проставляем в разделе Speaker Condition (Условия для говорящего) ID (Идентификатор) нашего скелетона - _Jason_Snow.
  • Далее в разделе Shared By ( Разделения для:) щелкаем на Update Shared By (обновить разделение для:) и в окошке появляется ID нашего _Jason_Snow.
  • ДИАЛОГ ДОЛЖЕН НАХОДИТЬСЯ ВЫШЕ ПРЕДЫДУЩЕГО!
  • Выбираем нашу следующую тему - "Повелитель скелетов"
  • Пишем:
Да, я Повелитель скелетов!
  • Ставим разделение для нашего скелетона, сохраняем, идем в игру и имеем коммуникацию со всеми, с кем захотим, и наслаждаемся собственными успехами!
  • Здесь, ВАЖНО, вы это уже поняли, топики появятся только после диалога со скелетоном, т.к. до него ключевые слова "Jason" , "Snowskeleton", "Повелитель скелетов" и словосочетания в игре нигде не встречались.


Все! Далее аналогично.....


Идем дальше в освоении диалогов?

  • Открываем Окно Диалогов в CS, идем в закладку Greeting (Приветствия) и находим наш диалог со скелетоном:
Привет, Я Jason Snowskeleton, Повелитель скелетов!" 
Примечание: Чтобы проще это было сделать, в Filter for (Фильтр для:), находящемся ниже Tabs (закладки), выбираем ID (Идентификатор) нашего скелетона - _Jason_Snow.


QW 702.JPG


  • Далее в разделе Shared By (Разделения Для:) щелкаем на Update Hyperlinks (обновить гиперссылки) и смотрим, что случилось с нашим диалогом... Ё-маё! В текстовом окне он стал выглядеть так:
Привет, Я @Jason# @Snowskeleton#, @Повелитель скелетов#!
  • Не нужно пугаться, все нормально! Дело в том, что ГИПЕРССЫЛКИ в игре обозначаются как @.....#, т.е., символами "@" перед началом и "#" в конце текста темы диалога Topic. Именно по ним (гиперссылкам) движок и находит ключевые слова в диалогах.


QW 703.JPG


Итак, наши темы движок видит, диалоги ведутся, все нормально, но мало! Продолжим?


Здесь же, в этом диалоге, в разделе Speaker Condition (Условия для говорящего) в окне Results (Результаты) пишем текст, являющийся результатом этого диалога. Например, что вы ответите на заявление скелетона, что он является Повелителем? Это может быть, скажем, вопрос-удивление:

Повелитель?


QW 704.JPG


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


Все, теперь в окне диалога после фразы скелетона появится красная надпись-ссылка:

Повелитель? 

Далее нам нужно, чтобы скелет нам что-нибудь ответил на наше удивление.

  • Идем в Info/Response (Информация / Ответ ), щелкаем мышью и создаем несколько ВЫШЕ новый диалог, например:
Да! Хочешь узнать больше об этом?
  • В разделе Speaker Condition (Условия для говорящего) в Function/Variable (Функция / переменная) необходимо поставить условие возникновения именно этого диалога.
  • Выбираем Function Choice = 1 (т.е., на нормальном языке это было бы примерно как: Функция, выбрать значение 1).
  • Движок, столкнувшись с этим условием, покажет этот диалог.
  • Далее в окне Results (Результаты) нужно опять нечто выбрать в продолжение, либо окончание диалога, например (теперь два варианта):
Choice "Да, конечно!" 2 "Нет, нахрена мне это..." 3
со значениями "2" и "3" соответственно.


QW 705.JPG


  • Далее нужно закончить и этот диалог, создаем ВЫШЕ(!) новый, пишем, например:
Молодец! Ты очень пытливый и любопытный малый! Но не сегодня, позже о том поговорим!
  • Выбираем значение Function Choice = 2
  • Далее в окне Results (Результаты) пишем еще одну из скриптовых постоянных "Goodbye" (Прощание) и, например, еще "Journal Jason_Snowskeleton 1" .
  • В этом случае диалог закончится и к вам в Журнал запишется сообщение с индексом "1" (эту запись в Журнале нужно еще создать, об этом ниже).


QW 706.JPG


  • Далее создаем ВЫШЕ(!) новый диалог, пишем, например:
Не хочешь? Ну и пошел ты!
  • Выбираем значение Function Choice = 3, пишем еще одну из скриптовых постоянных "ModDisposition -10" ( Изменить Расположение) на минус 10 единиц и "Goodbye" (Прощание)
  • В этом случае диалог закончится тем, что скелетон пошлет вас подальше и его отношение к вам изменится к худшему на 10 пунктов.


QW 707.JPG


Вот так теперь выглядит наш раздел с диалогами.

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


Все! Диалоги закончены, но у нас осталась еще несозданная запись в Журнале, с индексом "1".

  • Идем во вкладку Journal и создаем , подобно Топикам, в Tabs (закладки) новую тему, например:
"Jason_Snowskeleton".
  • Пишем что-нибудь в Info/Response (Информация / Ответ ), например:
Я встретил сегодня Некоего Джейсына по прозвищу Jason Snowskeleton. Он назвал себя - Повелитель скелетов и обещал рассказать об этом позже...." 
  • В Speaker Condition (Условия для говорящего) в поле Index (Индекс) присваиваем ему значение "1", чтобы Движок видел, что нужно сейчас выводить, а что позже.


QW 708.JPG


  • Запись создана. Сохраняемся, идем в игру и наблюдаем содеянное, распираясь от гордости за себя!


Все, считайте, что диалоги вы делать научились, что еще?

Глава 2. Подробности.

Остановимся немного подробнее на Диалоговом окне (нам с ним работать, все-таки...)


QW 701.JPG


I. Раздел 1. Tabs (закладки)


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

Topic (Тема) , Greeting (Приветствия) , и Journal (Записи в журнале) .


II. Раздел 2. Filter for (Фильтр для...)



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


Единственное, что следует тут заметить, так это то, что пользоваться этой крайне удобной функцией вы сможете только для поиска, просмотра и редактирования диалогов/топиков/журналов и т.п.

При попытке создать новое с этим разделением - Трам-тара-рамс! CS покажет фигу... Чтобы начать творить новое, разделение придется снять и искать в потемках...


III. Раздел Info/Response (Информация / Ответ )


Тоже ничего нет недоступного нашему пониманию. Все просто: "слева крабы, справа бабы", или: слева -краткое инфо о сути диалога, справа - зависимости.


Щелкаем правой кнопкой и выбираем, что требуется: новый, копировать, удалить...


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

Вы можете редактировать текст каждого ответа в большом Текстовом Окне внизу или, если ответ короткий, в несколько символов, вы можете дважды щелкнуть в окне Info/Response и редактировать текст там. Если Вы вырезаете и вставляете текст в редакторе, Вы должны использовать большое текстовое окно, так как окно информации / ответа имеет предел количества символов, которое это может отображать. Большое текстовое окно позволит Вам вводить до 512 символов в ответе. Количество, большее 512 символов, недопустимо!


IV. Раздел Shared By (Разделения для:)



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


QW 709.JPG


  • Update Shared By - позволяет обновить разделения для ID конкретных неписей, задействованных именно в этом диалоге и пронаблюдать их в окне выше.
  • Journal Preview - вот это действительно ценная кнопочка! Предпросмотр Журнала позволяет увидеть, что там делается, не сходя с места и индексы. Очень удобно при написании квестов.
  • Update Hyperlinks - обновление гиперссылок на тематические слова, фразы и тп.
  • AI - ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ. Это особая тема, и кнопка эта тоже не простая. Вкратце не скажешь - читайте подробно в справке CS.
  • Error Check Results - Результаты проверки ошибок, и этим все сказано.
  • Sound Filename - Название, имя звукового файла. Это вам пока не нужно, позже разберетесь сами.

По этому разделу все.

Единственно о чем тут стоит скорбеть, так это о том, что нет кнопки Cancel. Придется с особой тщательностью действовать и не спешить сохранить плагин.


V. Раздел Speaker Condition (Условия для говорящего)


Рассмотрим немного подробнее раздел Speaker Condition (Условия для говорящего)


Что здесь находится?

Есть три основных подраздела, с которыми нам и предстоит больше всего работать:

  1. Speaker Condition (Условия для говорящего)
  2. Function/Variable (Функция / Переменная)
  3. Results (Результаты)


Speaker Condition (Условия для говорящего)


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

  • ID (Идентификатор) - ну, с этим уже все, надеюсь, понятно.
  • Race (Раса) - Принадлежность NPC (персонажа/ персонажей) к какой-либо расе . Выбирая, например, расу Орков - этот диалог будут произносить только Орки и игнорировать все иные расы.
  • Class (Класс) - Принадлежность NPC (персонажа/ персонажей) к какому-либо из Классов . Выбирая, например, Класс Магов - этот диалог будут произносить только Маги и игнорировать все иные Классы.
  • Faction (Фракция) - Принадлежность NPC (персонажа/ персонажей) к какой-либо Фракции . Выбирая, например, Фракцию Redoran - этот диалог будут произносить только Redoran и игнорировать представители всех иных Фракций.
  • Rank (Ранг) - Этот выбор назначает диалог на каждого NPC, который соответствует выбранному значению ранга или выше. Если поле Фракция пуста, то движок назначит это для каждого, кто соответствует выбранному значению ранга или выше, независимо от их фракции. Например:
  • Фракция == Redoran и Ранг == 3 - В этом случае движок назначит диалог для каждого из Дома Redoran с рангом 3 и/или выше.
  • Фракция == Пробел и Ранг == 7 - Движок назначит диалог для каждого в игре с рангом 7 или выше, ВНЕ зависимости от принадлежности его к какой-либо Фракции.
  • Cell (Ячейка) - Этот выбор назначает диалог для каждого NPC, который находится в соответствующей ячейке. Если не выбрано ничего, то диалог будет происходить в любом месте.
  • PCFaction ( Фракция Игрока) - Аналогично выбору Фракции для NPC. Движок подключит диалог только тогда, когда РС (Игрок) принадлежит к указанной Фракции.
  • PCRank - (Ранг Игрока). Аналогично выбору Ранга для NPC.

На скриншоте ниже приведен пример расклада, при котором диалог будут вести только Бретоны, класс - Акробаты, принадлежащие к Гильдии Воров, в ранге не менее 3, находящиеся только в Балморе и только с Игроком из Гильдии магов рангом не ниже 5. Вот так....


QW 710.JPG


Function/Variable (Функция / Переменная)


Вот в этом разделе возможны проблемы! Разделений всего пять, но вариантов выбора - великое множество, мне жизни не хватит рассмотреть здесь все возможные сочетания....

Однако, попробуем рассмотреть только основное, чаще всего употребляемое в простых квестах.

Первый ряд:

  • Function (Функция) - Вносит в список все специальные функции диалога, которые Вы можете использовать. Подобны script-командам, но имеется также и много уникальных. Полный Список.
  • Global (Глобальное) - Этот выбор вносит в список все глобальные переменные. Вы можете выставлять проверку значения любой глобальной переменной. Однако обратите Внимание, что иногда результаты не будут такими, которых Вы ожидаете, переменная может не измениться, в то время, пока Вы находитесь в диалоге с кем-либо. Чтобы избежать этого для подготовленных переменных, не изменяйте значение, когда MenuMode == 1.
  • Local (Локальное) - Вносит в список все местные, локальные переменные. Вы можете проверять на истинность любые местные переменные, но если говорящий (*speaker) не имеет скрипта (script), или его скрипт не содержит переменную, которую Вы определяете, это значение возвратится со значением, равным 0.
  • Journal - Это значение возвращает самый высокий индекс, который когда-либо устанавливался для указанного раздела журнала. Вы можете делать Журналы и устанавливать индексные номера во вкладке Journal. Вы устанавливаете индекс (и добавляете это к журналу игрока "в игре") с журнала скриптовой командой Journal.
  • Item (Предмет, вещь) - Возвращает номер (число) любого предмета, который игрок имеет в своем инвентаре. Таким образом вы можете проверить любой предмет в игре, который можно нести в рюкзаке.
  • Dead (Мертвый) - Возвращает номер (число) любого NPC или Существа ID, который является мертвым. Например, Вы можете проверять, является ли уникальный индивидуум - наш скелетон, мертвым, или же вы можете проверить, убил ли игрок больше, чем 30 Скампов. Должны быть учтены две вещи. Первое, это самое безопасное (с большинством функций) - проверить, чтобы значение было > 0 вместо = 1, так как кто-то может сделать плагин и с двумя, и с тремя "Скелетонами". Следующее, если Вы уничтожите, например, 10 Скампов (Scamps) и также одного Ползуна (Creeper), который тоже скамп, но с другим ID, то при проверке "Dead Scamp" возвратится значение 10, а не 11.
  • Not ID - Это проверка, имеет ли говорящий (speaker) указанное ID. Для всех, кроме NotLocal, не имеет значения, что Вы устанавливаете. "Not ID Scamp=0 " является тем же самым, что и "Not ID Scamp=1".
  • Not Faction - Это проверка, является ли speaker (говорящий) представителем указанной Фракции
  • Not Class - Это проверка, является ли speaker (говорящий) представителем указанного Класса
  • Not Race - Это проверка, является ли speaker (говорящий) представителем указанной Расы
  • Not Cell - Это проверка, находится ли speaker (говорящий) в этой ячейке. Обратите внимание, что эта функция потребляет большое количество времени на вычисления и может замедлять ответы диалога, если Вы используете несколько из них в той же самой теме (разделе).
  • Not Local - Это проверка speaker (говорящего) на наличие указанной локальной переменной.


Sex (Пол)

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


Disp (Расположение)

Определяет расположение NPC к Игроку. Диалог будет возможен только с теми NPC, чье расположение к РС выше чем это, установленное значение (исключая Отказ в Сервисе).


Вот пример расклада, при котором диалог состоится только тогда, когда:

  • в Журнале у игрока уже есть записи
  • Он уже надыбал где-то и имеет в рюкзаке Даэдрический щит
  • Жив пока наш скелетон, но говорить он с нами не будет
  • Не станут говорить и все Бретоны
  • Говорить станут только с женщиной и
  • при отношении к ней не менее 50 (праведность всегда была в цене!).


QW 711.JPG


Results (Результаты)


А вот это самый интересный раздел.

Что тут у нас?

Простое текстовое окно, где мы будем писать все, что нам вздумается - полная свобода творчества! Но, ВАЖНО(!), в рамках скриптового языка Морровинда. Есть некоторая разница в написаниях, но не существенная. Если вы уже освоили скрипты, разобраться вам не составит труда, если нет, то попробуем рассказать о наиболее часто употребляемом.


  • Пустое поле Results (Результаты) - Ничего не произойдет, скелетон скажет текст и будет ждать дальнейшего, тупо на вас таращась из-за открытого окна диалогов в игре.
  • "Goodbye" (прощание) - Dот это важная команда, наш скелетон скажет текст и будет ждать, когда вы нажмете на ссылку "Попрощаться".
  • "Choice" (выбрать) - Эта команда устанавливает диалог в режим выбора.
Примечание: Здесь нужно сразу отметить, что регистр набора, как и во многих скриптовых языках, не имеет значения. Вы можете набрать, например, "Choice", "choice", "CHOICE" и т.п. - движку это "по-барабану"!

Синтаксис:

Choice "<значение>" [х (число, индекс выбора]

Поглядите выше, как мы организовали это в диалоге со скелетоном.

  • "Messagebox" (Сообщение в окне) - эта команда выводит сообщение в всплывающем окне.

Синтаксис:

Messagebox " значение". 

Вот, например, как можно это написать, чтобы движок вывел сообщение "Елы-палы!"


QW 712.JPG


  • "Journal " - запись сообщений в журнал РС (это мы уже проходили, см. выше)
  • "ModDisposition" (Изменить, модифицировать Отношение (Расположенность) - меняет отношение к кому-либо. Вариантов написания множество, например:


QW 713.JPG


Примечание: Символом ";" (точка с запятой) перед началом строки обозначаются комментарии, предназначенные только для вас, можете смело их вводить - движок их не увидит
  • "AddItem" и "RemoveItem" - позволяют манипулировать вещами - добавлять, обмениваться и т.п. Вариантов написания множество, например:


QW 714.JPG


  • "StartCombat Player" - это команда к началу драки
  • "SetDisposition" - устанавливает Отношение на указанное значение
  • "SetFight" - устанавливает Бой в определенное число
  • "SetHello"- устанавливает Приветствие в определенное число

Обычно эти команды в тех или иных вариациях используются совместно, например :


QW 715.JPG


Ну, вот, собственно, и все по этой главе...

Общаться мы теперь умеем, торговать, обмениваться, тырить плюшки и завязывать драки, все!

Приступаем к квестам....



Глава 3. Создание квеста

Итак, мы оставили нашего скелетика в расстроенных чувствах - никто не желает продолжения его истории. Но и РС у нас огорчен - получил посулы и на том все кончено.

Давайте исправим эту несправедливость.

  • Открываем конструктор и находим наш диалог. Ну с "посылом" все ясно, а с "посулом" еще нет.
  • Создаем новый диалог, пишем что-нибудь, например:


QW 716.JPG


  • Все как прежде, но тут у нас появляется определение - "%PCName", заметили? Столкнувшись с ним, наш скелетон вместо этих закорючек просто назовет имя РС.
  • Проставляем все нужные разделения. Диалог у нас начнется только после того, как РС получит запись №1 в журнал и не получил еще запись №2. Это нужно для того, чтобы не было зацикливания после получения квеста.
  • Пишем "Результаты", раз уж вы опять пришли к нашему скелетону и заинтересовались его историей - получите +5 к расположению и выбор.
  • Для первого случая - это "5", а вот для отказа у нас диалог уже есть, мы подключим его, если установим "3".
ВАЖНО! Здесь нужно отметить, что диалог для разделения №3 должен находится в самом верху, раз уж мы на него ссылаемся, т.е., он и далее останется у нас первым (СВЕРХУ). И мы оставили свободным разделение №4 - так, на всякий случай...
  • И, конечно же, надо установить расположение NPC. Выставляем его на уровень 50, можно больше. Конечно, расположение скелетона еще нужно заслужить...
  • Выставляем скелетону в его свойствах уровень 10-20.


Далее...

  • Пишем новый диалог для первого выбора с индексом "5" и проставляем, естественно, нужные разделения...

Вот пример расклада, в котором диалог у нас случится только тогда, когда Игрок сделает выбор с индексом "5". Пишем результат:

  • Согласие - выбор "6"
  • Отказ - выбор "3", этот диалог у нас уже есть, мы его просто подключаем, но можно написать и другой, если захочется...


QW 717.JPG


Здесь в поле textarea:

Тогда - отлично, %PCName! Я рад что не ошибся в тебе!
Но, история моя длинная, а жизнь так коротка и немилосердна...
Короче, нужно 200 баксов сейчас, чтоб ее (жизнь) немного скрасить, и... ну, скажем, ты мне должен будешь еще принести ржавый, непотребный щиток из пещерки неподалеку...
Плевое дело! Согласен? 

В поле Results:

Choice " Да, конечно! Я согласен на все! " 6 "Нет, не хочу я этим заниматься ради какой-то сомнительной истории..." 3


Идем дальше...

  • Пишем новый диалог для первого выбора с индексом "6" и проставляем, естественно, нужные разделения...


QW 718.JPG


Здесь в поле textarea:

Отлично! Пещера находится совсем рядышком, вот, я помечу на твоей карте. Щит там, ты найдешь без труда, и- сразу ко мне!
Ну, и....давай денежки.
200 баксов, помнишь?

В поле Results:

"Player"->RemoveItem Gold_001 200 
AddItem Gold_001 200  
Journal  Jason_Snowskeleton 2
ShowMap "Indalen Ancestral Tomb"
Goodbye


  • Пишем результаты, с деньгами все уже понятно дали - взяли, наш скелетон нагрелся, вы - пролетели.
  • А вот для добавления метки на карту вводим новую команду:
ShowMap "Indalen Ancestral Tomb"
  • Indalen Ancestral Tomb - это пещерка рядом с Кальдерой с кучей неприятностей, именно туда вас и посылает наш скелет. Туда же нужно закинуть и квестовый щит.
  • Щит нужно создать предварительно (о создании брони и пр. читайте в первой части), можно также создать и новую пещерку и уже в нее засунуть щиток и туда и посылать, соответственно.
Примечание: Вообще-то, с функцией ShowMap (показать на карте) в Морровинде не все гладко. Если с внешними ячейками она работает безотказно, то с интерьерами (а у нас именно этот случай) бывают сбои, и довольно часто... Потому здесь нелишне подстраховаться и дать еще некие ориентиры - либо в журнале, либо в дополнительном топике.


У нас еще тут присутствует запись в журнал - Journal Jason_Snowskeleton 2, эту запись с индексом "2" еще нужно сделать.

  • Идем во вкладку Journal и создаем новую запись:


QW 719.JPG


  • Проставляем ей индекс "2", соответственно.


Все! Начало квесту положено!

  • При желании можно подстраховаться и добавить некие ориентиры, например, добавить к написанному:
Это, оказывается, склеп возле Кальдеры под названием Indalen Ancestral Tomb, именно там мне и нужно искать щит.
  • Создаем новый щит, даем ему имя, например, Jason_SuperPuper_bone_shield, и закидываем в означенную пещерку....
  • Создаем новый диалог в разделе Greeting. Это на тот случай, если РС еще не добыл щит, но еще раз решил поговорить с нашим персонажем-скелетом.


QW 720.JPG


  • Ставим соответствующие разделения...
  • Здесь у нас появляется функция "Item" (иметь предмет), проверяющая наличие чего-либо в рюкзаке. В нашем случае мы проверяем, есть ли в багажнике у РС наш щит.
  • Теперь создаем новый диалог в разделе Greeting на случай, если РС уже добыл щит...


QW 721.JPG


  • Теперь создаем диалог для выбора №7, т.е., если РС решит отдать щит скелету.


QW 722.JPG


В поле textarea:

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

В поле Results:

"Player"->RemoveItem "_Jason_SuperPuper_bone_shield" 1
AddItem "_Jason_SuperPuper_bone_shield" 1
"Player"->AddItem "_Jason_bookskill" 1
"Player"->AddItem "bone charm" 1
Journal  Jason_Snowskeleton 3
Goodbye 
  • Тут присутствует передача книги и амулета. Книгу еще нужно создать, а амулет мы использовали стандартный, с призывом скелета, но можно сделать и свой....


Теперь создаем диалог для выбора №8, т.е., если РС решит не отдавать щит скелетону, а присвоить его себе, как трофей...


QW 723.JPG


В поле textarea:

Отлично, %PCRace! Тогда ты их откинешь сейчас, предатель!

Здесь "%PCRace" - то же, что и "%PCName" вверху, только теперь будет названа раса РС, а не его имя.


В поле Results:

SetDisposition 0
SetFight 100
SetHello 0 
StartCombat Player
PlaceAtPC, "skeleton champion", 1, 256, 1
Goodbye 


  • Пишем результаты, мы уже знаем что к чему - Скелет затеет драку, и раз уж он Повелитель скелетов, то пишем: "PlaceAtPC, "skeleton champion", 1, 256, 1" - это призовет еще одного скелета на подмогу нашему, циферки в конце - это дистанция от РС, на которой окажется скелетик - "х", "y", "z", соответственно.
  • Все, в принципе. Только нужно еще создать пару-тройку записей в журнале...


Запись № 3 -> Journal / textarea:

Я доставил Джейсынну по прозвищу '''@Jason# @Snowskeleton#''' его щит, хоть, право, это оказалось не так легко! 
Джейсыну некогда пока говорить со мной, но он дал мне книгу и магический амулет, и приглашал заходить еще... 


QW 724.JPG


Запись № 4 -> Journal / textarea:

Если так пошло, то на случай, если РС все-таки грохнет нашего бедного, милого скелета пишем:

Я добыл щит Джейсына по прозвищу @Jason# @Snowskeleton# , хоть, право, это оказалось не так легко! Потому я решил оставить щит себе, но Джейсын был не согласен с таким раскладом и напал на меня, изрыгая проклятия! В лютой схватке мне пришлось убить его...  


QW 725.JPG


Запись №5 -> Journal / textarea:

На всякий случай, если будет желание и далее развивать эту историю, пишем

Я доставил Джейсыну по прозвищу @Jason# @Snowskeleton# его щит, хоть Джейсыну некогда было говорить со мной, но он приглашал заходить еще...
Надо бы его проведать... 


QW 726.JPG


Ну вот, в общем, и все...

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


  • Идем в скрипты, создаем новый и пишем:


begin _А_JasonSnowKill 
;The author - Qwertis 

   if ( GetJournalIndex "Jason_Snowskeleton" >= 2 )     
      if ( GetJournalIndex "Jason_Snowskeleton" < 3 ) 
         if ( OnDeath == 1 ) 
            Journal Jason_Snowskeleton 4 
         endif 
      endif 
   endif 
end _А_JasonSnowKill 


QW 727.JPG


  • Приписываем этот скрипт нашему скелету...


Все, друзья, квест создан! Идем-играем...


Если захочется позже развить его далее, это всегда можно сделать, ведь мы заложили изначально и в первый, и в этот раз все предпосылки к этому...


Все, что мы с вами здесь наваяли, вы можете посмотреть "вживую", если скачаете небольшой плагин - Jason_Dialogue.zip (размер файла: 5 КБ).


Глава 4. Справочные данные

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


Часть 1 - Правила работы диалогов в Morrowind


В разделе Troubleshooting находятся средства, позволяющие получить дополнительную информацию о диалоговых сообщениях и предпринять определенные действия.


Правила работы диалогов в Morrowind:



Правило № 1:


  • Если игрок никогда не слышал о какой-либо теме, то ее и не будет в списке тем при разговоре с NPC.
  • Если персонаж (NPC) в игре никогда не слышал о каком-нибудь другом персонаже игры, например, о нашем скелете, то эта тема не появляется в списке тем. Игрок узнает о теме, когда она появляется в любом диалоге с этим же NPC или любым другим. Например, если при разговоре с кем-нибудь в Бальморе персонажу сказали: "Здесь объявился некий Jason, он очень странный парень...", то тематическое слово Jason считается услышанным, и тема станет доступна персонажу при разговоре с кем-либо (при выполнении других условий, конечно).
  • Если вы хотите, чтобы игрок мог получить больше информации от NPC по какой-либо теме, вам нужно ввести ключевое слово в диалог NPC - приветствие или сообщение по другой теме. Связывание диалогов в игре происходит автоматически, так что вам нет нужды возиться с гиперссылками. Ключевые слова вычисляются автоматически из списка тем.


Правило № 2:


  • Игрок может увидеть сообщение диалога только при выполнении всех условий в разделе Speaker Condition.
  • Даже если мой персонаж уже слышал о Jason`е , это не обязательно означает, что в игре я смогу поговорить с NPC по этой теме. Как видите, многие условия будут вычисляться только в процессе игры, так как они зависят от переменных и сообщений, которые могут меняться в зависимости от атрибутов игрока и его действий в мире игры. Такие условия (сообщения) называются run-time properties.


Правило №3:


  • Из списка сообщений, отвечающих всем условиям, в разделе Info/Response будет использовано только первое, а все другие сообщения будут игнорироваться.
  • Что это конкретно означает? Если первое сообщение отвечает всем условиям, именно оно и будет показано игроку в диалоге, даже если все остальные сообщения после первого тоже соответствуют условиям.
  • Движок игры Morrowind проверяет все сообщения по порядку на соответствие условиям до первого же подходящего сообщения. Это означает, что порядок сообщений в разделе Info/Response очень важен – сообщения с наибольшими ограничениями (согласно правилу № 2) должны располагаться вверху списка, а сообщения с более свободными условиями - внизу списка. При таком размещении сообщения внизу списка не помешают выполнению сообщений с более ограниченными условиями.
  • Помните, что при первом же соответствии условиям проверка сообщений прекращается.
  • Порядок сообщений в разделе Info/Response можно менять с помощью клавиш левой и правой стрелок на клавиатуре.


Часть 2 - Написание диалога для взаимодействия персонажей


  • Выберите закладку Journal (закладки можно прокручивать с помощью стрелочек справа).
  • Щелкните правой кнопкой мыши в любом месте раздела тем и выберите New.
  • Назовите тему как-либо.
  • Если только что созданная вами тема не появилась в списке, не пытайтесь снова вписать ее – просто уберите фильтр для NPC в разделе Filter for.
  • Щелкните по только что созданной вами в журнале теме.
  • Многие темы в журнале имеют двухбуквенный префикс, потому что
  • как правило, темы с одинаковым префиксом связаны, и
  • ввод тематических слов без какого-либо префикса может привести к неожиданным результатам - дело в том, что движок будет подгружать записи из журнала, если при разговоре с NPC попадутся слова, идентичные тематическим. Игра будет использовать темы журнала как обычные ключевые слова (т.е. персонажи будут «произносить» текст записей в журнал, если тематическое слово записи в журнале совпадет с какими-либо словами в их диалоге).
  • Не называйте категории в журнале словами, которые могут встретиться в обычном разговоре в игре.
  • Введите сообщение №1 ..... в тему журнала, которую вы создали.
  • Убедитесь, что в левой части экрана выбрана Ваша тема, щелкните правой кнопкой мыши на разделе Info/Response и выберите New.
  • Введите текст сообщения в текстовое окно. Чтобы избежать неожиданного прерывания текста, впечатывайте или вставляйте текст в полноразмерное окно под разделом Info/Response.
  • Проставьте номер индекса около каждой записи в журнале, это необходимо для ссылок на эти номера в скрипте.


Часть 3. Предварительный этап: подготовка места для хранения информации


  • Для того, чтобы NPСs подавали правильные реплики в разговорах, необходимо обеспечить место для хранения информации о текущем состоянии квеста.
  • Хотя записи в журнале полностью отражают состояние квеста, для хранения значений можно использовать и локальную переменную. Однако во многих случаях основным методом отслеживания состояния квеста могут быть записи в журнал.
  • При просмотре в веб-браузере (web browser) строка, начинающаяся с точки с запятой, может занимать несколько строк, но когда вы будете ее печатать с редакторе скриптов, она должна занимать лишь одну строку.
  • Строка, начинающаяся с точки с запятой, это комментарий, единственная функция которого передавать какую-либо информацию для программиста, просматривающего скрипт. Компьютер не предпринимает никаких действий, когда видит строку с комментарием.
  • В разделе Condition (условия) проверьте, что:
  • это приветствие принадлежит именно Вашему персу и что
  • локальная переменная Qstate равна 0 (начальному значению по умолчанию), т.е. квест еще не предложен игроку.
  • В разделе Results введите команду choice "Yes" 1 "No" 2.
  • Эта команда позволяет игроку выбрать один из предложенных вариантов и только затем диалог может быть продолжен.
  • После того, как игрок сделает выбор, текущие тематические сообщения еще раз проверяются и устанавливается числовое значение функции choice в соответствии со сделанным выбором. Так диалог может взаимодействовать с вариантами, которые выбирает игрок.
  • В нашем примере игрок должен выбрать между вариантами «Yes» или «No». При выборе «Yes» choice = 1, при «No» choice = 2. После этого текущая тематическая категория (приветствие 1) проверяется еще раз.


Введите ответы на каждый из вариантов выбора:

  • Функция choice показывает номер выбранного варианта, если в предыдущей части диалога был сделан какой-либо выбор.
  • При проверке сообщений надо искать значения Qstate=0 и choice=1 или 2.
  • Если Qstate=0, то квест еще не принят.
  • При choice=1 или choice=2 у игрока появляется возможность принять или отвергнуть предложенный квест.
  • Также в разделе results можно использовать следующие команды:
  • set Qstate to 2 — устанавливает значение локальной переменной qstate - 2
  • moddisposition -5 — изменяет расположение NPС к игроку, снижая его на 5 единиц по сравнению с текущим значением
  • Modcurrenthealth, -10 — изменяет состояние здоровья NPС, снижая его на 10 единиц
  • Journal, ххххххх, [x] — добавляет в журнал запись с индексом [х] из категории ххххххх
  • Player->Additem, "Gold_100" 200 — добавляет в инвентарь (inventory) игрока 200 единиц предмета Gold_100 (если бы отсутствовала часть «player->», то золото было бы добавлено NPС).
  • Эти же команды с различными значениями могут быть использованы и для других сообщений в разделе Results.
Примечание: команды в разделе Results выполняются только после того, как появится связанная с ними часть диалога. Каждая команда должна занимать не более одной строки (формулировка if ... endif)


  • Добавьте сообщения в раздел Info\Response на закладке Greetings:
  • Добавляйте каждое новое сообщение над предыдущим.
  • Изменение значений Qstate в разделе Results для разных сообщений приводит к тому, что игрок видит только те сообщения, которые соответствуют различным стадиям развития квеста. В сообщении №10, например, можно устанавить значение Qstate=0, чтобы вновь использовать первоначальные сообщения о квесте (соглашаться на выполнение или нет)
  • Функция Journal обращается к сообщению с наибольшим номером индекса, который существует в данной категории журнала.
  • Все тематические сообщения нужно разместить на закладке Topic. Любые сообщения в закладке Topic становятся доступны только после соответствующего вопроса о них игроком, тогда как приветствия (сообщения) в закладке Greetings видны игроку автоматически.
  • Все остальные сообщения разместите по порядку друг над другом. Не забывайте располагать сообщения с более ограниченными условиями над сообщениями с менее ограниченными условиями. Также разместите все сообщения с опцией choice в разделе Conditions перед сообщениями, которые используют команду choice в разделе Results.


Глава 4. Справочные данные

Добавление (Adding), Удаление (Deleting) и IDs Редактируемого Диалога (Editing Dialogue IDs).


Использование диалогового окна для нахождения и редактирования информации:

  1. В разделе закладок (Tabs) выберите нужный вам тип диалога и, если возможно, установите фильтр для персонажа – это уменьшит список тем и сделает его более удобным.
  2. В левой части окна выберите тему (Topic). Хотя тип сообщений, над которыми вы работаете, зависит от выбранной закладки (например, приветствие, голос персонажа, убеждение или журнал), все сообщения в левой части окна будут называться словом «тема», так как они действуют как категории (или темы) вне зависимости от выбранной закладки.
  3. Выберите сообщение в разделе Info/Response, чтобы открыть свойства сообщения в нижней части окна.
  4. Вы можете просматривать и редактировать все свойства сообщения в нижней части окна – текст диалога (Dialog text), условия говорящего (Speaker Condition) и результат сообщения (Result).


Tabs


Выбор типа сообщения и установка фильтра в разделе закладок Tabs.

Выберите необходимую закладку в верхней части окна:

  • Topics - Темы, на которые могут говорить NPC
  • Voices - Голоса NPC в различных ситуациях
  • Greetings – То, что могут сказать NPC в начале разговора
  • Persuasion – Реакция NPC на попытки игрока убедить их в чем-л.
  • Journal - Сообщения, появляющиеся в журнале игрока.

Topic (Тема)


  • Выбрав тему в левой части экрана, вы увидите все сообщения, которые относятся к этой теме в разделе Info/Response. Список тем будет отфильтрован в соответствии с настройками опции filter for.
  • Topic - Эта позиция табуляции на левой стороне окна Dialogue показывает все темы (разделы), на которые персонажи в игре ответят. Каждый раз любой персонаж в игре говорит в диалоге тот текст, который разыскивается в этом списке тем (разделов). Если текстовые пары и говорящий имеют кое-что, чтобы говорить относительно темы(раздела), это обнаружится как гиперсвязь в игре, которую Вы можете выбирать. Неписи будут говорить только то, что соответствует условиям для одного из возможных ответов в теме(разделе).
  • В разделе Topics дается список доступных тем (или категорий, доступных на выбранной закладке). Однако, если опция Filter for установлена для определенного персонажа, вы не увидите всех доступных тем. В самой же игре вы увидите еще меньше тем, если опция Filter for включена. Более подробно это будет объяснено ниже.
  • Гиперсвязи в редакторе показываются как @hyperlink#. Вы можете видеть гиперсвязи в редакторе, нажимая на кнопку "Update Hyperlinks".
  • Topic-соответствие не чувствительно к случаю и будет всегда соответствовать более длинным фразам перед более короткими и более ранними фразами перед более поздними. Если Вы имели темы "My cat is smart", "Smart as a cat" и "Cat", фраза "My cat is smart as a cat" соответствовал бы "@Mycat is smart# as a @cat#". Фраза "My cat is as smart as a cat" соответствовал бы "My @cat# is as @smart as a cat#".
  • Topic-Тема, предназначенная для Существ, немного отличается от топиков для NPCs. Существа получают только тот диалог, который назначен для их ID. Если Вы, например, назначаете диалог для каждого в Ячейке "Balmora" и Вы помещаете в Балмору скампа, он не будет говорить ничего из этого диалога.


Voice (Голос, Звук)


  • Voice прикрепляют звуковые файлы к NPC, которые запускаются всякий раз, когда "Voice" запрашивают. Вы можете выбирать файл, который приложен к каждому голосу ID кнопкой Sound Filename (Имя Звукового файла).
  • Alarm voices (Голоса Тревоги) - используются NPC в ситуации тревоги.
  • Attack voices - Голоса Нападения, запускаются в то время, как NPC или Существа нападают. Существа вообще отмечают голоса в своих анимациях, так что все это главным образом для NPCs.
  • Flee voices (Голоса Бегства) - запускаются, когда NPC убегает.
  • Hello voices (Голоса Приветствия) - запускаются, когда NPC или Существа приветствуют игрока, в т.ч. на расстоянии. Как это будет происходить устанавливается Hello-Урегулированием в настройках AI.
  • Hit voices (Звук Попадания), проигрывается, когда NPC или Существо получают повреждение (ущерб). И снова, для большинства существ эти звуки включены в их анимацию.
  • Idles play randomly - В состоянии бездействия звуки будут проигрываться случайным образом. Idles play randomly подобно "помехе" для голосов. Запускаются тогда, когда NPC не занят ничем, в этот момент проигрывается анимация бездействия.
  • Intruder voices (Голоса Вторжения) - запускаются, когда персонаж игрока вторгся на их территорию, посягнул на их собственность или активирол находящиеся в собственности предметы, например, двери или контейнеры.
  • Thief voices play - (Голоса Вора) - запускаются, когда NPC обнаруживает преступление типа захвата или нападения. Обратите внимание, что это происходит, когда преступление обнаружено. Даже если NPC имеет установку тревоги в AI в значении "0", он будет проговаривать это, если обнаружит преступление.


Greeting (Приветствие)


Раздел "Приветствие" состоит из того, что NPC говорят, когда диалог активизирован. Вообще, они работают аналогично Темам (разделам). Вы не можете вести диалог с кем-то, кто не имеет никаких Приветствий. Лучше лишний раз удостовериться, что имеется приветствие "по умолчанию" без условий.


Система ищет ИДЕНТИФИКАТОР (ID), который отвечает всем условиям, начинающимся от Greeting 0 до Greeting 9 и далее по кругу, пока не наткнется на нужное. Приветствия разделены на эти 10 категорий только из удобства.

Вообще-то в игре Morrowind все Приветствия имеют различную тематику:

  • Greeting 0: Встревоженность (Alarmed)
  • Greeting 1: Квесты (Quests)
  • Greeting 2: Вампиры, Обнажение тела
  • Greeting 4: Преступление и Болезнь
  • Greeting 5: Квесты
  • Greeting 6: Фракции
  • Greeting 7: Классы, Endgame, Рабы
  • Greeting 8: Одежда
  • Greeting 9: Местоположение

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


Persuasion (Убеждение)


В категории Persuasion (Убеждение) находятся ответы на различные типы убеждения, в том числе и Отказы в предоставлении информации и Отказы от предоставления сервиса.


  • Persuasion Fail/Persuasion Success (Сбой убеждения / Удачность убеждения)
  • Persuasion Fail определяет, что NPC будут говорить, когда попытка убеждения не удалась.
  • Persuasion Success определяет, что NPC будут говорить, когда попытка убеждения удалась.
  • Это также справедливо и для попыток подкупа, и для попыток запугивания или оскорбления.
  • Info Refusal (Отказ в информации) - Отказы в предоставлении информации состоят в том то, что NPC будут говорить тогда, когда персонаж игрока или еще что-нибудь не соответствует некоторым условиям, прописанным для данного NPC. Наиболее часто это происходит из-за низкого расположения (отношения) NPC к игроку. Если кто-то говорит относительно "Morrowind" только при расположении 70, то эта тема появится в их списке тем лишь в этом случае, поэтому при отношении к игроку 40 они ответят Отказом в предоставлении информации.
  • Service Refusal (Отказ в Сервисе/Обслуживании). Service Refusal отвращает некоторых NPC от предложения услуг. Когда игрок выбирает Обучение, Бартер или Путешествие, поиск делается через этот список. Если условие не выполняется, то этот человек не будет предлагать услуги и будет говорить вместо приветствия об отказе. Большинство сервисных отказов основано на ранге фракции или расположении.
  • Обратите внимание, что Расположение (Disposition) - "backwards" в Сервисных Отказах. Обычно Расположение проходит, если человек, с которым вы говорите, имеет расположение выше, чем номер в этом диалоге. Однако, Сервисные Отказы пройдут (и NPC откажется давать услуги), если расположение NPC более низкое, чем номер в этом диалоге.
  • Вы не можете использовать Убеждение на Существах, только на NPC.

Journal (Журнал)


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




Index (Индекс)

Filter for (Фильтр для:)


После выбора закладки вы можете установить опцию filter for для персонажа, которого вы создаете, чтобы уменьшить количество тем в списке. При выборе окна диалогов фильтр по умолчанию установлен на NPC, которого вы собираетесь редактировать, так что видны только темы и сообщения, доступные для данного NPC.


Фильтр в левой нижней части окна диалога покажет весь диалог указанного персонажа. Это покажет весь диалог для того, что ИДЕНТИФИКАТОР человека, гонка(раса), класс, род, ячейка, и т.д ... Некоторые вещи типа местных переменных государств и условий(состояний) журнала не проверена в редакторе, так список, который Вы видите с Фильтром, часто больший чем список тем(разделов), которые кто - то будет иметь в игре.


Info / Response (Информация / Ответ)

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

Выберите сообщение в разделе Info/Response:

Щелкните на сообщении в разделе Info/Response для выведения и редактирования информации об этом сообщении в нижней части экрана. Таблица (справа от сообщения) содержит лишь краткую информацию, более подробные сведения даны в разделе свойств в нижней части экрана.


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

Окно Info/Response показывает несколько из условий(состояний), которые могут иметь ответы, типа Расположения, ID, Фракции, Ячейки, и шести Функции / переменных. Это облегчает возможность находить некоторые ошибки(дефекты) сразу.

Вы можете редактировать текст каждого ответа в большом Текстовом Окне или, если ответ - только несколько символов, Вы можете дважды щелкать в окне Info/Response и редактировать текст там. Если Вы вырезаете и вставляете текст в редактора, Вы должны использовать большое текстовое окно, так как окно информации / ответа имеет предел числу символов, которое это может отображать. Большое текстовое окно позволит Вам вводить до 512 символов в ответ. Большее чем 512 количество символов недопустимо!

Некоторые игровые данные могут быть отображены в диалоге. См. список ниже.


Speaker Condition (Условие для Говорящего)


Раздел Speaker Condition позволяет определять условия (состояния), при которых игрок увидит какое-либо сообщение только при разговоре с определенным NPC, или NPC определенной расы, класса, гильдии или ранга. Эти поля устанавливают условия(состояния) для каждого ответа. Все условия(состояния) должны быть "Истинны" для любого, чтобы он смог произнести надлежащий ответ.


ID (Идентификатор)


Идентификатор ID используется, чтобы поместить диалог для определенного человека или людей. В то время, как большинство NPCs уникально в Morrowind, эта функция поместит диалог в каждый образец данного NPC, находящегося в игре. Если Вы имеете троих персонажей, имеющих ID нашего скелетона - "_Jason_Snow", всем троим назначится диалог с ID = "_Jason_Snow".


Вы можете добавлять новый ID, щелкая правой кнопкой в списке на левой стороне окна Диалога и вибирая "New." Вы можете удалять ID, щелкнув правой кнопкой мыши в этом списке и выбрав "Удалить" или, выбирав ID и нажав "DELETE". Вы можете также отредактировать ID, выбирав его и затем щелкнув на нем снова левой кнопкой мыши. Обратите внимание, что, когда Вы редактируете ID, который уже существует в мастер-файле, редактор отмечает старый ID как удаленный и создает новый ID, который существует только в вашем плагине.


Существам (Сreature) назначают диалог, привязываясь к их ИДЕНТИФИКАТОРУ. Это работает точно так же, как и для NPC. Диалог, назначенный для "Скампа", будет появляться в каждой копии "Скампа" в игре.


Race (Раса)


Эта функция назначает диалог для указанной расы. Если Вы добавите новую расу в редакторе, она появится в ниспадающем списке. Только представители этой расы будут иметь этот диалог. Если Вы удалите расу, любой диалог, назначенный для этой расы, будет удален.


Class (Класс)


Эта функция назначает, проверку диалогов на принадлежность NPC / NPC'S к определенному классу. Точно так же как Раса выше, если Вы делаете новый класс, это будет отображено и Вы можете выбрать это. Точно так же как Расы, если Вы удаляете класс, это будет отображено, поле опустеет.


Faction (Фракция)


Эта функция назначает проверку диалогов на принадлежность NPC или группы NPC к указанной фракции. Работает точно так же, как и предыдущие пункты - Раса и Класс.


Rank (Ранг)


Выбор этого пункта назначит диалог для каждого NPC, который имеет указанное значение ранга или выше. Если поле Фракция пустое, движок назначит это условие для каждого, кто соответствует выбранному значению ранга или выше, независимо от их фракции. Например, Фракция == Redoran и Ранг == 3 движок назначит диалог для каждого из Дома Редоран с рангом 3 или выше. Если Фракция == Пробел и Ранг == 7, то движок назначит диалог на каждого в игре с рангом 7 или выше, ВНЕ зависимости от принадлежности персонажа к какой-либо Фракции.


Cell (Ячейка)


Эта функция назначает диалог для каждого, находящегося в указанной ячейке. Обратите внимание, что функция проверяет соответствие только первым символам названия. Диалог в ячейке Balmora обнаружится и в самой Балморе ("Balmora"), в экстерьере, а также в интерьерах, таких, как "Balmora, Удачливый Тупик " или "Balmora, Dorisa Darvel: Продавец книг. "


PCFaction (Фракция персонажа игрока)


Эта функция выдаст диалог, только если игрок относится к указанной фракции.


PCRank (Ранг персонажа игрока)


Эта функция выдаст диалог, только если игрок имеет указанный ранг. Если поле Фракция оставлено пустым, игрок может иметь этот ранг в любой фракции.


Sex (Пол)


Здесь вы можете отфильтровать назначение диалога для одного из полов - мужского или женского.


Disp (Отношение)


Эта функция отфильтровывает вывод диалога в зависимости от Отношения персонажа игры к игроку. Любой диалог будет выведен только тогда, когда отношение будет больше, чем указанное значение (см. Отказ в сервисе, выше).


Function/Variable (Функция / переменная)


Эти шесть полей для задания условий позволяют вам иметь полный контроль над тем, кто говорит, что говорит и когда говорит (см. Функции Диалога и Переменные).


Results (Результаты)


В поле Results (Результаты) вы можете помещать короткие скриптовые команды. Вы не можете использовать любые команды, которые требуют для своей работы больше чем одну строку, например, команды "если". Поле результатов будет откомпилировано и обработано только после того, как ответ будет отображен, не ранее.


Update Shared By (Обновить разделение для:)


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


Journal Preview (Предпросмотр Журнала)


Это окно позволяет Вам быстро просмотреть журнал без того, чтобы иметь необходимость переключать к позиции табуляции Journal и терять ваше место в диалоге. Обратите внимание, что Вы можете также иметь больше чем одно окно диалога, открытое в то же самое время.


Update Hyperlinks (Обновить гиперссылок)


Эта кнопка модифицирует все гиперссылки во всех текстах в редакторе Диалогов. При большом списке топиков это может занять несколько минут. Обратите внимание, что, когда Вы сохраняете ваш плагин, гиперссылки будут удалены.


Error Check Results (Результаты проверки на ошибки)


Эта кнопка компилирует все в поле результатов для всех ответов. Это действие отобразит любые предупреждения, которые при этом найдет (они также будут сохранены в файле warnings.txt в каталоге Morrowind). Это очень неплохая идея - проверить все хотя бы раз, прежде, чем вы опубликуете свой плагин свободного использования.

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


Sound Filename (Имя Звукового файла)


Эта кнопка открывает диалоговое окно, в котором можно выбрать звуковые файлы для проигрывания в игре. Чтобы добавить или заменить звуковой файл, необходимо нажать на эту кнопку и открыть любой файл, который Вы хотите использовать.


OK


Эта кнопка только закрывает окно диалога. Обратите внимание, что любые изменения в диалогах сохраняются в момент их изменения. Не имеется никакого другого способа "отменить" сделанные изменения, сделанные в окне диалога.


%Defines (%Определения)



Вы можете использовать различные переменные и определения в тексте, например, %Name, который является именем говорящего.


Text Defines (Текстовые определения)


Следующие обозначения могут использоваться в строках текста, типе диалога и в окнах сообщений:

%Name Имя говорящего
%PCName Имя игрока
%Race Раса говорящего
%PCRace раса игрока
%Class Класc говорящего
%PCClass Класc РС
%Faction Фракция говорящего. Если он не имеет никакой фракции, то это место будет пустым.
%Rank Ранг говорящего
%PCRank Ранг игрока во фракции говорящего
%NextPCRank Следующий ранг игрока во фракции говорящего
%Cell Ячейка, где в настоящее время находится игрок
%Global Любая глобальная переменная (* тип Float отображается как 1.1, например, %Gamehour)


Определения для средств управления


  •  %ActionForward
  •  %ActionBack
  •  %ActionSlideLeft
  •  %ActionSlideRight
  •  %ActionMenuMode
  •  %ActionActivate
  •  %ActionUse
  •  %ActionReadyItem
  •  %ActionReadyMagic
  •  %ActionCrouch
  •  %ActionRun
  •  %ActionToggleRun
  •  %ActionJump
  •  %ActionJournal
  •  %ActionRestMenu
  •  %ActionNextWeapon
  •  %ActionPrevWeapon
  •  %ActionNextSpell
  •  %ActionPrevSpell


Основная терминология

Plugin (Плагин)


Происходит от сочетания двух слов Plug и in, их сокращения означают "Plug in Play" - "Вставь и играй".

В игре Morrowind используются два основных вида плагинов - мастер-файл ESM и обычный файл ESP.


PC (Играющий, Игрок)


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


NPC (Персонажи)


NPC - это игровые человекоподобные персонажи, не входящие в разряд "Creatures" ("Существа").


AI (Искусственный интеллект)


AI - это искусственный интеллект, включенный в игру. В игре Morrowind AI обрабатывается в настройках всех актеров непосредственно в игре и определяет, каким образом они будут вести себя в зависимости от их текущего статуса (stats). Статус определяется атрибутами, навыками, здоровьем, отношением и т.д. и т.п. Это также зависит от 4-х настроек, установленных в диалоговом окне AI.




Успехов Вам,

₪™ Qwertiss



Навигация по руководству:


Часть 1 - Часть 2 - Часть 3 - Часть 4