Пишем квест, часть 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 Метки: FO, Квестописательство Рубрики: FOnline, Пишем квесты
Комментарии (9)
Loinz - 10.05.2009
Спасибо.
Вот возник вопрос… Нафиг переменной цены значение в 500? В ходе диалога можно будет выторговать 301/321/407 ? Удобней же будет установить предел в 3, и значения 0=200, 1=300, 2=400, 3=500.
Sargonius — Май 10th, 2009, 22:32
Почему вы ещё не с нами?) Да, может быть лучше будет и правда установить предел. Но вариант с большим количеством вариантов пока тоже рассматривается, хоть и более сложно реализуем. Посмотрим, к третьей части видно будет.
Анонимно - 11.05.2009
Прошу прощения, почему, когда я открыл диалог ДлгПлеером, редактор перестал его запускать, выдавая “ошибка парсинга”? Теперь придется диалог по новой писать?
Sargonius — Май 11th, 2009, 12:55
Известный глюк, будет исправлен. Если запускать редактор непосредственно из плеера, по кнопке - может возникать ошибка парсинга. Если запустить обычный редактор, а через него уже открыть диалог - всё должно работать нормально.
Анонимно - 11.05.2009
В том то и проблема. Плеер диалогов запускает, а обычный редактор нет. Я одну переменную переименовал. Могло быть из-за этого?
Loinz — Май 11th, 2009, 15:05
Дело в том что плеер не использует информацию из файла переменных редактора… Он использует переменные из условий/результатов диалога. А ошибка возникает когда файл редактор не может найти переменные из диалога в файле переменных. Т.к. описание, мин/макс, флаги и т.п. переменных берутся именно из файла переменных.
Loinz - 11.05.2009
Ошибка парсинга скорее всего в данном случае… Короче переменных нет каких-то.
Если переименовал - надо везде переименовывать. И в файле диалога и в файле переменных.
Анонимно - 11.05.2009
В следующий раз сначала удалю из диалога.
Yevelina - 11.05.2009
Спасибо, много полезного почерпнул.