Привет всем! Игра сталкер, а конкретно сам движок X-ray довольно капризный, и зачастую как в процессе модификации, так и во время игры игра «вылетает». Чтобы мы знали причину вылета, движок нам оставляет лог вылета. Лог вылета можно посмотреть несколькими способами:
В текстовом редакторе нажать Ctrl+V (Вставить)
Посмотреть лог игры включая лог вылета в файле xray_имя_пользователя.log в папке C:\Documents and Settings\All Users\Документы\STALKER-***\logs
Посмотреть непосредственно в окне багтрекера (только в ЧН и ЗП).
Ну приступим. Начнём с простых:
Expression : wave&&wave->length()
Function : CSoundRender_Source::LoadWave
File : E:\stalker\patch_1_0004\xrSound\SoundRender_Source_loader.cpp
Line : 65
Description : Can't open wave file:
Arguments : d:\stalker\gamedata\sounds\music\sound.ogg
Здесь игра не может открыть звуковой OGG-файл под названием sound в папке d:\stalker\gamedata\sounds\music\
Expression : fatal error
Function : CRender::texture_load
File : E:\stalker\patch_1_0004\xr_3da\xrRender\Texture.cpp
Line : 295
Description : <no expression>
Arguments : Can't find texture 'act\act_corp_monolit'
Не может найти текстуру act_corp_monolit из папки textures\act
Expression : fatal error
Function : CModelPool::Instance_Load
File : E:\stalker\patch_1_0004\xr_3da\xrRender\ModelPool.cpp
Line : 111
Description : <no expression>
Arguments : Can't find model file 'physics\mesh.ogf'.
Не найдена трёхмерная OGF-модель mesh.ogf из папки meshes\physics.
Expression : SG
Function : CRender::model_CreateParticles
File : E:\stalker\patch_1_0004\xr_3da\xrRender_R2\r2.cpp
Line : 330
Description : Particle effect or group doesn't exist
Arguments : hit_fx\hit_water_00
Не найдена система частиц (партикл) hit_water_00 в директории hit_fx файла particles.xr (подробно опишу позже).
Expression : fatal error
Function : CResourceManager::_GetBlender
File : E:\stalker\patch_1_0004\xr_3da\ResourceManager.cpp
Line : 49
Description : <no expression>
Arguments : Shader 'models\antigas_glass' not found in library.
Не найден шейдер models\antigas_glass в библиотеке шейдеров.
Expression : fs
Function : CResourceManager::_CreateVS
File : E:\stalker\patch_1_0004\xr_3da\ResourceManager_Resources.cpp
Line : 185
Description : shader file doesnt exist
Arguments : d:\stalker\gamedata\shaders\r2\deffer_impl_flat.vs
Не найден файл шейдера deffer_impl_flat.vs. --Added by Герр. Роммель Да нет. Тут проблема вся в том, что неправильно закомпилился шейдер, при компиляции уровня на качестве, более высоком чем Draft. Нужно скачивать исправление шейдеров от товарища Haron. Для ЗП (ЧН) это может ещё быть из-за отсутствия thm"ок для текстур терраина уровня!
Expression : fatal error
Function : out_of_memory_handler
File : D:\prog_repository\sources\trunk\xrCore\xrDebugNew.cpp
Line : 336
Description : <no expression>
Arguments : Out of memory. Memory request: 55965 K
Нехватка оперативной памяти.
Expression : fatal error
Function : CInifile::r_string
File :E:\stalker\sources\trunk\xrCore\Xr_ini.cpp
Line : 352
Description : <no expression>
Arguments : Can't find variable ammo_mag_size in [wpn_addon_grenade_launcher]
Не найдена переменная ammo_mag_size в секции [wpn_addon_grenade_launcher].
Expression : fatal error
Function : CScriptEngine::lua_error
File : D:\xray-svn\xr_3da\xrGame\script_engine.cpp
Line : 74
Description : <no expression>
Arguments : LUA error: C stack overflow
Переполнение стека. Смотрим внимательно: lua_error. Ошибка возможно в скриптах.
Expression : vertex || show_restrictions(m_object)
Function : CPatrolPathManager::select_point
File : E:\stalker\sources\trunk\xr_3da\xrGame\patrol_path_manager.cpp
Line : 155
Description : any vertex in patrol path [sniper_3_walk] in inaccessible for object [stalker_0002]
Какая то вершина (вейпоинт) пути sniper_3_walk стоит в неположенном месте (например не на аи-сетке). Объект stalker_0002 (в данном случае сталкер) который якобы двигался по пути sniper_3_walk попал на эту точку, а заодно ушёл за аи-сетку. Этого движок не терпит.
Тоже самое произойдет если координаты(вейпоинт) пути sniper_3_walk совпадет с координатами места где нпс запрешенно находится буть то рестриктор или аномалия в схеме обхода аномалий. Также этот вылет набюдается при попытке отправить нпс за пределы места работ параметр out_rest = "имя_рестриктора", в файле загрузки работ гулага
попробуйте любого сталкера из лагеря новичков отправить допустим к остановке получите этот самый вылет
Expression : e_entity
Function : xrServer::Process_event_reject
File : E:\stalker\sources\trunk\xr_3da\xrGame\xrServer_process_event_reject.cpp
Line : 12
Description : entity not found. id_parent=7540 id_entity=44047 frame=2075050
Возникают иногда произвольно при смерти неписей. Причина — движок отрабатывая лут изредка теряет серверный объект уничтожаемой вещи, в итоге происходит вылет.
Expression : fatal error
Function : CScriptEngine::lua_error
File : D:\xray-svn\xr_3da\xrGame\script_engine.cpp
Line : 74
Description : <no expression>
Arguments : LUA error: e:\stalker\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value)
Ошибка распространённая. На первый взгляд кажется, что ошибка как раз в скриптах, но всё может быть иначе. Делаем так: открываем файл _g.script блокнотом, закоменчиваем 20 строку (ставим перед строкой --) и идём к тому месту где поймали вылет. Так мы получим более развёрнутый ответ. Участник:Призрак: Автор прав в том что вылет очень распространен, но так его исправлять нельзя, т.к. nil передается в эту функцию только при каком-то форс мажоре. Поэтому необходимо перейти в _g.script в функцию printf и перед log1(string.format(fmr,..)) дописать: get_console():execute("load "..fmt). После этого запустить еще раз игру и посмотреть при передачи какой строки игра вылетает. Потом найти эту строку в скриптах игры и прикинуть почему аргумент (у нас это аргумент №2 (bad argument #2)) равен nil
Expression : assertion failed
Function : _VertexStream::Lock
File : E:\stalker\patch_1_0004\xr_3da\R_DStreams.cpp
Line : 44
Description : (bytes_need<=mSize) && vl_Count
Проблема возникает при убийстве НПС\мутанта. Типичный вылет по нехватке ресурсов. Участник:Призрак - Встречается в основном на больших локациях. Но не на всех. На болотах из ЧН такой вылет встречается, а вот с локации aver от Кости V такого вылета нет. Однако для данного вылета есть таблетка, в виде правленого экзешника. Искать на АМК-форум
Expression : fatal error
Function : IRender_Visual::Load
File : E:\stalker\patch_1_0004\xr_3da\FBasicVisual.cpp
Line : 58
Description : <no expression>
Arguments : Invalid visual
Неправильный визуал (модель) НПС.
Expression : !phrase_dialog->m_PhraseVector.empty()
Function : CPhraseDialog::SayPhrase
File : E:\stalker\patch_1_0004\xr_3da\xrGame\PhraseDialog.cpp
Line : 140
Description : No available phrase to say, dialog[esc_dialog]
В диалоге esc_dialog нет доступной для отображения фразы (скажем все заткнуты инфопоршенами).
Expression : motion_ID.valid()
Function : CKinematicsAnimated::ID_Cycle
File : D:\prog_repository\sources\trunk\Layers\xrRender\SkeletonAnimated.cpp
Line : 210
Description : ! MODEL: can't find cycle:
Arguments : death_init
Игра не нашла в модели трёхмерную анимацию с именем death_init.
Автор статьи — Pihan13
Дополнил статью — Fireman3000
Частично использовалась информация с сайта
http://forum.stalker-simbion.ru/ Не стесняемся — дополняем, если знаем о чём идёт речь.
Дополнение к статье(От Fireman3000): Извините, если я где-нибудь неправильно пишу. Уж не родился я Колмогором
Expression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line : 73
Description : <no expression>
Arguments : LUA error: ...hadow of chernobyl\gamedata\scripts\xr_danger.script:116: attempt to index field 'ignore_types' (a nil value)
Причина вылета в том что игра не понимает значения 0 в danger_ignore.Проще говоря в логике какого то персонажа параметр danger_ignore = 0 либо в минусовом значении. Либо его вообще нету
P.S. Также может быть причина в том, что в логике у какого-то АИ что-то неправильно указано. Для исправления рекомендую вставить строчку перед 116: get_console():execute(self.object:name()). То имя в логе, которое будет последним после вылета, указывает на персонажа с кривой логикой. --Rekongstor 14:01, 2 июня 2011 (UTC)
Expression : fatal error
Function : CInifile::r_string
File : E:\stalker\patch_1_0004\xrCore\Xr_ini.cpp
Line : 352
Description : <no expression>
Arguments : Can't find variable class in [test_no_klass_npc]
Не найден класс персонажа. Возможно, нпс не прописан под своим классом в gamedata\npc_profile.xml, либо в creatures\spawn_section.ltx, либо в gameplay\character_desc.xml
Expression : fatal error
Function : CInifile::r_section
File : E:\stalker\patch_1_0004\xrCore\Xr_ini.cpp
Line : 342
Description : <no expression>
Arguments : Can't open section 'bandage_test_kick1'
Игра не может найти секцию. Это может быть предмет, нпс и многое другое. Возможно, вы написали название с ошибками. Либо когда добавляли его в: продажу, скрипт, нпс, выпадение из нпс а в редких случиях это может быть иммунитет чего либо(определить пото трудно). Часто такое бывает связано с названием
Expression : fatal error
Function : CInifile::r_string
File : E:\stalker\patch_1_0004\xrCore\Xr_ini.cpp
Line : 352
Description : <no expression>
Arguments : Can't find variable remove_time in [vehicle_btr]
Не найдена переменная remove_time в секции [vehicle_btr]. А в данном случае ошибка в том что если вы делали предмет как физическую модель(тобишь которую нельзя использовать, говорить и вообще он похож на декорации типа деревьев, столов и прочего хлама) то необходимо указывать remove_time в его секции
Expression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line : 73
Description : <no expression>
Arguments : LUA error: ...dow of chernobyl\gamedata\scripts\test_kick.script:34: attempt to call method 'section' (a nil value)
Метод обращения в игре не предусмотрен. Возможно, стоит пересмотреть подход к тому или иному скрипту
Expression : rpoints[0].size()
Function : game_sv_Deathmatch::Create
File : D:\prog_repository\sources\trunk\xrGame\game_sv_deathmatch.cpp
Line : 99
Description : rpoints for players not found
На мультиплеерной карте не найдены точки респавна игроков. В SDK должен быть красный пацанчик. Настроить Team = 0
Expression : fatal error
Function : xrServer::Process_update
File : E:\stalker\patch_1_0004\xr_3da\xrGame\xrServer_process_update.cpp
Line : 37
Description : <no expression>
Arguments : Beer from the creator of 'WP_SHOTG'
Такое иногда бывает, когда ты (ГГ) или НПС заряжает дробовик или другое оружие со значением tri_state_reload = true. Это глюк. в игре что-то сбивается, и когда у дробовика максимальное количество заряженых патронов скажем 6, он заряжается за 6 и дальше.. дальше.. дальше.. и так пока не произойдёт вылет с вышеуказанным логом. вылет не значительный и редкий, но если он случается слишком часто, можно в конфигах всех дробовиков и ружей поменять значение tri_state_reload = true на tri_state_reload = false.
Expression : fatal error
Function : CInifile::r_string
File : D:\prog_repository\sources\trunk\xrCore\Xr_ini.cpp
Line : 477
Description : <no expression>
Arguments : Can't find variable bound_rect in [level_map]
Такой лог бывает когда подключаешь локу с ТЧ в ЗП. Причина проста в ЗП уровнях файл строчка bound_rect пишется в файле gamedata\levels\имя_уровня\level.ltx , а в ТЧ строка bound_rect для каждого уровня непосредствено в файле gamedata\config\game_maps_single.ltx ...
Исправить просто, нужно изменить файл gamedata\levels\имя_уровня\level.ltx в подключеной локации, просто перенести строку bound_rect из game_maps_single.ltx в level.ltx перед строчкой texture .
By Призрак
Expression : hGame
Function : CEngineAPI::Initialize
File : E:\stalker\patch_1_0004\xr_3da\EngineAPI.cpp
Line : 65
Description : Game DLL raised exception during loading or there is no game DLL at all
Случается когда одна из dll некорректна. Например такой вылет бывает если подсунуть в ТЧ 1.0004 xrGame от 6 патча
Expression : assertion failed
Function : CInventory::Eat
File : E:\stalker\sources\trunk\xr_3da\xrGame\Inventory.cpp
Line : 892
Description : pIItem->m_pCurrentInventory==this
Вылет встречается только на 6 патче при попытке хаванья из трупа. Ищите, исправленную Kolmogor'om, xrGame.dll в Интернете
[error]Expression : error handler is invoked!
[error]Function : invalid_parameter_handler
[error]File : E:\stalker\sources\trunk\xrCore\xrDebugNew.cpp
[error]Line : 804
[error]Description :
Данный вылет бывает когда у какого либо из объектов установленно некорректное значение (читал, сам не получал его) Или же если данный вылет происходит при вызове класса, то проблема в том что в методе __init() класса прописано super()
Expression : !m_error_code
Function : raii_guard::~raii_guard
File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
Line : 748
Description : d:\stalker cop\gamedata\scripts\bind_stalker.script:231: attempt to index global 'ИМЯ_ФАЙЛА' (a nil value)
Вылет происходит в двух случаях - когда скрипт пытается вызвать функцию из несуществующего файла или когда в файле допущена синтаксическая ошибка
Expression : fatal error
Function : CScriptEngine::lua_error
File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
Line : 73
Description : <no expression>
Arguments : LUA error: attempt to call a nil value
Происходит при попытке вызвать класс, которого не существует
Небольшой пример из практики по определению ошибки в особых случаях(для начинающих): Игра зависла, картинка на экране не меняется, на Ctrl + Alt+ Delete не реагирует. Только "Холодная перезагрузка" reset. Но при этом обычно в логе нет записи и обычным Ctrl + V ошибку не увидеть. Я пользуюсь программой Punto Switcher. Есть в ней опция "дневник", она ведёт запись всех нажатий клавиш и по нажатию сочетаний клавиш содержимое памяти может записывать в дневник. теперь когда игра зависла и картинка на экране не меняется, нажимаете Ctrl + Alt+ Delete. Внешне ничего не изменится, но ОС будет реагировать на клавиши, нажимаете сочетание клавиш "записать в дневник". Делаете перезагрузку, открываете дневник - Ваша ошибка записана. "дядя Саша"
By tracker.
Expression : bone_id!=BI_NONE
Function : SArtefactDetectorsSupport::SetVisible
File : D:\prog_repository\sources\trunk\xrGame\Artefact.cpp
Line : 525
Description : link
Возникает при создании или добавлении чужих артефактов. В artefacts.ltx, в секции af_base есть параметр particles_bone=link. Это имя косточки, которая принимается за центр при проигрывании партикла. Если кость в артефакте называется по иному, например joint2, и это не указанно в секции нового арта, которая наследуется от базовой и подаразумевает естественно наличие link, получаем вылет. Решается конвертированием модели арта в .object, просмотром в sdk и выяснением имени косточки с занесением в конфиг.
Безлоговый вылет.
Вылет, при котором лог отсутствует. Причины такого вылета:
1. Безлоговые вылеты бывают в основном из-за завышенных настроек видео. Решение: В папке с игрой открыть папку gamedata, папку config, в ней файл alife, открыть любым текстовым редактором (блокнотом, или лучше word pad'ом) и найти строку switch distance = и изменить значение на 5, сохранить изменения.
Это только одна (не сильно вероятная) причина безлогового вылета. если вы знаете ещё одну причину, пожалуйста напишите здесь.