
Решение ошибки в fatal error Function в игре STALKER. Ошибка сопровождается полным завершением игры. Как правило сообщение появляется у игроков в модефицированной игры, типа «Народная солянка» или подобной.
Проблема связана с тем, что движок игры привередливый и при любой ошибке крашится. Но причина ошибки сохраняется в буфер обмена. Поэтому, сразу после вылета игры откройте текстовый редактор и вставьте содержимое файла.

Expression — Тип ошибки.
Function — Функция, которая вызвала вылет игры
File — файл, в котором находится функция
Line — строка, в которой произошла ошибка
Description — описание ошибки
Arguments — аргумент, который привел к ошибке.
Далее гуглим тип ошибки или функцию: Expression: fatal error Function wave&&wave->length()
Как правило, расшифровку и решение каждой ошибки можно найти на форуме разработчика. Самые распространенные ошибки:
Expression : fatal error
Function : out_of_memory_handler
Причина: не хватает оперативной памяти
Expression: wave&&wave->length()
Function: CSoundRender_Source::LoadWave
Причина: Отсутствует звуковой ogg файл.
Expression: fatal error
Function: CRender::texture_load
Причина: Отстутвует текстура
Expression: fatal error
Function: CModelPool::Instance_Load
Причина: отстутсвует трёхмерная OGF-модель.
Expression: fatal error
Function: CScriptEngine::lua_error Arguments: LUA error: C stack overflow
Причина: Переполнение стека.
Expression: fatal error
Function: CInifile::r_section
Причина: Отсутствует секция. Название секции будет записано в Arguments.
Остальные причины вылета и их решения смотрите на форумах и справочниках, к примеру http://stalkerin.gameru.net/wiki/ и http://ap-pro.ru/forum/
1. Ошибка в вызове функции из диалога: после имени функции скобки писать не нужно.
При таком написании будет вылет без лога:
<action>file.func()</action>
Пример правильного написания:
<action>file.func</action>
(file — имя файла скрипта, func — имя функции)
Во втором случае вылета не будет даже если функции file.func не существует, НО это справедливо только для тега action.
В теге precondition вызов несуществующей функции
<precondition>file.func</precondition>
приведёт к вылету без лога.
2. Пустые значения в конфигах. Вылет будет, если оставить значение какого-либо параметра, считываемого движком, пустым. Например, если в конфиге оружия оставить строку такого вида:
inv_name =
3. Попытка прописать несуществующие кости модели в некоторых параметрах. Например, в grenade_bone для оружия. Тут, думаю, всё ясно.
4. Попытка прописать спавн несуществующего предмета в профиль NPC (файлы character_desc_*.xml). Вылет без лога будет, если в секции spawn (тег supplies) прописать название несуществующей секции.
5. Не следует вписывать текст диалога напрямую в тело описания диалога. При превышении определённого количества символов будет вылет без лога. Чтобы обойти это ограничение, пишите текст в текстовом строковом файле и используйте ссылку на него.
6. Партиклы. Вылеты могут быть, если задать слишком высокие параметры при редактровании партикла. Также вылет может случиться, если в данный момент отыгрывается слишком много партиклов. Например, такая ситуация может быть, если в онлайне слишком много аномалий и/или артефактов.
7. Нельзя прописывать наличие подствольника оружию, в классе которого он не предусмотрен. Например, для класса CWeaponLR300 (имя скриптового сета — WP_LR300).
1. Неправильный тип данных
Такое случается при попытке чтения (из пакета или ltx-файла) одного типа данных функциями, предназначеными для другого.
Пример: если движок запросил bool-значение (true или false), а вместо него получил nil, число или строку, то игра вылетит с пустым логом.
Также не следует указывать аргументы при вызове движковых функций, не принимающих никаких аргументов.
2. Неправильное использование класса net_packet()
По сути, это частный случай первого пункта.
При сохранении — может возникнуть при попытке сохранить nil-значение с помощью функции для сохранения числа, строки или чего-то ещё.
При загрузке — важно не перепутать написание. В функциях чтения аргументы указывать нельзя.
Пример неправильного написания:
packet:r_stringZ(self.wounded)
Пример правильного написания:
self.wounded = packet:r_stringZ()
3. «Самоудаление» объекта. Тут нужно просто запомнить, что вызывать alife():release(self, true) из методов класса самого объекта нельзя, если эти методы вызываются движком. К примеру, есть у нас сталкер и нам нужно его удалить. И если вызов alife():release(self, true) окажется в любом из методов класса se_stalker, вызываемых симуляцией, то случится вылет без лога. То же самое касается всех остальных объектов, у которых перегружен серверный класс.
Обойти этот баг можно с помощью специальной таблицы объектов «к удалению», удаляемых при каждом обновлении игрока.
В bind_stalker.script пишем следующее:
objs_to_remove = {}
--' Таблица удаляемых объектов
--' Формат: objs_to_remove[se_obj.id] = se_obj
function actor_binder:update(delta)
...
--' Удаление
for id, se_obj in pairs(objs_to_remove) do
alife():release(se_obj, true)
end
objs_to_remove = {}
...
end
4. Если игра вылетает без лога ещё до главного меню, нужно искать ошибки в скриптах, которые прописаны в параметрах class_registrators, game_type_clsid_factory и ui_type_clsid_factory в конфиге script.ltx. Вылет происходит даже при ошибках синтаксиса в этих скриптах.
5. Неправильные операции с действиями планировщиков (action_planner)
Если при добавлении какого-то действия в планировщик, получаемый методом motivation_action_manager, добавить такое условие
action:add_precondition(world_property, stalker_ids.property_in_anomaly)
то получим вылет с пустым логом. Такая ошибка возникает из-за вложенности планировщиков. «Внутренние» планировщики (в таблице stalker_ids они обозначены как константы с именами, в которых есть слово «planner») для скриптеров доступны только как обычные действия, а не как планировщики, поскольку функции cast_action_to_planner и cast_planner_to_action были вырезаны, хоть и упоминаются в lua_help. Некоторые свойства, номера которых есть в таблице stalker_ids, для скриптов тоже недоступны, поэтому добавлять их в качестве условий тоже нельзя.
При создании действий (action_base) нужно прописывать им такие условия, чтобы каждому набору условий соответствовало только одно действие, иначе могут быть вылеты или просто глючное поведение NPC. Еще одной причиной вылета могут быть «тупики» — тот случай, когда есть только одно действие, способное в данный момет изменить какое-то свойство (свойство, которое задается методом add_effect), но его выполнение невозможно из-за заданных условий.
6. Переполнение стека. Чаще всего причина таких вылетов — вызов каких-то функций, которые зависают. После нескольких таких вызовов игра вываливается с ошибкой «C stack overflow», указывающей на произвольный скрипт с любым номером строки, хотя иногда бывают и безлоговые вылеты. Например, вызов метода actual из планировщика motivation_action_manager может приводить к таким зависаниям, хоть и не при каждом вызове.
7. При попытке использования функций cse_alife_smart_zone.register_npc() и cse_alife_smart_zone.unregister_npc() появляются «плавающие» (через раз) вылеты. В смартах вызовы этих функций вырезаны разработчиками и не используются, но если вдруг вам захочется поэксперементировать с ними, не забывайте о их глючности.
8. Попытка удаления рестриктора, прописанного какому-либо NPC. Этот баг никак не лечится, но его можно обойти. Для этого нужно для каждого живого объекта в скрипт для серверного класса внести специальную таблицу, в которой прописаны соответствия NPC и прописанных им рестрикторов. При удалении рестриктора нужно пробегаться по этой таблице и убирать его из рестрикторов всех NPC, которым он прописан.
9. В некоторых случаях вылет без лога происходит при использовании функции wounded(bool) для клиентских объектов (game_object). Чтобы этого не происходило, не следует вызывать её слишком рано, например, из функции net_spawn(…). Также не следует пытаться менять состояние раненности мёртвым NPC.
10. Вылет без лога случается, если установить состояние тела равным move.crouch и ментальное состояние anim.free. Например, вот такой код
--' npc - game_object npc:set_mental_state(anim.free) npc:set_body_state(move.crouch)
вызовет вылет без лога. При установке состояний через state_mgr от оригинальной игры такого вылета не может произойти (установка такой комбинации заблокирована), но если устанавливать состояние напрямую (как показано выше), то вылет будет.
11. Нельзя прописывать недопустимые соответствия серверных и клиентских классов в class_registrator.script. Это может вызвать вылеты без лога, зависания и порчу сохранений. В некоторых случаях могут быть вылеты с логом, в котором упоминаются имена несуществующих секций (в т.ч. содержащие недопустимые символы).
12. Вылет при поытке вызвать level.object_by_id(id), где id > 65535. Подобный вылет возможен и для alife():object(id).
13. Иногда может происходить вылет «Abnormal program termination» (автосохранение при этом оставалось рабочим), предположительно из-за большого количества NPC. У меня такой вылет происходил при переходе с Радара на другую локацию, перед этим на Радаре было заспавнено очень много зомби (около 100). По этому вылету пока что могу посоветовать только уменьшение количества респавна.
Конкретные примеры (вырезки кода, вызывающие вылеты) и советы по устранению вылетов приветствуются.
Всем, у кого установлен патч 1.0006, рекомендуется установить фикс. После установки фикса вылеты без лога скорее всего исчезнут.
Просьба не спрашивать о причинах вылета с логом. С такими вопросами — в «ковырялки».
Также здесь не следует писать про про вылеты, вызванные редактированием движка. Для этого есть соответствующая тема.
В мире программистов ошибка «stack overflow» очень известна благодаря тому, что этот вид ошибки довольно распространен. А сам термин «stack overflow» известен еще больше, чем ошибка, благодаря одноименному англоязычному ресурсу «StackOverflow». Это сообщество программистов международного масштаба, и еще куча всего интересного. Поэтому не нужно путать ошибку «stack overflow» и веб-ресурс с таким же названием. В нашей статье речь пойдет об ошибке.
Ошибка «stack overflow» связана с переполнением стека. Она появляется в том случае, когда в стеке должно сохраниться больше информации, чем он может уместить. Объем памяти стека задает программист при запуске программы. Если в процессе выполнения программы стек переполняется, тогда возникает ошибка «stack overflow» и программа аварийно завершает работу. Причин возникновения подобной ошибки может быть несколько.
Ошибка «stack overflow»
Нужно отметить, что ошибка «stack overflow» не связана с конкретным языком программирования, то есть она может возникнуть в программах на Java, C++, C, C# и других компилируемых языках.
Причин ее возникновения может быть несколько. К самым распространенным причинам относятся:
бесконечная рекурсия;
глубокая рекурсия;
проблемы с переменными в стеке.
Бесконечная рекурсия и ошибка «stack overflow»
Бесконечная рекурсия редко возникает самостоятельно и по неизвестным причинам. Обычно программист:
забывает прописывать условие для выхода из рекурсии;
пишет неосознанную косвенную рекурсию.
Самая частая причина из категории «бесконечной рекурсии» — программист забывает прописывать условия выхода или же прописывает, но условия выхода не срабатывают.
Вот как это выглядит на С:
int factorial (int number)
{
if (number == 0)
return 1;
return number * factorial(number — 1);
}
В описанном примере прописаны условия выхода из рекурсии, однако они никогда не сработают, если «number» будет отрицательным. Поэтому через несколько миллионов вызовов стек будет переполнен и возникнет ошибка «stack overflow». В некоторых языках программирования предусмотрена «защита» от таких рекурсий. В них рекурсия из конца функции конвертируется в цикл, что не будет расходовать стековую память. Но подобная «оптимизация» вызовет другую, менее опасную проблему — «зацикливание».
Неосознанная бесконечная рекурсия возникает в том случае, если программист по невнимательности распределяет один и тот же функционал программы между разными нагруженными функциями, а потом делает так, что они друг друга вызывают.
В коде это выглядит так:
int Object::getNumber(int index, bool& isChangeable)
{
isChangeable = true;
return getNumber(index);
}
int Object::getNumber(int index)
{
bool noValue;
return getNumber(index, noValue);
}
Глубокая рекурсия и ошибка «stack overflow»
Глубокая рекурсия — это такая рекурсия, которая имеет свое окончание через определенное время, поэтому она не бесконечная. Однако памяти стека не хватит для завершения такой рекурсии, поэтому ошибка «stack overflow» обеспечена. Обычно такая ситуация заранее просчитывается программистом,поэтому ее можно решить. Например, можно:
отыскать другой программный алгоритм для решения поставленной задачи, чтобы избежать применения рекурсии;
«вынести» рекурсию за пределы аппаратного стека в динамический;
и другое.
Глубокая рекурсия выглядит так:
void eliminateList(struct Item* that)
{
if (that == NULL)
return;
eliminateList(that->next);
free(that);
}
Проблемы с переменными в стеке и ошибка «stack overflow»
Если взглянуть на популярность возникновения «stack overflow error», то причина с проблемными переменными в стеке стоит на первом месте. Кроется она в том, что программист изначально выделяет слишком много памяти локальной переменной.
Например:
int function() {
double b[1000000]
}
В данном случае может возникнуть такая ситуация, что массиву потребуется объем памяти, который стек не способен будет обеспечить, а значит, возникнет ошибка «stack overflow».
Заключение
Ошибка «stack overflow» возникает довольно часто. Каждый конкретный случай ее возникновения требует собственного решения. Одна причина объединяет возникновение такой ошибки — невнимательность программиста. Если «stack overflow error» возникла, значит, программист где-то что-то упустил или не доглядел.
Привет всем! Игра S.T.A.L.K.E.R., а конкретно сам движок X-Ray довольно капризный, и зачастую как в процессе модификации, так и во время игры игра «вылетает». Чтобы мы знали причину вылета, движок нам оставляет лог вылета. Лог вылета можно посмотреть несколькими способами:
- В текстовом редакторе нажать Ctrl+V (Вставить)
- Посмотреть лог игры включая лог вылета в файле xray_имя_пользователя.log в папке C:Documents and SettingsAll UsersДокументыSTALKER-***logs
- Посмотреть непосредственно в окне багтрекера (только в ЧН и ЗП).
Ну приступим. Начнём с простых:
Expression : wave&&wave->length() Function : CSoundRender_Source::LoadWave File : E:stalkerpatch_1_0004xrSoundSoundRender_Source_loader.cpp Line : 65 Description : Can't open wave file: Arguments : d:stalkergamedatasoundsmusicsound.ogg
Здесь игра не может открыть звуковой OGG-файл под названием sound в папке d:stalkergamedatasoundsmusic
Expression : fatal error Function : CRender::texture_load File : E:stalkerpatch_1_0004xr_3daxrRenderTexture.cpp Line : 295 Description : <no expression> Arguments : Can't find texture 'actact_corp_monolit'
Не может найти текстуру act_corp_monolit из папки texturesact
Expression : fatal error Function : CModelPool::Instance_Load File : E:stalkerpatch_1_0004xr_3daxrRenderModelPool.cpp Line : 111 Description : <no expression> Arguments : Can't find model file 'physicsmesh.ogf'.
Не найдена трёхмерная OGF-модель mesh.ogf из папки meshesphysics.
Expression : SG Function : CRender::model_CreateParticles File : E:stalkerpatch_1_0004xr_3daxrRender_R2r2.cpp Line : 330 Description : Particle effect or group doesn't exist Arguments : hit_fxhit_water_00
Не найдена система частиц (партикл) hit_water_00 в директории hit_fx файла particles.xr (подробно опишу позже).
Expression : !m_bAutoRemove Function : CParticlesObject::Init File : D:prog_repositorysourcestrunkxrGameParticlesObject.cpp Line : 50 Description : Can't set auto-remove flag for looped particle system. Arguments : snow_stepsstep
Не установлен интервал (время) проигрывания группы/эффекта партиклов. В Particle Group -> End Time(s) укажите время, через которое частицы должны исчезнуть. Заодно проверьте particle effect -> Kill Old -> Age limit.
Expression : fatal error Function : CResourceManager::_GetBlender File : E:stalkerpatch_1_0004xr_3daResourceManager.cpp Line : 49 Description : <no expression> Arguments : Shader 'modelsantigas_glass' not found in library.
Не найден шейдер modelsantigas_glass в библиотеке шейдеров.
Expression : fs Function : CResourceManager::_CreateVS File : E:stalkerpatch_1_0004xr_3daResourceManager_Resources.cpp Line : 185 Description : shader file doesnt exist Arguments : d:stalkergamedatashadersr2deffer_impl_flat.vs
Тут проблема вся в том, что неправильно закомпилился шейдер, при компиляции уровня на качестве, более высоком чем Draft. Нужно скачивать исправление шейдеров от товарища Haron.
Для ЗП (ЧН) это может ещё быть из-за отсутствия thm-ок для текстур террейна уровня!
Expression : fatal error Function : out_of_memory_handler File : D:prog_repositorysourcestrunkxrCorexrDebugNew.cpp Line : 336 Description : <no expression> Arguments : Out of memory. Memory request: 55965 K
Нехватка оперативной памяти.
[error]Expression : assertion failed [error]Function : CBuild::Load [error]File : .Build_Load.cpp [error]Line : 98 [error]Description : B.dwMaterialGame<65536
Неправильно настроены шейдеры. В настройках шейдера, во вкладке R2-A поставьте текстуру, которая вдальнейшем будет накладываться
на террейн.
Expression : fatal error Function : CInifile::r_string File :E:stalkersourcestrunkxrCoreXr_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-svnxr_3daxrGamescript_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:stalkersourcestrunkxr_3daxrGamepatrol_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:stalkersourcestrunkxr_3daxrGamexrServer_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-svnxr_3daxrGamescript_engine.cpp Line : 74 Description : <no expression> Arguments : LUA error: e:stalkergamedatascripts_g.script:20: bad argument #2 to 'format' (string expected, got no value)
Ошибка распространённая. На первый взгляд кажется, что ошибка как раз в скриптах, но всё может быть иначе. В одной из пиратских версий игры этот вылет наблюдается особенно часто из-за криво модифицированного файла «XR_3DA.exe». Если же вы уверены, что у вас лицензионная версия игры, можно попробовать сделать так: открываем файл _g.script блокнотом, закомменчиваем 20 строку (ставим перед строкой —) и идём к тому месту где поймали вылет. Так мы получим более развёрнутый ответ.
Участник: Призрак: Автор прав в том что вылет очень распространен, но так его исправлять нельзя, так как nil передается в эту функцию только при каком-то форс-мажоре. Поэтому необходимо перейти в _g.script в функцию printf и перед log1(string.format(fmr,..)) дописать: get_console():execute(«load «..fmt). После этого запустить еще раз игру и посмотреть при передачи какой строки игра вылетает. Потом найти эту строку в скриптах игры и прикинуть почему аргумент (у нас это аргумент №2 (bad argument #2)) равен nil. Возможность такового вылета из — за слишком быстрой скорости актера, слишком высокому прыжку. (Редактировать: config/creatures/actor.ltx)
Expression : assertion failed Function : _VertexStream::Lock File : E:stalkerpatch_1_0004xr_3daR_DStreams.cpp Line : 44 Description : (bytes_need<=mSize) && vl_Count
Проблема возникает при убийстве НПСмутанта. Типичный вылет по нехватке ресурсов. Встречается в основном на больших локациях. Но не на всех. На болотах из ЧН такой вылет встречается, а вот с локации aver от Кости V такого вылета нет. Однако для данного вылета есть таблетка, в виде правленого экзешника. Искать на АМК-форуме.
Expression : fatal error Function : IRender_Visual::Load File : E:stalkerpatch_1_0004xr_3daFBasicVisual.cpp Line : 58 Description : <no expression> Arguments : Invalid visual
Неправильный визуал (модель) НПС.
Expression : !phrase_dialog->m_PhraseVector.empty() Function : CPhraseDialog::SayPhrase File : E:stalkerpatch_1_0004xr_3daxrGamePhraseDialog.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_repositorysourcestrunkLayersxrRenderSkeletonAnimated.cpp Line : 210 Description : ! MODEL: can't find cycle: Arguments : death_init
Игра не нашла в модели трёхмерную анимацию с именем death_init.
Expression : fatal error Function : CScriptEngine::lua_error File : E:stalkerpatch_1_0004xr_3daxrGamescript_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ...hadow of chernobylgamedatascriptsxr_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()). То имя в логе, которое будет последним после вылета, указывает на персонажа с кривой логикой.
Expression : fatal error Function : CInifile::r_string File : E:stalkerpatch_1_0004xrCoreXr_ini.cpp Line : 352 Description : <no expression> Arguments : Can't find variable class in [test_no_klass_npc]
Не найден класс персонажа. Возможно, НПС не прописан под своим классом в gamedatanpc_profile.xml, либо в creaturesspawn_section.ltx, либо в gameplaycharacter_desc.xml
Expression : fatal error Function : CInifile::r_section File : E:stalkerpatch_1_0004xrCoreXr_ini.cpp Line : 342 Description : <no expression> Arguments : Can't open section 'bandage_test_kick1'
Игра не может найти секцию. Это может быть предмет, НПС и многое другое. Возможно, вы написали название с ошибками. Либо когда добавляли его в: продажу, скрипт, НПС , выпадение из НПС, а в редких случаях это может быть иммунитет чего либо(определить потом трудно). Часто такое бывает связано с названием секции.
Expression : fatal error Function : CInifile::r_string File : E:stalkerpatch_1_0004xrCoreXr_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:stalkerpatch_1_0004xr_3daxrGamescript_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ...dow of chernobylgamedatascriptstest_kick.script:34: attempt to call method 'section' (a nil value)
Метод обращения в игре не предусмотрен. Возможно, стоит пересмотреть подход к тому или иному скрипту.
Expression : rpoints[0].size() Function : game_sv_Deathmatch::Create File : D:prog_repositorysourcestrunkxrGamegame_sv_deathmatch.cpp Line : 99 Description : rpoints for players not found
На мультиплеерной карте не найдены точки респавна игроков. В SDK должен быть красный пацанчик. Настроить Team = 0
Expression : fatal error Function : xrServer::Process_update File : E:stalkerpatch_1_0004xr_3daxrGamexrServer_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_repositorysourcestrunkxrCoreXr_ini.cpp Line : 477 Description : <no expression> Arguments : Can't find variable bound_rect in [level_map]
Такой лог бывает когда подключаешь локацию из ТЧ в ЗП. Причина проста — в ЗП уровнях файл строчка bound_rect пишется в файле gamedatalevelsимя_уровняlevel.ltx, а в ТЧ строка bound_rect для каждого уровня непосредственно в файле gamedataconfiggame_maps_single.ltx …
Исправить просто, нужно изменить файл gamedatalevelsимя_уровняlevel.ltx в подключенной локации, просто перенести строку bound_rect из game_maps_single.ltx в level.ltx перед строчкой texture.
Expression : hGame Function : CEngineAPI::Initialize File : E:stalkerpatch_1_0004xr_3daEngineAPI.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:stalkersourcestrunkxr_3daxrGameInventory.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:stalkersourcestrunkxrCorexrDebugNew.cpp [error]Line : 804 [error]Description :
Данный вылет бывает когда у какого либо из объектов установлено некорректное значение (читал, сам не получал его)
Или же если данный вылет происходит при вызове класса, то проблема в том что в методе __init() класса прописано super()
Expression : !m_error_code Function : raii_guard::~raii_guard File : D:prog_repositorysourcestrunkxrServerEntitiesscript_storage.cpp Line : 748 Description : d:stalker copgamedatascriptsbind_stalker.script:231: attempt to index global 'ИМЯ_ФАЙЛА' (a nil value)
Вылет происходит в двух случаях — когда скрипт пытается вызвать функцию из несуществующего файла или когда в файле допущена синтаксическая ошибка.
Expression : fatal error Function : CScriptEngine::lua_error File : E:stalkersourcestrunkxr_3daxrGamescript_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. Внешне ничего не изменится, но ОС будет реагировать
на клавиши, нажимаете сочетание клавиш «записать в дневник». Делаете перезагрузку, открываете дневник — Ваша ошибка записана.
«дядя Саша»
Expression : bone_id!=BI_NONE Function : SArtefactDetectorsSupport::SetVisible File : D:prog_repositorysourcestrunkxrGameArtefact.cpp Line : 525 Description : link
Возникает при создании или добавлении чужих артефактов. В artefacts.ltx, в секции af_base есть параметр particles_bone=link. Это имя косточки, которая принимается за центр при проигрывании партикла. Если кость в артефакте называется по иному, например joint2, и это не указанно в секции нового арта, которая наследуется от базовой и подразумевает естественно наличие link, получаем вылет. Решается конвертированием модели арта в .object, просмотром в sdk и выяснением имени косточки с занесением в конфиг.
Expression : error handler is invoked! Function : invalid_parameter_handler File : D:prog_repositorysourcestrunkxrCorexrDebugNew.cpp Line : 815 Description : bad argument #3 to 'format' (string expected, got no value)
Вылет заканчивающийся строкой, то что выше не указываю роли не играет, здесь роль играет только «bad argument #3». Если это появилось значит у Вас ошибка в файле с расширением .ltx (обращаю внимание, не путать с файлами .script), которая находится между [….] квадратными скобками в файле. Это может быть секция предмета, секция логики, секция пути файла way_, т.е. там где присутствуют квадратные скобки.
Expression : cross_table().header().level_guid() == level_graph().header().guid() Function : CAI_Space::load File : D:prog_repositorysourcestrunkxrGameai_space.cpp Line : 113 Description : cross_table doesn't correspond to the AI-map
Скорее всего, отсутствует файл level.ai. Возможно после правки уровня в SDK и компиляции AI, вы забыли его скопировать в папку уровня. Важно помнить, что level.ai нужно обновлять для всех уровней, а не только для тех, которые подвергались правке.
Безлоговый вылет
Вылет, при котором лог отсутствует. Причины такого вылета:
1. Безлоговые вылеты бывают в основном из-за завышенных настроек видео.
Решение:
В папке с игрой открыть папку gamedata, папку config, в ней файл alife, открыть любым текстовым редактором (блокнотом, или лучше word pad’ом) и найти строку switch distance = и изменить значение на 5, сохранить изменения. Это только одна (не сильно вероятная) причина безлогового вылета. если вы знаете ещё одну причину, пожалуйста напишите здесь.
2. Вторая причина неправильно указано название пути в логике НПС или он полностью отсутствует в файле way_ all.spawn. Вылетать будет когда дойдёт время до спавна этого НПС.
3. Также, безлоговые вылеты происходят из-за ошибок в диалогах.
- Автор статьи — Pihan13
- Дополнительный справочник «вылетов» игры
Не стесняемся — дополняем, если знаем о чём идёт речь.