Перейти к содержимому



Фотография

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


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 64

#1   Полтергейст

Полтергейст
  • Группа: Опытные
  • Сообщений: 349
  • Регистрация: 25.10.2009
  • Пользователь: 14126

Отправлено 05 03 2011 - 22:59

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

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

Вылеты, вызванные ошибками в конфигах, партиклах, файлах XML


Вылеты, вызванные ошибками в скриптах



Конкретные примеры (вырезки кода, вызывающие вылеты) и советы по устранению вылетов приветствуются.

Всем, у кого установлен патч 1.0006, рекомендуется установить фикс. После установки фикса вылеты без лога скорее всего исчезнут.




Просьба не спрашивать о причинах вылета с логом. С такими вопросами - в "ковырялки".
Также здесь не следует писать про про вылеты, вызванные редактированием движка. Для этого есть соответствующая тема.


Сообщение отредактировал Полтергейст: 07 06 2013 - 20:59
исправлено и дополнено описание вылетов action_planner


#2   Garry_Galler

Garry_Galler
  • Группа: Опытные
  • Сообщений: 303
  • Регистрация: 02.05.2009
  • Пользователь: 10125

Отправлено 06 03 2011 - 02:03

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

packet:w_stringZ(self.wounded) -- записать
self.wounded = packet:r_stringZ(пусто) --считать
Цитата
И если команда alife:():release(obj, true) окажется в любом из методов класса se_stalker, вызываемых симуляцией, то случится вылет без лога

Что то не очень как то понятно:по моему опыту вылет при удалении\дропе может быть разве что в том случае, если движок "потерял" серверную юзердату удаляемого объекта в момент операции удаления - и то имеет тогда вполне вменяемый лог - что entity not found.
ищите проблемы в class_registrator.script, обычно просто ошибка синтаксиса.
Ну уж туда то зачем лазить? Классов дефолтных и так 'вагон и маленькая тележка' - куда свои то создавать? На моей памяти одному матерому модмейкеру только один раз за все время моддинга понадобилось там зарегить свой класс. Как говорил один известный логик - "не стоит плодить сущности без необходимости".
Неправильные операции с evaluator'ами или действиями
А у меня к таким операциям лог прилагается - видимо эксклюзивно wink.gif

Сообщение отредактировал Garry_Galler: 06 03 2011 - 02:06


#3   Полтергейст

Полтергейст
  • Автор Темы
  • Группа: Опытные
  • Сообщений: 349
  • Регистрация: 25.10.2009
  • Пользователь: 14126

Отправлено 06 03 2011 - 08:23

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

Если объект удаляет сам себя (функция удаления вызывается из методов его класса), то вылет будет без лога. Проверено на функциях 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-ю копиями одной строки. Результат очевиден smile.gif

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

Сообщение отредактировал Полтергейст: 18 12 2011 - 19:22


#4   Zander_driver

Zander_driver
  • маленько псих

  • Группа: Кураторы тем
  • Сообщений: 1 875
  • Регистрация: 21.01.2011
  • Пользователь: 22908
        

Отправлено 08 03 2011 - 23:06

Еще добавлю от себя о вылетах без лога. Хотя наверно это вещь очевидная...
При "как бы некритичных" синтаксических ошибках в скриптах, вызываемых из binder:update (по крайней мере из апдейта актора так) - получается вылет без лога вообще. т.е. В лог-файл ничего не сохраняется.
Речь идет не о ошибках типа "лишняя скобка" или "нехватает слова end", а к примеру, точка вместо двоеточия при вызове методов или неправильные типы данных (у меня например, game_object* попал туда где ожидалась строка, и получился такой вылет)

#5   SEA_CAT

SEA_CAT
  • Extreme editor

  • Группа: Кураторы тем
  • Сообщений: 480
  • Регистрация: 20.02.2009
  • Пользователь: 7947
  

Отправлено 20 03 2011 - 15:25

Одной из распространённых причиной вылетов без лога, являются эксперименты с логикой НПС прописываемой в скриптах, гулагах.
Как пример прописывая walker несуществующие ("неуместные", для данного типа smile.gif ) пути:
path_walk = w1 или p1 или walk1 или patrol_path ... (возможно этот путь подойдёт для camper и пр., а не для walker)
path_look = s1 или patrol_path или patrol_path ... (возможно этот путь подойдёт для camper и пр., а не для walker)
Возможно если их зарегистрировать для него, например в gulag_tasks или в своем gulag_new - вылета не будет wink.gif


#6   _Призрак_

_Призрак_
  • Призрак

  • Группа: Жители
  • Сообщений: 1 006
  • Регистрация: 12.04.2009
  • Пользователь: 9427

Отправлено 20 03 2011 - 16:31

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

#7   SEA_CAT

SEA_CAT
  • Extreme editor

  • Группа: Кураторы тем
  • Сообщений: 480
  • Регистрация: 20.02.2009
  • Пользователь: 7947
  

Отправлено 20 03 2011 - 20:57

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

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

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

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

Сообщение отредактировал Полтергейст: 18 12 2011 - 19:33


#8   _Призрак_

_Призрак_
  • Призрак

  • Группа: Жители
  • Сообщений: 1 006
  • Регистрация: 12.04.2009
  • Пользователь: 9427

Отправлено 20 03 2011 - 21:38

Цитата
он просто физически не сможет перемещаться ко второй несуществующей

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

#9   SEA_CAT

SEA_CAT
  • Extreme editor

  • Группа: Кураторы тем
  • Сообщений: 480
  • Регистрация: 20.02.2009
  • Пользователь: 7947
  

Отправлено 20 03 2011 - 21:48

Ну я же просто так написал: от какого нибудь 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
....
То получили - без лога wink.gif

Сообщение отредактировал SEA_CAT: 20 03 2011 - 21:55


#10   ColR_iT

ColR_iT
  • Первое впечатление действительно не всегда правдивое

  • Группа: Жители
  • Сообщений: 858
  • Регистрация: 08.01.2010
  • Пользователь: 15673

Отправлено 21 03 2011 - 10:07

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

#11   Полтергейст

Полтергейст
  • Автор Темы
  • Группа: Опытные
  • Сообщений: 349
  • Регистрация: 25.10.2009
  • Пользователь: 14126

Отправлено 21 03 2011 - 11:13

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

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

#12   SEA_CAT

SEA_CAT
  • Extreme editor

  • Группа: Кураторы тем
  • Сообщений: 480
  • Регистрация: 20.02.2009
  • Пользователь: 7947
  

Отправлено 21 03 2011 - 11:44

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


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


#13   Полтергейст

Полтергейст
  • Автор Темы
  • Группа: Опытные
  • Сообщений: 349
  • Регистрация: 25.10.2009
  • Пользователь: 14126

Отправлено 21 03 2011 - 11:54

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

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

#14   SEA_CAT

SEA_CAT
  • Extreme editor

  • Группа: Кураторы тем
  • Сообщений: 480
  • Регистрация: 20.02.2009
  • Пользователь: 7947
  

Отправлено 21 03 2011 - 12:13

Да интересный диалог, чтобы не сбивать с толка - в двух словах (предложениях):
Если использовал существующие пути то вылета не было при условии если не путал пути камперов и валкеров (как не противоречит это сказанному выше).
А если пробовал менять названия путей на свои не упоминания их в gulag_tasks - то вылет без лога был.

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

Сообщение отредактировал SEA_CAT: 21 03 2011 - 12:18


#15   Полтергейст

Полтергейст
  • Автор Темы
  • Группа: Опытные
  • Сообщений: 349
  • Регистрация: 25.10.2009
  • Пользователь: 14126

Отправлено 21 03 2011 - 12:23

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

Сообщение отредактировал Полтергейст: 14 02 2012 - 20:53


#16   AKKK1

AKKK1
  • Вольный

  • Группа: Опытные
  • Сообщений: 306
  • Регистрация: 03.07.2009
  • Пользователь: 11515

Отправлено 21 03 2011 - 19:30

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


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

тхт



логика

тхт

Полтергейст
Цитата
walker делать такой запрет - ну ходят двое по одному пути, ну и что?


Запрета нет
хоть сколько нпс могут ходить по одному пути (см выше).

Ну и до кучи ny_ph34r_1.gif

Есть вполне легальная возможность вывода нпс из гулага под свою логику.
Для это го нужно создать дополнительную секцию логики не прописанную в файле загрузки работ гулага но находяшиюся в файле логики работ гулага.



#17   strelok200

strelok200
  • Группа: Заблокированные
  • Сообщений: 224
  • Регистрация: 25.09.2010
  • Пользователь: 19457

Отправлено 03 04 2011 - 10:16

У меня вылетела игра и я не понял почему
1. Создавал НПС редактирую алл.спавн
2. Когда начал новую игру
3. На собственной
4. Игра даже не загрузилась и произошел вылет
6. То что я написал в алл.спавне:
Раскрывающийся текст


#18   _Призрак_

_Призрак_
  • Призрак

  • Группа: Жители
  • Сообщений: 1 006
  • Регистрация: 12.04.2009
  • Пользователь: 9427

Отправлено 03 04 2011 - 10:26

Цитата
; cse[smart_terrains]

Удали ; cse из той строки
И посмотри правильный у тебя object_flags = 0xffffffbf или нет

#19   TRAMP14

TRAMP14
  • Ты, кто?

  • Группа: Пользователи
  • Сообщений: 234
  • Регистрация: 16.12.2010
  • Пользователь: 22144

Отправлено 03 04 2011 - 10:51

Я вот ещё заметил. Когда пишешь диалоги и вызываешь функцию:
<action>file.func</action>
Если после func поставить () то будет вылет без лога. Конечно такую ошибку трудно допустить но были случаи (в моём опыте).
Запомнить: Никаких скобок в вызове функции через диалог не ставить!

#20   SkyLoader

SkyLoader
  • Группа: Опытные
  • Сообщений: 445
  • Регистрация: 13.02.2010
  • Пользователь: 16561

Отправлено 07 04 2011 - 14:12

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

Сообщение отредактировал SkyLoader: 07 04 2011 - 14:13



Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей

2007-2017 © AMK TEAM