Перейти к контенту

Line 73

Expression    : fatal error
Function    : CScriptEngine::lua_error
File        : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line        : 73
Description    : 
Arguments    : LUA error: ...\gamedata\scripts\xr_danger.script:116: attempt to index field 'ignore_types' (a nil value)

[spoiler]

Причина:

Игра не понимает значения 0 в danger_ignore. Проще говоря в логике какого-то персонажа параметр danger_ignore равен нулю, либо он отрицателен, либо его вообще нету. Также может быть причина в том, что у какого-то в логике что-то неправильно указано в секции danger.

Лечение:

Для исправления рекомендую перед 116 строкой (номер строки может отличаться) дописать следующий код:

get_console():execute(self.object:name())

То имя в логе, которое будет последним после вылета, указывает на персонажа с кривой логикой.

[/spoiler]

[hr]

Expression    : fatal error
Function    : CScriptEngine::lua_error
File        : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line        : 73
Description    : 
Arguments    : LUA error: ...\gamedata\scripts\.script:34: attempt to call method 'section' (a nil value)

[spoiler]

Причина:

Метод обращения в игре не предусмотрен. Возможно, стоит пересмотреть подход к тому или иному скрипту. Часто такое возможно, когда к серверному объекту применяют клиентские методы и наоборот.

Лечение:

Найти и исправить ошибку.

[/spoiler]

[hr]

Expression    : fatal error
Function    : CScriptEngine::lua_error
File        : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line        : 73
Description    : 
Arguments    : LUA error: ...w of chernobyl\gamedata\scripts\<имя файла>.script:<номер строки>: attempt to perform arithmetic on a nil value

[spoiler]

Причина:

Попытка выполнения арифметической операции над nil.

Лечение:

Найти и исправить ошибку. Обратите внимание на строку с указанным номером, попытка выполнения арифметической оперции над nil происходит именно в ней.

[/spoiler]

[hr]

Expression    : fatal error
Function    : CScriptEngine::lua_error
File        : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line        : 73
Description    : 
Arguments    : LUA error: ...\gamedata\scripts\<имя файла>.script:<номер строки>: attempt to compare number with nil

[spoiler]

Причина:

Попытка сравнения числа с nil.

Лечение:

Найти и исправить ошибку. Обратите внимание на строку с указанным номером, попытка сравнения числа с nil происходит именно в ней.

[/spoiler]

[hr]

Expression    : fatal error
Function    : CScriptEngine::lua_error
File        : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line        : 73
Description    : 
Arguments    : LUA error: ...\gamedata\scripts\<имя файла>.script:<номер строки>: attempt to perform arithmetic on field '?' (a nil value)

[spoiler]

Причина:

Попытка получить значение таблицы по ключу nil.

Лечение:

Найти и исправить ошибку. Обратите внимание на строку с указанным номером, попытка получения значения по ключу nil происходит именно в ней.

[/spoiler]

[hr]

Expression    : fatal error
Function    : CScriptEngine::lua_error
File        : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
Line        : 73
Description    : 
Arguments    : LUA error: error in error handling

[spoiler]

Причина:

Причину вылета назвать достаточно трудно, вероятно это что-то глубоко движковое. Такой вылет может вызывать передача клиенсткого объекта в функцию switch_offline.

Лечение:

В случае передачи клиентского объекта - устранить ошибку. Но определить причину в большинстве случаев крайне проблематично - попробуйте загрузить последнее сохранение.

[/spoiler]

[hr]

Expression    : fatal error
Function    : CScriptEngine::lua_error
File        : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
Line        : 73
Description    : 
Arguments    : LUA error: attempt to call a nil value

[spoiler]

Причина:

Происходит при попытке вызвать конструктор класса, которого не существует.

Лечение:

Найти и исправить ошибку.

[/spoiler]

[hr]

Expression    : fatal error
Function    : CScriptEngine::lua_error
File        : D:\xray-svn\xr_3da\xrGame\script_engine.cpp
Line        : 73
Description    : 
Arguments    : LUA error: C stack overflow

[spoiler]

Причина:

Ошибка также может появиться со строкой 74. Переполнение стека. Смотрим внимательно: lua_error. Ошибка возможно в скриптах.

Лечение:

Загрузка последнего сохранения.

[/spoiler]

[hr]

Expression    : fatal error
Function    : CScriptEngine::lua_error
File        : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line        : 73
Description    : 
Arguments    : LUA error: No such operator defined

[spoiler]

Причина:

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

Лечение:

Найти и исправить ошибку.

[/spoiler]

[hr]

Expression    : fatal error
Function    : CScriptEngine::lua_error
File        : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
Line        : 73
Description    : 
Arguments    : LUA error: ...\gamedata\scripts\<имя файла>.script:<номер строки>: unfinished capture

[spoiler]

Причина:

Единственной причиной данного вылета которую я нашёл, это попытка использовать для функции string.find в качестве шаблона "волшебный символ" открывающуюся круглую скобку, т.е. попытка найти скобку таким образом:

local p = string.find(str, "(")

Лечение:

Для поиска открывающейся круглой скобки используйте параметр plain для данной функции со значением true, он выключает возможность поиска по шаблону и в таком случае производится поиск подстроки как есть:

local p = string.find(str, "(", 1, true)

[/spoiler]

[hr]

[error]Expression    : fatal error
[error]Function      : CScriptEngine::lua_error
[error]File          : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
[error]Line          : 73
[error]Description   : 
[error]Arguments     : LUA error: ...ing\s.t.a.l.k.e.r\gamedata\scripts\inv_system.script:1674: attempt to call function 'GetCommand_TakeSlot' (a nil value)
 

stack trace:

[spoiler]

Казалось бы, причина ясна - вызов функции, которой не существует. Однако функция есть, и называется именно так, и с ней все в порядке. как и с самим файлом скрипта тоже - в нем нет синтаксических ошибок, игра не ругается на него самого, заявляя что он 'a nil value'

Причина оказалась вот в чем. В начале скрипта, есть таблица, такого вида:

tbl = {
    string_key1 = number,
    string_key2 = number,
...

а далее есть еще одна таблица. вот такого вида:

tb_funcs = {
        [tbl.string_key1] = function(args...)
            ...
        end,
...

то есть, значения ее - функции. а ключами являются значения из первой таблицы.

Ну так вот. в первой таблице поменял имя одного из ключей. А во второй - забыл это сделать. Получилось что во второй таблице, одна из функций находится по ключу, который вообще то равен nil.
А причем же тут та функция, которую мы вызывали, и вылетели с нею в лог? да вообще ни при чем, она просто находилась в том же файле ниже по тексту.

Вывод - когда делаете в таблицах ключи вида массив/модуль.значение - убедитесь что это значение не равно nil ) а то сталкер об этом нормально не скажет.

[/spoiler]

Категории
×
×
  • Создать...