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)
Пара примеров дайзПассед скриптов.
Begin AAA0000_DAYSLEFT
; небольшой датчик прошедшего времени со дня начала чего-то там. запустить из чего-то там.
; показывает +1 день! Т.е. стартовый день означен как 1 - следовательно следующий день будет ВТОРЫМ!
; а не то что прошло два дня и уже третий. Лишь, "наступил второй\третий" и т.д. день.
;************************************************************
short currentDay
short LOCALdaysPassed
Short DAYLFT
Short Doonce
Short framecounter
;************************************************************
if ( menumode == 1 )
return
endif
;************************************************************
If ( framecounter < 500 ) ;скрипт работает глобально, но проверять свои условия ему требуется раз в сутки. Т.е. выполнять оный надо редко! Отчего счетчик фреймов должен иметь большие значения! 50, 500, 5000, или вовсе 100000, хотя такое может вызвать проблемы...
set framecounter to ( framecounter + 1 )
Return
Endif
set framecounter to 0
;*************************************************************
if ( currentDay != Day )
Set currentDay to Day
Set LOCALdaysPassed to LOCALdaysPassed + 1
Set Doonce to 0
endif
;*************************************************************
If ( doonce == 1 )
messagebox "Прошло: %g. -1. день.", DAYLFT
Set Doonce to 2
return
endif
If ( doonce == 0 )
if ( daysPassed > 0 )
;MessageBox "DAY LEFT." ;это дебаг сообщение на проверку работы скрипта как такового.
set DAYLFT to ( LOCALdaysPassed )
Set Doonce to 1
return
endif
endif
End
А это уже квестовый скрипт, который проверяет кол-во дней после получения квеста.
Begin AAA0002_drelyneDAYSET
;скрипт дрелине лленим.
short currentDay
short daysPassed
Short framecounter
;************************************************************
if ( menumode == 1 )
return
endif
;************************************************************
If ( framecounter < 50 )
set framecounter to ( framecounter + 1 )
Return
Endif
set framecounter to 0
;*************************************************************
if ( currentDay != Day )
Set currentDay to Day
Set daysPassed to daysPassed + 1
endif
;**************************************************************
if ( GetPCcell "(Halls of Remembering)" == 1 ) ;это блокировка скрипта в локация которые "вне времени и пространства" т.е. не считаем дни когда игрока там.
return
endif
;**************************************************************
if ( GetPCcell "(The Forgotten Temple)" == 1 )
return
endif
;**************************************************************
if ( GetPCcell "Koal Cave, Chamber" == 1 )
return
endif
;*************************************************************
if ( daysPassed > 7 )
if ( GetPCSleep == 0 )
;Journal "AAA3_AurSH" 30 ;дневник и скрипт задаются в плагине, здесь они залочены.
;StartScript "AAA0002_drelyneRANDOOM"
MessageBox "Должно быть пора навестить Храм в Вивике и выяснить о деле Дрелине Лленим!" "Готово."
StopScript "AAA0002_drelyneDAYSET"
return
endif
endif
End