Создание простого квеста

advertisement
Обучающее упражнение Простой квест
Содержание
1. Руководство по логике квеста
2. Создание простого квеста
2.1. Стадии квеста
2.2. Простой скриптинг для квеста
2.2.1. Скрипт триггера
2.2.2. Создание нашего заскриптованного триггера
2.3. Завершение квеста
2.3.1. Цели квеста
2.3.2. Установка стадии завершения
Руководство по логике квеста
Квесты помогают игроку двигаться целенаправленно, отслеживать выполненные задачи,
достигать цели и получать за это награду. Они могут быть очень сложными, особенно в
такой игре как Fallout 3. Мы попробуем пальчиком ноги водичку этого глубокого водоема,
создав очень простой квест для Убежища 74.
В то время как полноценные квесты могут быть очень сложными, большую часть из них
можно привести к простой блок-схеме. События в пределах структуры квеста всегда связаны
с его стадиями.
Создание простого квеста
Окно квестов находится в Object Window->Actor Data->Quest. Щелкните правой кнопкой
мышки на этом списке и выберите "New", для создания квеста с чистого листа. Окно квеста
содержит много таблиц и полей, но нас сейчас интересуют только следующие:




Quest Name - Исследование Убежища 74
ID - VT74
Priority - 50
Start Game Enabled - установите флажок
Нажмите ОК для сохранения. Вы только что создали простую оболочку квеста. Пока что
квест ничего не делает. Давайте наполним его простыми стадиями.
Кнопка "ОК" - это лучший способ сохранения квестов. Когда вы переключаетесь между вкладками
квеста, данные этого квеста будут так же сохраняться.
Стадии квеста
Стадии - это простая структура любого квеста. Наш квест будет состоять всего из двух
стадий, и будет выглядеть подобно этому:
Help G.E.C.K. с сайта geck.bethsoft.com (перевод Князев В. К.)
Стадия
10
Цель
Найти офис смотрителя Убежища 74
Заметка
Начало квеста - игрок входит в Убежище
74
Игрок исследовал Убежище 74
100
Полноценные квесты, обычно намного сложнее этого, на наших двух стадий будет вполне
достаточно, чтобы познакомить вас с основами создания квестов в GECK.
Откройте еще раз квест “VT74", который мы только что создали. Откройте вкладку Quest
Stages. Пока что эта вкладка пустая, по этому продолжим и создадим две стадии. Щелкните
правой кнопкой в колонке index - с левой стороны окна и в контекстном меню выберите
"New". Введите "10" в поле Stage Index. Повторите этот процесс, создав стадию с индексом
"100".
Стадия 10 будет нашей стадией инициализации, а 100 будет окончанием квеста. Таким
образом мы оставляем много пустых мест для стадий этого квеста в будущем, что не
удивительно для сложных квестов.
Давайте создадим простую цель для стадии 10. Нам нужно автоматически запустить квест,
когда главный герой входит в Убежище 74, и дать ему цель, которая будет подталкивать его
к изучению Убежища.
Переключитесь на вкладку "Quest Objectives" (Направления Квеста). Щелкните правой
кнопкой мыши, создав новую цель вверху этого окна. Введите в поле индекса 10, а в поле
Display Text: "Найдите офис смотрителя Убежища 74".
Мы хотим чтобы эта цель была сопроводительной Стадии 10, по этому вернитесь на Quest
Stages и выберите Стадию 10. Щелкните правой кнопкой мышки под Quest Stage Items,
чтобы создать новый пункт этой стадии. Оставьте поле описание пустым, а в области
результата (result script) введите SetObjectiveDisplayed VT74 10 1.
Так же нужно поступить и со Стадией 100. Оставьте все поля пустыми, просто установите
флажок Complete Quest. Мы используем это позже.
Поле result Script позволяет разработчикам писать небольшие скрипты, которые будут
срабатывать моментально при достижении определенной стадии квеста.
Простой скриптинг для квеста
В нашем примере мы будем запускать квест автоматически, когда игрок входит в Убежище
74. Чтобы сделать это, давайте посмотрим как создаются простые скриптованные триггеры.
Скрипт триггера
Программа GECK представляет разработчикам возможность установить текстовую/фоновую
ссылку из меню Edit->Preferences панели инструментов скрипта.
Help G.E.C.K. с сайта geck.bethsoft.com (перевод Князев В. К.)
Для начала, откройте новый, пустой скрипт. Щелкните на кнопке Script
в главной панели
инструментов. Появится окно пустого скрипта (его правильнее называть "сценарий" - прим.
авт. перевода). В меню этого окна выберите Script->New, создав новый, пустой скрипт.
Добавьте в него следующие строки:
scn VT74Stage10TriggerSCRIPT
BEGIN OnTriggerEnter player
If GetStage VT74 < 10
SetStage VT74 10
EndIf
END
Что все это означает? Давайте разберем написанное по строкам.
 scn - Это краткое от ScriptName. Так же как мы даем каждому новому объекту свой
уникальный ID, такой же идентификатор нужен для каждого сценария, в нашем
случае, - это VT74Stage10TriggerSCRIPT.
 BEGIN OnTriggerEnter player - это начало блока OnTriggerEnter. Блоки, или блоковые
структуры дают разработчикам скриптов возможности отслеживать игровые события.
В нашем случае, мы собираемся перехватить событие, когда главный герой (он же
player) входит в модель триггера, который мы вскоре создадим. Дополнительный (не
обязательный) параметр player, дает нам возможность определить срабатывание
скрипта только в том случает, когда именно главный герой воздействует на триггер.
 If GetStage VT74 < 10 - Это можно прочитать как "Если выражение возвращает ДА"
один из основных элементов в логике программирования - (дальше я буду добавлять
более понятные и осмоленные пояснения, руководствуясь своим опытом
программиста - прим. авт. перевода).
В данном случае мы проверяем, является ли Стадия нашего квеста (VT74) меньшей
чем 10. Мы знаем, что когда главный герой первый раз задействует триггер,
выражение 'GetStage VT74 < 10' будет верным (true), потому что стадия 10 еще не
установлена. Как только мы установим стадию квеста VT74 в 10 или выше, выражение
'GetStage VT74 < 10' будет ложным (false), что в свою очередь будет обозначать
пропуск всех операторов, стоящих между словом 'If' и 'EndIf".
 SetStage VT74 10 - Это команда скрипта установит стадию VT74 в 10. Мы знаем, что в
этом случае главный герой увидит цель, которая уже создана и при последующих
активациях игроком этого триггера, данное выражение повторно выполняться не
будет, так как условие If, предыдущего выражения уже будет ложным.
 EndIf - Это выражение закрывает предыдущее 'If', и сообщает скрипту с какого места
продолжить выполнение скрипта, если это выражение было ложным.
 END - Это слово закрывает блок OnTriggerEnter
Хотя мы и не использовали их в нашем примере, добавление "комментариев" является хорошей
привычкой при написании самого скрипта. Чтобы написать комментарий, просто поставьте знак точки
с запятой ";" в любой линии скрипта или в конце выражения, которое вы отметить особо. В игре, все
что находится в строчке после точки запятой будет игнорироваться. Комментарии считаются
обязательными, если вы работаете в команде или вашу работу будет продолжать кто-то другой, а
так же будут очень полезны, как напоминания для самого себя.
Help G.E.C.K. с сайта geck.bethsoft.com (перевод Князев В. К.)
Создание нашего заскриптованного триггера
Сохраните скрипт и закройте окно. Теперь, когда у нас есть завершенный скрипт, нам нужно
присоединить его к объекту - триггеру в игре. Щелкните на кнопке создания примитивов Trigger в главной панели инструментов
. (Щелкните сюда, если вы еще не знакомы с
созданием примитивов). Растяните размер нового триггера около входа в Убежище 74.
Если с предыдущего упражнения по оптимизации у вас остались видимые Порталы и Комнаты,
вам стоит зайти в меню View->Show/Hide в главном меню и скрыть эти объекты.
Когда закончите с созданием триггера, появится диалоговое окно Activator. В это окно
добавьте следующие строки:




New - Означает, что это новый активатор
ID - VT74Stage10TRIG
Name - Пустое
Script - VT74Stage10TriggerSCRIPT
Нажмите ОК для завершения. Теперь вы можете подключить мод к игре и когда вы войдете
в пещеру - в место расположения триггера, на вашу вкладку Пип-Боя добавится новый квест
и цель.
Help G.E.C.K. с сайта geck.bethsoft.com (перевод Князев В. К.)
Завершение квеста
Цели квеста
Мы дали игроку довольно неопределенную цель, поэтому, было бы не плохо добавить
немного дополнительной информации в форме Quest Target "Цель Квеста". В качестве цели
квестов могут служить любые объекты, которые физически размещены в пространстве игры.
В нашем случае давайте создадим голосовой диск, который игрок может получить в офисе
смотрителя и укажем его в качестве цели этой стадии.
Голосовые диски - это хороший способ рассказать прошедшую историю, добавляя заметки
(Notes) в Пип-Бой. Давайте создадим сейчас одну из таких заметок.
Если нам нужна заметка, которая находится в игровом мире в виде голосового диска,
скопируем ее из уже существующего диска, использующего текстовое сообщение. Для
нашего примера откройте Vault112Holotape. Измените поле ID, чтобы не изменить
оригинальный текст заметки, если это не то, что вы хотите. Изменение ID даст вам
возможность создать новый объект на основе существующего.
Заполните следующие поля в записке, руководствуясь рис. 1а.
 Name - Это название заметки, появляющееся в Пип-Бое.
 ID - Это уникальный идентификатора, который мы будем использовать в скрипте.
 Note Type - Вы можете создать несколько типов заметки. Проще всего создать текстовую, что мы
и сделаем в нашем примере.
 Owner Quest - Используется в случае ассоциации с определенным квестом, в нашем случае это
VT74.
 Note Data - Это текст, который игрок сможет прочитать в своем Пип-Бое. Напишите свою
предысторию для Убежища 74 и найдите способы ясно ее выразить в этой заметке. Для нашего
случая я добавлю только некоторые неопределенные примечания от Надзирателя...
Дата журнала № 10.44.78
Доступ в Убежище был нарушен. Для уровня Пять не хватает энергии!
Боже, спаси наши души.
Щелкните ОК для создания новой заметки. Если вы изменили ID, вам будет предложено
создать новый объект. Выберите "Yes" для создания новой заметки.
Продолжайте работу и поместите эту заметку в офис надзирателя (Офис надзирателя это
одна из комнат, выходящая в камбуз, как в Убежище 101). Так как я еще не заполнил эту
комнату объектами, я просто поместил в нее стол, прорезал для него отверстие в navmesh и
поместил небольшой "ключевой" осветитель на этот стол, чтобы привлечь к этому месту
внимание игрока, как видно на рис. 1с. В зависимости от того, как вы обставите эту комнату и
пространство, сделайте то, что считаете необходимым для того, чтобы выделить это место.
Help G.E.C.K. с сайта geck.bethsoft.com (перевод Князев В. К.)
Дальше, сделайте двойной щелчок на размещенном в игре голосовом диске и установите
этот объект как Persistent Reference. Если вы хотим использовать этот объект в качестве
цели для квеста, это просто необходимо сделать.
Откройте наш квест VT74. Вернитесь на вкладку Quest Objectives. Выделите цель с
индексом 10. В разделе Quest Objective Data щелкните правой кнопкой мышки и выберите
'New'. Вы можете выбрать Select Reference in Render Window, как было в предыдущем
упражнении или выбрать голосовой диск вручную в списках Cell/Ref. Вы можете установить
условия, но так как мы не используем несколько целей, нам этого не нужно.
Теперь у игрока должен быть маркер, видимый на компасе и на карте Пип-Боя, указывающей
на место размещения голосового диска. Проверьте это в игре.
Для тестирования квестов есть полезная консольная команда MoveToQT. Это переносит
главного героя прямо к текущей цели квеста. Возможно вы захотите воспользоваться командой
KillAll для того, чтобы убить всех рейдеров или других врагов в Убежище.
Рис. 1а: Создание
новой заметки
Рис. 1b: Возможность
создать новый объект
Рис. 1с: Размещение
нашей заметки в
Убежище 74
Рис. 1d: Указание
голосового диска в
качестве цели квеста
Установка стадии завершения
Записки - это не плохие цели для квеста, так как эти повествующие устройства могут поддерживать
квест в движении. Однако, в отличие от других типов объектов, скрипты к ним нельзя присоединить.
Это немного проблематично, потому что нам нужно завершить квест после того, как главный герой
получит диск в офисе смотрителя.
Если другие объекты могут запускать скрипты и определять, взял их игрок или нет, для голосового
диска нам нужно найти другой способ, определения активации. Чтобы вычислить это, мы используем
другой триггер. Используйте кнопку
и создайте еще один скрипт, со следующим содержанием:
scn Vt74EndTRIG
BEGIN OnTrigger player
If GetStage VT74 < 100
if player.GetHasNote VT74OverseerLog
SetStage VT74 100
endif
EndIf
END
Help G.E.C.K. с сайта geck.bethsoft.com (перевод Князев В. К.)
В отличие от предыдущего триггера, этот скрипт будет выполняться каждый кадр, пока игрок
будет находиться в пределах этого скрипта. Это не так эффективно, как триггеры, которые
используют блоки onTriggerEnter или onTriggerLeave, но нам нужно обновить квест как можно
быстрее, после того, как у главного героя окажется голосовой диск, по этому в нашем
случает мы будем использовать такой способ.
Логика созданного скрипта аналогична предыдущему скрипту. Сейчас нам нужно создать
еще один триггер. Это такая же процедура, как и в предыдущем случае. Поместить триггер
нам нужно в офисе смотрителя, как показано на рис. Создайте новый активатор и назначьте
ему скрипт. На рис. 2а показано удачное размещение триггера. Проверьте выравнивание
этого триггера по всем трем осям.
Некоторые пользователи, знакомые с Elder Scroll CS могут соблазниться привычкой и
использоваться квестовый скрипт с блоком gameMode. Однако, использование триггеров
намного эффективнее. Квестовые скрипты работают постоянно, пока активен сам квест, а
эти триггеры и скрипты работают только тогда, когда загружена ячейка Vault74a. Так как нам
известно нахождение заметки и место в котором эта заметка может попасть к главному
герою, нет необходимости в квестовом скрипте. Квестовые скрипты обновляются с меньшей
частотой; созданный нами скрипт будет обновляться каждый раз, когда игрок будет в
пределах соответствующего триггера.
Теперь вы можете в игре протестировать созданный квест. Так как мы указали Complete
Quest (Завершить квест) на стадии 100, то после того как у вас окажется голосовой диск,
квест автоматически завершится. Однако, это немного жестко. Давайте добавим точку
завершения для нашего квеста.
Снова откройте квест VT74 и вкладку Quest Stages. Выделите стадию 100 - мы добавим
главному герою немного очков опыта за завершение этого квеста.
Добавьте строчку RewardXP 100 в поле Result Script. Теперь, когда игрок завершил квест,
главному герою начисляться 100 очков опыта, как показано на рис. 2b.
Рис. 2а:
Ортографический вид сверху с привязкой к
сетке, что очень полезно при точном
масштабировании триггеров
Рис. 2b:
Добавление награды в виде XP (Опыта) при
завершении квеста
Вот так! Вы закончили свой первый квест, хотя и очень простой. Пробуйте
экспериментировать с более сложной логикой квеста, используя существующие квесты Fallout 3 в качестве руководства.
Спасибо вам за завершение этих упражнений. Мы желаем всем вам удачи в ваших
начинаниях и надеемся, вы познакомите нас и Сообщество Модмейкеров Fallout 3 со своими
творениями.
Команда Студии Игр Bethesda и автор перевода, 3D-художник-аниматор Князев В. К.
Help G.E.C.K. с сайта geck.bethsoft.com (перевод Князев В. К.)
Download