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

Справочник вылетов


ColR_iT

Рекомендуемые сообщения

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.

Поделиться этим сообщением


Ссылка на сообщение

Отловил вылет, мне аж понравилось распутывать механизм его возникновения.

Лог достаточно банальный

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,
...

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

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.

Поделиться этим сообщением


Ссылка на сообщение

Очередной экзотический вылет

 

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()

 

 

Так вот, ни одна из переменных в этой строке, не является 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()

И получаем такие данные:

 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.

Поделиться этим сообщением


Ссылка на сообщение
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) 

- если один из элементов 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.

Поделиться этим сообщением


Ссылка на сообщение

 

 

Возможно стОит отловить конкретные значения (пустые они или нет, неважно), при которых происходит вылет, вколотить их непосредственно в строку и начать ее изменять. Как только вылет пропадет, будет установлена причина, которых кстати может быть больше.

Найти бы еще на это время. У меня на самом деле в загашнике сидит еще пара вылетов, у всех из них в графе "Line" значится что-нибудь такое, чего в этом справочнике нет. Несколько попозже пожалуй проведу тесты по ним по всем, определю причины более ясно и выложу результат тут.

 

 

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.

Поделиться этим сообщением


Ссылка на сообщение
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.

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...