Перейти к контенту

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


Рекомендуемые сообщения

Если вы столкунулись с вылетом без лога, постарайтесь вспомнить следующее:
1. Что изменяли в последний раз
2. Во время чего вылет произошёл
3. На какой локации
4. Случайно ли он проявляется или только при приближении к определённому месту/объекту
5. Попробуйте отследить имя последнего перешедшего в онлайн объекта
6. Попробуйте поискать в своих правках ошибки, подходящие под нижеперечисленную классификацию.

Известные причины вылетов без лога:

  Вылеты, вызванные ошибками в конфигах, партиклах, файлах XML (Показать)
Изменено пользователем Полтергейст
исправлено и дополнено описание вылетов action_planner
Ссылка на комментарий

Полтергейст

  Цитата
При загрузке - важно не перепутать написание.

packet:w_stringZ(self.wounded) -- записать

self.wounded = packet:r_stringZ(пусто) --считать

  Цитата
И если команда alife:():release(obj, true) окажется в любом из методов класса se_stalker, вызываемых симуляцией, то случится вылет без лога

Что то не очень как то понятно:по моему опыту вылет при удалении\дропе может быть разве что в том случае, если движок "потерял" серверную юзердату удаляемого объекта в момент операции удаления - и то имеет тогда вполне вменяемый лог - что entity not found.

ищите проблемы в class_registrator.script, обычно просто ошибка синтаксиса.

Ну уж туда то зачем лазить? Классов дефолтных и так 'вагон и маленькая тележка' - куда свои то создавать? На моей памяти одному матерому модмейкеру только один раз за все время моддинга понадобилось там зарегить свой класс. Как говорил один известный логик - "не стоит плодить сущности без необходимости".

Неправильные операции с evaluator'ами или действиями

А у меня к таким операциям лог прилагается - видимо эксклюзивно ;)

Изменено пользователем Garry_Galler
Ссылка на комментарий
  Цитата
Что то не очень как то понятно:по моему опыту вылет при удалении\дропе может быть разве что в том случае, если движок "потерял" серверную юзердату удаляемого объекта

Если объект удаляет сам себя (функция удаления вызывается из методов его класса), то вылет будет без лога. Проверено на функциях can_switch_* вчера.

 

  Цитата
А у меня к таким операциям лог прилагается - видимо эксклюзивно

Попробуйте в xr_camper заменить строку

action:add_precondition (world_property(stalker_ids.property_danger,false))

на

action:add_precondition (world_property(stalker_ids.property_danger_grenade,false))

- лога не будет.

 

  Цитата
Ну уж туда то зачем лазить? Классов дефолтных и так 'вагон и маленькая тележка' - куда свои то создавать?

Ну почему, мне как-то раз понадобилось повесить скрипты на гранаты (на их серверные объекты) и тут как раз глюкнул akelpad в момент сохранения - подрезал конец документа и заполнил его 5-ю копиями одной строки. Результат очевиден :)

 

P.S. Битые сохранения и попытки использовать функции класса net_packet(), не соответствующие типу данных (к примеру, packet:r_stringZ() для считывания числа или bool) тоже относятся к первому пункту (неправильное использование класса net_packet())

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

Еще добавлю от себя о вылетах без лога. Хотя наверно это вещь очевидная...

При "как бы некритичных" синтаксических ошибках в скриптах, вызываемых из binder:update (по крайней мере из апдейта актора так) - получается вылет без лога вообще. т.е. В лог-файл ничего не сохраняется.

Речь идет не о ошибках типа "лишняя скобка" или "нехватает слова end", а к примеру, точка вместо двоеточия при вызове методов или неправильные типы данных (у меня например, game_object* попал туда где ожидалась строка, и получился такой вылет)

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

Одной из распространённых причиной вылетов без лога, являются эксперименты с логикой НПС прописываемой в скриптах, гулагах.

Как пример прописывая walker несуществующие ("неуместные", для данного типа :) ) пути:

path_walk = w1 или p1 или walk1 или patrol_path ... (возможно этот путь подойдёт для camper и пр., а не для walker)

path_look = s1 или patrol_path или patrol_path ... (возможно этот путь подойдёт для camper и пр., а не для walker)

Возможно если их зарегистрировать для него, например в gulag_tasks или в своем gulag_new - вылета не будет ;)

 

Ссылка на комментарий

SEA_CAT

Не понял. Если в логике НПС прописать путь которого не существует, то игра или вылетает с движковом логом (у меня такое бывает на ЗП) или вылетает с руганью на _г.скрипт. Да и притом, если я не ошибаюсь пути для валкера и кампера одинаковые.

Freedom

Ссылка на комментарий

_Призрак_

Ну я выше весьма "заинтриговано", всё расписал, а так суть ты уловил верно, если мы прописываем своему вновь созданному НПС существующую! логику от других - найденную в одном из gulag_escape, gulag_agroprom и пр. То если не обращать внимания на его сущность sleeper, camper, walker... а просто прописать её своему к примеру walker-у от какого нибудь camper-а с локации Радар - где у него всего одна точка пути? и он просто физически не сможет перемещаться ко второй несуществующей то следует вылет (и в ТЧ по крайней мере лог пустой!).

 

Дабы избежать такой неприятности, надо в зависимости как спавним если all.spawn - то либо брать из него подходящие пути для своего walker-а или прописывать там свои и после указывать их в своей логике. А если скриптом, то в логике ему указывать один или несколько существующих путей (внимательно посмотрев на тех у кого их позаимствовали).

 

В Зове Припяти я в основном спавнил НПС в сквадах, потом на новых локах начал их расставлять по точкам через all.spawn (логику и маршруты писал сам), потом забросил это дело до лучших времён так как столкнулся с массой ограничений (по сравнению с ТЧ), и с самой главной проблемой под названием - оптимизация, после моих нововведений, (новые группировки, засады, монстры, флора, фауна), FPS даже на мощных видеокартах и "быстрой" памятью падал до критически неприемлемых значений!

 

P.S. Поэтому я поступил иначе, взял интересующие меня модели из ЗП, ЧН и билдов и "слил" на движек ТЧ (получилось даже лучше чем я ожидал), даже старые локации изменились на 50% и более за счёт замены части их содержимого, ну главная идея это сюжетная линия прожженная хардкордом и автотранспорт (включая бронетехнику)!

Изменено пользователем Полтергейст
Ссылка на комментарий
  Цитата
он просто физически не сможет перемещаться ко второй несуществующей

Не понял. Разве если валкеру установить только одну точку пути, то он должен дойти до этой точки, и остановится. Это во всех частях игры так. Не, если ты в алл.спавне сделаешь ссылку на 2 точку пути, а саму 2 точку не создашь то вылет наверняка будет

Freedom

Ссылка на комментарий

Ну я же просто так написал: от какого нибудь camper-а с локации Радар (это снайперы с вышки или возле бункера, а они - camper), и без "пути" точка прибывания у них одна, а если просто взять и прописать её walker-у то ни чего хорошего из этого не получиться (внимательно посмотрев на тех у кого позаимствовали такие path_walk = ... и path_look = ...) - я хотел сказать не 1-я, а изначальная их точка, которая в логике у них прописана так:

[camper]

path_walk = w1

path_look = s1

sniper = true

....

 

т.е. если мы создавая своего walker-а прописали так:

[walker]

path_walk = w1

path_look = s1

....

То получили - без лога ;)

Изменено пользователем SEA_CAT
Ссылка на комментарий

Ребята, вылет будет происходить, если новосозданному НПС присвоить имя пути по которому уже кто-то ходит! А то, какое у них название, где расположена точка - значения не имеет, если это логика в кустом дата, если же в гулаге (esc_gulag), а в логике пути названы walk_man_1, то ОЧЕНЬ важно, чтобы в файлах way_xxx.ltx имена были с приставкой названия гулага esc_gulag_walk_man_1 и все!

Если walkery присвоить точку от campera, то, не зависимо от местоположения этой точки, НПС пойдет и встанет на нее, при условии, что если это точка на другой локации, то между этими локациями должна быть связь граф поинтами, чтобы мобы могли переходить туда-сюда.

Ссылка на комментарий
  Цитата
если новосозданному НПС присвоить имя пути по которому уже кто-то ходит!

Не всегда так. К примеру, в схеме xr_patrol (работы patrol и raid) по одному пути ходят несколько npc. И вылетов от это нет. И вообще, непонятно, зачем для walker делать такой запрет - ну ходят двое по одному пути, ну и что?

Ссылка на комментарий
  Куфзук писал(а):
Ребята, вылет будет происходить, если новосозданному НПС присвоить имя пути по которому уже кто-то ходит! А то, какое у них название, где расположена точка - значения не имеет, если это логика в кустом дата, если же в гулаге (esc_gulag), а в логике пути названы walk_man_1, то ОЧЕНЬ важно, чтобы в файлах way_xxx.ltx имена были с приставкой названия гулага esc_gulag_walk_man_1 и все!

 

Тоже, не совсем соглашусь - так как на практике получал другой результат:

1. Так уж получилось, что своим "спецподразделениям" - охотников за ГГ я присвоил часть существующих путей ближайших к ним гулагов для walker-ов существующие от других walker, а для camper-ов и вовсе с других лок (главное чтобы название их было не "с потолка" взято а из тех, что есть в gulag_tasks например) - а если вписывал своё уже в кустом дата "А то, какое у них название, где расположена точка - значения не имеет" - то получал гарантированный вылет без лога, вот так мне не везло, до тех пор пока названия им не поменял.

 

Ссылка на комментарий
  Цитата
если вписывал своё уже в кустом дата "А то, какое у них название, где расположена точка - значения не имеет" - то получал гарантированный вылет без лога, вот так мне не везло, до тех пор пока названия им не поменял.

Так и не понял, что там с названиями. С чего и на что они менялись? Если оно из gulag_tasks взято, то обязательно надо добавлять к нему имя смарта, иначе вылет будет.

Ссылка на комментарий

Да интересный диалог, чтобы не сбивать с толка - в двух словах (предложениях):

Если использовал существующие пути то вылета не было при условии если не путал пути камперов и валкеров (как не противоречит это сказанному выше).

А если пробовал менять названия путей на свои не упоминания их в gulag_tasks - то вылет без лога был.

 

P.S. - Проверял на практике - сомневаясь в теории.

Изменено пользователем SEA_CAT
Ссылка на комментарий

Похоже это глюки скрипта move_mgr. Вот только не пойму, почему глюки из-за walker, а не camper - там схемы той строк 10. Будем разбираться :)

 

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

Куфзук

  Цитата
Ребята, вылет будет происходить, если новосозданному НПС присвоить имя пути по которому уже кто-то ходит!

 

Вылета не будет если в секции логики Нпс используються полные имена путей из алл спавна (как вы впрочем и сказали).

Или есть работа с сылкой на данную логику в файле загрузки работ (смотрите сидяших у костра в лагере новичков)

 

  тхт (Показать)
Ссылка на комментарий

У меня вылетела игра и я не понял почему

1. Создавал НПС редактирую алл.спавн

2. Когда начал новую игру

3. На собственной

4. Игра даже не загрузилась и произошел вылет

6. То что я написал в алл.спавне:

  Раскрывающийся текст (Показать)

Создаю глобальный мод с новыми локациямЭ

Ссылка на комментарий

Я вот ещё заметил. Когда пишешь диалоги и вызываешь функцию:

<action>file.func</action>

Если после func поставить () то будет вылет без лога. Конечно такую ошибку трудно допустить но были случаи (в моём опыте).

Запомнить: Никаких скобок в вызове функции через диалог не ставить!

Ссылка на комментарий

Есть вылеты без лога при попытке движком прочитать в конфиге небходимые данные, но они равны nil. К примеру, в оружии оставим значение inv_name= пустым.

Также есть безлоговые вылеты, если вы напортачили при ковырянии движка.

Изменено пользователем SkyLoader
Ссылка на комментарий

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

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

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

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

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

Войти

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

Войти
  • Недавно просматривали   0 пользователей

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