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

Следим за временем

Есть несколько возможностей следить за ходом времени в скриптах, включая те, которые вообще не отражены в файле справки или отражены слабо.

Таймер

[no fix] GetSecondsPassed (returns float)

Простой таймер можно написать, используя функцию GetSecondsPassed. Она возвращает число секунд, прошедших с последнего кадра, как число с плавающей точкой. Чтобы использовать это, как таймер, используйте следующий пример:

Begin TimerScript

Float timer

Short state

Set timer to (timer + GetSecondsPassed)

If (timer > 10)

MessageBox “Показываюсь каждые 10 сек”

Set timer to 0

Endif

End TimerScript

Глобальные переменные, зависящие от времени

GameHour (is float global variable)

Day (is short global variable)

Month (is short global variable)

Year (is short global variable)

Эти переменные устанавливаются игрой и содержат текущую дату и время.

Морровиндовский календарь содержит небольшую ошибку (спасибо samois за информацию): МВ начинается 16 числа, 7 месяца, 427 года. (16 число месяца Урожая). Далее приведен порядок следования месяцев с количеством дней в каждом.

(Утренней Звезды ???)

Восхода 31

Первоцвета 28

Дождя 31

Сева 30

Середины Года 31

Солнцеворота 30

Урожая 31

Огня 31

Мороза 30

Заката 31

Вечерней Звезды 30

Так что в годе Морра 334 дня!?! Возможно, это означает, что Bethesda что-то напутала в коде и потеряла месяц, Утренней Звезды / Январь… Похоже, месяц Вечерней Звезды неправильно переходит на Месяц Восхода, миную Утреннюю Звезду, так как если поставить месяц в 0, то месяц Утренней Звезды будет правильно отображен в меню. Так что это можно исправить скриптами.

Пример: Проверка времени, используя переменную GameHour:

Begin AfternoonTea

If ( GameHour >= 17 )

If ( GameHour <= 19 )

“Cup of Tea” -> Enable

endif

elseif ( GameHour < 17 )

if ( GameHour >19 )

“Cup of Tea” -> Disable

endif

endif

End AfternoonTea

Течение дней

Day (is short global variable)

Используйте глобальную переменную “Day”. Она содержит текущий "день месяца" – так что для "17, Урожая" это 17. Это можно использовать, чтобы следить за тем, сколько дней прошло:

Short localdaysPassed

Short currentDay

if ( currentDay != Day ) ; как только Day меняется (ожидается увеличение)

set currentDay to Day

set localdaysPassed to localdaysPassed + 1 ; добавить 1 к счетчику

endif

Обычно это используется для ограниченных по времени заданий в глобальных скриптах, чтобы быть уверенными, что течение времени измеряется корректно. Однако это можно использовать и как триггер, вызывающий событие через некоторое время после того, как игрок стал обладателем предмета, а также в других целях.

DaysPassed (is short global variable)

Содержит количество прошедших дней с начала игры. Чтобы переменная работала, ее нужно объявить как глобальную. Это объявление есть в Tribunal.esm, но его нет в Bloodmoon.esm. Так что, если мод не зависит от Tribunal.esm, то эта переменная ДОЛЖНА быть объявлена для использования. (Информация с форумов / Erstam)