Полтергейст

Вылеты без логов - в чём причины и как с ними бороться

65 сообщений в этой теме

У меня вылет без лога когда я неписю прописал другую логику

[logic]

active = remark@base

danger = danger_condition

meet = meet

 

[remark@base]

anim = hello_wpn

no_move = true

target = actor

meet = meet

on_actor_dist_le = 2| remark@punch

danger = danger_condition

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


Ссылка на сообщение
Поделиться на других сайтах

А секция [remark@punch] имеется? А скция [meet] тоже есть? Кстати, meet прописывается только в конкретной секции логики ([remark]), в общей же [logic] её указывать ни к чему.

 

Ищи ошибку, отсеивая параметры: закомментируй все поля в секции [logic], кроме active, в [remark@base] вообще все... ну, кроме target. Если вылета не будет, включай по очереди остальные параметры. Если всё равно вылетает - возможно, проблемы с самим NPC, его профилем или диалогами, на него повешенными.

Изменено пользователем Полтергейст

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


Ссылка на сообщение
Поделиться на других сайтах

Иногда причиной таких вылетов на динамике могут быть безобидные партиклы. Как бороться? Уменьшать нужные (а точней не нужные) параметры в PE.

Просто к теме.

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


Ссылка на сообщение
Поделиться на других сайтах

Вылет без лога в ТЧ при выходе в главное меню бывает, когда в ui_main_menu.script допущена синтаксическая ошибка. Например такая:

eif dik == DIK_keys.DIK_Q then

self:OnMessageQuitWin()

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


Ссылка на сообщение
Поделиться на других сайтах

Еще бывают вылеты без лога из-за партиклов, нормально работающих и обычно не вызывающих проблем - в тех случаях, когда (предположительно - в онлайне) слишком много объектов использующих партиклы. Я недавно тестировал систему спавна артов после выброса, во время теста вся локация была завалена артефактами - они вываливались из каждой аномалии. В итоге вылет.

С более мудреными, чем у артов, партиклами, для такой ситуации наверно будет достаточно и меньшего количества объектов.

 

В логе в таком случае остается только такое:

 

Scheduler tried to update object particle_instance
stack trace:

001B:0384C36F xrParticles.dll, PAPI::ParticleManager()

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


Ссылка на сообщение
Поделиться на других сайтах

Вылет без лога:

Вчера пытался поменять мировую модель у оружия на классе РПГ-7, полдня летал на рабстол без лога, пока не понял, в чем дело.

Причина - в новой модели не существовало кости, указанной в grenade_bone основного конфига (в смысле, не ХУД-секция). Возможно, то же самое будет и на классах АК-74 и Грозы. К этой кости может быть ничего не привязано, она может не иметь шейпа, но быть обязана.

С этой костью связан еще один баг: попробовал впарить за grenade_bone главную кость мировой модели. После выстрела (в каком бы направлении не стрелял) почему-то предлагался переход на другую локацию, и актора выбрасывало к переходу на Свалку - тесты, по традиции, на Кордоне.

При попытке впарить любую другую кость с привязанной частью модели эту часть при перезарядке от 3 лица корежит.

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


Ссылка на сообщение
Поделиться на других сайтах

Возможен и даже очень вероятен вылет без лога, если в XML файле в теле описания диалога вместо ссылки на текстовый строковый файл вписывать текст напрямую и при этом количество символов превысит лимит (255 символов, если я правильно помню).

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


Ссылка на сообщение
Поделиться на других сайтах

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

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


Ссылка на сообщение
Поделиться на других сайтах

Ну это как бы одно и то же. Не важно, как был создан диалог - скриптом или xml-файлом. Когда из диалога происходит обращение к несуществующей функции - тогда и вылет.

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


Ссылка на сообщение
Поделиться на других сайтах

Вылет без лога может случаиться, если вызвать метод update() из серверного объекта мёртвого NPC. Скорее всего для brain():update() будет то же самое, но надо будет ещё потестировать для более точных данных.

 

Ещё один источник проблем - функции cse_alife_smart_zone.register_npc() и cse_alife_smart_zone.unregister_npc(). Причём вылеты от них бывают не при каждом вызове, а "плавающие" (через раз). В смартах они не используются (видимо, именно поэтому разрабы их убрали), но на всякий случай оставлю это тут.

Изменено пользователем Полтергейст

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


Ссылка на сообщение
Поделиться на других сайтах

Флуд почищен, список причин вылетов обновлён.

 

Вчера столкнулся с непонятным вылетом без лога, причина скорее всего в рестрикторах.

Дело в том, что я пытался прописать всем NPC (людям) в рестрикторы все аномалии, находящиеся на этом уровне, с помощью функции alife():add_in_restriction(npc, restrictor_id). При net_destroy, соответственно, удалял их с помощью alife():remove_in_restriction(npc, restrictor_id). Также был учтён баг с удалением рестриктора, прописанного кому-то. При самой игре вылета нет, но если сохраниться возле какого-нибудь NPC и потом загрузиться, то вылет был. Возможно, из-за того, что была попытка прописать всё это в рестрикторы дважды, либо весь этот список как-то неправильно сохраняется.

Изменено пользователем Полтергейст

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


Ссылка на сообщение
Поделиться на других сайтах

Полтергейст,

размер списка рестрикторов у нпц ограничен - возможно вылет из-за этого

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


Ссылка на сообщение
Поделиться на других сайтах

_Призрак_,

в клиентском объекте список рестрикторов хранится в виде строки, в которой через запятую перечисляются имена рестрикторов. На строку отводится 4кб. Формирование этой строки происходит сишными функциями, без учета размера буфера. Поэтому и упомянул про это.

 

Ну и мне казалось, что длина строки 1кб, а 4кб еще по-божески :)

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


Ссылка на сообщение
Поделиться на других сайтах

Вылет без лога произойдёт, если попытаться использовать функцию wounded(...) для изменения состояния раненности NPC. Даже перенос её вызова в update(...) может не помочь - у меня вылетает и в первом update, и в net_spawn. Такие же проблемы могут быть при использовании некоторых других функций, но пока что с ними не сталкивался.

Изменено пользователем Полтергейст

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


Ссылка на сообщение
Поделиться на других сайтах

Дополню то что у вас в шапке:

Ошибка в вызове функции из диалога: после имени функции скобки писать НЕ НУЖНО.

Вот так

Код

<action>file.func()</action>

 

писать нельзя, нужно вот так:

Код

<action>file.func</action>

 

(file - имя файла скрипта, func - имя функции)

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

т.е. если в файле file нет функции func, то:

<action>file.func</action>

Не произойдет ничего

<precondition>file.func</precondition>

Будет вылет без лога.

То же самое если в файле file синтаксическая ошибка.

Изменено пользователем ColR_iT

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


Ссылка на сообщение
Поделиться на других сайтах

Вылет без лога случается, если установить состояние тела равным move.crouch и ментальное состояние anim.free. Например, вот такой код

npc:set_mental_state(anim.free)
npc:set_body_state(move.crouch)

вызовет вылет без лога. В скриптах state_mgr оригинальной игры (ТЧ) установка этой комбинации состояний запрещена, поэтому при установке состояний через state_mgr.set_state(...) такого вылета не может произойти. Но если состояние устанавливается напрямую (как показано выше) или запрет в state_mgr снят, то вылет будет.

Изменено пользователем Полтергейст

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


Ссылка на сообщение
Поделиться на других сайтах

Подскажите, в чем дело. При переходе из подземелья Агропрома на Агропром следует безлоговый вылет, при попытке запустить сейв - безлоговый вылет при нажатии на него. Что самое интересное, на этих локациях я ничего не менял. Я сделал оружейную сборку на 1 Гб, поэтому мне не катит все заново перебирать... :ny_unsure:

 

Ещё как катит! Подними глаза в этот пост #26 на этой же странице и поймёшь в чём возможная причина.

ColR_iT

Изменено пользователем ColR_iT

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


Ссылка на сообщение
Поделиться на других сайтах

Были безлоговые вылеты при редактировании модели пысовского оружия и пихания моделей в другие папки.

Решение:

1) Либо в конфиге оружия указать те scope status, silencer status и grenade_launcher status, что и в оригинале.

2) Если нужен ствол с новыми обвесами, то надо хотя бы мировую модель положить в такую же папку с игрой, что и в оригинале, то есть meshes\weapons.

 

Да, и еще - не надо писать тексты диалогов в схеме диалога - тоже вылет. Лимит 128 символов.

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


Ссылка на сообщение
Поделиться на других сайтах

Уважаемый ColR_iT, из-за костей вылет быть не может, т.к.

1) я через спавнер спавню все новые стволы в инвентарь и тестирую;

2) новое оружие есть только на Армейских складах, Припяти и на ЧАЭС.

 

Ну посуди сам: если ничего кроме оружия ты не добавляешь и локации ты не трогал, из-за чего тогда? Барабашка?

К тому же я сказал "возможная" проблема.

Ну если нет так нет, моё дело предложить.

ColR_iT

Изменено пользователем ColR_iT

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


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!


Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.


Войти

  • Пользователи, читающие эту тему   0 пользователей

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