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

Мысли ...


maksmaks

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

у кого еще есть мысли?

Скачивал несколько сейвов, на которых якобы вылазят ошибки (bind_monster и xr_kamp). Почти нигде ошибок у меня так и не вылезло. Но один сейв (милитари, штук 15 плотей, 3 кобанчика, 1 гигант) всё таки дал вылет с bind_monster. Пару дней пытался найти ошибку, но... Очень похоже, что портится память, в которой расположены данные игры. В результате вылет происходит далеко не сразу, а лишь при обращении к этой порченной памяти, да и то если порча оказалась критичной. Если после порченния данных удастся сделать сейв, то и сейв становится испорченным. Пожалуй это самая неприятная ошибка, что могла закрасться в код. Думаю, что большая часть странных ошибок, которые упоминались в ныне закрытой теме, это просто различные эффекты этой порчи памяти. Что является причиной - не знаю. Сам по себе язык LUA на такое вроде не способен. Могу лишь предположить варианты, проверить которые весьма не просто:

1) Ошибка где-то при работе с net_packet.

2) Ошибка где-то в структуре одного из бинарных файлов мода.

3) Ошибка в каком-то конфиге, задающем параметры для работы движка.

4) Что-то ещё :)

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


Ссылка на сообщение
чем больше количество объектов в локации тем больше шансов словить такую ситуацию...

Перефразирую: возможно, что чем больше разных объектов в локации, тем больше шансов словить такую ситуацию. Некоторые 'памятиёмкие' вещи могут не являтся причиной вылета, я лишь работать катализатором. У меня, например, огнемёт (партиклы горения на монстрах) весьма способствовал вылетам.

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


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

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

А как проверяли то, сравнивали с acdc, раскомментаривали логи тейлов?

Бинарные в моде - это какие? Партиклы?

Любые: партиклы, модели, all.spawn... :)

Я не знаю точно, как они все обрабатываются, думаю вы тоже.

Возможно... Вот только при дефолтных конфигах тоже вылазит, интересно?

Значит исключаем.

 

Напишу подробней, что нашёл в том сейве:

1) сейв был битый изначально. Проявлялось это в том, что после его загрузки нельзя было выгрузить уровень, происходил вылет в винду с ошибкой функции memmove из Си-шной библиотеки msvcrt71.dll. Но, не смотря на это, всё игралось и тестилось.

2) вылеты происходили из-за того, что в bind_monster.hit_callback self.object становился равен nil

3) вылеты происходили с 100% вероятностью при уничтожении плотей только из огнемёта

4) при отключении партиклов горения, вылеты не происходили (100% вероятность)

5) сделал печать в лог self.object из hit_callback и увидел следующее:

каждому второму вылету, предшествовало порчение self.object уже в предыдущих колбеках. Иногда object менял свой тип с объекта на структуру, иногда оставался объектом, но терял функцию name(), иногда не терял, но name() возвращала nil или явный мусор - длинные или короткие строки из повторяющихся символов или вообще не буквы и цифры, а прочие символы таблицы.

6) сделал вывод: порчение памяти, а не просто переопределение скриптом self.object

7) в скриптах партиклов копался, но ничего криминального не нашёл

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


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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