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

5.6 Учебник скриптов: первый тест Сохранение и подготовка модификации.

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

  • Сохраните скрипт и закройте окно редактора скриптов.

  • Посмотрите в окно объектов и проследуйте по директориям WorldObjects > Container > Clutter пока не найдете объект с Editor ID: CupboardFoodLower.

  • Теперь или щелчком с зажатой правой кнопкой мыши выберите Edit, или просто щелкните два раза по объекту, чтобы открыть его свойства.

  • Затем в ниспадающем списке скриптов выберите только что сделанный нами RiddleChestScript.

  • Нажмите ОК, сохраните мод и выйдите из TES CS.

ПРИМЕЧАНИЕ: ОБРАТИТЕ ВНИМАНИЕ НА ТО, ЧТО МЫ ТОЛЬКО ЧТО СДЕЛАЛИ.

РЕДАКТИРОВАНИЕ ОБЪЕКТА БЕЗ ПРИСВОЕНИЯ ЕМУ НОВОГО ID - ОПАСНОЕ ЗАНЯТИЕ!

НИКОГДА ТАК НЕ ДЕЛАЙТЕ, ЕСЛИ ВЫ НЕ УВЕРЕНЫ В ТОМ, ЧТО ВЫ ДЕЛАЕТЕ!

Скрипт в игре

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

player.coc "AleswellInn" 

и нажмите Enter.

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

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

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

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

5.7 Учебник скриптов: выбор игрока, ошибки и исправления. Выбор игроком варианта ответа

Теперь нужно, что бы скрипт вычислял, какой вариант ответа выбирает игрок и соответственно реагировал на правильный и неправильные ответы. Функция для проверки выбранного ответа "GetButtonPressed". Данная функция устанавливает число в зависимости от того, на какую кнопку щелкнуть мышкой. Устанавливает "0" для первой кнопки ("Летучая мышь" в нашем примере) и 1, 2, 3, и т.п. для следующих кнопок, в порядке, указанном в команде MessageBox. Пока ответ не выбран, функция устанавливает 1, об этом нам тоже следует позаботиться.

Функция "Activate" заставит наш шкаф открыться; фактически, эта функция просто инициирует стандартное действие, которое должно выполняться, когда вы "используете" объект со скриптом: дверь откроется, NPC начнет диалог и т.п. Следующие изменения в скрипте также демонстрируют, как можно использовать управляющую переменную, чтобы заставить Oblivion обрабатывать функции одну после другой, хотя законченный скрипт обрабатывается каждый фрейм игры: просто увеличьте управляющую переменную и проверьте его в серии операторов If–ElseIf. Это очень безопасный способ скриптонаписания для Oblivion. Это может быть не всегда нужно, но безопасно.

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

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

Begin GameMode      If ( controlvar == 1 )         Set button to GetButtonPressed         If ( button == -1 )            Return         ElseIf ( button == 2)            MessageBox "Правильный ответ."            Activate            Set controlvar to 2         Else            MessageBox "Неправильный ответ."            Set controlvar to 0         EndIf      EndIf  End

Обратите внимание на новый блок - "GameMode", который начинается с "If (controlvar == 1)". Мы устанавливаем "controlvar" в 1 как только шкаф будет активирован. Но "OnActivate" только запускает скрипт в том фрейме, в котором объект будет активирован. Поэтому нам необходимо использовать блок "GameMode", чтобы продолжить проверку выбора игрока, и далее проверка будет выполняться в каждом фрейме. Теперь проверим нажатие кнопок. А сделаем мы это с помощью присвоения новой переменной "button" величины, возвращаемой "GetButtonPressed". Скрипт работает, даже когда игра останавливается в ожидании вашего решения. Сначала мы проверим ситуацию, когда ни одна кнопка не была нажата – в этом случае команда "return" сообщает игровому движку остановить выполнение скрипта в текущем фрейме.

Правильный ответ - "Ветер"; он соответствует кнопке номер два – при нажатии этой кнопки нам нужно известить игрока, что он дал правильный ответ, и позволить функции "Activate" открыть шкаф обычным способом. Все значения, соответствующие остальным кнопкам, означают, что игрок выбрал неправильный ответ, так что здесь мы можем использовать команду "Else". В этом случае мы сообщим игроку, что он глупый и шкаф не будет активирован.

Теперь посмотрите на небольшое дополнение в верхней части скрипта:

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

Это означает, что если шкаф будет активирован в будущем, он откроется только если "controlvar" будет больше 1. Вспомним последний абзац: если игрок дает неправильный ответ на загадку, "controlvar" получает значение 1, так что он никогда больше не сможет открыть шкаф. Но если ответ правильный, controlvar получает значение 2, и в дальнейшем игрок сможет открывать шкаф сколько угодно. Сохраните и запустите свой плагин, проверьте написанное выше.

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