Карлан 1 049 Опубликовано 4 Июля 2015 Поделиться Опубликовано 4 Июля 2015 (изменено) @macron, так у тебя скрипт неверный . Ща накатаю. function delete_bad_objects() --// на save callback local changer = vector():set(116.57, -0.09, 518.79) --// тут можешь писать прямо obj:position() где obj - твой ченджер local dist for i=1,65534 do local obj = level.object_by_id(i) if obj then dist = changer:distance_to(obj:position()) if dist < 4 then --// не трогай, радиус на чаэс примерно такой local sobj = alife():object(i) if sobj then alife():release(sobj, true) end end end end end Будет проблема с большими объектами, так как сравнивается по центрам, так что смотри сам, можно дополнительно проверять секцию и регулировать радиус удаления. Если не покатит, то отпиши когда родителя обретают, я костылем подопру . Изменено 4 Июля 2015 пользователем Карлан 1 Ссылка на комментарий
macron 1 884 Опубликовано 4 Июля 2015 Поделиться Опубликовано 4 Июля 2015 а что мешает при спавне объекта проверить координаты спавна и если они в зоне левел-ченджера, то сдвинуть спавн за пределы зоны перехода вглубь локации? Вылетает не из-за координат, а из-за использования id от левелчейнжера в качестве parent_id. Кстати, визуально эти объекты (пара артов, несколько антирадов) в том месте я так и не нашел. @Карлан, я вставил новый текст вместо старого, но лучше не стало. Боюсь, проблема серьезная, требует непосредственного профессионального подхода/тестирования. Решать такие вопросы сейчас через меня - примерно то же самое, как пытаться чинить компьютер по телефону. Если здесь есть истинные фанаты OLR (в чем сильно сомневаюсь), конечно обращайтесь, материал предоставлю, а так - только время зря потратим. Всем спасибо за участие. Ссылка на комментарий
Карлан 1 049 Опубликовано 4 Июля 2015 Поделиться Опубликовано 4 Июля 2015 @macron, возможно проблема не в этом, расскажи когда они родителя обретают. Попробуй перед сейвом удалить все лч, а после загрузки данных их заспавнить, но с ними тоже конечно те еще приколы, помню, когда обработку этих лч писал, с удалением были какие-то хорошие затыки. Ссылка на комментарий
vampirnik77 121 Опубликовано 4 Июля 2015 Поделиться Опубликовано 4 Июля 2015 @macron, Почистите лс, что бы можно было вам писать сообщения.P.s Извините за такой флуд, пост под снос. Официальная страница проекта Neof-One Crew Ссылка на комментарий
Карлан 1 049 Опубликовано 4 Июля 2015 Поделиться Опубликовано 4 Июля 2015 @vampirnik77, да пиши тут не стесняйся видишь как всех взбудоражил этот вопрос. Ссылка на комментарий
vampirnik77 121 Опубликовано 4 Июля 2015 Поделиться Опубликовано 4 Июля 2015 (изменено) Ну у меня есть мысль, можно же получить этот самый parent_id? Изменено 4 Июля 2015 пользователем vampirnik77 Официальная страница проекта Neof-One Crew Ссылка на комментарий
macron 1 884 Опубликовано 4 Июля 2015 Поделиться Опубликовано 4 Июля 2015 Почистите лс ok расскажи когда они родителя обретают Глюко-объекты рождаются в процессе игры, "в зависимости от расположения звезд на небе". Наиболее подвержены им ЧАЭС и Янтарь. Вот конфиги ЧАЭС из распакованного алспавна и битого сейва, если интересно. Нужные секции можно найти по поиску 116.575942993164, -0.0990743637084961, 518.794067382813 http://rghost.ru/6yLdDMshh Ссылка на комментарий
Карлан 1 049 Опубликовано 4 Июля 2015 Поделиться Опубликовано 4 Июля 2015 @macron, да по барабану когда рождаются, ты выясни когда родителем лч становится . @vampirnik77, ну давай пиши уже не кокетничай. Ссылка на комментарий
vampirnik77 121 Опубликовано 4 Июля 2015 Поделиться Опубликовано 4 Июля 2015 @Карлан, Я просто боюсь ерись сморозить, ну да ладно. Можно ли так, перед сохранением проверить не совпдает ли parent_id объекта с id левелчейнджера и если совпадает то удалять объект? 1 Официальная страница проекта Neof-One Crew Ссылка на комментарий
macron 1 884 Опубликовано 4 Июля 2015 Поделиться Опубликовано 4 Июля 2015 (изменено) да по барабану когда рождаются, ты выясни когда родителем лч становится На то, чтобы хоть как-то научиться распаковывать олровские сейвы и на их основе установить связь битых сейвов с левелчейнжерами ушел год. К тому времени, когда ты получишь от меня новый ответ, скорее всего, он будет уже неактуален. Пока отвечу так: объекты породила Зона. Можно ли так, перед сохранением проверить не совпдает ли parent_id объекта с id левелчейнджера и если совпадает то удалять объект? Тоже вариант. Но пока даже без проверок объекты удалять не получается. Изменено 4 Июля 2015 пользователем macron Ссылка на комментарий
Карлан 1 049 Опубликовано 4 Июля 2015 Поделиться Опубликовано 4 Июля 2015 @macron, просто выведи в лог sobj.parent_id у объектов до сейва, и после лоада. Тоже вариант. Видимо я слишком завуалированно излагаю мысли . Его я тоже рассматривал, но не первоочередно, и для него тоже надо знать когда парентом становится лч. Я по прежнему реквестирую знахаря. Ссылка на комментарий
macron 1 884 Опубликовано 4 Июля 2015 Поделиться Опубликовано 4 Июля 2015 просто выведи в лог sobj.parent_id у объектов до сейва, и после лоада Вот последний bind_stalker.script. Можешь сам добавить туда, о чем пишешь, если это то что нужно... Говорю же, не всегда врубаюсь, о чем вы, скриптеры, толкуете. А если и врубаюсь, могу неделю изучать/экспериментировать с последовательностью расположения какой-нибудь скобки. http://rghost.ru/7tJpxtFrS Ссылка на комментарий
Карлан 1 049 Опубликовано 4 Июля 2015 Поделиться Опубликовано 4 Июля 2015 @macron, скриптов я не писал уже давно, перекрестимся что ничего не напутал, замени свой сейв на этот: function actor_binder:save(packet) local changer = vector():set(116.57, -0.09, 518.79) --// тут можешь писать прямо obj:position() где obj - твой ченджер local dist for i=1,65534 do local obj = level.object_by_id(i) if obj then dist = changer:distance_to(obj:position()) if dist < 4 then --// не трогай, радиус на чаэс примерно такой local sobj = alife():object(i) if sobj then get_console():execute(string.format('parent_id[%s] = %s', obj:name(), sobj.parent_id)) alife():release(sobj, true) end end end end if rx_ai then rx_ai.actor_save(packet) end local save_treasure_manager = true printf("actor_binder:save(): self.object:name()='%s'", self.object:name()) object_binder.save(self, packet) --' Сохраняем уровень сложности if save_treasure_manager == true then packet:w_u8(level.get_game_difficulty() + 128) else packet:w_u8(level.get_game_difficulty()) end --' Сохраняем данные об отключенном вводе if self.st.disable_input_time == nil then packet:w_bool(false) else packet:w_bool(true) utils.w_CTime(packet, self.st.disable_input_time) end xr_logic.pstor_save_all(self.object, packet) self.weather_manager:save(packet) sr_psy_antenna.save( packet ) if save_treasure_manager == true then treasure_manager.save(packet) end task_manager.save(packet) self.actor_detector:save(packet) end Ссылка на комментарий
macron 1 884 Опубликовано 4 Июля 2015 Поделиться Опубликовано 4 Июля 2015 (изменено) замени свой сейв на этот: Ok. При использовании старого сейва в котором есть левелчейнжер - глухо виснет при попытке сохраниться, наверное пытается грохнуть левелчейнжер. При использовании переделанного сейва (без левелчейнжера) сейвится нормально, но в логе ничего интересного. Только ! Unknown command: parent_id[lvl14_stancia_space_restrictor]. http://rghost.ru/8SXL6J5Lw Изменено 4 Июля 2015 пользователем macron Ссылка на комментарий
RayTwitty 508 Опубликовано 4 Июля 2015 Поделиться Опубликовано 4 Июля 2015 (изменено) @macron, а разве имя нужного объекта неизвестно? Зачем эти извраты с измерением расстояния до позиции? Изменено 4 Июля 2015 пользователем Shadows Ссылка на комментарий
macron 1 884 Опубликовано 5 Июля 2015 Поделиться Опубликовано 5 Июля 2015 (изменено) а разве имя нужного объекта неизвестно? Имя, наверное, может быть любое. Как и количество объектов (хотя, обычно в пределах 10-15).Известны лишь координаты (идентичны координатам левелчейнжера) и то, что берут его ID в качестве PARENT_ID. Тут как бы задача получить универсальную удалялку (в будущем - по одной универсальной удалялке на каждый левелчейнжер конкретного уровня и для каждого уровня + добавить имена самих левелчейнжеров в исключения, чтобы их тоже не затерло). ЗЫ: для экспериментов с конкретным сейвом, имена, конечно, известны. Недавно ltx из сейва выкладывал. Изменено 5 Июля 2015 пользователем macron Ссылка на комментарий
makdm 37 Опубликовано 5 Июля 2015 Поделиться Опубликовано 5 Июля 2015 (изменено) @macron, вот такой скрипт попробуй local parent_id = {} local remove_sobj = {} local i = 1 -- Пробегаем по объектам и айдишники всех level_changer помещаем в талицу while i < 65535 do local sobj = alife():object( i ) if sobj and sobj:clsid() == clsid.level_changer then parent_id[ sobj.id ] = sobj.id end i = i + 1 end -- Пробегаем по объектам и все child level_changer помещаем в талицу for n = 1, 65534 do local sobj = alife():object( n ) if sobj then for k,v in pairs( parent_id ) do if sobj.parent_id == v then remove_sobj[ sobj.id ] = sobj end end end end --Удаляем child level_changer for _k,_v in pairs( remove_sobj ) do alife():release( _v, true ) end Изменено 5 Июля 2015 пользователем makdm 1 Ссылка на комментарий
Карлан 1 049 Опубликовано 5 Июля 2015 Поделиться Опубликовано 5 Июля 2015 @makdm, так а смысл то какой? Если релиз не работает в фо, то тогда надо попробовать вайл, это как минимум. Например некоторые функции для работы с таблицами тоже в циклах фо того. Но это все теория, а знатоков тут таки нет . Ты просто один цикл на три умножил, к тому же зачем перебирать все 65534 для идентификации лч, когда у каждого есть сид, мне так же не ясно. Ссылка на комментарий
Zander_driver 10 334 Опубликовано 5 Июля 2015 Поделиться Опубликовано 5 Июля 2015 по одной универсальной удалялке на каждый левелчейнжер А комп ты тоже каждый день новый себе берешь? по компу на день работы, а то на второй день он не годится же, почему-то. if sobj.parent_id == v then remove_sobj[ sobj.id ] = sobj Вот до этого момента все норм. Сам этот момент - ахтунг полнейший. Не надо быть специалистом, чтобы понять бредовость засовывания ссылки на юзердату - в таблицу, и потом в цикле for пытаться еще что то с этой юзердатой делать. local parent_id = {} local remove_sobj = {} local i = 1 -- Пробегаем по объектам и айдишники всех level_changer помещаем в талицу while i < 65535 do local sobj = alife():object( i ) if sobj and sobj:clsid() == clsid.level_changer then parent_id[ sobj.id ] = sobj.id end i = i + 1 end -- Пробегаем по объектам и все child level_changer помещаем в талицу for n = 1, 65534 do local sobj = alife():object( n ) if sobj then for k,v in pairs( parent_id ) do if sobj.parent_id == v then table.insert(remove_sobj, sobj.id) end end end end --Удаляем child level_changer for _k,_v in pairs( remove_sobj ) do local sobj_for_remove = alife():object(_v) if sobj_for_remove then alife():release(sobj_for_remove, true) end end некоторые функции для работы с таблицами тоже в циклах фо того Вообще то все вроде просто. Нельзя ничего делать с ключами-значениями цикла for. вот то что у тебя является k, v - не удалишь, к nil не приравняешь и т.д. а sobj.id это просто число, с которым мы собственно ничего и не делаем. просто получаем по нему объект и уже его удаляем. к тому же зачем перебирать все 65534 для идентификации лч, когда у каждого есть сид, Вообще-то не у каждого, даже в оригинале. 2 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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. Ссылка на комментарий
makdm 37 Опубликовано 5 Июля 2015 Поделиться Опубликовано 5 Июля 2015 (изменено) Сам этот момент - ахтунг полнейший. Не надо быть специалистом, чтобы понять бредовость засовывания ссылки на юзердату - в таблицу, и потом в цикле for пытаться еще что то с этой юзердатой делать. @Zander_driver, вот, честное слово, не понял тут ахтунга. Всё работает, как часы. Можешь сам проверить. Хотя можешь и не проверять, а открыть файл bind_smart_terrain.script и в методе net_spawn увидишь db.add_smart_terrain( self.se_smart_terrain ) Затем открой файл db.script. Дальше, надеюсь всё и так ясно. Изменено 5 Июля 2015 пользователем makdm Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти