Создание квеста TES Construction Set
Руководство по созданию диалоговых квестов.
Автор: Олег aka Seth
Редакция 1.0 от 18.12.06

Содержание:
1. Введение.
2. В начале было слово.
3. Создаем свой первый квест
1. Что именно ты хочешь сделать
2. Что необходимо
3. Поиск потенциальной «жертвы»
4. Выбор подходящих локаций
5. Создание предметов
6. Поиск ошибок.
В архиве Вы можете найти, файл плагина, для наглядного изучения.

Введение:
Надеюсь, Вы уже знакомы с программой TES Construction Set. Если нет, то далее Вам читать не нужно. Так как данное руководство рассчитано на тех, кто уже хоть немного ориентируется в конструкторе. Моя задача, состоит в том, что бы научить РЕАЛИЗОВЫВАТЬ квесты. Именно реализовывать, писать могут почти все. А вот реализовать лишь единицы. Вот мы и займемся исправлением, этой несправедливости. Сделаем упор на диалогах, так как большинство квестов диалоговые.

В начале было слово:
Это слово было «придумал». Именно после того как Вы придумали свой квест, наверняка, захотите его переместить из своей головы в Тамриэль.
Итак, для начала нужно определиться;
1. что именно Вы хотите сделать.
2. продумать, какие предметы понадобятся, для выполнения квеста
3. найти потенциальную «жертву» (Далее субъект. Это может быть как человек, так и предмет. Главное, что именно этот субъект, дает игроку задание.)
4. выбрать подходящие локации для реализации (часто напрямую зависит от субъекта)
5. приступить к созданию, изменению предметов.
6. не пункт. Поиск ошибок.

Создаем свой первый квест:
1. «Добрыми делами вымощена дорога в Ад» Проверим? Пусть игрок безвозмездно (условно), совершит доброе дело. А именно. Пусть некто заболеет, и помочь ему сможет только игрок, он должен принести больному лекарство и тем самым исцелить его. Больной после исцеления предлагает игроку покрыть все затраты на лекарство. Игроку дается три варианта ответов. Из которых он должен выбрать. Например, реальная цена, двойная цена, и тройная цена. Субъект знает реальную цену, и если игрок выбирает второй или третий вариант, отношение к игроку падает наполовину и на 2/3 соответственно, а игрок получает только то, что потратил на лекарство. В случае же если игрок честно отвечает, отношение удваивается и игроку возвращаются потраченные деньги плюс ценный подарок, пусть это будет кольцо скорости. Почему именно скорости? Потому, что наш субъект болен странной болезнью, которая не позволяет ему полноценно ходить, уменьшая скорость. Понятно, что после исцеления оно ему ненужно. А игроку пригодится.  Лекарство игрок должен купить у любого алхимика. Болезнь назову «Саркома», а плагин «MyFirstQuest». (его Вы можете найти в архиве с этим руководством). Вообще-то я предпочитаю немецкий язык, но из уважения к Вам, здесь буду использовать английские написания. Так Вам будет понятнее, что к чему.
2. Что понадобится для реализации. Не всегда можно предугадать с точностью, что потребуется. Во время реализации могут всплывать различные подводные камни, которые придется обходить новыми предметами или действиями. Но благодаря некоторому опыту, и главное, праву переписать этот абзац , я точно скажу, что потребуется. Во первых, новая болезнь (в качестве способности, для исключения возможности стороннего излечения). Во вторых - лекарство от нее (заклинание которое нужно наложить на субъекта для излечения). Будем делать скрип-эффектом. Так будет надежнее.
3. Открываем TES Construction Set, и ищем того, кто будет болеть, и пошлет игрока за лекарством. Хорошо для этого еще бы и ориентироваться, в Тамриэле. Но если Вы провели там хотя бы пару часов, думаю, Вы имеете представление, что, где находится. Наш «субъект» должен быть из глубинки, иначе квест не имеет логики. Зачем посылать кого-то, если можно самому пройти пару кварталов в лавку алхимика. Другое дело, когда человек живет вдали от больших городов, и ему сложно добраться до города, тем более с такой болезнью. Вполне правдоподобно, а фермеров в Сиродиле, много. Из них я и решил выбрать одного в качестве «жертвы».
Далее выведем «на чистую воду» всех фермеров, Сиродила. Для этого в дереве щелкаем по «Actors->NPS» и передвигаем бегунок полосы прокрутки в окне «Object Window», на столько, что бы стал, виден столбец «Class». см. рис 1.

рис. 1

Щелкаем по нему. Это упорядочит всех NPS, в алфавитном порядке по классам. Спускаемся ниже, ищем класс «Farmer». см. рис 2.

рис. 2
Нашли? Я нашел двадцать два фермера в Сиродиле. Из них и нужно выбрать одного. Я выбрал Мерилдора (ID Merildor). Исходя из тех соображений, что у него, равно как и у его жены нет ссылок, а это, значит, нет квестов . Исправим . рис 3.

рис. 3

4. Локации нам выбирать не придется. Так как они уже есть это ферма нашего фермера.
5. Итак, наступил ответственный момент. Начнем изменять мир.
Первое. Правым кликом на Мерилдоре, вызываем контекстное меню, в котором выбираем Use Info. Рис 4

рис 4
Вот для чего. Нам необходимо присвоить Мерилдору ссылку, по которой в дальнейшем мы будем обращаться к нему из скриптов. После щелчка по выбранному пункту меню, появится окно, с писанием всех обращений к объекту. Рис 5

рис. 5
В таблице Used in these Cells:, выбираем BrindleHome02. В прочем выбирать то и не из чего. Двойной щелчок левой кнопкой и ячейка с персонажем загружена. Находим в Render Window, Мерилдора и дважды щелкаем по нему. Появится окно ссылки. Рис 6.

рис. 6
В нем вписываем только Reference Editor ID:. «aaaMerildorRef». Это и есть ссылка, которая нам потребуется в дальнейшем. Жмем ОК. С Мерилдором покончено, займемся созданием болезни.
Болезнь – это способность, уменьшающая скорость до нуля. Делаем следующим образом. Переходим в ветку «Способность», «Magic->Spell->Способность». Как и в первом случае щелкаем правой кнопкой мыши по любому спеллу. Но выбираем пункт «New». Этим мы создадим совершенно новый объект типа «Spell». В появившемся окне нужно самостоятельно ввести все параметры. ID – aaaSsarcoma, Name – Саркома, Type – Способность. Не пугайтесь когда в поле Name, вместо русских символов Вы увидите абракадабру. Это просто несовпадение кодировок, в игре все будет нормально... (Кстати, уже после написания руководства, нашел программу, которая устраняет данное недоразумение. Скачать ее можно на сайте wwwutgarda.land.ru, в разделе игры/oblivion) Теперь в разделе «Effects», правой кнопкой мыши вызываем контекстное меню и выбираем «New». Рис 7

рис 7

В появившемся окне Effect Item, вводим следующее. Effect – Высасывание параметра, ActorVal – Скорость, Magnitude – 100. жмем «OK». Эффект добавлен. В окне Spell жмем «OK». Рис. 8

рис. 8
Болезнь создана, можете убедиться, проверив список, Если Вы ввели ID с префиксом, то спел, будет в самом верху.
Лекарство. У нас будет заклинание в свитке. Для этого переходим Magic->Enchantment, и создаем новое зачарование для свитка. Правой кнопкой «New». ID – «aaaMedicineForASsarcoma». Type – Свиток. Параметры зачарования определим позже. Пока создадим свиток Items->Book. Здесь находятся книги Тамриэля, в том числе и свитки. Выбираем любой свиток заклинания, я выбрал «ScrollRestoreHealthTouch1Novice». Дважды щелкните на выбранном свитке, и перед вами появится окно редактирования. Измените ID, на «aaaMedicineForASsarcomaScroll». Name – Излечение саркомы. В списке Enchanting, выберите созданное нами зачарокание «aaaMedicineForASsarcoma». Пока на этом все. Жмите ОК. Появится окно. (В нем говорится, что старый ID не совпадает с новым ID. Что сделать, изменить или создать новый объект?) Жмите «Да», создается новый объект. В противном случае объект будет изменен, и все связанные с ним действия будут нарушены! Если вы сделали все правильно, вверху списка должен появиться наш объект. Почему мы просто не создали новую книгу и не ввели необходимые параметры? Потому, что так проще, нам не потребовалось вводить изображение книги. Это может стать настоящей проблемой. Ведь требуется выбрать из существующих картинок, а они все находятся в архиве. И их предварительно необходимо извлечь при помощи специальных программ, либо рисовать самостоятельно.

Перейдем к созданию квеста и стадий к нему.
Открываем окно квестов. Нужно создать новый квест, для этого, правой кнопкой мыши щелкаем в списке квестов и выбираем New.
Рис. 9
И в появившемся окне вписываем название нашего квеста, «aaaMyFirstQuest». Вписывать нужно на латинице. Это идентификатор квеста, в игре будет отображаться другое название. Во вкладке Quest Data, вписываем название нашего квеста и выставляем приоритет выше нуля. Ставим 60, как и другие квесты. рис.9
Рассмотрим подробнее окно квестов.

рис 10
Вкладка Quest Data – Общая информация о квесте.
Quest Name – Название квеста записываемое в журнал и видимое в игре.
Priority – Приоритет квеста.
Script – Сценарий управляющий квестом (не обязателен).
Start Game Enabled – Квест будет запущен при старте игры автоматически.
Allow Repeated Conversation Topics – Разрешить повторение тем бесед (см. ниже).
Allow Repeated Stages – Разрешить повторение стадий (см. ниже)
Quest Conditions – Условия Квеста при которых он может выполнятся.
Условия добавляются кнопкой New, как функция или значение какой-либо переменной.
Кнопки в правой верхней части: Показать окно диалогов для квеста, Перекомпилировать все сценарии результатов, Экспортировать диалоги. Сверху вниз соответственно.
Кнопка Add Icon Image – Позволяет установить иконку для квеста.

Вкладка Quest Stages – Стадии квеста. То, что записывается в журнал, по наступлении определенных событий.
Index – Индекс. Любая цифра. ( в разумных пределах ) По индексу происходит запись в журнал нужной записи. Индекс текущей стадии возвращается при вызове функции GetStage…
Quest Stage Items – Части индекс записей. Под одним индексом можно записать несколько вариантов записей, различающихся условиями (Conditions). Например, запись для игрока мужчины и женщины. ( Нашел…, Нашла…).
Log Entry – Собственно сам текст записи.
Result Script – Сценарий результата. При добавлении записи, можно выполнить определенный код, для реализации каких-либо специальных нужд. ( Скрыть объект или наоборот показать, и т.д.п.)
Quest Targets – Цели квеста. (Маркер на карте) Определяются по индексу в условиях показа.
Select Reference in Render Window – Эта кнопка позволяет не напрягаясь выбрать цель прямо в окне мира. Можно выбрать и из списков находящихся ниже. Сначала выбрать ячейку, а затем предмет в ячейке. ( ВАЖНО! Предмет должен быть устойчив в мире. Reference Persist отмечен.)
Conditions – Условия для показа цели.
Compass Marker Ignore Locks – Маркер может показывать на необходимость прохода через запертые двери, не ища альтернативного пути.

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

Вкладка Topics – Темы. Здесь создаем и изменяем темы для конкретных квестов.
Editor ID – Уникальное имя темы в редакторе.
Topic Text – Отображаемое название темы, например «Слухи».
Info – Варианты ответов для этой темы. Перебор идет с верху вниз. Выбирается первый ответ, удовлетворяющий условиям!
Response Text – Детали ответа. Если ответ длинный и не вмещается в один прием.
Result Script – Сценарий результата.
Conditions – Условия ответа.

Вкладка Conversation – Беседа. Аналогична Topics, но используется для разговоров между NPS. Можно использовать для добавления тем при подслушивании разговоров.

Вкладка Combat – Бой. То, что кричат NPS, при сражениях, краже, бегстве и т.п.

Вкладка Persuasion – Убеждения. То, что отвечают NPS, когда Вы пытаетесь им понравится, или не понравится.

Вкладка Detection – Обнаружение. То, что говорят NPS, когда находят или теряют из виду игрока.

Вкладка Service – Обслуживание. То, что говорят NPS, когда Вы торгуете, ремонтируете и т.п.

Вкладка Misc – Разное. Доступные темы: Corpse – когда видят труп. Idle – когда бездельничает. InfoRefusal – скажет если недостаточно расположения к игроку, за место отвергнутой темы. ( флаг - Info Refusal). ObserveCombat – если является свидетелем боя. TimeToGo – Скажет если не сможет сменить пакет AI, из-за установленного флага «Continue if PC Near» (продолжить, если игрок рядом).

Существует еще одно окно, «Edit Response» (Редактирование ответа). Появляющееся при создании нового или изменении существующего ответа. Разберем и его. Response Text – Текст ответа. Script Notes – Примечание Сценария, Не путайте с Script Result! Текст, введенный в это поле, не является сценарием, а всего лишь ПРИМЕЧАНИЕ! Группа Audio - Звук. Хотя тут и расположены настройки эмоций не имеющие отношения к звукам. Emotion Type – Тип эмоции (радость, грусть, злоба и т.д.). Emotion Value – Уровень эмоции. От 0 до 100%.

Вот собственно и все, что связано с диалогами.

Потренируемся на практике. Переходим на вкладку «Quest Stages». Сейчас мы создадим записи для журнала. Тем самым подробнее обрисуем себе, что нужно дальше. В левой части есть столбец «Index», он пока пуст. Правый щелчок мыши. Выбираем в меню «New». Будет создана чистая запись, ей нужно присвоить индекс. Пусть это будет 10. (Вообще принято писать индексы десятками 10, 20, 30. для того, что бы в случае необходимости, можно было добавить новый индекс в свободное пространство. Например, 21. Не будем и мы эти брезговать.) Log Entry – создаем вариант записи. Как и раньше Правый клик -> New. Появится EMTY, пустая запись. Запись мы вводим в одноименное поле находящееся ниже. Вот примерный текст. ( по квесту) «Я встретил человека по имени Мерилдор. Его съедает страшная болезнь саркома. Он попросил меня помочь ему.»
Повторите шаги создания стадий и создайте остальные стадии;
20 – «Я согласился помочь Мерилдору. Мне нужно найти для него лекарство. Все расходы Мерилдор обещал покрыть.»
30 – «Я купил заклинание, которое способно излечить Мерилдора. Нужно отправляться к нему.»
40 – «Я исцелил Мерилдора.»
50 – «Мерилдор отблагодарил меня за помощь. Вернул потраченные мной деньги, и подарил свое кольцо скорости.»
60 – «Я хотел обмануть Мерилдора. И сказал, что потратил на заклинание 350 золотых. Но, похоже, он знал, настояшую цену. т.к. вернул мне 240 золотых. То, что я потратил на покупку.»
70 – «Я хотел обмануть Мерилдора. И сказал, что потратил на заклинание 540 золотых. Но, похоже, он знал, настоящую цену. т.к. вернул мне 240 золотых. То, что я потратил на покупку.»
80 – «Я отказался помогать Мерилдору. У меня своих дел достаточно.»
В индексах, 50, 60, 70, 80. Установите флаг Complete Quest. Это варианты завершения квеста, и любой из этих индексов должен завершить квест. Рис. 11

рис. 11

Следующая вкладка. Quest Targets. Создаем цель квеста. Это Мерилдор на стадии 30. Правый клик -> New. Появится «Bad Target», неопределенная цель. Выбираем цель в группе Quest Target Data. Выбираем ячейку – BrindleHome02. (именно в ней находится Мерилдор) Выбираем Мерилдора в поле Ref. (как видите, он имеет установленную нами ссылку, значит, это именно тот Мерилдор который нам нужен, а не близнец какой-нибудь) Существует и другой вариант выбора ссылки. Немного проще, Загружаете ячейку с нужным объектом, устанавливаете камеру так, что бы он был виден. И нажимаете кнопку «Select Reference in Render Window», редактор автоматически переключится на указанное окно, и вы сможете выбрать объект, просто ткнув в него мышей. (Если объект можно выбрать курсор становится белым, в противном случае красный. Выбрать можно только устойчивые объекты.) Далее нужно выбрать условие, нам ведь не нужно показывать на Мерилдора на протяжении выполнения всего квеста. Conditions, нажимаем КНОПКУ New. Появится новое условие. Справа от кнопки в списке выбираем функцию «GetStage», эта функция возвращает значение текущей стадии (индекс). Потом щелкаем по кнопке INVALID (бывают и другие подписи, в зависимости от функции, но означают они всегда одно ОШИБКА) и выбираем параметр функции, наш квест из списка. Теперь нужно определит само условие Comparison. Нам нужно, что бы показ осуществлялся только на 30-й стадии, значит, выбираем «= =», и в поле Value выставляем 30. Таким образом, получилось условие – «если стадия квеста aaaMyFirstQuest равна тридцати» или иначе «GetStage aaaMyFirstQuest = = 30.00». В других вариантах цель не подходит, и не отображается. Рис Аналогично выполняются условия в диалогах. Рис. 12 К ним, и переходим.

рис. 12

Вкладка «Topic». В левой части находится список тем доступных для квеста (у Вас там должно быть пусто, мы ведь еще не создавали тем!). Правый клик. Выбираем в меню «Add Topic» (добавить тему). Появляется окно «Select Topic», в котором будут отображены все доступные в этой вкладке темы. Можно выбрать любую и добавить свои варианты. Но нам это не подойдет. Нам нужна совершенно новая тема. Что бы ее создать, щелкаем правой кнопкой мыши, и выбираем «New». (НИКОГДА НЕ УДАЛЯЙТЕ ОРИГИНАЛЬНЫЕ ТЕМЫ! Это может привести к неопределенным последствиям, и неработоспособности сюжета.) В появившейся строке пишем «aaaSsarcomaTopic», это будет наша основная тема. Жмите Enter, и выбирайте эту тему двойным кликом. Тема добавлена, теперь ее можно изменять, создавать и удалять варианты ответов, переименовывать, и т.п. Вот и переименуем. По умолчанию название темы совпадает с ID темы. Если помните это «aaaSsarcomaTopic», заменяем более лицеприятным, например «Болезнь». Рис. 13.
Рис 13
Тема создана. Нужно ее как-то добавить игроку, иначе она никогда не появится в диалогах, хоть все условия будут тысячу раз истинны. Я не стал оригинальничать, и решил добавить ее посредством приветствия «Greeting». Сделайте и Вы так же. Добавляйте тему (как в первом случае), но не создаете новую, а выбираете существующую. GREETING, это и есть всевозможные приветствия, которыми NPC, встречают игрока. Как видите, таблица info, сейчас пуста - это, значит, нет специальных вариантов для квеста, и будут использоваться любые подходящие приветствия. Правым кликом создаем новый вариант приветствия. Я решил, не приветствовать игрока, а прямо в лоб, просить о помощи.  В появившемся окне пишите «Помоги мне!». Здесь же можете выставить эмоции, на Ваше усмотрение, я ничего не менял. По завершении ОК. Ответ создан, вернее приветствие. Это приветствие должно добавить тему для разговора. Делается это следующим образом. В поле Add Topics, (находится в правой части) правый клик, Add Topic, и выбираем нужную тему. Конечно же, выбираем свою. Именно по этому мы создали сначала ее. Теперь в поле Script Result, вписываем следующее, «SetStage aaaMyFirstQuest 10» (сие есть старт квеста, а именно, функция SetStage, устанавливает квест aaaMyFirstQuest в индекс 10, у нас это начало. Она же добавляет запись в журнал. Запись добавляется только один раз, повторные вызовы функции с этим индексом, не добавят записей, а лишь изменят текущий индекс.) ОБЯЗАТЕЛЬНО СОЗДАЕМ УСЛОВИЯ! Первое, GetIsID Merildor = = 1.00 (соответственно функция, параметр, сравнение, значение. Если не знаешь как, читай здесь. Это условие позволяет использовать данное приветствие только Мерилдору, без этого условия все NPC будут просить о помощи , что не есть гуд. Второе условие, GetStage aaaMyFirstQuest < 20.00. Это условие сужает возможность использования приветствия только до того момента, если стадия квеста меньше 20, (20 уже не пройдет). Зачем так? Поясню. Мерилдор должен просить о помощи лишь если он уже не договорился о ней, либо не получил отказ. В нашем случае это как раз, стадия 10. Когда игрок делает запись о том что, встретил, но еще не сделал записи о соглашении или отказе в помощи. Эти стадии у нас имеют индекс от 20, но не меньше 20, именно по этому при стадии 20 Мерилдор уже не будет просить о помощи, а, например, будет спрашивать, как продвигаются поиски лекарства. (Это следующее приветствие) На этом создание варианта приветствия завершены.  Можете отдохнуть, если хотите.
Следующий, уже упомянутый вариант. Должен располагаться ниже предыдущего варианта. Создаем новый вариант щелчком ниже, в свободном поле. (Щелчок на варианте создаст новый вариант, но выше текущего.) С текстом «Ты достал лекарство?» Создается он, так же как и первый вариант. Но условия немного другие, и отсутствуют темы в поле «Add Topics», Ведь по логике тема уже добавлена и игрок согласился помочь. Значит, добавлять темы нам ненужно. Вот условия; GetIsID Merildor = = 1.00 это условие будет практически во всех вариантах тем, т.к. они относятся только к Мерилдору. Второе GetStage aaaMyFirstQuest >= 20.00 и третье GetStage aaaMyFirstQuest < 40.00. Надеюсь Вам понятно, что второе и третье условие позволяют использовать вариант, только если стадия квеста больше или равно (>=) 20, и меньше (<) 40. Ведь наш квест заключается именно в пределах от 20 до 39. При стадии 40 квест уже завершен, и Мерилдор уже исцелен, по этому спрашивать про лекарство, в этом случае, по меньшей мере, глупо. (А вообще это был бы баг).
Теперь перейдем к третьему варианту. Еще ниже. Текст «Я благодарен тебе за помощь. Позволь возместить твои убытки. Сколько ты потратил на свиток?» этими словами Мерилдор будет приветствовать игрока, когда тот его исцелил, и сразу же будет выдаваться варианты ответов. Ответов мы еще не делали по этому давайте создадим условия варианта, потом создадим необходимые варианты ответов, и вернемся к этой теме. Условия; GetIsID Merildor = = 1.00 и GetStage aaaMyFirstQuest = = 40.00. Второе условие действительно лишь на стадии 40, когда Мерилдор уже излечен, но еще не отблагодарил игрока. Если Вы сделали все правильно, у Вас должна получиться примерно такая картинка.
Займемся созданием вариантов ответов, для нашего квеста. В первый раз игроку предлагается выбрать, что ответить, когда его просят о помощи. Здесь он либо соглашается, либо отказывается. Что бы создать новый ответ, нужно создать новую тему. Обычно используется слово Choice – Выбор, для удобства в идентификаторах тем. Вот и мы создаем новую тему и называем ее «aaaSsarcomaChoice1». В тексте названия пишем «Хорошо, я помогу тебе.» Эта тема является ответом игрока и реакцией на него. В сущности, нет разницы между простой темой и темой ответом. В варианты ответов можно запихнуть, все, что угодно, но не стоит этого делать.  Добавляем новую информацию (info), «Как хорошо! Хоть кто-то согласился помочь старику. Найди лекарство от саркомы. Я обещаю возместить все твои расходы. Оно должно быть у магов.». Можно выставить эмоции, я поставил «Happy 80». И добавим «вторую серию», ответа, заключающую. Для этого создайте, новую «деталь ответа» (Правый Клик в Response Details.) Текст «Ее так просто не вылечить.» и эмоции «Sad 50». Таким образом, можно создать сколь угодно длинный рассказ, но смотрите, не загружайте игрока трех часовой лекцией.  В поле Result Script впишите «SetStage aaaMyFirstQuest 20», это переведет наш квест на новую стадию (20), с вытекающими последствиями. Обязательно условия, не забывайте GetIsID Merildor = = 1.00. Хотя теоретически никто кроме Мерилдора не сможет представить эти варианты ответов игрока, не пренебрегайте элементарными условиями, это позволит избежать проблем, в том случае если этот вариант могут предоставить несколько NPC. Теперь, дальше. Создаем новый вариант ответа «aaaSsarcomaChoice2», с текстом названия «Я не стану тебе помогать.», и текстом info «Жаль…». Эмоции «Sad 100». Result Script «SetStage aaaMyFirstQuest 80». Стадия 80 завершает у нас квест. (Досрочно) если помните. Условия GetIsID Merildor = = 1.00 И так далее.
«aaaSsarcomaChoice3»
Текст «Да. Я покупаю.» - Игрок покупает свиток с заклинанием
Info «Я знал, что ты возьмешь его. Это довольно редкое заклинание, не испорть его.»
Result Script – «Player.AddItem aaaMedicineForASsarcomaScroll 1
Player.RemoveItem Gold001 240
SetStage aaaMyFirstQuest 30» Этот ответ необходим при покупке свитка. Первая строка добавляет(AddItem) игроку(Player), вещь(aaaMedicineForASsarcomaScroll) в количестве одной штуки(1). Вторая строка, удаляет(RemoveItem) у игрока(Player) вещь(Gold001 – золото), в количестве 240(такую цену я определил для свитка, можете вписать свое значение, но оно должно быть в разумных пределах. Если Вы хотите написать нормальный квест, а не что-то типа, «Вот моя шняга» ). И третья строка Устанавливает стадию квеста в 30. Единственное условие, это деньги. Игрок может так сказать, только если у него есть необходимая сумма. «GetItemCount Gold001 >= 240». Другие условия здесь не нужны. Ведь продать, нам его должен маг. (Любой, а не какой-то определенный) Для правильной работы условия поставьте галочку в «Run on Target», Это переведет проверку условий на цель, то есть игрока. Ведь мо умолчанию все условия проверяются на говорящего, а нам не важно, сколько денег у мага, важно, сколько у игрока.
«aaaSsarcomaChoice4»
Текст «Я подумаю над твоим предложением» - отказ от покупки свитка.
Info «Только не долго. Вспомни того, для кого ты его покупаешь! Это очень болезненная зараза.»
На этом диалог завершается, и другие параметры не требуются.
«aaaSsarcomaChoice5»
Текст «Я потратил 240 золотых.» - честный ответ Мерилдору о потраченных средствах.
Info «Ты честный человек. И я поступлю по совести. Вот твои деньги. И еще, в знак благодарности прими это кольцо.»
ScriptResult;
«Player.AddItem Gold001 240» – добавляет золото игроку.
«Player.AddItem EnchRingFortifyAttrSpeedSilverRuby 1» - добавляет игроку кольцо.
«SetStage aaaMyFirstQuest 50» - завершает квест стадией 50.
«ModDisposition Player 50» - изменяет отношение к игроку +50 единиц.
Условия;
«GetIsID Merildor = = 1.00»
«GetStage aaaMyFirstQuest = = 40»
«aaaSsarcomaChoice6»
Текст «Я потратил 350 золотых.» - нечестный ответ Мерилдору о потраченных средствах.
Info «350! Мне говорили оно стоит 240 золотых. Забирай свои деньги и убирайся!»
ScriptResult;
«Player.AddItem Gold001 240» – добавляет золото игроку.
«SetStage aaaMyFirstQuest 60» - завершает квест стадией 60.
«ModDisposition Player -35» - изменяет отношение к игроку -35 единиц.
Условия;
«GetIsID Merildor = = 1.00»
«GetStage aaaMyFirstQuest = = 40»
«aaaSsarcomaChoice7»
Текст «Я потратил 540 золотых.» - нечестный ответ Мерилдору о потраченных средствах.
Info «540! Мне говорили оно стоит 240 золотых. Забирай свои деньги и убирайся наглый лжец!»
ScriptResult;
«Player.AddItem Gold001 240» – добавляет золото игроку.
«SetStage aaaMyFirstQuest 70» - завершает квест стадией 70.
«ModDisposition Player -54» - изменяет отношение к игроку -54 единиц.
Условия;
«GetIsID Merildor = = 1.00»
«GetStage aaaMyFirstQuest = = 40»
Теперь у нас есть необходимые варианты ответов. Займемся темой «Болезнь», которую мы создали самой первой. Известным способом создаем новое info(вариант темы), в теме «aaaSsarcomaTopic». Текст info «Я болен. Мне трудно передвигаться, мне нужно лекарство. Ты можешь достать его для меня?». После этого игроку должны быть выданы варианты ответов. У нас это «aaaSsarcomaChoice1», и «aaaSsarcomaChoice2». Сделать это можно так же как мы добавляли тему игроку в приветствии. Но вставляем в поле Choices. Рис 15 Условия; «GetIsID Merildor = = 1.00», «GetStage aaaMyFirstQuest < 20»
В этой же теме создаем вариант для мага, который будет продавать свиток игроку. Вариант должен находится ниже предыдущего. Текст info будет состоять из трех строк. «Так тебе нужно лекарство, от саркомы, да? Тут поможет только заклинание.» «И оно у меня есть.» с эмоцией Surprise 70. «Я прошу за свиток всего 240 золотых. Будешь брать?». Добавляем варианты ответа Choice, «aaaSsarcomaChoice3», и «aaaSsarcomaChoice4». Получится должно вот так.

Теперь, пришло время вернутся к приветствию, («Я благодарен тебе за помощь. Позволь возместить твои убытки. Сколько ты потратил на свиток?») и добавить в него варианты ответов игрока. «aaaSsarcomaChoice5», и «aaaSsarcomaChoice6», «aaaSsarcomaChoice7». Условия; «GetIsClass MerchAlchemist = = 1.00», делает доступной тему, только для алхимиков-продавцов. «GetStage aaaMyFirstQuest < 40»
Если Вы все это сделали, позвольте Вас поздравить. С диалогами покончено. Но мы еще не сделали лекарство.
Лекарство это заклинание, которое исцеляет нашу болезнь. Будем делать скрипт-эффект (заклинание возможности которого определяются сценарием).
Приступим к разбору, скрипты это отдельная, обширная тема, и здесь я не буду ее разворачивать. Вот скрипт лекарства. Он проверяет, не подвергается ли объект воздействию определенного заклинания. (наша болезнь). Если да, то заклинание удаляется, стадия устанавливается в 40.

scn aaaMedicineForASsarcomaSCRIPT

Begin GameMode

if IsSpellTarget aaaSsarcoma == 1
removeSpell aaaSsarcoma
SetStage aaaMyFirstQuest 40
endif

end

Хочется надеяться, что Вы совладаете со сценариями. Окно редактирования сценариев вызывается нажатием на эту кнопку . В меню Script, выбираем New…, и вставляем в окно вышеприведенный код. В списке Script Type выберите Magic Effect. Нажимаем кнопку с изображением дискеты (НЕ КРАСНОЙ). Ничего при этом произойти не должно. Если при этом выскочило окно с ошибкой, возможно, Вы нарушили последовательность создания объектов, или неправильно ввели текст кода. Еще один сценарий, необязательный. Но необходимый для полного представления работы квестов. Сценарий самого квеста. Накладывает заклинание на Мерилдора, если его на нем нет, и если квест незавершен. (Криво, но как я уже сказал, необходимо).

scn aaaMyFirstQuestSCRIPT

begin GameMode

if GetStage aaaMyFirstQuest < 40 && aaaMerildorRef.IsSpellTarget aaaSsarcoma == 0 && Player.GetDistance aaaMerildorRef < 3000
aaaMerildorRef.AddSpell aaaSsarcoma
endif

end

Все как в первом случае, только Script Type выберите Quest. Сохраняйте (кнопка с дискетой).
Теперь нужно «развесить» сценарии по объектам. Выбираем наш квест, и во вкладке Quest Data, в поле Script выбираем наш сценарий aaaMyFirstQuestSCRIPT. Готово. Следующий сценарий является магическим эффектом и необходим, для лечения. Помните, где создали зачарование для свитка? Открывайте его. Будем добавлять единственный эффект. Добавляется, так же как и для болезни, но параметры иные.
Effect – Script Effect
Range – при касании
Area – 0
Duration – 1
Script – aaaMedicineForASsarcomaSCRIPT
effectName – Излечение саркомы
School – изменение
Visual Effect – Восстановление
И обязательно уберите галочку с Effect is Hostile (эффект враждебен), а то Мерилдор может на Вас кинуться решив, что Вы его атакуете.
Вот собственно и ВСЕ!
Квест закончен, можете проверить. (если найдете Мерилдора )

6. Поиск ошибок. Хм… Я таковых не нашел. Но если вдруг Вы обнаружите их, пишите мне, я дополню этот раздел.

Желаю успехов, надеюсь, смог научить хоть чему-то.