Учебный курс Bethsoft. GECK. Создание простого Дознания.


<<<BACK|---|NEXT>>>

Содержание.

Пример логической части дознания.

Дознание помогает игроку держаться в курсе событий, получать опыт и награды за достижение осязаемых целей. Это сложный механизм, особенно в таких играх как Fallout 3. Давайте погрузимся на самое его дно, сделав очень простое дознание в Убежище 74.

По мере работы над совокупных частей дознания, их нужно сводить в блок-схему. События связывают этапы в пределах структуры дознания.

Создание несложного дознания.

Дознания находятся в Actor Data>Quest (Данные персонажа>Дознание) Object Window (Окна объектов). Правым щелчком выделите "new" («новый»), чтобы создать дознание с нуля. Диалог Quest (Дознание) включает в себя несколько закладок и полей, но, в данный момент обратите внимание только на нижеследующие.

  • Quest Name - Exploring Vault 74 (Имя дознания — Исследование Убежища 74).
  • ID - VT74 (Идентификатор — VT74).
  • Priority - 50 (Приоритет — 50)
  • Start Game Enabled (Включить Запуск Игры) — отметьте этот пункт.

Чтобы сохранить нажмите кнопку OK. Создадим основу для построения дознания. Дознание пока не сможет ничего сделать. Давайте подключим основные элементы.

Лучший способ сохранить дознание — нажать кнопку "OK". В окне Quest данные дознания при переходе от одной закладки к другой сохраняются.

Этапы дознания.

Stages are the basic framework for a quest. Our quest will consist of only two stages, and will look something like this:

Этап Цель Примечание
10 Отыскать Кабинет Смотрителя в Убежище 74 Начало Дознания — игрок попадает в Убежище 74
100 Игрок обследовал Убежище 74

Очевидно, что развитые дознания более запутанные, чем наше двухэтапное дознание, однако для обучения основам конструирования дознаний в GECK этого более чем достаточно.

Снова откроем только что созданное дознание "VT74". Откройте закладку "Quest Stages" ("Этапы Дознания"). Тут нет этапов, так что давайте двигаться дальше и создадим два. Правый щелчок по столбцу "index" с левой стороны Диалога Quest. Из всплывающего меню выберите "new" и введите "10" в качестве Индекса Этапа. Повторите те же действия для этапа "100".

Этап 10 наш первоначальный этап, а 100 — последний. Это оставит достаточно свободного пространства для других этапов, которые мы решим сделать позднее, что в составных дознаниях не является редкостью.

Создадим простую цель для этапа 10. Когда игрок входит в Убежище 74, дознание должно запуститься автоматически, нам просто нужно дать игроку цель для поощрения исследования.

Переместитесь на "закладку Quest Objectives" ("Цели дознания"). Правым щелчком создайте новую цель. Введите индекс 10 и в поле Display Text (Показать текст) введите "Explore the Vault 74 Overseer's Office" ("Исследуйте Кабинет Смотрителя в Убежище 74").

Эта цель сопутствует Этапу 10, так что вернитесь на закладку "Quest Stages" и выберите Stage 10. Правым щелчком по "Quest Stage Items" ("Пункты этапов дознания") создайте новый пункт этапа . Поле log оставьте пустым, но, добавьте итоговый скрипт. В поле итогового скрипта добавьте "SetObjectiveDis played VT74 10 1".

Всё что нам теперь нужно, это добавить пункт этапа к Этапу 100. Оставьте это поле пустым, но, отметьте "Complete Quest" ("Завершить Дознание"). Мы вернёмся к этому позже.

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

Основы скриптописания для дознания.

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

Скрипт-переключатель.

GECK предоставляет возможность установить предпочтения для текста/фона из меню Edit>Preferences в панели инструментов скриптов.

Для начала, откройте новый, пустой скрипт. Нажмите кнопку image:GECKscriptBUtton.jpg в Главной панели инструментов. Появится окно Script. Для создания нового, пустого скрипта, из панели инструментов выберите Script>New. Давайте напишем следующий скрипт:

scn VT74stage10triggerSCRIPT

begin onTriggerEnter player

   if getStage VT74 < 10
      setStage VT74 10
   endif

end

Давайте разберёмся построчно что всё это значит.


  • scnназвание скрипта. Это уникальный идентификатор этого скрипта, в нашем случае, "VT74stage10triggerSCRIPT".
  • begin onTriggerEnter player — начало блока "onTriggerEnter". Типизированные блоки позволяют скриптописателям захватывать события игры несколькими способами. В нашем случае, игрок вошёл в созданный ранее переключатель. Необязательный параметр "player" позволяет нам определить когда игрок войдёт в переключатель.
  • if GetStage VT74 < 10"оператор if", элемент управления ходом программы. Проверяется меньше или равен 10 текущий этап нашего Дознания (VT74). Мы узнаем, что игрок впервые вошёл в переключатель, так как условное выражение "getStage VT74<10" будет равно true (правда). Как только значение VT74 станет равно или больше 10, значение выражения "getStage VT74<10" станет false (ложь), означающее, что часть скрипта между "if" и ближайшим "endif" будет пропущена.
  • setStage VT74 10 — эта команда присваивает этапу VT74 значение 10. Мы знаем, что игрок уже получил цель дознания и предотвращает срабатывание переключателя при повторном вхождении игрока, так как значение выражения будет оставаться ложным.
  • endif — закрывает предшествующий оператор "if" и сообщает, скрипту значение полученное после проверки.
  • end — окончание блока onTriggerEnter.
В этом примере мы не использовали комментарии, но, их наличие является хорошим тоном в скриптописании. Чтобы сделать комментарий или заметку, просто введите точку с запятой (";") в любой строке скрипта, игра пропустит всё, что за ней. Комментарии обязательны если вы предоставляете свои скрипты другим и бесценный способ сохранить свои собственные заметки.

Создание собственного Скрипт-переключателя.

Выполните сохранение и закройте окно. Получен работающий скрипт, теперь нам нужно прикрепить его к объекту-переключателю во внутриигровом мире. Нажмите кнопку Trigger Primitive (Примитив переключателя) image:GECKTRIGPRIM.jpg на Главной панели инструментов. Если вы всё ещё не знаете как создавать примитивы, щёлкните здесь. Нарисуйте новый переключатель возле входа в Убежище 74.

Если у вас ещё отображаются Тамбуры и Комнаты из части руководства по оптимизации, вам нужно скрыть их в View>Show/Hide Window Главной панели инструментов.

Как только вы завершите рисовать переключатель, появится диалог "Activator". Введите следующее:

  • New — показывать новый инициатор переключателя.
  • ID — VT74stage10TRIG
  • Name — пустое поле.
  • Script — VT74stage10triggerSCRIPT

Нажмите кнопку OK для завершения. Теперь вы можете загрузить плагин в игру, переключатель, новое дознание и цели будут добавлены в закладку дознаний Pip-Boy.

Концовка Дознания.

Цели Дознания.

Мы дали игроку довольно невнятную Цель дознания, так что давайте немного усилим его мотивацию. Целями Дознания может быть какой-нибудь физический объект на местности. Например, давайте создадим голодиск, который игрок может получить в Кабинете Смотрителя и получить за него в качестве награды очки.

Голодиски — это отличная возможность рассказать второстепенную историю, которая записывается в Pip-Boy. Давайте сделаем это прямо сейчас.

Чтобы объект голодиск стал частью внутриигрового мира, нам нужно дублировать существующий голодиск, который уже существует в виде изображения. Например, откройте Vault112Holotape. Обязательно измените поле ID, иначе вы перепишете исходный игровой набор, а это не то, что нам нужно. После смены ID, появится запрос на создание нового объекта.

Заполните следующие поля, как показано на Рис. 1а.

  • Name — это название появится в Pip-Boy.
  • ID — это уникальный идентификатор, используемый скриптом.
  • Note Type — несколько типов записей, которые вы можете создать. Для простоты, в этом примере, склеены с текстом.
  • Owner Quest — используется если запись взаимодействует с особенным дознанием, в нашем случае VT74.
  • Note Data — этот текст станет доступным для прочтения в Pip-Boy. Заранее продумайте свою второстепенную историю для Убежища 74 и найдите способ донести её до игрока. Например, несколько сбивчивых записей от Смотрителя.
Журнал №10.44.78

В Убежище авария. На пятом уровне не хватает электричества.

Боже милостливый, спаси и сохрани нас.

Нажмите кнопку OK для создания новой записи. Если вы изменили начальный ID, то должны получить запрос на создание нового объекта Для создания новой записи ответьте "Yes" ("Да").

Двигаемся дальше. Поместите запись в Кабинет Смотрителя (кабинет Смотрителя, как правило, тоже состоит из гранок, как в Убежище 101). Пока что я не захламлял её. Поместил туда маленький стол и чуть-чуть направленного света на него, чтобы обратить на него внимание игрока, раскроил нависеть, как на рис. 1в. Подумайте, что можно выделить в зависимости от того, как вы захламили и осветили ваше пространство.

За тем, через "Persistent Reference" двойным щелчком поместите голодиск. Теперь нам нужно сделать его Целью дознания.

Снова откройте ваше дознание VT74. Вернитесь на закладку "Quest Objectives" ("Цели дознания"). Вновь выберите цель с индексом 10. Чтобы создать новую, правый щелчок под "Quest Objective Data", "Select Reference in Render Window" (в Окне отрисовки выберите ссылку), как было показано в предыдущей части руководства или можно выбрать голодиск вручную через выпадающее меню Cell/Ref. Так как вы не используете множественные цели дознания, то не нужно задавать условия.

Теперь на компасе карты Pip-Boy должен появиться указатель на голодиск. Не откладывая проверьте это в игре.

При проверке вашего дознания используйте команду консоли "MoveToQT", которая переместит игрока прямо к текущей цели дознания. Так же вы можете использовать команду "KillAll", чтобы убить всех врагов.

Настройка заключительного этапа.

Записи, хранимые устройствами, продвигают нас по сюжетной линии, поэтому это хорошая цель дознания. Однако, в отличие от других типов объектов, скрипты к ним прикрепляться не могут. Это озадачивает, так как мы хотим завершить наше дознание VT74 когда игрок получит голодиск Смотрителя.

Нам нужно найти другой способ зафиксировать событие для нашего голодиска, поскольку в отличие от него, другие объекты могут определять, что игрок подобрал его, и запускать при этом скрипт. Для этого используйте другой переключатель. Создайте ещё один новый скрипт, нажав кнопку Image:GECKscriptBUtton.jpg, и введите следующее:

scn VT74EndTRIG

begin OnTrigger player

if getStage VT74 < 100
  if player.getHasNote VT74OverseerLog
    setStage VT74 100
  endif
endif

end

В отличие от нашего предыдущего переключателя, этот скрипт будет запускаться каждый раз, когда игрок попадает в его пределы. В отличие от переключателя, который использует блоки onTriggerEnter или onTriggerLeave, он не вполне эффективен, но, мы хотим обновить дознание как можно скорее после того как игрок получил голодиск, так что другого выхода у нас нет.

Логика скрипта немного схожа с предыдущей. Нам снова нужно создать другой переключатель. Эта процедура похожа на предыдущую. Нам следует окружить Кабинет Смотрителя этим переключателем как показано на иллюстрации ниже. Убедитесь что новый Инициатор прикреплён к скрипту. Взгляните на Рис. 2а, чтобы понять где лучше расположить переключатель. Удостоверьтесь, что переключатель выровнен по всем трём координатным осям.

Некоторые пользователи, знакомые с Elder Scrolls CS, могут соблазниться использованием в скриптах дознания блоков gameMode. Но, этот переключатель гораздо более эффективен, так как он запускается только если загружен Vault74a, а не постоянно, как скрипты Дознания. Мы знаем, что игрок может получить запись только здесь, поэтому нам не нужно использовать скрипты дознания. Скрипты дознания обновляются менее часто. Этот скрипт проверяет запись всякий раз, когда игрок находится в пределах нашего нового переключателя.

Теперь вы можете проверить ваше дознание в игре. Поскольку ранее мы отметили "Complete Quest" на Stage 100 дознания VT74, то когда вы возьмёте в Кабинете Смотрителя голодиск, дознание должно завершиться автоматически. Ну, не очень автоматически. Давайте нанесём завершающий штрих на наше дознание.

Снова откройте VT74, потом закладку "Quest Stages". Выберите Stage 100. В завершении дознания дайте в награду игроку немного очков опыта. В поле Result Script (Итог скрипта) добавьте "RewardXP 100". Теперь игрок может завершить дознание и получить небольшое вознаграждение, как показано на рис. 2б.

Вот и всё! Вы завершили, хотя и очень простое, но, сделанное своими руками своё первое дознание. Ощутите себя свободными в экспериментах над совокупной логикой многоэтапных дознаний, используя имеющиеся в Fallout 3 дознания как руководство к действию.

Благодарим за окончание нашего учебного курса. Желаем удачи в ваших начинаниях и надеемся, что вы поддержите своими разработками нас и всё сообщество модостроителей Fallout 3.

Команда The Bethesda Game Studios.


<<<BACK|---|NEXT>>>