Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скрипты Morrowind.doc
Скачиваний:
91
Добавлен:
29.10.2018
Размер:
2.81 Mб
Скачать

Чего мы хотим?

Перед тем, как мы действительно начнем писать скрипт, нужно определиться, что он будет делать. Я решил, что для этого обучающего курса достойной задачей будет создать Сундук с загадкой: сундук загадывает загадку, и только правильный ответ открывает сундук. Если игрок даст неверный ответ, сработает ловушка, ранящая игрока, а сундук уже не откроется.

Это достаточно сложная задача, но мы решим ее шаг за шагом.

Написание скрипта

Откройте окно редактора скриптов и кликните по главной части окна редактора. Здесь вы будете писать скрипт.

Имя для скрипта: Begin и End

Прежде всего мы должны дать скрипту имя – каждый скрипт начинается с объявления его имени. Поэтому, напечатайте:

Begin my_first_script

в окне редактора. Обратите внимание на знаки подчеркивания: ваше имя должно быть одним словом, то есть не содержать пробелов. Также отметьте, что скриптовый язык нечувствителен к регистру, так что команда “Begin” могла быть напечатана, начиная со строчной (маленькой) буквы – “begin”. Данное скрипту имя – это указатель, по которому его опознает TES CS. Попробуйте теперь нажать кнопку Save: вы получите сообщение о том, что «you need to end your script with end scriptname» (скрипт следует заканчивать командой “end имя_скрипта”). Таким образом, для того, чтобы скрипт распознавался редактором как таковой, нам следует обозначить не только его начало, но и конец: далее, напишите

End

на новой строке ниже предыдущей. Как видите, указание имени скрипта в этой строке уже можно опустить, достаточно слова end. Вот теперь, если вы нажмете Save, вы увидите, что его имя появилось в строке заголовка, значит скрипт сохранится без ошибок. Это самый короткий возможный скрипт, и конечно, он ничего не делает.

Обнаружение действий игрока

Далее, нам нужен способ определить, пытается ли игрок открыть сундук. В скриптах TES мы различаем Объекты, Функции и Команды:

Объекты - это все вещи в игровом мире, такие как видимые предметы, монстры, NPC (персонажи) или просто звуки.

Функции - это все «слова», употребляемые в скриптах TES для манипуляции объектами или получения информации о них.

Команды - это те «слова» скриптового языка, которые его структурируют, но не оперируют какими-либо объектами игры – к примеру, команду “Begin” мы уже использовали, чтобы сообщить скриптовому редактору имя нашего скрипта. Чтобы объяснить игре, к какому объекту следует применить ту или иную функцию, мы используем «стрелку»: -> (на самом деле просто дефис и знак «больше чем»). Слева от этого знака мы указываем объект (он называется вызывающим объектом), а справа – функцию, которая к нему применяется:

Object_ID -> function, [parameters]3

Функция может иметь или не иметь параметры. Параметрами могут быть ID (идентификаторы) других объектов, числа, и, в некоторых случаях, переменные.

То, что нам нужно для нашего сундука с загадкой, - это функция “OnActivate”: она информирует нас о том, «активировал» ли игрок определенный объект игрового мира или нет. Эта функция возвращает значение 1 (означает True, «истина», в терминах программирования), если объект был активирован, то есть игрок «прицелился» в него и нажал кнопку «использовать» (клавиша пробел в управлении по умолчанию). Таким образом, нам остается только проверить, не возвращает ли функция OnActivate значения «истина» в любое время в игре. Поэтому отредактируйте свой скрипт, чтобы он выглядел следующим образом:

Begin my_first_script

If ( OnActivate == 1 )

; здесь мы введем действия, совершаемые при открытии сундука

endif

End

Здесь нужно объяснить еще пару вещей: команда “If” нужна здесь для проверки условий – если выражение, заключенное в скобки, - истина, значит будут выполнены последующие линии кода до команды “EndIf”. Знак “==” (двойное «равно») проверяет, одинаково ли содержание выражений по его обе стороны (в нашем случае, равно ли значение, возвращаемое функцией “OnActivate”, единице. Если вы забудете команду “EndIf” после команды “If”, редактор будет жаловаться в вышестоящие инстанции на ошибки. Знак “;” (точка с запятой) обозначает комментарии – все, что вы напишете на этой строке после точки с запятой, будет проигнорировано при запуске скрипта. Если вы когда-нибудь станете делать большие скрипты, то наверняка научитесь любить писать комментарии.