IG-2007 0 Опубликовано 14 Марта 2008 у кого еще есть мысли? Скачивал несколько сейвов, на которых якобы вылазят ошибки (bind_monster и xr_kamp). Почти нигде ошибок у меня так и не вылезло. Но один сейв (милитари, штук 15 плотей, 3 кобанчика, 1 гигант) всё таки дал вылет с bind_monster. Пару дней пытался найти ошибку, но... Очень похоже, что портится память, в которой расположены данные игры. В результате вылет происходит далеко не сразу, а лишь при обращении к этой порченной памяти, да и то если порча оказалась критичной. Если после порченния данных удастся сделать сейв, то и сейв становится испорченным. Пожалуй это самая неприятная ошибка, что могла закрасться в код. Думаю, что большая часть странных ошибок, которые упоминались в ныне закрытой теме, это просто различные эффекты этой порчи памяти. Что является причиной - не знаю. Сам по себе язык LUA на такое вроде не способен. Могу лишь предположить варианты, проверить которые весьма не просто: 1) Ошибка где-то при работе с net_packet. 2) Ошибка где-то в структуре одного из бинарных файлов мода. 3) Ошибка в каком-то конфиге, задающем параметры для работы движка. 4) Что-то ещё Поделиться этим сообщением Ссылка на сообщение
IG-2007 0 Опубликовано 14 Марта 2008 чем больше количество объектов в локации тем больше шансов словить такую ситуацию... Перефразирую: возможно, что чем больше разных объектов в локации, тем больше шансов словить такую ситуацию. Некоторые 'памятиёмкие' вещи могут не являтся причиной вылета, я лишь работать катализатором. У меня, например, огнемёт (партиклы горения на монстрах) весьма способствовал вылетам. Поделиться этим сообщением Ссылка на сообщение
IG-2007 0 Опубликовано 14 Марта 2008 С одной стороны - самое вероятное. С другой - проверяли, да и не работало бы все остальное.... Бывают моменты, при которых структуры (колличество) данных 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) в скриптах партиклов копался, но ничего криминального не нашёл Поделиться этим сообщением Ссылка на сообщение