Пишем квест, часть 3

Продолжим и, может быть, закончим. Очень уж неудобно растягивать материал на несколько частей. Начнём с информации:

1) “Ошибка парсинга” преимущественно возникает из-за того, что в открываемом файле диалога есть переменные, не прописанные в редакторе переменных. Второй случай - запуск редактора диалогов из плеера диалогов.
Первый случай лечится добавлением нужных переменных в редактор. Если имя переменных неизвестно - можно открыть файл диалога текстовым редактором - в секции [dialog] описаны различные изменения, проводимые в диалоге, в том числе и переменные (смотрите по ключевому слову var). Например - “7 6010r*var p q_vc_mistrade = 1#” - из такой строчки можно узнать название переменной. Переменные добавляются в редактор \ удаляются из файла и всё начинает работать.
Второй случай - открытие редактора через плеер. Ввиду некоторых технических проблем также может возникать ошибка. Это будет исправлено, пока лучше открывать редактор отдельно. 

2) Максимальное значение переменной vc_mistrade_price пусть будет 6. Таким образом значения переменной будут равны достигнутой в результате переговоров стоимости. 0 = 200, 1 = 250, 2 = 300, 3 = 350, 4 = 400, 5 = 450, 6 = 500. Интереснейший вариант с динамическим изменением цены, в зависимости от навыков игрока, находится в обсуждении и реализуется сложнее. Возможно в игру попадёт именно он, если будет доведён до нужного состояния. В любом случае для начала нужны готовые диалоги, а они для обоих вариантов похожи.

3) Диалог с охранником, преддиалоговые установки, ответ [->10] - “Квест получен, охранник ждёт результатов”. Тут нужно сменить условие с “переменная = 1″ на “переменная больше 0 и меньше 4″, т.е. сделать два условия. Суть в том, что охранник должен ждать результатов и выдавать вариант диалога “жду” до тех пор, пока ему не доложат о результатах (завершение квеста, значение переменной = 4). После этого уже появится новая ветка и игрока будут отсылать к ней.

4) По непонятным причинам, в преддиалоговых установках, на варианте “Квест провален” стояло условие “переменная = 2″, хотя должно быть 5. Рядом добавлен вариант “Квест выполнен”, с условием “переменная = 4″. Он ссылается на тот же вариант [20], что и проваленный квест. В дальнейшем можно будет отправить игрока к другой ветке, развивающей задание дальше.

Диалоги:
Вернёмся к написанию диалогов и перейдём к мертвяку-Джузеппе, выступающему в роли связного. Его роль совершенно простая - отправить игрока непосредственно к представителю, сообщив немного информации. Информацией будет местонахождение представителя, “как правильно представиться” (в нашем случае - сказать что игрока послал Джузеппе, отсюда и столь нестандартное имя). Также есть интересный вариант - “улучшить” отношение представителя с помощью джета или алкоголя. Переговоры можно разбить на несколько этапов, между которыми можно будет предложить представителю джет или особый алкоголь. Яснее будет видно в процессе.

На втором тесте был квест на поиски склада. В ходе выполнения, игрок находил наркоманскую общину в Дене, опрашивал там наркоманов и после нескольких диалогов находил нужного. Реализовывалось это двумя диалогами и одной переменной. У обычных наркоманов можно было спросить “Где мне найти старшину?”, каждый вопрос увеличивал переменную и после нужного количества вопросов игрока наконец отсылали к старшине, у которого активировался нужный вариант диалога. С Джузеппе можно сделать что-то аналогичное. Игрок приходит в бар, видит там кучку мертвяков и начинает со всеми говорить, выясняя кто из них Джузеппе. Игрок может сразу найти нужного мертвяка.

У посетителей бара в данный момент стоит перенесённый из Ф2 - они выдают случайную реплику из нескольких на выбор. На всех посетителей распространяется один диалог, его мы и улучшим.

geck_bar_visitor.fodlg
[1][->2]Ответ
[2]Купи нам выпить, гладкокожий.@@Боже, как я хочу пить.@@Слишком крутой, чтобы пить с нами?@@Мне встряхнуть, но не перемешивать.@@Попросите Вуза рассказать вам историю.@@Давайте споем.@@…А затем головы сделали что? Я просто не могу понять Вуза.@@Что такое яблоко?

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

[2][->10]Джузеппе?@@Вы, случаем, не Джузеппе?@@Меня прислал Сид…@@Джузеппе, это ты? Время тебя не пощадило.@@Я ищу Джузеппе, вы его не видели? 
[10]Понятия не имею о чём вы.@@Иди куда шел, гладкокожий.@@Ничего не знаю.@@Купи мне выпить, а?

Номер 10 выбран по техническим причинам. Под третим номером сейчас идут реплики для персонажа с хорошей репутацией в Гекко. А между ними могут появиться прочие реплики, нужные для других заданий или чего-то ещё. На ответ игрока нужно повесить условие - q_vc_mistrade = 1 - квест взят, но посредник не встречен. При всех прочих условиях, мертвяки в баре будут просто выдавать стандартные реплики, не открывая диалоговое окно. Через @@ обозначаются возможные варианты, выбираемые случайно.

В диалоге Джузеппе добавим те же варианты, что и обычным мертвякам. Также изменим описание на вкладке “Инфо”, убрав оттуда имя и заменив всю информацию на стандартную для мертвяков. Тем самым Джузеппе не будет выделяться из общей толпы посетителей.

geck_guiseppe.fodlg
[1][->2]Ответ
[->11]Игрок знаком с посредником, но не закончил переговоры.
[2]Купи нам выпить, гладкокожий.@@Боже, как я хочу пить.@@Слишком крутой, чтобы пить с нами?@@Мне встряхнуть, но не перемешивать.@@Попросите Вуза рассказать вам историю.@@Давайте споем.@@…А затем головы сделали что? Я просто не могу понять Вуза.@@Что такое яблоко?
[2][->10]Джузеппе?@@Вы, случаем, не Джузеппе?@@Меня прислал Сид…@@Джузеппе, это ты? Время тебя не пощадило.@@Я ищу Джузеппе, вы его не видели?

[10]Да, да, я тебя ждал, мне уже сообщили. Что ты знаешь о деле?
[->12]Практически ничего.

[11]Что тебе нужно узнать?
[->12]Общую информацию.
[->13]Где мне найти этого представителя?
[->14]Кто он такой? Откуда? О каком товаре речь?
[->15]Есть что-то ещё, что мне нужно знать о посреднике?
[->20]Ничего, всё ясно.

[12]Кратко - у нас, в Гекко, находится представитель одной влиятельной организации, заинтересованной в покупке товара. Твоя роль - успешно провести переговоры и договориться о хорошей цене. 300 монет - нормальная цена. Выше - лучше. Вопросы?
[->13]Где мне найти этого представителя?
[->14]Кто он такой? Откуда? О каком товаре речь?
[->15]Есть что-то ещё, что мне нужно знать о посреднике?
[->20]Всё ясно.

[13]Он поселился в каком-то складском здании на северо-западе. Не знаю что он там забыл, у нас тут такие добрые мертвяки, многие согласились бы выделить кровать хорошему человеку. [На секунду он задумался]. Хотя может в этом и причина.
[->11]У меня ещё вопрос.
[->20]Всё ясно.

[14]Что-то я не знаю, что-то тебе знать не стоит.  Он прибыл с юга, возможно и НКР. Интересовался товаром, а я уже связался с Сидом, который данный товар может предоставить. Что за товар - не имеет никакого значения. Считай что речь о песке из пустоши.
[->11]У меня ещё вопрос.
[->20]Песок, как же. Всё ясно.

[15]Вчера он выпил три бутылки гамма-глотка в баре. И интересовался где можно достать джет. Распоряжайся этой информацией как считаешь нужным.
[->11]У меня ещё вопрос.
[->20]Гамма-глоток и джет, я запомню.

[20]Удачи тебе, гладкокожий. 

 Из условий - ничего сложного. На вариант [10][->12] ставим результат - изменение переменной на 2 - “встречен посредник”. На преддиалоговые, ответ [->11] - условие, переменная = 2. Когда переменная изменится (после переговоров), будет запускаться обычный диалог [2], без варианта ответов, т.к. прочим вариантам не будет соответствовать переменная. Также на ответ [2][->10] нужно поставить условие “переменная = 1″, чтобы вариант ответа появился при наличии квеста и не появлялся в иных случаях.

В ходе проверки через плеер, вспыла небольшая проблема - вариант [1][->11] нужно переместить наверх (стрелка справа в редакторе), чтобы он обрабатывался раньше. Если условие не будет выполнено - осуществится переход к следующему варианту ответа, а от него к нужной реплике нпц.

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

Рабочие файлы.

17.05.2009  Метки: ,   Рубрики: FOnline, Пишем квесты

Комментарии (3)

  1. Loinz - 17.05.2009

    Спасибо за статью. Жду заключительную часть.

  2. Loinz - 16.06.2009

    Продолжение, оно же 4я часть, будет?
    //Хотя если никто кроме меня интереса не проявляет, то можешь не спешить О_о

    Sargonius

    Несколько занят лечением и “железными” проблемами, продолжение (оно же и окончание) даже начато, но пишется очень плохо и медленно. Но будет, рано или поздно :)