Автором этого туториала является Povuholo, последняя модификация 2006-12-17 07:00:50.
Добро пожаловать в туториал Povuholoпо созданию квестов. Это я Я знаю насколько сложным выглядит ConstructionSet, особенно система квестов. Когда Обливион был выпущен и я посмотрел на эту систему, я не имел представления, что делать. Но после прочтения туториала (в котором между прочим были ошибки :P ) я постепенно начал ее понимать. На первых этапах я держал открытой страницу туториала, поэтому я мог сверять, что я делал правильно, но неожиданно я просто понял как это делается.
Как бы то ни было, это не история обо мне, а туториал по созданию квеста. Вот то, что мы будем делать с помощью этого туториала:
Добавление диалогов NPC(NonPlayableCharacter (не играемый персонаж), все кроме вас в Обливионе)
Создание обновлений журнала путем собирания предметов или разговоров с NPC.
Получение предмета (ключа) от NPC, чтобы вы могли найти предмет, который он потерял.
Получение награды от NPC, за возвращение ему предмета.
Добавление квестовых маркеров, чтобы игрок знал, куда ему нужно направляться.
Перед тем, как мы начнем, я хочу быть уверенным что вы знаете несколько базовых вещей, которые я не буду объяснять в этом руководстве:
Вы должны уметь создавать новых NPCи новые предметы изменяя их ID.
Вы должны уметь размещать этих NPCи предметы в ячейках.
Вы должны уметь создавать новый контейнер (сундук) и размещать предметы в нем.
Вы должны уметь читать по-английски (читающие данный перевод этот пункт могут опустить J)
И совет перед началом: СОХРАНЯЙТЕСЬ ЧАСТО. СonstructionSetчасто вылетает, когда вы делаете что-то неправильно или даже когда вы делаете что-то правильно! Поэтому сохраняйтесь почаще!
Создание NPCкоторый дает квест
Хорошо, начнем с создания предметов, которые нам понадобятся. Добавляем нового NPCв ячейку. Убедитесь, чтосделалиновый ОРИГИНАЛЬНЫЙ и УНИКАЛЬНЫЙ ID.
Так неправильно:
NPC1
MyNPC
Quest
А так правильно:
povtutAlex1 (povозначает Povuholo, то есть меня. Помещайте это перед всеми вашими ID чтобы сделать их уникальными, это также позволит легче находить их в списке объектов. Tut означает Tutorial, этоназваниемоегомода. Поэтому мои IDвсегда выглядят так: мое имя+имя моего мода+мой объект, или мое имя+ имя моего мода+имя владельца предмета+мой объект.
Конечно это всего лишь моя точка зрения как делать ID, вы можете делать собственные ID. Главное убедитесь, что они уникальны, ведь мы не хотим, чтобы кто-нибудь использовал тот же ID для своего квеста, что может привести к неработоспособности обоих модов.
Теперь добавьте нового NPC (я своего назвал Alex) в ячейку. Например в торговый район Имперского города. Двойной клик на него, отметьте окошко persistentreference (если возможно) и сделайте новую referenceID. У меня - povtutAlexref2.
Добавление необходимых для квеста предметов
Перейдите в ObjectWindow (окно объектов) и найдите закладку key(ключ). Создайте новый ключ с новым ID… ID моего ключа povtutalexkey1. Сейчас выберите, какой предмет потерял Alex. Возможносвоюжелезнуюброню? Идите в закладку armor (броня) и возьмите ironarmor (железную броню), измените ее имя на Alex'sironarmorи измените ее ID. МойID - povtutalexarmor1. Вы также можете отметить окошко QuestItem, тогда игрок не сможет выбросить этот предмет.
Сейчас добавьте новый контейнер, например, сундук (chest). Вы можете изменить его имя, но если его название всегда будет Сундук, вам будет легче запомнить его. Или вы можете изменить его на Alex'schest(Сундук Алекса), это уже как пожелаете. МойID - povtutAlexchest1. Теперь поместите ironarmor(железную броню) в сундук, и перейдите в закладку lock (замок) сундука. Измените lockна "needsakey", и выберите ключ, который вы перед этим создали (теперь сундук можно будет открыть только этим ключом). Теперь разместите сундук в пещере или в любом другом месте, где пожелаете. Затем кликните на сундуке выберите окошко 'persistentreference' и добавьте ссылку ID. У меня - povtutarmorchestref
Общая информация о квесте (Quest data)
Фуф... Это был этап создания предметов. Сейчас мы переходим к той части, которая находится по важности на первом месте для нас, это непосредственно сам квест! Нажмите на кнопку Qв меню вверху слева, чтобы открыть окно квестов (или в меню выберите Character > Quests…). С левой стороны вы можете найти все квесты, вы также можете просмотреть некоторые, чтобы ознакомится с тем, как они работают. Только ничего не изменяйте
Когда вы будете готовы, кликните правой клавишей мыши на одном из квестов в окне EditorID, и в появившемся меню выберите "new" Откроется маленькое окно, где вы сможете ввести ID вашего квеста. И опять же, он должен быть уникальным. У меня povtutAlexarmorquest. (1)
Теперь, выберите ID, который вы только что создали. Введите название своего квеста (questname), у меня Броня Алекса. Измените значение приоритета (priority) на какое-нибудь повыше, 60 будет нормально. В условиях квеста (questconditions), найдите и выберите в conditionfunctionGetisPlayableRace(не нажимайте enter, это закроет окно квестов), value поставьте 1. Я не знаю почему GetisPlayableRaceнаходится здесь, но каждый квест содержит это условие, другие туториалы содержат подобные рекомендации, это не несет каких-либо побочных эффектов, поэтому не имеет смысла не делать этого.
Этапы квеста (QuestStages)
Это все для закладки questdata, и теперь мы переходим к закладке queststages. В окошке Index, кликните правой клавишей мыши и выберите new. Наберите 10. Текст, который вы введете в окошке LogEntry, это текст, который вы увидите после обновления журнала. Я написал "Я встретил Алекса, который потерял свою броню. Он попросил меня найти ее. Предположительно броня находится в замкнутом сундуке в [впишите название ячейки, где вы разместили сундук]. Он дал мне ключ. Я должен попытаться найти этот сундук, и вернуть ему броню" Опять, не нажимайтеenter, это закроет окно квестов.
Теперь, опять сделайте новый индекс, но со стадией 15. На этот раз, вы говорите: "Я нашел броню Алексаитеперьдолженемуее вернуть". Теперь сделайте еще один индекс, с номером 20, и наберите "Алекс был доволен, когда я вернул ему броню и наградил меня 200 золота." Так же отметьте здесь окошко "complete quest".
Темыквеста (Quest Topics)
Далее разберемся с темами (topics). Перейдите в закладку topics(темы). Кликните правой клавишей мыши на пустом месте в editorID, и выберите в появившемся меню addtopic (добавить тему). Затем выберите GREETING. Нажмите OK.
Правый клик мышью на одном из пустых полей в окне info, и в появившемся меню выбираем new. Набираем: "Привет, тыможешьмнепомочь? Я потерял свою броню, и хотел бы ее вернуть." Добавьте другую тему выбрав addtopicв editorID, правый клик на topicи кликните на 'new'. Назовитееекак-нибудь. Уменя povtutlostmyarmor.
Справа, есть несколько пустых полей с надписью сверху addtopic(добавить тему). НЕ ИСПОЛЬЗУЙТЕ это для добавления тем. Это баг в CSкоторый приводит к конфликтам в сложных модах, если добавлять темы этим путем, поэтому они не будут работать. Вместоэтого, вresult scriptнаберите: "addtopic povtutlostmyarmor" безкавычек.
Что мы только что сделали? Когда Алекс приветствует вас, используя свое приветствие (greeting), тема povtutlostmyarmorбудет добавлена в его список тем, и вы сможете спросить его об этом.
Теперь, в окне условий (conditions), кликните правой клавишей мыши и выберите в появившемся меню new. ВCondition functionвыберите getisID. В Function parameters, кликните на INVALID. Откроется длинный список. ПомнитеNPC, котороговы создали? Наберите начальные буквы его ID (я набрал POVtutalex) и вы найдете его. Убедитесь, что выбрали NPC, а не броню или что-нибудь еще. НажмитеOK. Теперь это должно выглядеть так: getisID povtutAlex1 = = 1. 1 означаетда, 0 означаетнет. Это означает, что когда ID персонажа который с вами говорит povtutAlex1, он выберет это приветствие. Если вы этого не сделаете, каждый NPCв мире будет говорить это приветствие!
Конечно, мы не хотим, чтобы он говорил это, когда его броня уже будет возвращена! Поэтому опять выберите newв окне Conditions. На этот раз выберите functiongetstage. Кликните на Invalid, и найдите IDвашего квеста. В comparion, выберите символ < . В value, наберите 10. Это означает, что Алекс будет говорить это только если этап квеста меньше (<) чем 10!
Добавьте новое приветствие (greeting) с текстом "Пожалуйста найди мою броню". Перейдите в условия (conditions) и сделайте так же как в последний раз с GetisID. Для getstage, выберите тот же квест, но выберите равнение (comparison) = =, и выберите значение (value) 10. Поэтому, когда он будет спрашивать вас о поиске брони, но вы ее еще не нашли, он скажет эту фразу. = = означает "равен" Следовательно, использоваться это приветствие будет когда уровень квеста равен 10, ни меньше, ни больше.
Сейчас добавим еще одно приветствие с текстом "еще раз спасибо за то, что нашел мою броню". Опять тот же getisID. Для GetStage, выберите = = 20. Конечно не забудьте ID квеста!
Теперь, в EditorIDтем (где находится тема GREETINGS) правый клик, и выберите addtopic (добавить тему). Выберите тему, которую вы создали как первое приветствие (greeting), у меня это было povtutlostmyarmor. Измените текст темы на "Потеря моей брони", потому, что вы не хотите, чтобы игрок увидел povtutlostmyarmorв качестве названия темы, верно? В info, правый клик и выберите new (новый).
Теперь вы будете вводить текст, который будет показан, когда вы выберите эту тему. Наберите что-то вроде "Я потерял свою броню, когда охотился в [напишите название ячейки, в которой вы поместили сундук]. Я положил ее в сундук и запер его, на случай, если какой-нибудь бандит решит ее украсть. Но после этого я был атакован, и бежал прочь, не захватив с собой броню! Ты ее мог бы мне вернуть? Это ключ от сундука."
Если ваш текст слишком длинный, он может не поместиться в окне. Просто нажмите ok (убедитесь, что вы закончили предложение), правый клик мышью на чистом поле в responsetextи наберите остальную часть текста.
Сначала идет IDперсонажа, которому добавляется предмет (для игрока, просто player) затем ставится точка, затем additem. Затем пробел, после чего IDкоторый вы хотите дать, в данном случае ключ, и затем количество (сколько этих предметов вы хотите дать игроку).
Таким образом, когда это будет сказано, обновятся записи квеста в вашем журнале до уровня 10, в которой будет сказано: "Я встретил Алекса, который потерял свою броню…." И остальная часть текста… а также ключ будет добавлен в ваш инвентарь.
В окне условий (conditions), еще раз выберите getisIDс тем же IDчто и в приветствиях. ЭтоIDАлекса!
Теперь, правый кликв пустом месте поля infoи в появившемся меню выбираем new. Наберите: "Я надеюсь ты найдешь мою броню" Выберите тот же IDкак и в приветствиях, и поставьте getstage = = 10. Таким образом, этот текст будет показан, когда вы выберете в темах диалога тему Потеря моей брони, Алекс всегда будет говорить вам о своей потерянной броне, пока вы ее не вернули.
Мы уже почти здесь… Правый клик и выберите new(новый) в infoопять, и наберите "Вау! Тынашелее, спасибо! Воттвоянаграда!"
Тот же getisID, в getstage ставим = = 15.
Вresult script, наберите setstage povtutalexarmorquest 20 инаберите player.additem gold001 200 . Gold001 это IDзолота, набирая 200 позади его вы получаете 200 золота! И конечно наберите player.removeitempovtutalexarmor1 1 и таким образом вы вернете ему его броню назад!
Добавьте еще одну линию в поле infoи наберите "Больше ничего не пропадало!"
Тот же getisID, для getstage делаем = = 20.
Это текст, который будет показываться, если вы спросите о потерянной броне, после ее возвращения. Выйдете из окна квестов нажав ok.
Скрипт (Thescript)
Теперь кликните на кнопку с изображением карандаша, которая откроет окно редактора скриптов. Не волнуйтесь, это будет быстро и безболезненно.
Кликните на script, и выберите new.
Это ( ; ) символ, который можно использовать для вставки описания после линии скрипта, все что идет после этого символа игнорируется и не меняет скрипт. Например (описание выделено курсивом):
scn povtutalexarmorscript; This is the ID of the script. SCN means script name. This should always be on top of your scripts.
Begin OnAdd; When the item this script is placed on (we will do that next) is added to the players inventory, the following thing will happen.
if ( getstage povtutalexarmorquest == 10 ); If the quest stage is at 10
SetStage povtutalexarmorquest 15; Set it to 15.
Endif; Just a standard thing you have to type when you used "if"
endif
End
Нажмите save(сохранить) и выйдите из окна.
Если по какой-то причине ваш скрипт не работает (появляется ошибка, когда вы пытаетесь его сохранить), удалите весь текст после знака ; . Это должно помочь, и еще: Не нажимайте enterв середине любой из линий скрипта. Теперь, найдите броню Алекса (в окне объектов (objectwindow), а не в сундуке). В окошке scriptsдолжно стоять NONE. Прокрутите список, пока не найдете ваш скрипт. Выберите его и нажмите OK.
С этого места, если вы начнете играть в свой квест, он будет работать. Но я покажу одну вещь, благодаря которой можно сделать квест легче: Маркеры квеста.
Маркерыквеста (Quest Markers)
Откройте окно квестов. И выберите закладку questtargets. В targetref, правый клик мыши и выберите в появившемся меню new. Вconditionsдобавьте getstage povtutalexarmorquest == 10.
В questtargetdata, выберите cell, в которой вы поместили сундук с броней Алекса. Дляref, выберитеrefсундука, которыйвысделали. У меня был povtutarmorchestrefЕсли его нет в списке, перейдите в ячейку с сундуком, выберите его и посмотрите, чтобы окошко "persistentreference" было отмечено, и сделали ли вы referenceID. Еслинет, сделайтесейчас. Теперь, когда этап квеста равен 10, маркер будет указывать на сундук, и игрок сможет найти его.
Создайте новую линию в questtargetref. Вconditions (условиях), поставьте getstage povtutalexarmorquest = = 15. В reference, прокрутите до ячейки в которой находится Алекс, и выберите эту ссылку (reference). Теперь, когда вы добудете броню, и сообщения в журнале обновятся до 15 уровня квеста, маркер будет показывать местоположение Алекса, таким образом вы сможете найти его.
Конец!
Вот и все. Вы только что создали квест. Помните, что все, что вы создали, не появится в игре до тех пор, пока вы не выберите свой мод в datafilesкогда загружаете Oblivion, поэтому сделайте это перед началом тестирования! Начинайте просто поговорив с Алексом.
Возможно, вы попробуете сделать другой квест, и не будете заглядывать в туториал слишком часто. Это хороший путь для того, чтобы чему-нибудь научится. И я скажу это опять: ЧАЩЕ СОХРАНЯЙТЕСЬ! Если вы создавали мод в течении нескольких часов без сохранения и Конструктор вылетит, думаю вас это сильно расстроит.
Если у вас есть какие-нибудь вопросы о системе квестов или что-нибудь еще, просто отправьте мне сообщение на форумах Tessource.