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

Прежде чем продолжить, пройдусь по интересным моментам:

1) Первая часть дополнена информацией про приставку q_ в названии переменной. Если переменная квестовая и будет отображаться в пип-бое, на вкладке с заданиями - ставим q_ и галочку “квестовая” в редакторе. Если переменную не нужно отображать в пип-бое - отключаем “квестовая” и убираем q_ из названия. Решающую роль здесь играет как раз значение квестовая или нет, приставка q_  является просто установленным форматом.

2) В публичном доступе появился удобный и невероятно полезный проигрыватель для диалогов. Незаменимая вещь для проверки и отладки. Учитывает переменные, наглядно показывает изменения разных значений. Приобщаемся и осваиваем.

3) Akkella выложил на форум “генератор квестов” - любопытную систему, посредством которой можно получать завязки для заданий.  Как минимум ознакомиться не помешает.

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

Завершаем подготовку:
Нам нужно три диалога и две переменных. В каждом диалоге у нпц должно быть имя и описание. Заготовки для диалога со стражником у клетки нет - даже в Ф2 он говорил буквально пару фраз, потому для него мы сделаем свой диалог. Бармен в Гекко на данный момент уже имеет обширный диалог, потому для посредника также можно сделать отдельный файл, который будет назначен одному из мертвяков в баре. “Представитель” - новый нпц, диалог к нему тоже требует создания с нуля.
В первой части описывалась последовательность действий для задания - именно на её основании можно создать основную переменную: 

8851 - q_vc_mistrade (квестовая, локальная, макс. значение 5)
0 - квест не взят
1 - квест получен
2 - встречен посредник
3 - переговоры завершились
4 - квест сдан
5 - квест провален 

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

Сразу же добавим вторую переменную:

8852 - vc_mistrade_price  (локальная, макс. значение 500)

Переменная для определения стоимости товара, достигнутой в ходе диалога. 

Далее создаются диалоговые файлы. Можно взять за основу любой файл из поставки редактора, вычистить его и откопировать под нужным именем. Можно и создать просто так. Основная “трудность” тут - деревья. Их нужно создать до сохранения файла, по заданному формату, иначе опять будут ошибки. Основное дерево должно называться russ, второе engl. 4 буквы в названии и никак иначе. После этого файл можно сохранить.
Формат названия для файлов - город_нпц.fodlg. Потому перед сохранением хорошо бы иметь ещё и имена нпц. Нужного нам стражника будут звать Сид. Мертвяка в Гекко - Джузеппе (из практических соображений), а представителя организации - Гилберт. В файлы диалогов прописываем нужные имена (вкладка “Инфо”) и сохраняем. По странным причинам, диалоги Города-Убежища имеют префикс vaul_, вместо очевиднейшего vc_ - не будем нарушать формат. Гекко - geck_. 

Диалоги:
Работать над диалогами удобнее поэтапно, с логически завершёнными отрезками. Из опыта - пять отрезков делаются в десять раз быстрее, чем всё одним большим куском, с охватом всех вариантов сразу. Первым отрезком будет диалог стражника в Городе-убежище. 
В результате небольшого разговора он предложит игроку немного заработать, а после станет ждать результатов и мы про него временно забудем.

Первая строчка редактора, под номером [1], является преддиалоговыми установками. Через неё будут осуществляться проверки на значение переменной. С пункта [2] начнутся реплики нпц. Они прописываются сначала. Далее к ним добавляются ответы игрока, а на ответы уже вешаются нужные условия и результаты. Ссылаться из ответа на несуществующую реплику нельзя, потому сначала стоит писать реплики. Впрочем, неточности и проблемы с переходами легко находятся посредством проигрывателя диалогов.

[2][Охранник бросил на вас презрительный взгляд] Отойди от клетки, если не хочешь посидеть в ней пару дней.
    [->3] А кто в ней? Рабы?
    [Выход][Отойти]
[3]В Городе-Убежище запрещено рабство. А в клетке - слишком любопытные бродяги, вроде тебя. 
    [->4]Ясно, тогда я пойду.
[4]Эй, да ладно, не спеши. В клетку попадают только преступники. Для бродяг у нас есть вещи и поинтереснее.
    [Выход]Не хочу даже представлять что это за вещи.
    [->5]Надеюсь, за них хорошо платят?
[5]Ты не разочаруешься. Ситуация следующая - мы с друзьями занимаемся… торговлей. В Гекко остановился человек, заинтересованный в нашем товаре, но у нас есть небольшие несхождения в цене. Договоришься о выгодных условиях - мы тебе заплатим. Не договоришься - заплатим следующему бродяге. Идёт?
    [->6]А чем вы торгуете?
    [->7]Идёт.
    [->20]Ищите другого “бродягу”.
[6]Песком из пустоши, смешанным с любопытными бродягами. Ещё вопросы?
    [->7]Никаких, давайте к делу.
    [->20]Торгуйте дальше, но без меня.
[7]Отлично. В Гекко, в “Арфе”, найдёшь мертвяка Джузеппе. Не смейся, он объяснит тебе всё остальное. Наш товар не должен продаваться меньше, чем за 300 монет. И постарайся не грубить посреднику, это в твоих же интересах.
    [Выход]Считайте товар проданным.
    [->8]Что-нибудь ещё?
[8]Да. Хватит трепаться.
[10]Как успехи, бродяга?
    [Выход]Пока без результатов.
[20]Не стой рядом с клеткой, если не хочешь в ней оказаться. 

Как-то так. Пока без разных дополнительных вариантов, проверок на навыки и других наворотов. После варианта 8 идёт 10 - для логического разделения частей. Вариант 20 - общий ответ стражника, в случае провала квеста, например, к нему может быть несколько ссылок. Реплики нпц без вариантов ответа будут просто показываться над их головами, не вызывая окна с диалогом.

Вернёмся к [1] Преддиалоговым установкам и добавим туда три ответа. Первый будет отправлять на вариант [2], второй на [10], а третий на [20]. Далее к этим вариантам добавим условия. Условием будет значение квестовой переменной q_vc_mistrade. При значении = 0 будет переход к реплике [2]. При значении 1 - к реплике [10], а при значении 5 (на будущее) - к реплике [20].

В завершении, изменим квестовую переменную при взятии квеста. Для этого на вариант ответа [5][->7] и [6][->7] мы добавим результаты, присваивающие переменной q_vc_mistrade значение 1. Менять переменные, выдавать награды и забирать предметы нужно на самом раннем диалоге. Ничто не мешает повесить смену переменной, например, на последний ответ игрока, но если диалог закрыть по середине - изменений не будет и могут появляться дополнительные глюки.

После установки переменных, вернёмся к преддиалоговым установкам. В самом начале наша переменная равна 0 (если не ошибаюсь, за это отвечает “стартовое значение” в редакторе переменных). После правильного диалога она меняется на 1 и при следующем разговоре с нпц будет переход к реплике [10].

Теперь можно проверить диалог через проигрыватель. Если, как я, забыли указать максимальное значение для переменной - в процессе вылетит ошибка, сообщающая о том, что переменная не может быть больше нуля. Для квестовой пока можно поставить 5, для цены - 500.
В остальном всё должно работать хорошо. Переменная меняется, квест активируется, новый диалог начинается с десятой реплики, продолжение следует.

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

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

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

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

  1. Loinz - 10.05.2009

    Спасибо.
    Вот возник вопрос… Нафиг переменной цены значение в 500? В ходе диалога можно будет выторговать 301/321/407 ? Удобней же будет установить предел в 3, и значения 0=200, 1=300, 2=400, 3=500.

    Sargonius

    Почему вы ещё не с нами?) Да, может быть лучше будет и правда установить предел. Но вариант с большим количеством вариантов пока тоже рассматривается, хоть и более сложно реализуем. Посмотрим, к третьей части видно будет.

  2. Анонимно - 11.05.2009

    Прошу прощения, почему, когда я открыл диалог ДлгПлеером, редактор перестал его запускать, выдавая “ошибка парсинга”? Теперь придется диалог по новой писать?

    Sargonius

    Известный глюк, будет исправлен. Если запускать редактор непосредственно из плеера, по кнопке - может возникать ошибка парсинга. Если запустить обычный редактор, а через него уже открыть диалог - всё должно работать нормально.

  3. Анонимно - 11.05.2009

    В том то и проблема. Плеер диалогов запускает, а обычный редактор нет. Я одну переменную переименовал. Могло быть из-за этого?

    Loinz

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

  4. Loinz - 11.05.2009

    Ошибка парсинга скорее всего в данном случае… Короче переменных нет каких-то.
    Если переименовал - надо везде переименовывать. И в файле диалога и в файле переменных.

  5. Анонимно - 11.05.2009

    В следующий раз сначала удалю из диалога.

  6. Yevelina - 11.05.2009

    Спасибо, много полезного почерпнул.