Добро пожаловать Гость, Вы в разделе: Вход

Энциклопедия по редактору Arma, Arma 2, Arma 3 и Operation Flashpoint

VKRSSRSS
На главную

Навигация


Искать в энциклопедии:
»


Важная информация




Сайт управляется

Учебник по написанию скриптов
Изображение



Учебник по созданию роликов


Изображение



Наши партнеры



ArmA 3, ArmA 2 news Russian community, SARMAT community

Распространенные ошибки в скриптах

RSS
Изменено 04/06/2013 20:08 Mikezar Категоризировано Скрипты
Ввиду того,что в процессе написания скриптов там и тут могут быть допущены ошибки, следует упоминуть все уведомления об ошибках, которые всплывают в верхней части экрана при выполнеиии соотвествующего скрипта.




Распространенная ошибка: Ошибка в выражении

Эта ошибка возникает, когда тип данных, ожидаемый оператором не совпадает с заданным.


Совместимость: Версия 1.96
Пример:


 _myString = "смысл жизни" + 42 

Ошибка связаная с некорректным числовым значением в выражени

Это случается,как правило, когда выражение незавершено или же не верно вовсе.


Совместимость: Версия 1.96
Пример:

 _myNumber = 2 + 3 + 

Тип ошибки: ожидается ничего

Эта ошибка обычно возникает, когда утверждение является неполным, неправильным или несуществующим.


Совместимость: Версия 1.96
Пример (неверное утверждение):


 7 + 6 * 5 

Пример (неверное утверждение):


3 = 4


Пример (неверное утверждение):


 _myVariable 


Ошибка типа String ожидаемого кода

Эта ошибка возникает, когда есть синтаксические недочеты, содержащиеся внутри блока кода, который составляет часть другого выражения. Ошибка будет идентифицирована как часть первоначального утверждения, а не на конкретней строке, в которой она на самом деле существует. Например, если есть синтаксические ошибки в выражениях "then" блок или "else" блок, ошибки будут выявлены в первой части "then" ключевого слова или "else" соответственно.

Совместимость: Версия неизвестна
Пример:


 if (_USD + _USDcent + _CAD + _CADcent + _ZWD == 0) then
 {
 hint "Your wallet is empty.";
 }
 else
 {
 _output = "Your wallet contains:";
 if (_USD+_USDcent > 0) then
 {
 _output = _output + format["\n- United States Dollars: %1.%2 USD", _USD, _USDcent];
 } '''<-- Пропущена точка с запятой'''
 if (_CAD+_CADcent > 0) then
 {
 _output = _output + format["\n- Canadian Dollars: %1.%2 CAD", _CAD, _CADcent];
 } '''<-- Пропущена точка с запятой'''
 if (_ZWD > 0) then
 {
 _output = _output + format["\n- Zimbabwean Dollars: %1 ZWD", _ZWD];
 } '''<-- Пропущена точка с запятой'''
 ...
 hint _output;
 };

Здесь пропущены точка с запятой в каждом выражении условия,но ошибка перед "else" утверждением будет идентифицирована,как Ошибка типа String ожидаемого кода.

Ошибка: Неизвестный оператор

Эта ошибка возникает в том случае, когда игровой процесс пытается принять что-то за оператор, но не может найти соответствующий символ.


Совместимость: Версия 1.96
Примеры:


 _myBits = 1002 | 43
 _myVariable = "hello " concat "world!"

Есть несколько причин, почему происходит подобное. Если скрипт, предназначен для новой версии OFP и использует совершенно новый оператор, и если скрипт запустить на старых копиях игры, появится ошибка. Другой распространенной причиной является форматирование String в виде предписания (instruction), где переменная внутри данного блока не определена.


Пример:


 ["a = %1", b]

Выводит предписание:


a = скалярное значение массива строки 0xfcfffef

Результат:

Движок интерпретирует "скалярные", как неинициализированные переменные (по аналогии с 'b',в примере выше), а также анализатор ожидает оператора в кач естве следующего символа а. 'BOOL' не может быть найден в списке операторов (так как он не один), и поэтому выдается ошибка: Неизвестный оператор.
Совместимость: Версия 1.96

Ошибка: Деление на 0

Данная ошибка возникает, когда вы пытаетесь поделить переменную имеющую нулевое значение или, проще говоря, при попытке разделить переменную на 0.
Подобная ошибка также появляется при попытке получения доступа к элементу несуществующего массива.


Совместимость: Версия 1.96
Пример:


 _ myVar = 0 / 15 
 _myVar = 15 / 0 
 _myVar = [1,2,3] select 15

Когда ошибка не имеет смысла

Иногда, отображаемая ошибка лишена смысла. Анализатор ошибки указывает на строку кода, которая является верной, но при этом он выявляет недочеты существующие в данном выражении.


В этом случае, проблема обычно находится в строке чуть ниже данного кода. Обычно источником ошибки является обычное отсутствие скобок, кронштейна, фигурных скобок и т.д.


Совместимость:Это относится только к sqf синтаксису, не к sqs.
Пример:


 for "_i" from 0 to 1 do
 {
 _str = format["mystring";
 };

В этом примере, наличие ошибки будет показано левее слова "do". Тем не менее, ошибка на самом деле в синтаксисе выражения ниже. (Такую ошибку будет трудно обнаружить, если в коде на много больше строк.)


Скалярное значение массива строки 0xe0ffffef

Если переменные не существуют, то как правило появляется ошибка " Скалярное значение массива строки 0xe0ffffef".


Совместимость: Версия ArmA 1.00


Для OFP версии используется скалярное значение массива строки 0xfcffffef.


Примеры:


 hint format ["%1", undefined_variable]
 hint (if (format ["%1", undefined_variable] == "scalar bool array string 0xe0ffffef") then [{"Variable undefined"},{"Variable already defined"}])
Две колонки
О нас
SunHorizon Wiki версия 1.0.2.17.
© 2013-2014 SUNHORIZON.INFO.Все права сохранены.
В проекте использованы изображения FamFamFam
Связь с нами
Изображение
Правила сайта
Изображение

Авторские права
Изображение