×
Меню
Индекс

MSFD Течение дней

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