MSFD Управление глобальными скриптами
[no fix?] ScriptRunning, "ScriptName" (returns Boolean/short)
StartScript, "ScriptName"
StopScript, "ScriptName"
Эти функции используются для управления глобальными скриптами.
Глобальные скрипты начинают выполняться с помощью функции StartScript (из локального скрипта, другого глобального или поля result в диалоге) и завершаются функцией StopScript.
Проще говоря, здесь, Глобальный скрипт это не тот скрипт который был запущен из меню Gameplay->Start Scripts.
Но, любой скрипт который был запущен через диалог, или из другого скрипта.
И где цель либо не указана вовсе, например это счетчик времени до события, либо указана явно объектХХ->делает это.
Примечание: Если вы используете StopScript, что скрипт завершил сам себя, то завершение не обязательно произойдет немедленно.
Скрипт исполнится до слова End, и только потом завершиться. Так что используйте return для немедленного завершения скрипта.
Либо пишите StopScript в самом низу скрипта перед словом END.
Стартовые скрипты Трибунала в плагине начинают выполняться каждый раз, когда игра загружается, даже если они были завершены – см раздел Советы и Трюки «Определение, загрузился ли игрок» (Информация с форумов / DinkumThinkum).
Насколько я знаю, эти функции не работают с локальными скриптами, зато можно вызываться нацеленные скрипты использую «стрелку»: ObjectID -> StartScript.
Функция ScriptRunning возвращает 1, если скрипт выполняется и 0 в противном случае:
if ( ScriptRunning, CharGen == 0 )
StartScript CharGen
Endif
StopScript также может использоваться для создания однократных условий:
Begin do-once_script
[…]; делать что-то
StopScript do-once_script
End
Пример стартового скрипта, который запускает еще кучу всего.
Стартует как-раз из Start Scripts меню Gameplay.
Т.е. сам скрипт короткий, но то что он запускает... это 5 скриптов по 1000 с лишним строк.
Т.е. не умещаются в единый скрипт.
Но что бы не нагружать игру, был сделан стартовый скрипт.
Который имеет проверку от повторного срабатывания.
Еще, можно заметить, что если совсем заморочиться на блокировку повторного запуска (некоего скрипта).
Можно создать новую переменную в меню Globals, состояние которой менять скриптом с 0 на 1.
Собственно здесь это и используется.
AASTOPIT переменная в меню Globals.
Т.е. такие глобальные записываются в сохранения и если случится какой-то баг и игра подумает заново запустить Start Script, то переменная заблокирует выполнение этого действа.
Возможно это избыточная "защита" и обычного DoOnce в этом скрипте вполне хватает, но отчего бы и нет?
begin A00000_Fulladded
; cамый критичный скрипт стартует все прочие скрипты. Во избежание лишних багов,
; разнесенно по нескольким скриптам.
;*****************************************************************
short doOnce
;*****************************************************************
if ( AASTOPIT != 0 ) ;это так самая, "избыточная" защита, если вдруг игра захочет заново исполнить скрипт.
;MessageBox "STOPRUNTHISSCRIPT!" ;это дебаг сообщение.
stopscript A00000_Fulladded
return
endif
if ( doonce == 1 )
set "AASTOPIT" to 2 ;а вот и та глобальная переменная! Чтобы вот прям точно этот скрипт не смог выполниться снова (если случится какой-то баг игры).
stopscript A00000_Fulladded
return
endif
;*****************************************************************
if ( doonce == 0 )
;*****************************************************************
;самая веселая секция! стартует скрипты на АДДТОЛЕВЕЛЛИСТЗ, т.е. добавляя всё новое, существа и прочь.
;*****************************************************************
;StartScript "A00000_FulladdedLvCr" ;сделал последовательное исполнение, возможно так будет легче Игре.
;StartScript "A00000_FulladdedLvItem"
;MessageBox "Check1." ;еще одна дебаг точка.
;*****************************************************************
StartScript "A00000_FulladdedALL" ;собственно стартует первый скрипт из нескольких, по завершение коего, последовательно, запуститься следующий скрипт.
;*****************************************************************
set Doonce to 1
return
endif
; stopscript A00000_Fulladded ;это "хвост" от первой версии скрипта, т.е. да, скрипт фактически сохранил несколько версии.
END