×
Меню
Индекс

MSFD Скрипты, команды и синтаксис в кратце

Типы скриптов
 
Локальные скрипты
Всякий скрипт, который присвоен объекту или актеру в игре (через выпадающее окно скриптов в окне объекта или актера), является локальным скриптом.
Локальные скрипты выполняются, если только загружена ячейка с ними – внутренняя или наружная и соседние с ней.
Когда объект со скриптом не удовлетворяет этим условиям, то скрипт не исполняется, но локальные переменные в нем сохраняются.
 
Глобальные скрипты
Всякий скрипт, не присвоенный никакому объекту является глобальным скриптом, и по умолчанию не исполняется до тех пор, пока вы его не вызовете (см. ниже). Заметьте, что для глобального скрипта не существует объекта по умолчанию, с которым он работает, поэтому все объекты должны явно указываться: хотя подобная команда будет работать в локальном скрипте на NPC:
 
AITravel 1150, 8899, 1110
 
Вам придется указать NPC в глобальном скрипте:
 
 
“NPC_ID”->AITravel 1150, 8899, 1110  ; NPC_ID уникальный идентификатор для
   ; каждого объекта в редакторе
 
Глобальные скрипты исполняются все время с тех пор, как их вызвали, и до тех пор, пока их специально не завершили.
Так что, будучи активизированными, они будут исполняться каждый фрейм, как локальные скрипты.
Поэтому необходимо использовать их с осторожностью, так как слишком многие или слишком громоздкие глобальные скрипты затормозят игру.
Команда для вызова неактивного скрипта:
 
StartScript, "Script ID"
 
С Трибуналом или Бладмуном есть возможность запускать скрипт автоматически в начале игры.
В CS в меню Gameplay/Edit starting Scripts вы можете добавить любой скрипт в список автоматически запускаемых скриптов.
 
Команда для завершения глобального скрипта:
 
StopScript, "Script ID"
 
Из МСФД 9.0 версии:
Variables local to a global script will be saved temporarily when the script is stopped and restarted. In order to ensure that variables are always saved, the script must be run at least once every load session. If you need to be sure the variables are reset, you should reset them yourself: don't rely on it happening automatically.
 
A simple way to ensure variables are saved is to use a startscript (only available with expansions); so for example the startscript might look something like this:
begin KeepVarsScript
 
if ( ScriptRunning, MyScript == 0 )
set MyScript.KeepVars to 1
StartScript MyScript
endif
 
StopScript KeepVarsScript
 
end
 
…and the script "MyScript" might look like this:
begin MyScript
 
short KeepVars
 
if ( KeepVars == 1 )
     set KeepVars to 0
StopScript MyScript
     return
endif
 
;main body of script goes here
 
end
 
Команда может быть указана, как в самом скрипте, так и в другом скрипте который стартовал из текущего.
Т.е. возможно создавать пачки скриптов.
Один отрабатывает и запускает следующий.
Это уместно если все условия не влезают в один скрипт, т.к. есть лимит на кол-во строк и условий.
Либо это просто удобно.
Один скрипт раздает Неписям оружие, а следующий только броню, а затем запускает скрипт который укажет что и кому делать.
 
Есть возможность использовать функцию StartScript для запуска глобальных скриптов, привязанных к объекту или актеру.
Такие скрипты называются “нацеленные скрипты”.
 
"Object_ID"->StartScript "Script_ ID"
 
Такие скрипты напоминают и локальные (так как есть объект по умолчанию – тот объект или актер, к которому привязан скрипт) и глобальные (скрипт постоянно выполняется и может быть завершен функцией StopScript)
 
Примечание.
Скрипты можно запускать и из диалогов.
Указав в поле Result->StartScript MyScript
Такой скрипт может работать локально, т.е. применяется на том объекте (NPC) с которым происходил диалог.