Fatal error invalid parameter handler

Материал из S.T.A.L.K.E.R. Ins >

Привет всем! Игра S.T.A.L.K.E.R., а конкретно сам движок X-Ray довольно капризный, и зачастую как в процессе модификации, так и во время игры игра «вылетает». Чтобы мы знали причину вылета, движок нам оставляет лог вылета. Лог вылета можно посмотреть несколькими способами:

  • В текстовом редакторе нажать Ctrl+V (Вставить)
  • Посмотреть лог игры включая лог вылета в файле xray_имя_пользователя.log в папке C:Documents and SettingsAll UsersДокументыSTALKER-***logs
  • Посмотреть непосредственно в окне багтрекера (только в ЧН и ЗП).

Ну приступим. Начнём с простых:

Здесь игра не может открыть звуковой OGG-файл под названием sound в папке d:stalkergamedatasoundsmusic

Не может найти текстуру act_corp_monolit из папки texturesact

Не найдена трёхмерная OGF-модель mesh.ogf из папки meshesphysics.

Не найдена система частиц (партикл) hit_water_00 в директории hit_fx файла particles.xr (подробно опишу позже).

Не установлен интервал (время) проигрывания группы/эффекта партиклов. В Particle Group -> End Time(s) укажите время, через которое частицы должны исчезнуть. Заодно проверьте particle effect -> Kill Old -> Age limit.

Не найден шейдер modelsantigas_glass в библиотеке шейдеров.

Тут проблема вся в том, что неправильно закомпилился шейдер, при компиляции уровня на качестве, более высоком чем Draft. Нужно скачивать исправление шейдеров от товарища Haron. Для ЗП (ЧН) это может ещё быть из-за отсутствия thm-ок для текстур террейна уровня!

Нехватка оперативной памяти.

Неправильно настроены шейдеры. В настройках шейдера, во вкладке R2-A поставьте текстуру, которая вдальнейшем будет накладываться на террейн.

Не найдена переменная ammo_mag_size в секции [wpn_addon_grenade_launcher].

Переполнение стека. Смотрим внимательно: lua_error. Ошибка, возможно, в скриптах.

Какая то вершина (вейпоинт) пути sniper_3_walk стоит в неположенном месте (например не на аи-сетке). Объект stalker_0002 (в данном случае сталкер) который якобы двигался по пути sniper_3_walk попал на эту точку, а заодно ушёл за аи-сетку. Этого движок не терпит.

То же самое произойдет если координаты(вейпоинт) пути sniper_3_walk совпадет с координатами места, где НПС запрещено находиться, будь то рестриктор или аномалия в схеме обхода аномалий. Также этот вылет наблюдается при попытке отправить НПС за пределы места работ параметр out_rest = "имя_рестриктора" в файле загрузки работ гулага. Попробуйте любого сталкера из лагеря новичков отправить, допустим, к остановке — получите этот самый вылет.

Возникают иногда произвольно при смерти неписей. Причина — движок, отрабатывая лут, изредка теряет серверный объект уничтожаемой вещи, в итоге происходит вылет.

Ошибка распространённая. На первый взгляд кажется, что ошибка как раз в скриптах, но всё может быть иначе. В одной из пиратских версий игры этот вылет наблюдается особенно часто из-за криво модифицированного файла "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)

Проблема возникает при убийстве НПСмутанта. Типичный вылет по нехватке ресурсов. Встречается в основном на больших локациях. Но не на всех. На болотах из ЧН такой вылет встречается, а вот с локации aver от Кости V такого вылета нет. Однако для данного вылета есть таблетка, в виде правленого экзешника. Искать на АМК-форуме.

Читайте также:  Как очистить почтовый ящик на рамблере

Неправильный визуал (модель) НПС.

В диалоге esc_dialog нет доступной для отображения фразы (скажем, все заткнуты инфопоршенами).

Игра не нашла в модели трёхмерную анимацию с именем death_init.

Причина вылета в том что игра не понимает значения 0 в danger_ignore.Проще говоря в логике какого то персонажа параметр danger_ignore = 0 либо в минусовом значении. Либо его вообще нету

P.S. Также может быть причина в том, что в логике у какого-то АИ что-то неправильно указано. Для исправления рекомендую вставить строчку перед 116: get_console():execute(self.object:name()). То имя в логе, которое будет последним после вылета, указывает на персонажа с кривой логикой.

Не найден класс персонажа. Возможно, НПС не прописан под своим классом в gamedata
pc_profile.xml, либо в creaturesspawn_section.ltx, либо в gameplaycharacter_desc.xml

Игра не может найти секцию. Это может быть предмет, НПС и многое другое. Возможно, вы написали название с ошибками. Либо когда добавляли его в: продажу, скрипт, НПС , выпадение из НПС, а в редких случаях это может быть иммунитет чего либо(определить потом трудно). Часто такое бывает связано с названием секции.

Не найдена переменная remove_time в секции [vehicle_btr]. А в данном случае ошибка в том что если вы делали предмет как физическую модель(то бишь, которую нельзя использовать, говорить и вообще он похож на декорации типа деревьев, столов и прочего хлама) то необходимо указывать remove_time в его секции.

Метод обращения в игре не предусмотрен. Возможно, стоит пересмотреть подход к тому или иному скрипту.

На мультиплеерной карте не найдены точки респавна игроков. В SDK должен быть красный пацанчик. Настроить Team = 0

Такое иногда бывает, когда ты (ГГ) или НПС заряжает дробовик или другое оружие со значением tri_state_reload = true. Это глюк. в игре что-то сбивается, и когда у дробовика максимальное количество заряженных патронов скажем 6, он заряжается за 6 и дальше.. дальше.. дальше.. и так пока не произойдёт вылет с вышеуказанным логом. вылет не значительный и редкий, но если он случается слишком часто, можно в конфигах всех дробовиков и ружей поменять значение tri_state_reload = true на tri_state_reload = false.

Такой лог бывает когда подключаешь локацию из ТЧ в ЗП. Причина проста — в ЗП уровнях файл строчка bound_rect пишется в файле gamedatalevelsимя_уровняlevel.ltx, а в ТЧ строка bound_rect для каждого уровня непосредственно в файле gamedataconfiggame_maps_single.ltx .
Исправить просто, нужно изменить файл gamedatalevelsимя_уровняlevel.ltx в подключенной локации, просто перенести строку bound_rect из game_maps_single.ltx в level.ltx перед строчкой texture.

Случается когда одна из dll некорректна. Например такой вылет бывает если подсунуть в ТЧ 1.0004 xrGame от 6 патча.

Вылет встречается только на 6 патче при попытке хаванья из трупа. Ищите, исправленную Kolmogor’om, xrGame.dll в Интернете

Данный вылет бывает когда у какого либо из объектов установлено некорректное значение (читал, сам не получал его) Или же если данный вылет происходит при вызове класса, то проблема в том что в методе __init() класса прописано super()

Вылет происходит в двух случаях — когда скрипт пытается вызвать функцию из несуществующего файла или когда в файле допущена синтаксическая ошибка.

Происходит при попытке вызвать класс, которого не существует

Небольшой пример из практики по определению ошибки в особых случаях(для начинающих): Игра зависла, картинка на экране не меняется, на Ctrl + Alt+ Delete не реагирует. Только "Холодная перезагрузка" reset. Но при этом обычно в логе нет записи и обычным Ctrl + V ошибку не увидеть. Я пользуюсь программой Punto Switcher. Есть в ней опция "дневник", она ведёт запись всех нажатий клавиш и по нажатию сочетаний клавиш содержимое памяти может записывать в дневник. теперь когда игра зависла и картинка на экране не меняется, нажимаете Ctrl + Alt+ Delete. Внешне ничего не изменится, но ОС будет реагировать на клавиши, нажимаете сочетание клавиш "записать в дневник". Делаете перезагрузку, открываете дневник — Ваша ошибка записана. "дядя Саша"

Читайте также:  Главная страница цензор нет

Возникает при создании или добавлении чужих артефактов. В artefacts.ltx, в секции af_base есть параметр particles_bone=link. Это имя косточки, которая принимается за центр при проигрывании партикла. Если кость в артефакте называется по иному, например joint2, и это не указанно в секции нового арта, которая наследуется от базовой и подразумевает естественно наличие link, получаем вылет. Решается конвертированием модели арта в .object, просмотром в sdk и выяснением имени косточки с занесением в конфиг.

Вылет заканчивающийся строкой, то что выше не указываю роли не играет, здесь роль играет только "bad argument #3". Если это появилось значит у Вас ошибка в файле с расширением .ltx (обращаю внимание, не путать с файлами .script), которая находится между [. ] квадратными скобками в файле. Это может быть секция предмета, секция логики, секция пути файла way_, т.е. там где присутствуют квадратные скобки.

Скорее всего, отсутствует файл level.ai. Возможно после правки уровня в SDK и компиляции AI, вы забыли его скопировать в папку уровня. Важно помнить, что level.ai нужно обновлять для всех уровней, а не только для тех, которые подвергались правке.

Безлоговый вылет

Вылет, при котором лог отсутствует. Причины такого вылета:

1. Безлоговые вылеты бывают в основном из-за завышенных настроек видео.

Решение: В папке с игрой открыть папку gamedata, папку config, в ней файл alife, открыть любым текстовым редактором (блокнотом, или лучше word pad’ом) и найти строку switch distance = и изменить значение на 5, сохранить изменения. Это только одна (не сильно вероятная) причина безлогового вылета. если вы знаете ещё одну причину, пожалуйста напишите здесь.

2. Вторая причина неправильно указано название пути в логике НПС или он полностью отсутствует в файле way_ all.spawn. Вылетать будет когда дойдёт время до спавна этого НПС.

3. Также, безлоговые вылеты происходят из-за ошибок в диалогах.

Устанавливает функцию для вызова, когда CRT обнаруживает недопустимый аргумент. Sets a function to be called when the CRT detects an invalid argument.

Синтаксис Syntax

Параметры Parameters

пнев pNew
Указатель на функцию нового обработчика недопустимого параметра. The function pointer to the new invalid parameter handler.

Возвращаемое значение Return Value

Указатель на обработчик недопустимого параметра до вызова. A pointer to the invalid parameter handler before the call.

Примечания Remarks

Многие функции времени выполнения C проверяют допустимость аргументов, передаваемых в них. Many C runtime functions check the validity of arguments passed to them. Если передается недопустимый аргумент, функция может установить номер ошибки «код возврата» или вернуть код ошибки. If an invalid argument is passed, the function can set the errno error number or return an error code. В таких случаях также вызывается обработчик недопустимого параметра. In such cases, the invalid parameter handler is also called. Среда выполнения C предоставляет глобальный обработчик недопустимых параметров по умолчанию, который завершает программу и отображает сообщение об ошибке среды выполнения. The C runtime supplies a default global invalid parameter handler that terminates the program and displays a runtime error message. Вы можете использовать _set_invalid_parameter_handler , чтобы задать собственную функцию в качестве глобального обработчика недопустимых параметров. You can use the _set_invalid_parameter_handler to set your own function as the global invalid parameter handler. Среда выполнения C также поддерживает локальный обработчик недопустимых параметров потока. The C runtime also supports a thread-local invalid parameter handler. Если обработчик локального параметра потока задан в потоке с помощью _set_thread_local_invalid_parameter_handler, функции среды выполнения C, вызываемые из потока, используют этот обработчик вместо глобального обработчика. If a thread-local parameter handler is set in a thread by using _set_thread_local_invalid_parameter_handler, the C runtime functions called from the thread use that handler instead of the global handler. Только одну функцию можно указать в качестве глобального обработчика недопустимых аргументов единовременно. Only one function can be specified as the global invalid argument handler at a time. Только одну функцию можно указать в качестве локального обработчика недопустимых аргументов для одного потока, но различные потоки могут иметь разные локальные обработчики потоков. Only one function can be specified as the thread-local invalid argument handler per thread, but different threads can have different thread-local handlers. Это позволяет изменять обработчик, который используется в одной части кода, не затрагивая работу других потоков. This allows you to change the handler used in one part of your code without affecting the behavior of other threads.

Читайте также:  Twitch как добавить игру

Когда среда выполнения вызывает функцию обработки недопустимого параметра, это обычно означает, что возникла неисправимая ошибка. When the runtime calls the invalid parameter function, it usually means that a nonrecoverable error occurred. Указанная функция обработчика недопустимого параметра должна сохранить все данные, которые возможно сохранить, и затем прерваться. The invalid parameter handler function you supply should save any data it can and then abort. Она не должна возвращать управление функции main, если вы не уверены, что ошибка исправима. It should not return control to the main function unless you are confident that the error is recoverable.

Функция обработчика недопустимого параметра должна иметь следующий прототип: The invalid parameter handler function must have the following prototype:

Аргумент выражения — это расширенное строковое представление выражения аргумента, вызвавшего ошибку. The expression argument is a wide string representation of the argument expression that raised the error. Аргумент функции — это имя функции CRT, которая получила недопустимый аргумент. The function argument is the name of the CRT function that received the invalid argument. Аргумент File — это имя ИСХОДНОГО файла CRT, содержащего функцию. The file argument is the name of the CRT source file that contains the function. Аргумент line — это номер строки в этом файле. The line argument is the line number in that file. Последний аргумент зарезервирован. The last argument is reserved. Все параметры имеют значение null , если не используется отладочная версия библиотеки CRT. The parameters all have the value NULL unless a debug version of the CRT library is used.

Требования Requirements

Подпрограмма Routine Обязательный заголовок Required header
_set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler _set_invalid_parameter_handler, _set_thread_local_invalid_parameter_handler C: C:

C++: или C++: or

Функции _set_invalid_parameter_handler и _set_thread_local_invalid_parameter_handler относятся только к Майкрософт. The _set_invalid_parameter_handler and _set_thread_local_invalid_parameter_handler functions are Microsoft specific. Сведения о совместимости см. в разделе Совместимость. For compatibility information, see Compatibility.

Пример Example

В следующем примере обработчик ошибок недопустимого параметра используется для печати функции, которая получила недопустимый параметр, и файла и строки в источниках CRT. In the following example, an invalid parameter error handler is used to print the function that received the invalid parameter and the file and line in CRT sources. Если используется отладочная библиотека CRT, ошибки недопустимого параметра также создают утверждение, которое отключено в этом примере с помощью _CrtSetReportMode. When the debug CRT library is used, invalid parameter errors also raise an assertion, which is disabled in this example using _CrtSetReportMode.

Причины вылетов игры (разбираем логи)

Привет всем! Игра сталкер, а конкретно сам движок X-ray довольно капризный, и зачастую как в процессе модификации, так и во время игры игра "вылетает". Чтобы мы знали причину вылета, движок нам оставляет лог вылета. Лог вылета можно посмотреть несколькими способами:
В текстовом редакторе нажать Ctrl+V (Вставить)
Посмотреть лог игры включая лог вылета в файле xray_имя_пользователя.log в папке C:Documents and SettingsAll UsersДокументыSTALKER-***logs
Посмотреть непосредственно в окне багтрекера (только в ЧН и ЗП).