fan site Arcanum

Устав
Городская газета
Архив новостей
Форум
IRC канал города (чат)
mIRC настройка на канал
Зал славы
Наши люди
Библиотека
Мир
Боги
Расы
Звери
Игра
Прохождение
FAQ по игре
Редактор
Технология
Схемы
Магия
Битва
Характер
Персонаж
Навык
Опыт
Квесты
Мультиплеер
Галерея
Скриншоты
Картинки
Файлы
Обои
Музыка
Видео
Патчи
Ссылки
Юмор

Как создать Quest в Arcanum'е
Простое пособие от Jesse I. Beall
Version 1.0

1. Определение квеста
Квест определяется в двух файлах: /mes/gamquestlog.mes и /rules/gamequest.mes. Посмотрим на каждый файл.
/mes/gamequestlog.mes: Этот файл содержит текст, который будет добавлен в секцию Quests в Вашем журнале сразу после того, как Вы о нем узнаете. Тот же текст будет использован в случае принятия, выполнения и провала.
В нашем примере, файл /mes/gamequestlog.mes содержит следующее:

{1000}{Mercutio сказал мне поубивать всякую гадость в его погребке.}

Как Вы видите, мы убьем кучку существ в нашем квесте.

/rules/gamequest.mes: Информация содержащаяся здесь определяет сложность, изменение кармы, и входные точки диалога, который управляет квестом.

В нашем примере, /rules/gamequest.mes содержит:

{1000}{2 0 6 7 8 8 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1}

Проанализируем эти цифры в табличке:

Номер Квеста

Сложность
Изменение кармы
Первая группа Обычный диалог
Вторая группа Плохая реакция
Третья группа Тупой PC диалог
{1000}
{
2 06788-1-1-1 -1-1-1-1-1 -1-1-1-1-1-1-1 -1-1}

Номер квеста: Номер, по которому квест будет опознаваться, который должен совпадать с номером в /mes/gamequestlog.mes. Также Мы будем использовать этот номер для определения квеста в диалогах и скриптах.

Сложность квеста: Это число от 1 до 20, где 1 самый легкий и 20 тяжелый. Количество опыта для PC при выполнении зависит от этого числа.

Изменение кармы: Изменение кармы PC после прохождения. Может быть 0 (без изменений), положительное число (станешь хорошим), или отрицательное (станешь плохим).

Первая, вторая и третья группы: Эти числа показывают входные строки диалога для различных стадий квеста в трех различных состояниях (нормально, плохая реакция и тупой персонаж PC). Квест может находиться в 7 состояниях:

Первая группа Нормальный диалог
Неизвестно(0)
Известно (1)
Принято (2)
Выполняемый (3)
Выполнен (4)
Другое (5)
Завален (6)
6
7
8
8
-1
-1
-1
"Работа есть?"
Я подумаю об этом"
"Я их перебью"
"Я их перебью"
No Dialog
No Dialog
No Dialog

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

2. Определение глобальных переменных
Мы используем глобальные переменные, чтобы следить, сколько чудищ PC загубил. Глобальные переменные определяются в /semes/globalvars.mes. В нашем примере файл содержит:

{0}{Number of critters in Mercutio's cellar that the PC has killed.}

Мы будем использовать переменную по числу {0}. Остальное лишь описание, помогающее нам помнить, для чего переменная.

Вроде переменные инициализируются нулем 0 (zero). В документации, которая сейчас доступна не говорится об этом, но мы можем ее инициализировать сами.

3. Создание скриптов
В пособии будем использовать 2 скрипта: 00002Mercutio.scr и 00003MercutioQuest.scr. Первый будет связан с диалогом, а второй будет следить за убиванием чудищ и будет предельно прост. Посмотрим на первый.
/scr/00003MercutioQuest.scr: Скрипт будет добавлять 1 к Global Var 0 каждый раз как чудище в Mercutio's cellar убито.Содержание:


Name: Mercutio's Quest
Flags: None
Lines: 2

0. Global Variable 0 = Global Variable 0 + 1
1. return and RUN default

Создаем этот скрипт по шагам:
1. Запускаем Script Maker.
2. Из Меню выбираем File->Properties.
3. Набираем Mercutio's Quest в Description. Нажимаем OK.
4. Из Меню выбираем Line->Action.
5. Из списка выбираем (num) = (num) + (num). Нажимаем OK.
6. Из списка выбираем Global Variable. Набираем 0. Нажимаем OK.
7. Из списка выбираем Global Variable. Набираем 0. Нажимаем OK.
8. Набираем 1. Нажимаем OK.
9. Из меню Line->Action.
10. Из списка выбираем return and RUN default.
11. Из меню File->Save и записываем как 00003MercutioQuest.scr в /scr директорию Вашего модуля.

Этот скрипт, как увидим позже, присоединяется к каждому чудищу в точку присоединения Dying. Каждый раз, как один из чудищ в Mercutio's cellar будет убит, этот скрипт будет запущен и увеличит Global Variable 0 на 1.

/scr/0002Mercutio.scr: Этот скрипт будет управлять диалогом с Mercutio. Кроме того что Mercutio дает нам, он также будет продавцом, и мы сможем с ним поторговать. Скрипт будет также проверять, убили ли мы обоих чудищ и награждать нас соответственно. Давайте посмотрим на скрипт:
Name: Mercutio's Script
Flags: None
Lines: 9


0. IF npc Attachee has met pc Triggerer before THEN dialog 60 ELSE dialog 1
1. goto line 8
2. IF Global Variable 0 == 2 THEN goto line 4 ELSE dialog 50
3. goto line 8
4. set PC Triggerer quest 1000 to state 4
5. gold of Triggerer: adjust by 100
6. reaction of npc Attachee to pc Triggerer: adjust by 10
7. dialog 40
8. return and SKIP default


Чтобы понять скрипт лучше, посмотрим на /dlg/0002Mercutio.dlg , который рассматривается ниже. Дайте мне обьяснить каждую строку скрипта отдельно:

0. IF npc Attachee has met pc Triggerer before THEN dialog 60 ELSE dialog 1
Первая строка проверяет, говорили ли вы с Mercutio (npc) раньше. Если да, то диалог начинается на строке 60 (It is good to see you again. What can I do for you?). Иначе, если это первый раз, то со строки 1 (Greetings traveler! I am Mercutio. What can I do for you?), где Mercutio представляется.

1. goto line 8
Когда диалог возвращает управление в скрипт, оно перейдет на строку, которую вызовет диалог. Поэтому, мы перейдем на последнюю строку, где скрипт заканчивается.

2. IF Global Variable 0 == 2 THEN goto line 4 ELSE dialog 50
Эта строчка скрипта вызывается из диалога когда PC говорит Mercutio , что всех поубивал (I've gotten rid of those critters in your cellar.). Скрипт проверяет Global Variable 0 , чтобы увидеть оба ли чудища мертвы. Если ДА, то скрипт переходит на строку 4, в противном случае - возвращает управление в диалог в строку 50 (I think there are still some critters left. Go back down and make sure you got them all.).

3. goto line 8
То же что и строка 1.

4. set PC Triggerer quest 1000 to state 4
Когда квест пройден, ставим состояние квеста в Пройден (4).

5. gold of Triggerer: adjust by 100
Даем PC 100 золота. Если число отрицательное, то золото заберется у PC.

6. reaction of npc Attachee to PC Triggerer: adjust by 10
Так как PC помог Mercutio с чудищами, мы увеличиваем отношение Mercutio к PC на 10. Если число отрицательное, то отношение станет хуже.

7. dialog 40
Возвращаем управление в диалок на 40ю строку (Thank you! Here are the coins I owe you.) где Mercutio благодарит PC.

8. return and SKIP default
Возвращаем управление игре и говорим не делать действие по умолчанию для диалога с npc (в случае если скрипт присоединен к точке присоединения Mercutio, Dialog).

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


4. Создание диалога
Теперь посмотрим на /dlg/0002Mercutio.dlg который содержит диалог, дающий квест и позволяющий торговать с Mercutio. Вот как это выглядит:


{1}{Greetings traveler! I am Mercutio. What can I do for you?}{Greetings traveler! I am Mercutio. What can I do for you?}{}{}{}{}
{2}{Q:1000}{}{1}{}{}{}
{3}{B:}{}{1}{}{}{}
{4}{Nothing right now.}{}{1}{}{0}{}
{5}{The following are quest responses.}{}{}{}{}{}
{6}{Do you have any jobs for me?}{}{1}{}{10}{qu 1000 1}
{7}{I've been thinking about that job you mentioned.}{}{1}{}{20}{}
{8}{I've gotten rid of those critters in your cellar.}{}{1}{}{-2}{}
{10}{Yes, I do. I've been having some problems with critters in my basement. I'll give you 100 coins if you get rid of them.}{Yes, I do. I've been having some problems with critters in my basement. I'll give you 100 coins if you get rid of them.}{}{}{}{}
{11}{I'll do it.}{}{1}{}{30}{qu 1000 2}
{12}{I'll think about it.}{}{1}{}{0}{}
{20}{Have you decided to take up the job?}{Have you decided to take up the job?}{}{}{}{}
{21}{Yes.}{}{1}{}{30}{qu 1000 2}
{22}{I have to think about it some more.}{}{1}{}{0}{}
{30}{Excellent! Let me know when you've gotten rid of them.}{Excellent! Let me know when you've gotten rid of them.}{}{}{}{}
{31}{Okay.}{}{1}{}{0}{}
{40}{Thank you! Here are the coins I owe you.}{Thank you! Here are the coins I owe you.}{}{}{}{}
{41}{E:}{}{1}{}{0}{}
{50}{I think there are still some critters left. Go back down and make sure you got them all.}{I think there are still some critters left. Go back down and make sure you got them all.}{}{}{}{}
{51}{Okay.}{}{1}{}{0}{}
{60}{It is good to see you again. What can I do for you?}{It is good to see you again. What can I do for you?}{}{}{}{}
{61}{Q:1000}{}{1}{}{}{}
{62}{B:}{}{1}{}{}{}
{63}{Nothing right now.}{}{1}{}{0}{}
Хорошо, чуть сложновато. Прочтите Eventscripts.doc для большей информации по параметрам. Давайте разберем и проанализируем:
{1}{Greetings traveler! I am Mercutio. What can I do for you?}{Greetings traveler! I am Mercutio. What can I do for you?}{}{}{}{}
{2}{Q:1000}{}{1}{}{}{}
{3}{B:}{}{1}{}{}{}
{4}{Nothing right now.}{}{1}{}{0}{}


Строка {1} сказана Mercutio когда он первый раз говорит с PC. Как вы помните, мы отметили это в скрипте.
Строка {2} - сгенерированный диалог . Эта строка заменится на соответствующую из /rules/gamequest.mes. Мы посмотрим на этот текст.
Строка {3} - также сгенерированный диалог. Посмотрите в GeneratedDialog.doc для большей информации. Если PC выберет эту строку, то появится окошко торговли.
Строка {4} Выход из диалога и возвращение управления скрипту.
{5}{The following are quest responses.}{}{}{}{}{}
{6}{Do you have any jobs for me?}{}{1}{}{10}{qu 1000 1}
{7}{I've been thinking about that job you mentioned.}{}{1}{}{20}{}
{8}{I've gotten rid of those critters in your cellar.}{}{1}{}{-2}{}
Чтобы понять это, посмотрите на табличку, рассмотренную ранее.

В этой точке диалога, состояние quest 1000 - 0 значит это первый разговор Mercutio и PC. Поэтому строка {2} заменится на {6}, давая PC опцию в диалоге спросить про работу. Когда PC выберет это, состояние quest 1000 установится на 1 (Известно) и пропустит управление в строку диалога {10}.
Строка {7} будет показана, если состояние quest 1000 - 1 (Известно). Если PC выберет ее, то управление перейдет на строку {20}.
Строка {8} показывается сразу для двух состоянийquest 1000- для 2 и 3. Если PC выбирает ее, то управление передается в скрипт на строку 2, где Global Variable 0 проверяется на равенство с 2. Если да, то управление перейдет сразу на строку диалога {40}(Thank you! Here are the coins I owe you.). В противном случае, на {50}(I think there are still some critters left. Go back down and make sure you got them all.).
Строка {5}, это то, о чем я не очень уверен. Эта строка должна быть, чтобы не дать стокам {6}, {7} и {8} появиться как опции диалога в первом разговоре с Mercutio. Эта строка не имеет никаких параметров ({}{}{}{}{}), и я догадываюсь, что компилятор не дает ее как опцию в диалоге и останавливает чтение диалога здесь.
{10}{Yes, I do. I've been having some problems with critters in my basement. I'll give you 100 coins if you get rid of them.}{Yes, I do. I've been having some problems with critters in my basement. I'll give you 100 coins if you get rid of them.}{}{}{}{}
{11}{I'll do it.}{}{1}{}{30}{qu 1000 2}
{12}{I'll think about it.}{}{1}{}{0}{}
Когда игрок спрашивает Mercutio есть ли работа, управление попадает на строку {10}, где Mercutio описывает свое горе с чудищами в погребке. PC получает опцию {11} принять квест. Если да, состояние quest 1000 ставится 2 (Принято) и управление передается на строку {30}. Если PC выберет {12}, управление вернется в скрипт и диалог кончится, оставляя квест quest 1000 как 1 (Известный).
{20}{Have you decided to take up the job?}{Have you decided to take up the job?}{}{}{}{}
{21}{Yes.}{}{1}{}{30}{qu 1000 2}
{22}{I have to think about it some more.}{}{1}{}{0}{}
В строке {20}, Mercutio спрашивает игрока, согласен ли он теперь выполнить квест, если PC прежде сказал, что подумает (line {12}).
PC берет квест выбирая строку {21} и состояние quest 1000 ставится в 2 (Принят). Управление переходит на строчку диалога {30}.
В строке {22}, PC может сказать Mercutio все еще думает. Диалог заканчивается и управление переходит в скрипт.
{30}{Excellent! Let me know when you've gotten rid of them.}{Excellent! Let me know when you've gotten rid of them.}{}{}{}{}
{31}{Okay.}{}{1}{}{0}{}
Mercutio говорит строку {30}, после того как PC берет квест в строке {11}. Единственный ответ в строке {31} заканчивает диалог и возвращает управление в скрипт.
{40}{Thank you! Here are the coins I owe you.}{Thank you! Here are the coins I owe you.}{}{}{}{}
{41}{E:}{}{1}{}{0}{}
Если посмотрите на строку 7 скрипта (не диалога), то увидите, что управление в ней переходит в диалог (строку {40}), как только квест будет успешно проверен на готовность.
Строка {41} - сгенерированный диалог. Проверьте GeneratedDialog.doc для более полной информации. Подходящая строка ухода будет подставлена сюда, что закончит диалог и вернет управление в скрипт.
{50}{I think there are still some critters left. Go back down and make sure you got them all.}{I think there are still some critters left. Go back down and make sure you got them all.}{}{}{}{}
{51}{Okay.}{}{1}{}{0}{}
Если проверка провалилась, то управление переходит в диалог (строка {50}). Mercutio скажет что еще кто-то остался.
Строка {51} заканчивает диалог и передает управление в скрипт.
{60}{It is good to see you again. What can I do for you?}{It is good to see you again. What can I do for you?}{}{}{}{}
{61}{Q:1000}{}{1}{}{}{}
{62}{B:}{}{1}{}{}{}
{63}{Nothing right now.}{}{1}{}{0}{}
Последний блок диалога управляет разговором, если Mercutio и PC уже разговаривали. Это проверяется строкой скрипта 0. Если PC говорил с Mercutio раньше, то скрипт отдает управление в диалог (строка {60}).
Строка {61} - сгенерированный диалог. Она будет заменена на строку {6} (Do you have any jobs for me?), строку {7} (I've been thinking about that job you mentioned.), или {8} (I've gotten rid of those critters in your cellar.). Это зависит от состояния квеста (посмотрите на табличку выше).
Строка {62} - сгенерированный диалог.
Строка {63} - выходит из диалога и отдает управление в скрипт.
Ну, это все про диалог. Нет так и сложно, правда?

5. WorldEd
Думаю, что многие из вас уже довольно хорошо управляются с WorldEd. Не буду погружаться в детали рисования карт. Просто покажу по шагам как сделать Mercutio, его инвентарь, чудищ и присоединить к ним скрипты. Поехали:
1. Откройте домашнюю карту.
2. Создайте мужчину-продавца (male human shopkeeper). Оденьте его. Он будет Mercutio.
3. Создайте контейнер (ну сундук, например). Нажмите правую кнопку на нем и выберете Edit. Из списка Inventory Source, выбирайте Smith (Quality) или любой другой. Жмите OK , чтобы закрыть диалог.
4. Правый click на сундуке снова, выберете Remember for Substitute.
5. Правый click на Mercutio, выберете Set Substitute Inventory.
6. Правый click на Mercutio еще раз и выбирайте Edit. Click на Scripts. Выбор точки присоединения Dialog. Тип 2 в Script окошке. Жмите OK , чтобы закрыть Script Attachment диалог. Жмите OK , чтобы закрыть и NPC диалог.
7. Сохраните домашнюю карту.
8. Откройте карту погреба.
9. Создайте двух крыс.
10. Правый click на одной из крыс, выбирайте Edit. Click на Scripts. Выбор точки присоединения Dying. Тип 3 в Script окошке. Жмите OK , чтобы закрыть Script Attachment диалог. Жмите OK , чтобы закрыть и NPC диалог.
11. Повторите предыдущий шаг с другой крысой
12. Запишите карту погреба.
13. Откомпилируйте.

6. Запускаем модуль
Ну, если я все правильно рассказал и вы следовали за мной правильно (прим. переводчика И я правильно перевел ;) ) , то вы сможете пройтись к Mercutio, начать разговор с ним, поговорить о торговле или квесте. Проверьте все опции диалога. Вы можете убить чудищ, перед тем как говорить с Mercutio.
Ваш журнал обновится при изменении состояния квеста на Известный, принятый или Выполненный. Провалить этот квест нельзя. Разве что вас убьют крысы.

7. Контактная информация
Если имеете какие-то предложения, поправки, критику или просто спасибо, то пишите на gix@sulanet.com. Меня также можно найти на Vault Network . Мое прозвище DeviantBoi.

8. История создания
August 31, 2001: Version 1.0. Первый постинг этого пособия.
( Прим. Переводчика : Если будете писать автору - пишите на аглицком языке.)
Перевод : 1 сентября 2001 г.