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

Первые ошибки и исправления

Если вы тестировали плагин, то должны были обратить внимание, что все пошло не совсем так, как было запланировано. Выбор неправильного ответа не запирал шкаф навсегда, а если игрок выбирал правильный вариант, то инвентарь и сообщение о правильном ответе отображались одновременно. Сообщение должно быть закрыто перед тем, как можно будет сделать что-то еще, но оно прикрыто инвентарем! Давайте попробуем следующее (измените соответствующую секцию скрипта, чтобы он стал таким):

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

Видите, как мы переместили команду "Activate" в секцию, которая проверяет "controlvar == 2"? Это обеспечивает четкую последовательность событий, предотвращая одновременное открытие двух блоков, а как было упомянуто выше, четкая последовательность может быть очень важна при написании скриптов для Oblivion – всегда старайтесь избегать делать слишком много вещей сразу! Сохраните, запустите и проверьте скрипт. Замечательно! Теперь инвентарь открывается как надо, но что это? Мы не можем его закрыть! Посмотрите выше: переменной "controlvar" была присвоена 2, и она и далее остается с таким значением, поскольку мы ее больше не изменяем. Следовательно, игра теперь получает непрерывные команды "Activate" всякий раз, как выполняется скрипт (в каждом фрейме)! Вот почему мы не можем закрыть инвентарь – он мгновенно открывается снова. Поэтому измените следующую часть скрипта вот так:

ElseIf ( controlvar == 2 )       Activate       Set controlvar to 3  EndIf

Заново протестируйте мод: теперь все работает так, как мы хотели. Надеюсь, вас не смутило вышеуказанное отклонение в процессе отладки, но это очень важная вещь – вам постоянно придется продумывать свои скрипты и испытывать различные способы, чтобы добиться успеха. Что мы пропустили? Ловушку, конечно!

5.8 Учебник скриптов: добавляем ловушку.

Если игрок неправильно ответит на загадку, наш шкаф наложит на него проклятье. Сначала выберите заклинание, которым хотите поразить игрока: щелчок на значок "+" рядом с Magic, еще раз нажмите на "+" рядом со вкладкой Spell, наконец, выберите подпункт "Заклинание". Выбор здесь довольной большой, но для наших целей мы используем заклинание Mg05FingerSpell15. Выбрав это болезненное наказание, нужно применить его к игроку, когда он даст неправильный ответ. Отредактируйте скрипт следующим образом:

Else       MessageBox "Неправильный ответ."       Cast Mg05FingerSpell15 Player       Set controlvar to 0  EndIf  

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

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 "Правильный ответ."               Set controlvar to 2           Else               MessageBox "Неправильный ответ."               Cast Mg05FingerSpell15 Player               Set controlvar to 0           EndIf       ElseIf ( controlvar == 2 )           Activate           Set controlvar to 3       EndIf  End

Вот и все, ваш скрипт готов. Поздравляем! Если хотите, можете поэкспериментировать со скриптом, используя другие функции.

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