Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Выдача текстового сообщения и получение ответа от игрока.

Поиск

 

Теперь нужно, чтобы наш шкаф с ловушкой загадывал игроку загадку. Для этого используется функция "MessageBox", которая должна быть вам знакома: в " Моем первом скрипте" использовалась родственная команда "Message". "MessageBox" позволяет вывести на экран небольшое количество текста и также отобразить несколько вариантов ответов, из которых может выбрать игрок. К сожалению, в Oblivion (как до него и в Morrowind), нет возможности печатать ответ на загадку, так что нам придется предоставить несколько вариантов ответов. Строка кода для этого:

 

MessageBox "Безголосый, но плачет; бескрылый, но парит; беззубый, но кусает; безротый, но бормочет. Что это?", "Летучая мышь", "Старуха", "Ветер", "Привидение"


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

Но как нам сделать, чтобы загадка задавалась только при первой попытке открыть шкаф, а не постоянно? Теперь мы переходим к центральной теме: использование одноразовых условий и переменных состояния. Самая распространенная из проблем, с которой сталкиваются начинающие в написании скриптов для Oblivion, берет свои корни в непонимании того, как на самом деле выполняются и, соответственно, должны быть оформлены скрипты. Так что обратим внимание на эту важную деталь.

 

Как выполняются объектные скрипты

 

Каждый скрипт, привязанный к объекту или NPC (объектный скрипт), выполняется в каждом фрейме отображения игры на экране, пока активна ячейка с объектом (во внутренних ячейках скрипты активны только в ячейке, в которой находится игрок; снаружи – в ячейке, в которой находится игрок и во всех активных смежных ячейках). Так что каждый отдельный скрипт (а не его отдельная строчка) выполняется 10-60 раз в секунду или столько раз, насколько быстро на вашем компьютере идет игра! Легче всего представить каждый локальный скрипт завернутым в большую циклическую спираль:

до тех пор пока (объект в активной ячейке) [код скрипта] завершение


Вот почему представленный ниже скрипт будет плеваться непрерывным потоком сообщений (если приложен к объекту или NPC в той же ячейке, где и игрок). Проверьте сами, если хотите:

 

ScriptName HorribleMessageScript Begin GameMode MessageBox “Тысячи бесполезных сообщений!” End

 

 

Этот пример сравнительно безобидный, но представьте себе что случится, если бы вы использовали линию кода, которая добавляет предмет в инвентарь игрока или устанавливает возле него монстра, и т.п.!

Вот почему конструкции с использованием "Do Once" так существенны и часто используются при написании скриптов для Oblivion. Так что давайте продолжим написание нашего учебного скрипта - нам нужно применить переменную, чтобы наше сообщение выдавалось только один раз.

 

Измените свой скрипт как указано ниже:

 

ScriptName RiddleChestScript Short controlvar Begin OnActivate If (controlvar == 0) MessageBox "Безголосый, но плачет; бескрылый, но парит; беззубый, но кусает; безротый, но бормочет. Что это?", "Летучая мышь", "Старуха", "Ветер", "Привидение" Set controlvar to 1 EndIf End


и опять сохраните скрипт. Заметьте, что команда "MessageBox" должна быть написана на одной строке!

 

Не прерывайте и не переносите ее!

И еще, напоследок нужно отметить несколько вещей. Команда "If" используется для проверки условия – всякий раз, когда выражение в круглых скобках будет истинным, будут выполняться последующие строки кода, вплоть до команды "EndIf". "==" – проверяет, эквивалентно ли левое выражение (в нашем случае это переменная "controlvar") выражению с правой стороны (в нашем случае "0"). Если вы забудете поставить "EndIf" после команды "If", редактор будет выдавать сообщение об ошибке, когда вы попытаетесь сохранить скрипт. "Short controlvar" указывает новую переменную, которую мы назвали "controlvar". Сейчас вам достаточно знать, что данная переменная будет содержать целые (целые положительные или отрицательные числа).

Переменная - это "метка-заполнитель", которая может принимать различные значения. Команда "Set" для вас тоже новая, но достаточно простая – она устанавливает значение нашей переменной с 0 на 1 (все переменные начинают с нулевого значения). Это в сочетании с командой "If (controlvar == 0)" обеспечивает одноразовое условие – в следующем фрейме скрипт будет выполняться после того, как переменной будет присвоено значение 1, условие "If" будет неверно и текстовое сообщение больше выдаваться не будет.

 

Учебник скриптов: первый тест

 

Сохранение и подготовка модификации.

 

Наш скрипт уже способен работать, так что давайте его проверим:

  • Сохраните скрипт и закройте окно редактора скриптов.
  • Посмотрите в окно объектов и проследуйте по директориям WorldObjects > Container > Clutter пока не найдете объект с Editor ID: CupboardFoodLower.
  • Теперь или щелчком с зажатой правой кнопкой мыши выберите Edit, или просто щелкните два раза по объекту, чтобы открыть его свойства.
  • Затем в ниспадающем списке скриптов выберите только что сделанный нами RiddleChestScript.
  • Нажмите ОК, сохраните мод и выйдите из TES CS.

 

ПРИМЕЧАНИЕ: ОБРАТИТЕ ВНИМАНИЕ НА ТО, ЧТО МЫ ТОЛЬКО ЧТО СДЕЛАЛИ. РЕДАКТИРОВАНИЕ ОБЪЕКТА БЕЗ ПРИСВОЕНИЯ ЕМУ НОВОГО ID - ОПАСНОЕ ЗАНЯТИЕ! НИКОГДА ТАК НЕ ДЕЛАЙТЕ, ЕСЛИ ВЫ НЕ УВЕРЕНЫ В ТОМ, ЧТО ВЫ ДЕЛАЕТЕ!

 

Скрипт в игре

 

• Теперь используйте "Файлы данных", чтобы активировать мод, запустить игру и загрузить сохранение.
• Когда игра загрузится, активируйте консоль (обычно это кнопка «~» (тильда), слева от клавиши «1» на основной клавиатуре) и в консоли напечатайте:

 

player.coc "AleswellInn"

 

и нажмите Enter.


Тестовая локация, шкаф в Алесвельской таверне

 

• Вы появитесь в Алесвельской таверне, где вас сразу поприветствует группа невидимых людей. Это не имеет отношения к моду, просто данная ячейка использовалась автором для тестирования (она находится сверху в списке интерьеров, поэтому ее очень легко находить). Щелкайте, пока не сможете двигаться, и подойдите к шкафу слева от вас.
При активировании шкафа должно появляться окно сообщений, как на картинке ниже.



Созданное нами окно сообщений (иллюстрация из wiki)

 

Нажатие на один из вариантов ответа закроет окно, и если попытаться активировать шкаф опять, ничего больше произойти не должно – это хорошо, т.к. значит, что наша проверка состояния работает, как мы и хотели. (Шкаф не открывается потому, что мы еще не включили в скрипт команду Activate, мы сделаем это позже.)

Выключите Oblivion и загрузите свою модификацию в TESCS. Бедным людям из Алесвельской таверны придется дождаться следующего раза, чтобы вернуть свою видимость, но такова жизнь NPC в видеоигре.

 



Поделиться:


Последнее изменение этой страницы: 2016-07-11; просмотров: 235; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.116.15.22 (0.007 с.)