Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OSFM v1.2.0.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
4.49 Mб
Скачать

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

Теперь нужно, чтобы наш шкаф с ловушкой загадывал игроку загадку. Для этого используется функция "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" будет неверно и текстовое сообщение больше выдаваться не будет.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]