Morrowind:Как создать квест

Материал из Tiarum
Перейти к: навигация, поиск
TES3: Morrowind. Как создать квест?
45px-Scroll.png

автор: Lord Alex
редактор: Helmut, Garin
ccылка на оригинал: "Квестостроение" (страница для скачивания офлайн-версии на Фуллресте)
ссылка на сайт: Фуллрест


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


Автором руководства "Как создать квест" является Lord Alex, администратор сайта Fullrest. Учебник предназначен для начинающих модмейкеров и содержит всю необходимую информацию для создания в конструкторе своего первого квеста, сохранения его в виде плагина и включения в основную игру.

Руководство публикуется на Tiarum Wiki с любезного разрешения автора, за что мы ему очень признательны.



Как создать квест

Здравствуй, дружок, сегодня, наконец, настало время взяться на серьезное дело настоящего плагинотворца! Вперед же и с песней! За этот короткий, но сложный курс ты обучишься делать полноценный квест с большим количеством завихрушек в нем. Что же мы будем делать? А делать мы будем вот что:


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


Ну что? Начнем!


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


Создание NPC

Создаем нашего непися, пусть имя ему будет Мистер Гусь, характеристики его и принадлежность лежит на вашей совести. Ставим нашего Мистера куда необходимо.


HMQ 001.jpg


Что такое диалоги?

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


Чтобы нормально работать в диалогах, сразу устраняем фильтр на определенного непися и оставляем это окошко пустым (см. на скриншоте).


Для тех, кто не знает, будем рассматривать по ходу некоторые вкладки.

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

Соответственно, игра начинает просматривать варианты приветственной фразы с «гритинг 0» и до «гритинг 9», пока не встретит приветствие, которое подходит по условиям.


Немного про содержание этих «гритингов»:

  • «гритинг 0» содержит в себе диалоги с условиями, когда наш герой должен денег закону или просто заслуживает смерти от каких либо НПСов. В «гритинг 0» диалоги в основном заканчиваются атакой.
  • «гритинг 1» содержит срочные диалоги (почему срочные, узнаете из «гритинга 2»). Тут в основном лежат разговоры с Даготами, спящими и некоторые квесты.
  • «гритинг 2» здесь также хранятся диалоги не из приятных. В основном в условиях этих приветствий лежит принадлежность героя к вампирам.
  • «гритинг 3» пуст! Тут лежит всего одно заявление, если вы нарушите правила гильдии Мораг Тонг.
  • «гритинг 4» здесь и далее уже содержатся квестовые приветствия, а также все прочие.


Исходя из этого, вы можете судить, куда ставить ваше приветствие. Если то, что вам должен сказать персонаж, выше закона, тогда ставьте ваши фразы в самом начале «гритинга 0», если закон имеет значение, а вампиризм не важен, тогда в «гритинг 1», для стандартных игроков и квестов лично я бы порекомендовал пользоваться «гритингом 3» - он и пустой, что, безусловно, удобно, так же местоположение его дает возможность перехватывать стандартные выкрики неписей.


Итак, открываем «гритинг 3» и создаем там приветственную фразу, типа:

Привет! Не желаешь помочь Гусю?

В условиях говорящему нам нужно поставить только одно – ID говорящего, на примере это aa_gouse


HMQ 002.jpg


Создание раздела в журнале

Теперь на будущее нам необходимо создать журнальный раздел, и мы со всей скоростью отправляемся на вкладку Journal/Журнал (она самая правая).


Здесь мы видим огромное количество журнальных записей, но нам они неинтересны, у нас же скоро появится своя! Правой мышкой по списку записей, New/Новый и мы уже пишем название нашей журнальной записи, например, aa_primer.


После того, как мы создали запись, открываем ее и видим в правой рамке, что запись пуста, правой кнопкой щелкаем по пустеющей рамке и создаем новую запись. В первой создаваемой записи практически не нужно ничего писать. {Сразу хочу отметить, что данный обзор подготовлен для CS-ов версии Трибунал и выше. Обладатели первой версии обнаружат несоответствие :)} Значит, как водится, в первой записи мы пишем название нашего квеста (ведь, как мы помним, в версии игры с Трибунала, в журнале теперь есть разделение на темы, они же названия квеста. Пишем, что желаем и ставим галочку на значении «заголовок»


HMQ 003.jpg


Создание темы разговора

Журнал у нас есть, теперь мы всегда сможем вернуться сюда и сделать немаловажные записи. И мы обязательно сделаем это позже! А теперь нам нужно, наконец, создать тему разговора. А то наш непись сейчас выглядит странно… стоит, понимаете ли, и без конца твердит: «Помоги гусю, да помоги гусю». Не надо его огорчать, спешим в Topic, они же Темы :)


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


Теперь нужно написать то, что Гусь будет говорить при нажатии в игре на этот топик. Пишем. Не забываем на всякий случай ставить условия ID нашего НПС. Также теперь нам необходимо познакомиться с новым для многих из нас столбиком условий - это Функции и Переменные.


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

Следовательно, ставим по квадратикам (см. скриншот):

Journal aa_primer (или любая ваша запись) = 0

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


На данный запрос Гуся нам необходимо как-то ответить, не так ли? Настало время обратить свои взоры в самый низ окошка, в рамку Result/Результат. Сейчас нам нужно сказать, поможем ли мы нашему неписю или нет. Пишем:

choice "Не грусти, я помогу тебе!" 1 "Да ну тебя, это не ко мне" 2

Что же мы написали? Интересно? ;) А я объясню :)


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


После каждого варианта ответа нужно ставить индекс варианта. Индекс варианта - это некое целое число, которое, наверное, не может превышать 255, в остальном же ваша фантазия на нумерацию неограничена. Важно помнить и всегда проверять, чтобы у одного непися не было совпадений с нумерацией choice, то есть, если непись имеет для вас несколько квестов, значение НИКОГДА не должно совпадать, иначе последствия будут непредсказуемы. Итак, мы закончили писать choice, и у нас получилось:


HMQ 004.jpg


Журнальные записи

На время прервемся от редактирования топиков и обратим свои взоры обратно на нашу журнальную запись. Близится время, когда нам понадобятся записи в журнале и поэтому мы спешим и наводим курсор на нашу запись. У меня это aa_primer.


Теперь нам нужно создать пару записей для работы.


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

Глупый Гусь! Потерял рубахи и думает, я буду ему помогать!

Ставим галочку о том, что эта запись будет окончанием нашего квеста. Теперь настало самое важное в диалогах - это индекс записи.


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


Значение Index определяет индекс нашей записи; само число, которое вы туда поставите, не имеет особой важности, но нужно, чтобы последовательность индексов была возрастающей, то есть, записи по сюжету должны идти по порядку. Я бы порекомендовал оставлять между записями расстояние в 5 или 10 цифр для неожиданных ответвлений, вариантов прохождения или на случай, если вы забудете сделать какую-нибудь запись.


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


HMQ 005.jpg


Немного теории о CS.

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


В записи, например, пишем:

Бедный крошка Гусь! У него гуары украли рубашки. Я согласился ему помочь вернуть их.

Не забываем проставить индекс записи.

Так как это так или иначе стартовая запись, поставим ей индекс 1.

Теперь у нас есть журнальные заготовки с положительной и отрицательной записью.


HMQ 006.jpg


Продолжаем работу в топиках

Теперь нам как раз впору вернуться. Идем в топики. Видя список всех тем, навивается песенка «Как много топиков хороших…» Трудно там найти наш «помочь Гусю», но поискать придется :) Находим наш топик и приступаем к работе.


Создаем новую запись, перед нашей старой. Помните, как я учил? Да, да, кликаем правой мышкой прямо по нашей первой записи и давим New.


Начинается самое интересное и самое главное в квестостроении и диалогах.

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

Итак, сейчас нам нужно просчитать написанные нами не так давно «чоисы» (choice). Начнем, пожалуй, с «чоиса» номер 2, а точнее, с того, где мы отказываем Гусю (все-таки нужно поскорее закрыть этот безальтернативный вариант).


Итак, мы имеем новую запись, в нее мы пишем разочарованную фразу Гуся на наш отказ, например:

Как обидно,  что ты решил закрыть для себя такую крутую квестовую ветку... 

Теперь нам необходимо определить условие для данного заявления, ведь Гусь не сам догадается, что и как. Не забываем всегда проставлять ID в условиях.

Теперь нам нужно определить, что данную фразу он скажет по заявлению, что мы не будем ему помогать. Обратим внимание на почти забытую нами Function/Variables, они же Функции и переменные. Что это такое? – спросите вы. На самом деле все очень просто.


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


В первое окошко мы должны проставить функцию, по которой будем вести отбор. Рассмотрим их:

  • Function – здесь собраны все важные функции о персонаже и диалоге. Как раз там хранится наш «чоисе», также там вы найдете отбор по свойствам игрока, состояние погоды и многое другое.
  • Global – здесь хранятся созданные нами и разработчиками глобальные переменные. В данном обзоре мы не будем их касаться, так как это дело больше касается скриптования. Но если в двух словах, то это такие придуманные программистами переменные, в которых может содержаться определенное число, по которому также можно строить свой отбор в диалоге
  • Local – тоже переменные, только на этот раз это переменные, которые непосредственно присутствуют в ячейке с игроком, такие как координаты игрока, время и так далее.
  • Journal – журнал. Здесь мы можем отфильтровать заявление непися по состоянию журнала. Под этой функцией мы можем выбрать любую запись из журнала и проверить ее индекс на данный момент.
  • Item – наверное, сразу ясно многим, что это не что иное, как предметы, находящиеся в распоряжении игрока (т.е. лежат в инвентаре). Здесь мы располагаем полным списком ID всех предметов из игры.
  • Dead – функция проверки на смерть, т.е. эта функция располагает полным списком неписей в игре. И по их живучести можно регулировать диалог. Если непись жив, то значение этой переменной у него равна 0, если мертв, то 1, например: Dead aa_gouse = 0 - утверждение верное и если его поставить на какую-нибудь фразу, неписи будут говорить ее только если непись с ID “aa_gouse” будет жив.
  • Not ID – тут можно поставить, чтобы эту фразу говорил кто угодно, но не обладатель указанного ID. Тут, чтобы это исполнялось, нужно поставить “=1”.
  • Not Faction – эту фразу будут говорить все, кроме персонажей указанной фракции
  • Not Class – будут говорить только не обладатели указанного класса
  • Not Race – то же самое, только с расой
  • Not Cell – будут говорить где угодно и кто угодно (но только не в указанной ячейке)
  • Not Local – все что угодно, только бы локальная переменная не была бы равна указанной цифре.


Еще не забыли о чем мы? Да, да, именно! Нас сейчас интересует «чоисе», вот и ставим: Function Choice = 2 (мы ведь помним, что отрицательный ответ у нас отмечен значением 2? ) Вот.

Теперь скажет эту фразу у нас только Гусь и только если мы ему откажем. Но нам нужно как-то обозначить это? Обратим свои взоры снова в Result (у кого перегруз, то это рамка снизу). Как вы помните, у нас есть запись в журнале, которая означает окончание квеста, нам нужно ее отписать, пишем в результате:

Journal “aa_primer” 99

Вы же помните, что на окончание квеста мы поставили индекс 99? Вот поэтому эта команда звучит так.


HMQ 007.jpg


P.S. Кстати, если на новой строчке в Result поставить Goodbye, то наш Гусь кроме всего наглым образом откажется продолжать нашу беседу.


Создание положительных ответов

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


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


Итак, мы создали реакцию на положительный ответ и написали там что-нибудь радостное, например:

Ура! Как добудешь рубашки из гуаров, принеси их мне.

По быстрому проставляем в условиях ID и Function Choice 1 (думаю понятно, почему), и в результатах быстро-быстро пишем положительную и, я не побоюсь этого слова, стартовую запись:

Journal “aa_primer” 1

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


HMQ 008.jpg


Фиксим баги

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

Такой заплатки требует и даже наш крохотный квест. Помните? Нам же дали задание. А если мы начнем говорить с Гусем, он ничего, не подозревая, начнет снова ныть и предлагать этот же квест.

Необходимо заглушить Гуся!

Срочно спешим в Greetings (Приветствия) и идем в наш «гритинг 3» (вы же еще помните, что именно там мы ведем наш приветственный диалог с Гусем).


Кликая по самой первой записи, мы создаем новое приветствие непосредственно перед начальным приветствием. Помните? У нас же есть возможность отказать Гусю в выполнении данного квеста.


Тут у нас на самом деле есть две возможности. Если бы мы не использовали 99-ую запись в журнале, а пропустили попросту без результатов отрицательный ответ, то у нас бы была возможность в случае чего как ни в чем не бывало прийти снова к Гусю и запросить квест. Но у нас есть 99-ая запись. Значит, придется ограничивать возможность повторной попытки.


Пишем, например:

Пришел посмеяться над бедным Гусем? Уйди! Я не хочу с тобой разговаривать!

В условиях проставляем ID, а также в переменных пишем следующее:

Journal aa_primer = 99

Из этого следует, что в случае нашего отказа помочь ему, теперь Гусь будет говорить нам выше написанное. И для того, чтобы исключить возможность пролазки в топик с «помощью Гусю» (на самом деле для того, чтобы лишний раз не мучаться) мы в поле Result этой фразы ставим Goodbye. Этим самым мы начисто перерезали доступ к квестодателю Гусю в случае отказа ему помогать.


HMQ 009.jpg


Приветствие на выполнение квеста

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

Теперь нам нужно написать какое-нибудь приветствие, которое будет у нас универсальным квестовым приветствием. Такое приветствие должно содержать топик, например, наш старый «помочь Гусю» или же можно завести новый. Например, напишем:

Привет %PCName! Помнишь? Ты обещал помочь Гусю. 

Проставляем ID говорящего и функции. Сейчас нам нужно проставить функцию.

Как мы помним, нам нужно создать универсальное приветствие на все времена. Сейчас у нас всего одна положительная запись, но их может быть много! Поэтому мы ставим:

Journal aa_primer >= 1 

В этом случае Гусь будет говорить нам это всегда, начиная с первой записи и дальше. Результат нам не нужен.


Теперь хотелось бы обратить внимание на важную деталь. Как мы видим, мы поставили условие на журнал >= 1, но, если поднатужить память, мы вспомним, что запись 99 совсем не положительная, но вполне подходит под данное условие. Но в нашем примере об этом не стоит беспокоиться, потому что условие на =99 идет перед этим сообщением. Следовательно, так как программа проходит сверху вниз, 99-й индекс будет вовремя перехвачен нашим отрицательным сообщением. Но если этого по какой-то причине в будущем у вас не случится в положительном сообщении, можно задействовать вторую функцию, например:

Journal aa_primer < 99

Поставив такое условие, мы намертво защитим его он нежелательных клиентов. Помните это.


HMQ 010.jpg


Возвращаемся в топики

Радоваться рано :) Еще раз придется вернуться в топики :) Идем в наш «помочь Гусю» Забегались? А думаете мне интересно все это делать да еще и описывать каждый пункт? Я, между прочим, мог бы вполне пойти выпить молока с сушками, ан нет, сижу тут вам отписываю всякие глупости, которые вы и читать то не будете :)


Ну, чего? Нашли топик? Ну, так теперь нам нужно сделать одно быстрое сообщение, где, за неимением рубашек, Гусь нас будет отсылать. Начнем.


Создаем, как и прежде сообщение, первое по списку. И пишем там, например:

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

Условием данного заявления как обычно служит ID нашего непися, а также одно условие в Функциях, а звучит оно так:

Item aa_rubaha < 2

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

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


HMQ 011.jpg


Создание уникальных гуаров

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


HMQ 012.jpg


Топики о наличии рубах у игрока

Гуары расставлены, покормлены и готовы умереть. Нам же пора закругляться :)

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

Ну как там с рубахами, минхер?

В условиях прописываем ID Гуся (надеюсь, задолбил вам в голову, наконец), а в Функциях пишем:

Item aa_rubaha = 2

Это значит, что Гусь проговорит это, если в инвентаре у нас будет две его рубахи. В "Результатах" пишем уже подзабытый, но всегда любимый нами «чоисе»:

choice «Да, сквозь пот и кровь, но я добыл тебе твоих рубахи, держи» 3

Почему индекс «чоиса» мы поставили 3? Ну, если у вас возник такой вопрос, то можете закрыть это окно и забыть о мечте делать квесты. Ведь, как я говорил немного выше, индексы «чоисов» у непися не могут быть одинаковыми, а «чоисы» 1 и 2 мы уже использовали.


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

Да принес, но я их пока поношу сам

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


HMQ 013.jpg


Заключительные топики с вознаграждением

Это наградительный и, можно сказать, заключительный пункт :)


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

Ура! Спасибо огромное, я тебя буду помнить всегда!

В условиях пишем ID Гуся, в Функциях проставляет реакцию на «чоисе»

Function Choice = 3

В результатах пишем… что пишем… много чего пишем :)

Во-первых, нужно отобрать у нас рубахи :)

player -> removeitem “aa_rubaha” 2

где 2 – количество отбираемых рубах. Потом нужно дать их Гусю (совершенно необязательно, но приветствуется):

“aa_gouse” -> additem “aa_rubaha” 2

После этого нам нужно получить какую-нибудь награду, пусть это будет 100 монет :)

 player -> additem “gold_001” 100

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

Journal “aa_primer” 5

где 5 – будущий индекс нашей записи.


Вот собственно и все… в этом пункте :)


HMQ 014.jpg


Последние топики

Уж какой пункт я пытаюсь с вами попрощаться :) Наверное, все-таки это последний рабочий пункт :)


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

Я принес Гусю рубахи, он плакал, как кот.

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

Если в вашем сюжете на Гуся больше не рассчитано квестов, как в нашем случае, не забываем ставить галочку «Конец квеста». В нашем примере это именно так, поэтому я ставлю. Вы же в ваших будущих работах можете не заканчивать журнальные записи на одном квесте, ведь бывают целые эпопеи, аля Дагот Ур :)


HMQ 015.jpg


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


И в заключение

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


Идем в приветствия, находим наш «гритинг 3», создаем очередную первую запись, где пишем:

О! Мой друг %PCName! Чего надобно?

В условиях ставим Гусиный ID, а в Функции прописываем:

Journal aa_primer = 5

Этим самым мы сделали так, что после выполнения квеста наш Гусь больше не будет намекать на помощь ему, но топик то остается! Значит, идем в топики, находим «помочь Гусю», создаем очередную первую запись и пишем там:

Спасибо, больше мне ничего от тебя не надо

с аналогичными условиями Гусю, как и в «гритингах».


Если вы делаете эпопею и на одном квесте дело не ограничивается, нужно этот пункт видоизменить, оставить старое сообщение в «гритингах», а вместо заявления Гуся, что ему ничего не нужно, выдать игроку очередной квест (конечно, с новой записью в журналах и прочим), но это уже совсем другая история :)


Информация к размышлению

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


Немного о переменных


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

  • Для этого нам нужно объявить новую переменную в меню Gameplay/Globals. Там мы увидим целый список используемых в игре переменных. Смело нажмем New и создадим свою, с оригинальным названием. После чего обратим внимание, что переменные могут быть нескольких типов:
  • Short
  • Long
  • Float
  • Short – целочисленная переменная, может быть от 0 до 255
  • Long – также целочисленная переменная, но значение в ней может иметь гораздо большее значение, и ест больше памяти.
  • Float – переменная с плавающей точкой, позволяет хранить в себе нецелые числа, такие как, например 3,52627. Обычно переменная Float используется для неточных значений, например, координат.
  • После объявления переменной в этом меню ее можно использовать где угодно в игре. Вот, например, пример скрипта, который, после того как мы его повесим на определенного персонажа, будет прибавлять нашей переменной по единице за каждый труп данной особи:
Startscript aa_trupolenya ; здесь aa_trupolenya - название скрипта
    If ( OnDead == 1)
	Set aa_trupov to aa_trupov+1 ; где aa_trupov - название переменной
    Endif
Endscript
Потом переменную aa_trupov можно будет использовать в условиях диалога у нашего персонажа. Например, вспомнив недавних Гуаров, если бы мы повесили этот скрипт на них, можно было бы поставить условие на конец квеста:
Global aa_trupov = 2
Это означало бы, что Гусь заговорил бы с нами об окончании квеста и попросил бы рубахи только после смерти обоих Гуаров. Так с помощью процедуры:
SET имя_переменной TO значение_переменной
можно давать различные значения глобальным и локальным переменным не только в скриптах, но и в окошке Result в диалогах.


Функция NoLore и Addtopic


Функция NoLore является встроенной функцией. Польза от нее очень большая. Достаточно объявить в скрипте любого непися простую фразу NoLore (кстати, для тех, кто не любит копаться в скриптах, уже готов такой скрипт, он носит одно название с нашей функцией) все стандартные топики нашего непися исчезнут в небытие. Очень полезно, сказал бы я, когда вам нужен непись и совершенно не нужны его познания в различных стандартных темах Морровинда. И у него будут появляться только топики, о которых он сам упомнит в процессе разговора.. или не только? Ведь иногда нужны некоторые темы, что делать тогда?


Для этого существует функция Addtopic. С помощью этой функции, вставленной в скрипт персонажа (только не надо всовывать эту функцию в стандартные скрипты, уже имеющиеся в игре, например тот же самый NoLore, если вам нужно и то и другое, создайте свой скрипт), вы можете добавить насильно какой-нибудь определенный стандартный топик, не затронутый непосредственно диалогом, в нашего непися.


Синтаксис звучит так:

AddTopic “название_топика”

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


ВНИМАНИЕ! На каждый топик требуется свой Addtopic.


P.S. Прошу отметить один неприятный факт. Он заключается в том, что функция NoLore была написана во времена Морровинда и не распространяется на топики аддонов (Трибунал и Блудмун). Печально, но факт.


От автора

Сразу хочу заявить, дружок, что если после изучения этого руководства ты не понял ничего в квестосоздании, то мой тебе совет: Забудь это и вернись к мирскому занятию… играй в ФунАлекс :))))


Титры:


  • Lord Alex – только настоящий флудер мог написать столько глупости в одном файле :)
  • Helmut – спасибо за замечания и предложения :)
  • Сайт – официальное местоположение данного файла :)