Zander_driver 10 345 Опубликовано 20 Мая 2014 log (Показать) FATAL ERROR [error]Expression : m_textures.find(def_texture_name)!=m_textures.end() [error]Function : CUITextureMaster::FindItem [error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\ui\UITextureMaster.cpp [error]Line : 156 [error]Description : wpn_bm16f_410 stack trace:FATAL ERROR [error]Expression : m_textures.find(def_texture_name)!=m_textures.end() [error]Function : CUITextureMaster::FindItem [error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\ui\UITextureMaster.cpp [error]Line : 156 [error]Description : wpn_bm16f_410 stack trace: ТЧ, 1,0004. + Луа-расширение RvP. Такая необычная реакция на неправильно указанное имя текстуры в xml-описателе. 1 1 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Поделиться этим сообщением Ссылка на сообщение
Zander_driver 10 345 Опубликовано 28 Июня 2014 Отловил вылет, мне аж понравилось распутывать механизм его возникновения. Распутываем... (Показать) Лог достаточно банальный Log (Показать) FATAL ERROR [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 : <no expression> [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:FATAL ERROR [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 : <no expression> [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: Казалось бы, причина ясна - вызов функции, которой не существует. Однако функция есть, и называется именно так, и с ней все в порядке. как и с самим файлом скрипта тоже - в нем нет синтаксических ошибок, игра не ругается на него самого, заявляя что он 'a nil value' Причина оказалась вот в чем. В начале скрипта, есть таблица, такого вида: tbl = { string_key1 = number, string_key2 = number, ...tbl = { string_key1 = number, string_key2 = number, ... а далее есть еще одна таблица. вот такого вида: tb_funcs = { [tbl.string_key1] = function(args...) ... end, ...tb_funcs = { [tbl.string_key1] = function(args...) ... end, ... тоесть, значения ее - функции. а ключами являются значения из первой таблицы. Ну так вот. в первой таблице поменял имя одного из ключей. А во второй - забыл это сделать. Получилось что во второй таблице, одна из функций находится по ключу, который вообще то равен nil.А причем же тут та функция, которую мы вызывали, и вылетели с нею в лог? да вообще ни при чем, она просто находилась в том же файле ниже по тексту. Вывод - когда делаете в таблицах ключи вида массив/модуль.значение - убедитесь что это значение не равно nil ) а то сталкер об этом нормально не скажет. 2 2 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Поделиться этим сообщением Ссылка на сообщение
Zander_driver 10 345 Опубликовано 3 Сентября 2014 Очередной экзотический вылет лог (Показать) FATAL ERROR [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 : <no expression> [error]Arguments : LUA error: ...s.t.a.l.k.e.r\gamedata\scripts\dialogs_global.script:332: attempt to index a nil value stack trace:FATAL ERROR [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 : <no expression> [error]Arguments : LUA error: ...s.t.a.l.k.e.r\gamedata\scripts\dialogs_global.script:332: attempt to index a nil value stack trace: порожден вот такой строкой: код (Показать) aa[i] = dlg:AddPhrase(dialin[1], new_id, inp_id, -10000):GetPhraseScript() aa[i] = dlg:AddPhrase(dialin[1], new_id, inp_id, -10000):GetPhraseScript() Так вот, ни одна из переменных в этой строке, не является nil. Вопреки тому что утверждает лог. Расследование (Показать) Выводим данные перед этой строкой zander_utils.arguments_to_str({aa, i, dialin[1], new_id, inp_id}) aa[i] = dlg:AddPhrase(dialin[1], new_id, inp_id, -10000):GetPhraseScript() zander_utils.arguments_to_str({aa, i, dialin[1], new_id, inp_id}) aa[i] = dlg:AddPhrase(dialin[1], new_id, inp_id, -10000):GetPhraseScript() И получаем такие данные: TABLE:; { [KEY: NUMBER:1] = VALUE: TABLE:; Table value: { [KEY: NUMBER:1] = VALUE: USERDATA; [KEY: NUMBER:2] = VALUE: USERDATA; } [KEY: NUMBER:2] = VALUE: NUMBER:3; [KEY: NUMBER:3] = VALUE: STRING:esc_s1_story1; [KEY: NUMBER:4] = VALUE: NUMBER:1; [KEY: NUMBER:5] = VALUE: NUMBER:1; } FATAL ERROR [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 : <no expression> [error]Arguments : LUA error: ...s.t.a.l.k.e.r\gamedata\scripts\dialogs_global.script:332: attempt to index a nil value stack trace: TABLE:; { [KEY: NUMBER:1] = VALUE: TABLE:; Table value: { [KEY: NUMBER:1] = VALUE: USERDATA; [KEY: NUMBER:2] = VALUE: USERDATA; } [KEY: NUMBER:2] = VALUE: NUMBER:3; [KEY: NUMBER:3] = VALUE: STRING:esc_s1_story1; [KEY: NUMBER:4] = VALUE: NUMBER:1; [KEY: NUMBER:5] = VALUE: NUMBER:1; } FATAL ERROR [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 : <no expression> [error]Arguments : LUA error: ...s.t.a.l.k.e.r\gamedata\scripts\dialogs_global.script:332: attempt to index a nil value stack trace: Оказывается, id этой фразы, и id фразы к которой идет привязка, равны друг другу. оба - число 1. никто из них не равен nil, но вот такой вот неинформативный вылет. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Поделиться этим сообщением Ссылка на сообщение
Zander_driver 10 345 Опубликовано 18 Декабря 2014 FATAL ERROR [error]Expression : i < (int)m_text.size() [error]Function : CUISubLine::Cut2Pos [error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\ui\UISubLine.cpp [error]Line : 86 [error]Description : CUISubLine::Cut2Pos - invalid parameter stack trace:FATAL ERROR [error]Expression : i < (int)m_text.size() [error]Function : CUISubLine::Cut2Pos [error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\ui\UISubLine.cpp [error]Line : 86 [error]Description : CUISubLine::Cut2Pos - invalid parameter stack trace: Причина - достаточно странная, но... возникает это чудо в случае когда в метод db.actor:give_talk_message(text, texture, rect, info) в качестве параметра text передана строка, сформированная таким образом text = string.format("%s %s %s", t1, t2, t3) text = string.format("%s %s %s", t1, t2, t3) - если один из элементов t1, t2, t3 является пустой строкой, то будет этот вылет. т.е. видимо причина - два пробела подряд в строке? или два пробела по бокам от пустой строки. Изменил формирование строки на такое text = string.format("%s; %s; %s", t1, t2, t3)text = string.format("%s; %s; %s", t1, t2, t3) - и вылет исчез, при том что t-параметры оставались какими угодно, и пустыми строками в том числе. Еще достаточно нередко в этой же ситуации вылет происходит безлоговый. Например, если метод give_talk_message вызывался не из какой-то произвольной функции, а из метода класса. В этом случае всегда без лога. Такая вот чертовщина. 1 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Поделиться этим сообщением Ссылка на сообщение
Zander_driver 10 345 Опубликовано 25 Декабря 2014 Desertir писал(а): Возможно стОит отловить конкретные значения (пустые они или нет, неважно), при которых происходит вылет, вколотить их непосредственно в строку и начать ее изменять. Как только вылет пропадет, будет установлена причина, которых кстати может быть больше. Найти бы еще на это время. У меня на самом деле в загашнике сидит еще пара вылетов, у всех из них в графе "Line" значится что-нибудь такое, чего в этом справочнике нет. Несколько попозже пожалуй проведу тесты по ним по всем, определю причины более ясно и выложу результат тут. Desertir писал(а): PS: за такие костыли в продакшене прогера могут и без премии оставить, да и без работы... В сталкермодинге вообще нехорошая привычка у всех - решать все проблемы всяческими костылями, а не устранением самой проблемы. Может оттого они и копятся с годами, как снежный ком... 2 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Поделиться этим сообщением Ссылка на сообщение
Zander_driver 10 345 Опубликовано 30 Декабря 2014 FATAL ERROR [error]Expression : (*elements.begin())->numberOfGeoms() [error]Function : CPHShell::preBuild_FromKinematics [error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\PHShell.cpp [error]Line : 616 [error]Description : No physics shapes was assigned for model or no shapes in main root bone!!! stack trace:FATAL ERROR [error]Expression : (*elements.begin())->numberOfGeoms() [error]Function : CPHShell::preBuild_FromKinematics [error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\PHShell.cpp [error]Line : 616 [error]Description : No physics shapes was assigned for model or no shapes in main root bone!!! stack trace: Возникает из-за модели НПС, у которой не настроены шейпы (простите мой лексикон, если он не совсем корректен, я не моделлер, но думаю вы поняли о чем идет речь). Если быть точнее - повидимому когда такая модель пытается совершать определенные анимации. Так что вариантов проявления может быть много. Лечение - найти недоработанную модель и прогнать через СДК или заменить на другую. Плохо то что в самом логе нет никакого указания на то, какая именно модель вызвала вылет. Это придется выяснять самостоятельно. Могу лишь поделиться методикой как у себя ее ловил. Вылет происходил от анимации, являющейся реакцией на хит, причем почему-то только от аномалий. Скрипты успевали отработать хит-коллбек нпс перед вылетом, в коллбеке я брал нетпакет нпс, вытаскивал оттуда визуал и сбрасывал в лог. Так и нашел виновную модель. Хотя вероятно вылет может происходить и при каких-то иных действиях модели, не связанных с хитом. 4 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Поделиться этим сообщением Ссылка на сообщение