MSFD Сообщения об ошибках, неправильная работа и обычные причины
В игре, когда исполняется скрипт:
В редакторе
Редактор обычно указывает строку, на которой есть ошибка, так что их, чаще всего, легко исправить.
"Mismatched If/else/endif starting on line..."
один или несколько if-блоков не закрыты.
Используйте табуляцию, чтобы облегчить нахождение утерянных endif-ов.
Это также случается, когда используются неверные имена функций-переменных и другие ошибки написания.
"Function reference object "Foobject" not found"
Эта ошибка показывает, что объект в запросе, например
Foobject->GetDistance Player
не существует.
Когда вы пишете скрипт, а затем создаете новый объект, на который ссылаетесь из скрипта, вы также получите эту ошибку.
Закройте окно редактора и перезапустите его, чтобы компилятор зарегистрировал объект.
"Could not find variable or function "Foobject""
Другая синтаксическая ошибка, показывающая, что вы использовали необъявленную переменную, функцию или не существующий объект.
"Script command "foofunc" not found on line 3"
Команда / функция не узнается компилятором. Обычно из-за опечаток.
"You need to end a script with script End scriptname"
Указывает, что компилятор не нашел End.
Также случается, когда процесс компиляции нарушен предыдущими ошибками.
"Syntax error Line 20. Miss matched paranthesis"
Указывает, что вы не закрыли все открытые скобки или наоборот.
"You need to enter a value on line 20"
Вы не указали все аргументы, нужные для функции.
Внутреигровые сообщения:
"EXPRESSION in script..."
После чего идет
"RightEval ..."
Эта ошибка указывает на то, что переменная не объявлена.
Чаще всего происходит с переменными, которые работают как функции, например PCEquip.
EXPRESSION в основном появляется, если переменные не объявлены в скрипте.
"LeftEval"
эта ошибка появляется, если вы случайно объявили функцию как переменную.
Например, следующие строки сгенерируют эту ошибку:
short ScriptRunning
if (ScriptRunning "MyScript" == 1 )
Обе ошибки могут быть вызваны простым отсутствием пробелов в нужных местах.
Всегда оставляйте пробелы между скобками и вызовами функций, переменными и т.д.
If ( OnActivate == 1 )
а не
if (OnActivate==1).
Это порождает ошибки очень редко, но иногда порождает, поверьте мне.
"Infix to Postfix" error
Обычно указывает на плохой синтаксис. Может быть вызвано неправильной командой set с использованием стрелки:
set somevar to ActorID->GetHealth
следует заменить на:
set somevar to ( ActorID->GetHealth )
Также эта ошибка может снова указывать на забытое объявление переменной, работающей как функция, например OnPCEquip, и т.д. (Спасибо Horatio и Ragnar_GD)