Типичные ошибки и методы их устранения — различия между версиями
RedPython (обсуждение | вклад) (→Симуляция) |
RedPython (обсуждение | вклад) |
||
(не показано 18 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
− | Для поиска по страничке используйте Ctrl+F | + | Для поиска по страничке используйте '''Ctrl+F''' |
==xrAI== | ==xrAI== | ||
+ | <syntaxhighlight lang="text">[error]Expression : tpGraphs.size() | ||
+ | [error]Function : CGraphMerger::CGraphMerger | ||
+ | [error]File : X:\xray\utils\xrAI\xr_graph_merge.cpp | ||
+ | [error]Line : 599 | ||
+ | [error]Description : empty [levels] section in configs!</syntaxhighlight> | ||
+ | Секция уровня не добавлена в game_levels.ltx | ||
+ | ---- | ||
+ | <syntaxhighlight lang="text">! AI-node [87.500, 9.188, 160.300] not connected to AI-map | ||
+ | |||
+ | FATAL ERROR | ||
+ | |||
+ | [error]Expression : error_nodes.empty() | ||
+ | [error]Function : CGameGraphBuilder::check_fill | ||
+ | [error]File : X:\xray\utils\xrAI\game_graph_builder.cpp | ||
+ | [error]Line : 273 | ||
+ | [error]Description : Some ai-node is not connected to AI-map. See log for details.</syntaxhighlight> | ||
+ | Причин такой ошибки может быть две: одна явная, другая неочевидная. | ||
+ | Явная – если в логе вы видите нижнюю секцию с текстом про <code>Some ai-node is not connected to AI-map</code>. Значит, одна (или множество) нод не соединены с остальной ИИ-сеткой. Не допускайте создания отдельных островков нод, всегда соединяйте их с основной ИИ-сеткой, и удаляйте отдельно стоящие и вырожденные ноды (в ЛЕ выделяются красным) нажатием кнопки Select 0-Link на панели AI Map и клавиши Delete на клавиатуре.<br /> | ||
+ | Если же в логе тьма-тьмущая строк вида <code>! AI-node [-216.650, -0.023, 198.450] not connected to AI-map</code>, а в конце нет внятного сообщения об ошибке, лишь какой-то мутный стектрейс, то скорее всего, компилятор рухнул, воспринимая каждую ноду ИИ-карты как несвязную, и не успел дойти до стадии загрузки точек графа. Нужно проверить, есть ли на уровне точки графа, если нет, то добавить и переэкспортировать спаун. | ||
+ | ---- | ||
+ | <syntaxhighlight lang="text">[error]Expression : assertion failed | ||
+ | [error]Function : CGameGraphBuilder::save_cross_table | ||
+ | [error]File : .\game_graph_builder.cpp | ||
+ | [error]Line : 351 | ||
+ | [error]Description : graph().header().vertex_count() > tCrossTableCell.tGraphIndex</syntaxhighlight> | ||
+ | На карте отсутствуют точки графа. Нужно добавить хотя бы одну: Spawn Element -> AI\graph point и экспортировать level.game: Compile -> Make Game | ||
+ | ---- | ||
<syntaxhighlight lang="text">[error]Expression : F | <syntaxhighlight lang="text">[error]Expression : F | ||
[error]Function : xrLoad | [error]Function : xrLoad | ||
Строка 7: | Строка 34: | ||
[error]Line : 272 | [error]Line : 272 | ||
[error]Description : x:\gamedata\levels\escape\build.aimap</syntaxhighlight> | [error]Description : x:\gamedata\levels\escape\build.aimap</syntaxhighlight> | ||
− | В папке с уровнем gamedata\level\escape отсутствует build.aimap | + | В папке с уровнем gamedata\level\escape отсутствует build.aimap<br /> |
Нужно экспортировать ИИ-карту из LevelEditor: Compile->Make AI Map | Нужно экспортировать ИИ-карту из LevelEditor: Compile->Make AI Map | ||
---- | ---- | ||
− | <syntaxhighlight lang="text">[error]Expression : | + | <syntaxhighlight lang="text">! Cannot build GAME path! (object esc_tutorial_wounded0826) |
− | [error]Function : | + | ! CURRENT LEVEL : escape |
− | [error]File : | + | ! CURRENT game point position : [-146.011078][-20.711269][-147.502380] |
− | [error]Line : | + | |
− | [error]Description : graph | + | FATAL ERROR |
− | + | ||
+ | [error]Expression : I != levels().end() | ||
+ | [error]Function : GameGraph::CHeader::level | ||
+ | [error]File : f:\project\home\stalker\borscht\src_engine\xray\xrgame\game_graph_inline.h | ||
+ | [error]Line : 153 | ||
+ | [error]Description : there is no specified level in the game graph : 205</syntaxhighlight> | ||
+ | Такая ошибка возникла после того, как была прервана компиляция ИИ-сетки. Видимо, испортился игровой граф, нужно перекомпилировать его (xrAI -f) | ||
---- | ---- | ||
<syntaxhighlight lang="text">[error]Expression : assertion failed | <syntaxhighlight lang="text">[error]Expression : assertion failed | ||
Строка 33: | Строка 66: | ||
[error]Arguments : esc_zone_mine_gravitational_weak_0009</syntaxhighlight> | [error]Arguments : esc_zone_mine_gravitational_weak_0009</syntaxhighlight> | ||
Аномалия расположена не на ИИ-сетке. | Аномалия расположена не на ИИ-сетке. | ||
+ | ---- | ||
+ | <syntaxhighlight lang="text">[error]Expression : assertion failed | ||
+ | [error]Function : CGraphMerger::CGraphMerger | ||
+ | [error]File : xr_graph_merge.cpp | ||
+ | [error]Line : 621 | ||
+ | [error]Description : M != (*K).second->m_tVertexMap.end()</syntaxhighlight> | ||
+ | Одной из точек графа для [[level changer|перехода между уровнями]] задана связь с другой, несуществующей (или с несуществующим именем). При возникновении такой ошибки в первую очередь стоит проверить наличие собственно точки графа на уровне через Object List в режиме Spawn, затем наличие ИИ-сетки под ней, и уж в последнюю очередь настройки. | ||
+ | |||
+ | == Красные строки в логе == | ||
+ | <syntaxhighlight lang="text">! level_path().failed() during navigation</syntaxhighlight> | ||
+ | Путь непися пролегает через пространство, где неадекватно соединены ноды ИИ-сетки. Нужно правильно соединить ноды. | ||
==Редакторы== | ==Редакторы== | ||
Строка 40: | Строка 84: | ||
Line : 276 | Line : 276 | ||
Description : (Pos<=Size) && (Pos>=0)</syntaxhighlight> | Description : (Pos<=Size) && (Pos>=0)</syntaxhighlight> | ||
− | Такой вылет был, когда в папке с СДК оказался левый .xdb-архив. | + | Такой вылет был, когда в папке с СДК оказался левый .xdb-архив и движок попытался автоматически его прочитать. |
+ | |||
+ | ==Actor Editor== | ||
+ | <syntaxhighlight lang="text">!Can't load: 'characters\stalker_smart_cover_animation.omf' invalid bones count | ||
+ | !Can't find bone: 'bip01' | ||
+ | !Can't find bone: 'root_stalker' | ||
+ | !Can't load: 'characters\stalker_smart_cover_animation.omf' invalid bones count | ||
+ | !Different bone count[characters\stalker_smart_cover_animation.omf] [Object: '45' <-> Motions: '47'] | ||
+ | ! error in model [x:\rawdata\objects\actors\stalker_bandits\stalker_bandit_4]. Unable to load motion file 'characters\stalker_smart_cover_animation.omf'. | ||
+ | |||
+ | FATAL ERROR | ||
+ | |||
+ | [error]Expression : assertion failed | ||
+ | [error]Function : ..\..\Layers\xrRender\SkeletonAnimated.cpp | ||
+ | [error]File : ..\..\Layers\xrRender\SkeletonAnimated.cpp | ||
+ | [error]Line : 732 | ||
+ | [error]Description : m_Motions.size()</syntaxhighlight> | ||
+ | В модель из ТЧ (45 костей) были подключены .omf из ЧН/ЗП (47 костей). Редактор ругается на несоответствие скелета модели анимациям, сделанным под другой скелет. | ||
==Игра== | ==Игра== | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
[error]Expression : fatal error | [error]Expression : fatal error | ||
Строка 73: | Строка 112: | ||
[error]Arguments : LUA error: x:\gamedata\scripts\_g.script:973: bad argument #2 to 'format' (string expected, got nil)</syntaxhighlight> | [error]Arguments : LUA error: x:\gamedata\scripts\_g.script:973: bad argument #2 to 'format' (string expected, got nil)</syntaxhighlight> | ||
Самый мерзкий и жопошный вылет, который указывает только на то, что игра вылетела, но не на причину креша. Возникает потому, что в релизной версии игры разрабы отрубили команды log и assert. В качестве костыля можно использовать такие решения: [http://www.gameru.net/forum/index.php?s=&showtopic=67052&view=findpost&p=1607546], [http://www.gameru.net/forum/index.php?s=&showtopic=67052&view=findpost&p=1607620] | Самый мерзкий и жопошный вылет, который указывает только на то, что игра вылетела, но не на причину креша. Возникает потому, что в релизной версии игры разрабы отрубили команды log и assert. В качестве костыля можно использовать такие решения: [http://www.gameru.net/forum/index.php?s=&showtopic=67052&view=findpost&p=1607546], [http://www.gameru.net/forum/index.php?s=&showtopic=67052&view=findpost&p=1607620] | ||
+ | ---- | ||
+ | <syntaxhighlight lang="text">[error]Expression : false | ||
+ | [error]Function : CXml::Load | ||
+ | [error]File : xrXMLParser.cpp | ||
+ | [error]Line : 87 | ||
+ | [error]Description : XML file:text\rus\st_quests_escape.xml value: errDescr:Error reading end tag.</syntaxhighlight> | ||
+ | В указанном файле ошибка синтаксиса: где-то не закрыт тег. | ||
---- | ---- | ||
<syntaxhighlight lang="text">[error]Expression : !save_guid || (*save_guid == header().guid()) || ignore_save_incompatibility() | <syntaxhighlight lang="text">[error]Expression : !save_guid || (*save_guid == header().guid()) || ignore_save_incompatibility() | ||
Строка 97: | Строка 143: | ||
Движок пытается прочесть какой-то левый архив или просто файл с расширением сталкирского архива (*.db, *.xdb). Подробности [http://www.gameru.net/forum/index.php?s=&showtopic=67034&view=findpost&p=1608736 тут] | Движок пытается прочесть какой-то левый архив или просто файл с расширением сталкирского архива (*.db, *.xdb). Подробности [http://www.gameru.net/forum/index.php?s=&showtopic=67034&view=findpost&p=1608736 тут] | ||
+ | ==Геометрия уровней== | ||
+ | Вылет на этапе загрузки шейдеров при попытке запуска уровня на r1: | ||
+ | <syntaxhighlight lang="text">Expression : fatal error | ||
+ | Function : CBlender_default::Compile | ||
+ | File : X:\xray\Layers\xrRenderPC_R1\BlenderDefault.cpp | ||
+ | Line : 50 | ||
+ | Description : <no expression> | ||
+ | Arguments : Not enought textures for shader, base tex: floor\floor_dirty_gr_02</syntaxhighlight> | ||
+ | Вызван некорректными настройками .thm соответствующей текстуры – у неё установлен флаг Implicit Lighted, то есть лайтмапы для неё считаются как для террейна. Из-за этого же в папке с уровнем появилась папка floor, в которую скопировалась эта текстура. А крашится потому, что у террейна один лайтмап, а не два, как у шейдера default. | ||
+ | <br /> | ||
+ | Без перекомпиляции уровня исправить это можно с помощью [[level. compiler/decompiler (level. cdc) | распаковщика файла .level]]. Для этого распаковать файл .level из папки с уровнем, найти в FSL_SHADERS.ltx секцию вида | ||
+ | <syntaxhighlight lang="ini">[58] | ||
+ | shader = default | ||
+ | textures = floor\floor_dirty_gr_02,floor\floor_dirty_gr_02_lm</syntaxhighlight> | ||
+ | и сменить в ней шейдер c лайтмапного default на вершинный def_vertex, а лайтмапную текстуру (_lm) вовсе убрать. Получится так: | ||
+ | <syntaxhighlight lang="ini">[58] | ||
+ | shader = def_shaders\def_vertex | ||
+ | textures = floor\floor_dirty_gr_02</syntaxhighlight> | ||
+ | Запаковать файл, переименовать в .level и скопировать с заменой в папку с уровнем. | ||
+ | ---- | ||
+ | <syntaxhighlight lang="text">Expression : fs | ||
+ | Function : CResourceManager::_CreateVS | ||
+ | File : E:\priquel\sources\engine\Layers\xrRender\ResourceManager_Resources.cpp | ||
+ | Line : 203 | ||
+ | Description : shader file doesnt exist | ||
+ | Arguments : x:\gamedata\shaders\r2\deffer_impl_lmh_bump-hq.vs | ||
+ | |||
+ | Expression : R | ||
+ | Function : CResourceManager::_CreatePS | ||
+ | File : E:\priquel\sources\engine\Layers\xrRender\ResourceManager_Resources.cpp | ||
+ | Line : 309 | ||
+ | Description : x:\gamedata\shaders\r2\deffer_impl_lmh_bump.ps</syntaxhighlight> | ||
+ | Конкретно эти ошибки вылезают в ЧН при попытке запуска на втором рендере, если геометрия уровня скомпилирована на низких настройках. | ||
+ | Чтобы игра не валилась, нужно подсунуть [https://files.xray-engine.org/shaders/r2_deffer_impl_lmh_pseudofix.7z те файлы, что она хочет]. Доподлинно неизвестно, что должно было быть в этих шейдерах, так что по ссылке .ps/.vs с обычными инклюдами внутри. | ||
+ | |||
+ | == Динамические модели == | ||
+ | <syntaxhighlight lang="text">Expression : m_attack_animation.valid() | ||
+ | Function : CVisualZone::net_Spawn | ||
+ | File : E:\priquel\sources\engine\xrGame\ZoneVisual.cpp | ||
+ | Line : 34 | ||
+ | Description : object[esc_burning_fluff_strong]: cannot find attack animation[] in model[dynamics\anomalies\burning_fluff_01]</syntaxhighlight> | ||
+ | На карте присутствует динамическая модель, у которой предусмотрена, но не задана анимация атаки. Нужно задать её в LevelEditor'е в свойствах спаун-объекта в поле Attack animation. | ||
+ | ---- | ||
+ | <syntaxhighlight lang="text">[error]Expression : motion_ID.valid() | ||
+ | [error]Function : CKinematicsAnimated::ID_Cycle | ||
+ | [error]File : ..\xrRender\SkeletonAnimated.cpp | ||
+ | [error]Line : 208 | ||
+ | [error]Description : ! MODEL: can't find cycle: | ||
+ | [error]Arguments : death_init</syntaxhighlight> | ||
+ | Не найдена анимация с именем '''death_init'''. Возможно, к модели не подключен нужный .omf | ||
+ | ---- | ||
+ | <syntaxhighlight lang="text">[error]Expression : BI_NONE!=f_bones.back() | ||
+ | [error]Function : P_build_Shell | ||
+ | [error]File : C:\projects\xray15\xray\xrGame\PhysicsShell.cpp | ||
+ | [error]Line : 136 | ||
+ | [error]Description : wrong fixed bone</syntaxhighlight> | ||
+ | Имя кости, используемой для фиксации модели, отличается от указанного в соответствующем поле LE. Например, в модели кость носит имя '''link1''', а для физического объекта в редакторе уровней было указано имя '''link'''. | ||
+ | ---- | ||
+ | <syntaxhighlight lang="text">[error]Expression : fatal error | ||
+ | [error]Function : CScriptEngine::lua_pcall_failed | ||
+ | [error]File : C:\projects\xray15\xray\xrServerEntities\script_engine.cpp | ||
+ | [error]Line : 192 | ||
+ | [error]Description : <no expression> | ||
+ | [error]Arguments : LUA error: x:\gamedata\scripts\ph_door.script:36: attempt to index field 'joint' (a nil value)</syntaxhighlight> | ||
+ | Ошибка возникла, когда в модели двери все кости имели тип rigid. Но для двери или ворот хотя бы одна кость должна иметь тип joint, чтобы дверь могла открываться. | ||
== Симуляция == | == Симуляция == | ||
+ | <syntaxhighlight lang="text">[error]Expression : m_path | ||
+ | [error]Function : CPatrolPathParams::CPatrolPathParams | ||
+ | [error]File : patrol_path_params.cpp | ||
+ | [error]Line : 19 | ||
+ | [error]Description : There is no patrol path | ||
+ | [error]Arguments : esc_hit_point</syntaxhighlight>На уровне отсутствует точка пути esc_hit_point. | ||
<syntaxhighlight lang="text">! [LUA][ERROR] ERROR: There is no kamp path in smart[esc_pigsty_ruins_st_01]</syntaxhighlight>В [[Лагерь_(smart_terrain)|лагере]] отсутствуют точки пути с постфиксом '''_kamp_N'''. Нужно добавить как минимум одну '''_kamp_N''' и '''_kamp_N_task''', где N — порядковый номер от 1. | <syntaxhighlight lang="text">! [LUA][ERROR] ERROR: There is no kamp path in smart[esc_pigsty_ruins_st_01]</syntaxhighlight>В [[Лагерь_(smart_terrain)|лагере]] отсутствуют точки пути с постфиксом '''_kamp_N'''. Нужно добавить как минимум одну '''_kamp_N''' и '''_kamp_N_task''', где N — порядковый номер от 1. | ||
---- | ---- | ||
<syntaxhighlight lang="ini">! [LUA][ERROR] ERROR: Insufficient smart_terrain jobs test_smartterrain</syntaxhighlight> | <syntaxhighlight lang="ini">! [LUA][ERROR] ERROR: Insufficient smart_terrain jobs test_smartterrain</syntaxhighlight> | ||
− | В лагере трётся слишком много народу. Нужно либо уменьшить количество групп ('''faction_*.ltx'''), либо уменьшить количество персонажей в группе ('''squad_descr_*.ltx'''), либо (что правильнее)создать в смарте дополнительные работы, чтобы бездельники смогли их занять. | + | В лагере трётся слишком много народу. Нужно либо уменьшить количество групп ('''faction_*.ltx'''), либо уменьшить количество персонажей в группе ('''squad_descr_*.ltx'''), либо (что правильнее) создать в смарте дополнительные работы, чтобы бездельники смогли их занять. |
---- | ---- | ||
<syntaxhighlight lang="text">[error]Expression : vertex || show_restrictions(m_object) | <syntaxhighlight lang="text">[error]Expression : vertex || show_restrictions(m_object) | ||
Строка 122: | Строка 239: | ||
---- | ---- | ||
<syntaxhighlight lang="text">! [LUA][ERROR] ERROR: object 'esc_wolf' configuration file [logic\esc\wolf.ltx] NOT FOUND or section [logic] isn't assigned</syntaxhighlight>В конфиге персонажа отсутствует секция [logic], или же отсутствует сам конфиг. Однако была ситуация, когда такой вылет возникал из-за того, что в настройках смарта дублировалась ссылка на этот конфиг в секции эксклюзивных работ. | <syntaxhighlight lang="text">! [LUA][ERROR] ERROR: object 'esc_wolf' configuration file [logic\esc\wolf.ltx] NOT FOUND or section [logic] isn't assigned</syntaxhighlight>В конфиге персонажа отсутствует секция [logic], или же отсутствует сам конфиг. Однако была ситуация, когда такой вылет возникал из-за того, что в настройках смарта дублировалась ссылка на этот конфиг в секции эксклюзивных работ. | ||
+ | ---- | ||
+ | <syntaxhighlight lang="text"> | ||
+ | [error]Expression : fatal error | ||
+ | [error]Function : CScriptEngine::lua_pcall_failed | ||
+ | [error]File : ..\xrServerEntities\script_engine.cpp | ||
+ | [error]Line : 192 | ||
+ | [error]Description : <no expression> | ||
+ | [error]Arguments : LUA error: x:\gamedata\scripts\sim_faction_brain_mutant.script:90: attempt to index field '?' (a nil value)</syntaxhighlight>Такая ошибка вылезла, когда на карту был добавлен спейсрестриктор без каких-либо настроек. | ||
+ | ---- | ||
+ | <syntaxhighlight lang="text">[error]Expression : level_graph->valid_vertex_id(m_level_vertex_id) | ||
+ | [error]Function : CPatrolPoint::verify_vertex_id | ||
+ | [error]File : C:\xray\xrGame\patrol_point.cpp | ||
+ | [error]Line : 46 | ||
+ | |||
+ | ! Patrol point wp00 in path esc_atp_st_guard_4_walk is not on the level graph vertex! | ||
+ | </syntaxhighlight>Точка пути находится не на ИИ-сетке. Необходимо либо подвинуть точку, либо проложить ноды ИИ-сетки под ней. Такую ошибку можно увидеть лишь в отладочной сборке, в релизной же выдаётся лог ниже. | ||
+ | ---- | ||
+ | <syntaxhighlight lang="text">[error]Expression : !object->used_ai_locations() || ai().level_graph().valid_vertex_id(object->m_tNodeID) | ||
+ | [error]Function : CALifeSwitchManager::add_online | ||
+ | [error]File : X:\xray\xrGame\alife_switch_manager.cpp | ||
+ | [error]Line : 64 | ||
+ | [error]Description : Invalid vertex for object | ||
+ | [error]Arguments : sim_default_military_1_sniper1561</syntaxhighlight> | ||
+ | Сам по себе лог малоинформативен и указывает лишь на то, что персонаж оказался вне ИИ-сетки. Причиной этого вылета может быть то, что точка пути (вейпойнт), на которой заспавнился персонаж, находится не на ИИ-сетке. См. описание выше. | ||
== Сетевая игра == | == Сетевая игра == |
Текущая версия на 01:16, 25 февраля 2024
Для поиска по страничке используйте Ctrl+F
Содержание
xrAI[править]
[error]Expression : tpGraphs.size()
[error]Function : CGraphMerger::CGraphMerger
[error]File : X:\xray\utils\xrAI\xr_graph_merge.cpp
[error]Line : 599
[error]Description : empty [levels] section in configs!
Секция уровня не добавлена в game_levels.ltx
! AI-node [87.500, 9.188, 160.300] not connected to AI-map
FATAL ERROR
[error]Expression : error_nodes.empty()
[error]Function : CGameGraphBuilder::check_fill
[error]File : X:\xray\utils\xrAI\game_graph_builder.cpp
[error]Line : 273
[error]Description : Some ai-node is not connected to AI-map. See log for details.
Причин такой ошибки может быть две: одна явная, другая неочевидная.
Явная – если в логе вы видите нижнюю секцию с текстом про Some ai-node is not connected to AI-map
. Значит, одна (или множество) нод не соединены с остальной ИИ-сеткой. Не допускайте создания отдельных островков нод, всегда соединяйте их с основной ИИ-сеткой, и удаляйте отдельно стоящие и вырожденные ноды (в ЛЕ выделяются красным) нажатием кнопки Select 0-Link на панели AI Map и клавиши Delete на клавиатуре.
Если же в логе тьма-тьмущая строк вида ! AI-node [-216.650, -0.023, 198.450] not connected to AI-map
, а в конце нет внятного сообщения об ошибке, лишь какой-то мутный стектрейс, то скорее всего, компилятор рухнул, воспринимая каждую ноду ИИ-карты как несвязную, и не успел дойти до стадии загрузки точек графа. Нужно проверить, есть ли на уровне точки графа, если нет, то добавить и переэкспортировать спаун.
[error]Expression : assertion failed
[error]Function : CGameGraphBuilder::save_cross_table
[error]File : .\game_graph_builder.cpp
[error]Line : 351
[error]Description : graph().header().vertex_count() > tCrossTableCell.tGraphIndex
На карте отсутствуют точки графа. Нужно добавить хотя бы одну: Spawn Element -> AI\graph point и экспортировать level.game: Compile -> Make Game
[error]Expression : F
[error]Function : xrLoad
[error]File : .\compiler_load.cpp
[error]Line : 272
[error]Description : x:\gamedata\levels\escape\build.aimap
В папке с уровнем gamedata\level\escape отсутствует build.aimap
Нужно экспортировать ИИ-карту из LevelEditor: Compile->Make AI Map
! Cannot build GAME path! (object esc_tutorial_wounded0826)
! CURRENT LEVEL : escape
! CURRENT game point position : [-146.011078][-20.711269][-147.502380]
FATAL ERROR
[error]Expression : I != levels().end()
[error]Function : GameGraph::CHeader::level
[error]File : f:\project\home\stalker\borscht\src_engine\xray\xrgame\game_graph_inline.h
[error]Line : 153
[error]Description : there is no specified level in the game graph : 205
Такая ошибка возникла после того, как была прервана компиляция ИИ-сетки. Видимо, испортился игровой граф, нужно перекомпилировать его (xrAI -f)
[error]Expression : assertion failed
[error]Function : CVertexAllocatorFixed<2097152>::CDataStorage<struct CVertexPath<1>::DataStoragePath<struct CVertexManagerFixed<unsigned int,unsigned int,8>::VertexManager<struct CDataStorageSingleLinkedList<0>::SingleLinkedList<struct CDataStorageDoubleLinkedList<0>::DoubleLinkedList<struct CDataStorageBucketList<unsigned int,unsigned int,8192,0>::BucketList<struct CDijkstra<float,struct CDataStorageBucketList<unsigned int,unsigned int,8192,0>,struct CVertexManagerFixed<unsigned int,unsigned int,8>,struct CVertexAllocatorFixed<2097152>,1,struct CVertexPath<1>,struct AStar::_Vertex<float,class CEmptyClassTemplate>::_vertex,struct CBuilderAllocatorConstructor,struct CManagerBuilderAllocatorConstructor,struct CDataStorageConstructor,unsigned int>::_Vertex>::_vertex>::_vertex>::_vertex>::_vertex>::_vertex>::create_vertex
[error]File : x:\clearsky\src\engine\utils\xrai\vertex_allocator_fixed_inline.h
[error]Line : 51
[error]Description : m_vertex_count < reserved_vertex_count - 1
Эту ошибку можно обойти ключом -no_separator_check
По какой причине она вообще возникает и не допустить её возникновения?
[error]Expression : !m_border.empty()
[error]Function : CSpaceRestrictorWrapper::build_border
[error]File : .\space_restrictor_wrapper.cpp
[error]Line : 215
[error]Description : space restrictor has no border
[error]Arguments : esc_zone_mine_gravitational_weak_0009
Аномалия расположена не на ИИ-сетке.
[error]Expression : assertion failed
[error]Function : CGraphMerger::CGraphMerger
[error]File : xr_graph_merge.cpp
[error]Line : 621
[error]Description : M != (*K).second->m_tVertexMap.end()
Одной из точек графа для перехода между уровнями задана связь с другой, несуществующей (или с несуществующим именем). При возникновении такой ошибки в первую очередь стоит проверить наличие собственно точки графа на уровне через Object List в режиме Spawn, затем наличие ИИ-сетки под ней, и уж в последнюю очередь настройки.
Красные строки в логе[править]
! level_path().failed() during navigation
Путь непися пролегает через пространство, где неадекватно соединены ноды ИИ-сетки. Нужно правильно соединить ноды.
Редакторы[править]
Expression : assertion failed
Function : IReader::advance
File : x:\clearsky\src\engine\xrcore\FS.h
Line : 276
Description : (Pos<=Size) && (Pos>=0)
Такой вылет был, когда в папке с СДК оказался левый .xdb-архив и движок попытался автоматически его прочитать.
Actor Editor[править]
!Can't load: 'characters\stalker_smart_cover_animation.omf' invalid bones count
!Can't find bone: 'bip01'
!Can't find bone: 'root_stalker'
!Can't load: 'characters\stalker_smart_cover_animation.omf' invalid bones count
!Different bone count[characters\stalker_smart_cover_animation.omf] [Object: '45' <-> Motions: '47']
! error in model [x:\rawdata\objects\actors\stalker_bandits\stalker_bandit_4]. Unable to load motion file 'characters\stalker_smart_cover_animation.omf'.
FATAL ERROR
[error]Expression : assertion failed
[error]Function : ..\..\Layers\xrRender\SkeletonAnimated.cpp
[error]File : ..\..\Layers\xrRender\SkeletonAnimated.cpp
[error]Line : 732
[error]Description : m_Motions.size()
В модель из ТЧ (45 костей) были подключены .omf из ЧН/ЗП (47 костей). Редактор ругается на несоответствие скелета модели анимациям, сделанным под другой скелет.
Игра[править]
[error]Expression : fatal error
[error]Function : CScriptEngine::lua_error
[error]File : E:\priquel\sources\engine\xrServerEntities\script_engine.cpp
[error]Line : 180
[error]Description : <no expression>
[error]Arguments : LUA error: x:\gamedata\scripts\_g.script:973: bad argument #2 to 'format' (string expected, got nil)
Самый мерзкий и жопошный вылет, который указывает только на то, что игра вылетела, но не на причину креша. Возникает потому, что в релизной версии игры разрабы отрубили команды log и assert. В качестве костыля можно использовать такие решения: [1], [2]
[error]Expression : false
[error]Function : CXml::Load
[error]File : xrXMLParser.cpp
[error]Line : 87
[error]Description : XML file:text\rus\st_quests_escape.xml value: errDescr:Error reading end tag.
В указанном файле ошибка синтаксиса: где-то не закрыт тег.
[error]Expression : !save_guid || (*save_guid == header().guid()) || ignore_save_incompatibility()
[error]Function : CALifeSpawnRegistry::load
[error]File : E:\priquel\sources\engine\xrGame\alife_spawn_registry.cpp
[error]Line : 110
[error]Description : Saved game doesn't correspond to the spawn : DELETE SAVED GAME!
Файл сохранения не соответствует спавну, нужно пересобрать спавн. Можно обойти ключом -ignore_save_incompatibility
, в таком случае спавн будет соответствовать учтённому в сохранении.
[error]Expression : cross_table().header().level_guid() == level_graph().header().guid()
[error]Function : CAI_Space::load
[error]File : ai_space.cpp
[error]Line : 110
[error]Description : cross_table doesn't correspond to the AI-map
Аналогично предыдущему вылету: данные из спавна не соответствуют новой ИИ-сетке. Нужно пересобрать спавн.
Expression : fatal error
Function : out_of_memory_handler
File : .\xrDebugNew.cpp
Line : 318
Description : <no expression>
Arguments : Out of memory. Memory request: 3506347 K
Движок пытается прочесть какой-то левый архив или просто файл с расширением сталкирского архива (*.db, *.xdb). Подробности тут
Геометрия уровней[править]
Вылет на этапе загрузки шейдеров при попытке запуска уровня на r1:
Expression : fatal error
Function : CBlender_default::Compile
File : X:\xray\Layers\xrRenderPC_R1\BlenderDefault.cpp
Line : 50
Description : <no expression>
Arguments : Not enought textures for shader, base tex: floor\floor_dirty_gr_02
Вызван некорректными настройками .thm соответствующей текстуры – у неё установлен флаг Implicit Lighted, то есть лайтмапы для неё считаются как для террейна. Из-за этого же в папке с уровнем появилась папка floor, в которую скопировалась эта текстура. А крашится потому, что у террейна один лайтмап, а не два, как у шейдера default.
Без перекомпиляции уровня исправить это можно с помощью распаковщика файла .level. Для этого распаковать файл .level из папки с уровнем, найти в FSL_SHADERS.ltx секцию вида
[58]
shader = default
textures = floor\floor_dirty_gr_02,floor\floor_dirty_gr_02_lm
и сменить в ней шейдер c лайтмапного default на вершинный def_vertex, а лайтмапную текстуру (_lm) вовсе убрать. Получится так:
[58]
shader = def_shaders\def_vertex
textures = floor\floor_dirty_gr_02
Запаковать файл, переименовать в .level и скопировать с заменой в папку с уровнем.
Expression : fs
Function : CResourceManager::_CreateVS
File : E:\priquel\sources\engine\Layers\xrRender\ResourceManager_Resources.cpp
Line : 203
Description : shader file doesnt exist
Arguments : x:\gamedata\shaders\r2\deffer_impl_lmh_bump-hq.vs
Expression : R
Function : CResourceManager::_CreatePS
File : E:\priquel\sources\engine\Layers\xrRender\ResourceManager_Resources.cpp
Line : 309
Description : x:\gamedata\shaders\r2\deffer_impl_lmh_bump.ps
Конкретно эти ошибки вылезают в ЧН при попытке запуска на втором рендере, если геометрия уровня скомпилирована на низких настройках. Чтобы игра не валилась, нужно подсунуть те файлы, что она хочет. Доподлинно неизвестно, что должно было быть в этих шейдерах, так что по ссылке .ps/.vs с обычными инклюдами внутри.
Динамические модели[править]
Expression : m_attack_animation.valid()
Function : CVisualZone::net_Spawn
File : E:\priquel\sources\engine\xrGame\ZoneVisual.cpp
Line : 34
Description : object[esc_burning_fluff_strong]: cannot find attack animation[] in model[dynamics\anomalies\burning_fluff_01]
На карте присутствует динамическая модель, у которой предусмотрена, но не задана анимация атаки. Нужно задать её в LevelEditor'е в свойствах спаун-объекта в поле Attack animation.
[error]Expression : motion_ID.valid()
[error]Function : CKinematicsAnimated::ID_Cycle
[error]File : ..\xrRender\SkeletonAnimated.cpp
[error]Line : 208
[error]Description : ! MODEL: can't find cycle:
[error]Arguments : death_init
Не найдена анимация с именем death_init. Возможно, к модели не подключен нужный .omf
[error]Expression : BI_NONE!=f_bones.back()
[error]Function : P_build_Shell
[error]File : C:\projects\xray15\xray\xrGame\PhysicsShell.cpp
[error]Line : 136
[error]Description : wrong fixed bone
Имя кости, используемой для фиксации модели, отличается от указанного в соответствующем поле LE. Например, в модели кость носит имя link1, а для физического объекта в редакторе уровней было указано имя link.
[error]Expression : fatal error
[error]Function : CScriptEngine::lua_pcall_failed
[error]File : C:\projects\xray15\xray\xrServerEntities\script_engine.cpp
[error]Line : 192
[error]Description : <no expression>
[error]Arguments : LUA error: x:\gamedata\scripts\ph_door.script:36: attempt to index field 'joint' (a nil value)
Ошибка возникла, когда в модели двери все кости имели тип rigid. Но для двери или ворот хотя бы одна кость должна иметь тип joint, чтобы дверь могла открываться.
Симуляция[править]
[error]Expression : m_path
[error]Function : CPatrolPathParams::CPatrolPathParams
[error]File : patrol_path_params.cpp
[error]Line : 19
[error]Description : There is no patrol path
[error]Arguments : esc_hit_point
! [LUA][ERROR] ERROR: There is no kamp path in smart[esc_pigsty_ruins_st_01]
! [LUA][ERROR] ERROR: Insufficient smart_terrain jobs test_smartterrain
В лагере трётся слишком много народу. Нужно либо уменьшить количество групп (faction_*.ltx), либо уменьшить количество персонажей в группе (squad_descr_*.ltx), либо (что правильнее) создать в смарте дополнительные работы, чтобы бездельники смогли их занять.
[error]Expression : vertex || show_restrictions(m_object)
[error]Function : CPatrolPathManager::select_point
[error]File : patrol_path_manager.cpp
[error]Line : 155
[error]Description : any vertex in patrol path [esc_south_checkpoint_st_patrol_2_walk] is inaccessible for object [sim_default_military_00323]
Похоже, что точки пути patrol находятся вне рестриктора, накрывающего смарт, и неписи не могут попасть на работу. Нужно расширить рестриктор, чтобы он накрывал эти точки.
! [LUA][ERROR] ERROR: 'Attempt to read a non-existant string field 'npc' in section 'esc_flesh_generic'
Не очень вразумительный лог, который в одном из случаев указывал на то, что в faction_monster.ltx в секции [start_position] указано имя, которое не существует в squad_descr_*.ltx.
[error]Expression : vertex || show_restrictions(m_object)
[error]Function : CPatrolPathManager::select_point
[error]File : patrol_path_manager.cpp
[error]Line : 155
[error]Description : any vertex in patrol path [esc_granary_st_kamp_1_task] is inaccessible for object [sim_default_bandit_00413]
Такая ошибка была, когда одной из аномалий в пределах смарта задали тип рестриктора OUT. При этом путь esc_granary_st_kamp_1_task состоит из одной точки, и совершенно точно не входит в шейп аномалии. Нужно объяснение.
! [LUA][ERROR] ERROR: object 'esc_wolf' configuration file [logic\esc\wolf.ltx] NOT FOUND or section [logic] isn't assigned
[error]Expression : fatal error
[error]Function : CScriptEngine::lua_pcall_failed
[error]File : ..\xrServerEntities\script_engine.cpp
[error]Line : 192
[error]Description : <no expression>
[error]Arguments : LUA error: x:\gamedata\scripts\sim_faction_brain_mutant.script:90: attempt to index field '?' (a nil value)
[error]Expression : level_graph->valid_vertex_id(m_level_vertex_id)
[error]Function : CPatrolPoint::verify_vertex_id
[error]File : C:\xray\xrGame\patrol_point.cpp
[error]Line : 46
! Patrol point wp00 in path esc_atp_st_guard_4_walk is not on the level graph vertex!
[error]Expression : !object->used_ai_locations() || ai().level_graph().valid_vertex_id(object->m_tNodeID)
[error]Function : CALifeSwitchManager::add_online
[error]File : X:\xray\xrGame\alife_switch_manager.cpp
[error]Line : 64
[error]Description : Invalid vertex for object
[error]Arguments : sim_default_military_1_sniper1561
Сам по себе лог малоинформативен и указывает лишь на то, что персонаж оказался вне ИИ-сетки. Причиной этого вылета может быть то, что точка пути (вейпойнт), на которой заспавнился персонаж, находится не на ИИ-сетке. См. описание выше.
Сетевая игра[править]
[error]Expression : rpoints[0].size()
[error]Function : game_sv_Deathmatch::Create
[error]File : game_sv_deathmatch.cpp
[error]Line : 101
[error]Description : rpoints for players not found
На карте отсутствуют точки респавна для игроков.