Dreamtale 2 Опубликовано 7 Ноября 2011 (изменено) Коллеги, может, кто поможет? Ситуация такая: вылет по стори айди. FATAL ERROR [error]Expression : no_assert [error]Function : CALifeStoryRegistry::add [error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\alife_story_registry.cpp [error]Line : 30 [error]Description : Specified story object is already in the Story registry! Предпосылки: да в общем-то, никаких. Сначала хотел создать респавнер, он не создался из-за этой ошибки. Далее стал проверять, что вообще творится, и в итоге выяснил, что через алл.спавн вообще перестали создаваться объекты! Пробовал на разных уровнях, в разных координатах, с разными секциями спавна, с разными СИДами (и без них). Дошло до того, что перед ГГ не создается банальный деревянный ящик при старте игры. Просто не представляю, что делать... Причем если откатиться на момент перед созданием этого респавнера, все работает (однако дело уже по ходу не в нем - ведь перестало создаваться ВООБЩЕ что-либо). Добавлено Пока писал пост, пришла идея - удалил последнюю рабочую секция спавна, на ее месте создал другую - заработало. При создании следующей секции опять вылет по стори айди. Единственная оставшаяся мысль, что у меня алл.спавн закончился... Но ведь такого не бывает, правда ведь? Изменено 7 Ноября 2011 пользователем Dreamtale Поделиться этим сообщением Ссылка на сообщение
Dreamtale 2 Опубликовано 7 Ноября 2011 gruber, я не настолько неопытный, как может показаться по количеству сообщений. Начинал, конечно. В общем, после последней _рабочей_ секции алсспавна не спавнится ничего ни при каких условиях (проверил, кажется, все возможные варианты)... Как будто реально у него закончилось свободное место для предметов. Поделиться этим сообщением Ссылка на сообщение
Dreamtale 2 Опубликовано 7 Ноября 2011 Да я пошутил про место - понятно, что оно не закончилось. Artos, Ок: ацдц от 11 октября, последняя секция спавна, при которой вылет: [9041] section_name=physic_destroyable_object position = -57.74195098877,-6.4983997344971,13.447357177734 direction = 0,0,0 game_vertex_id = 778 level_vertex_id = 4007 story_id = 10015 name = agr_under_box_9 distance = 0 object_flags = 0xffffff3a visual_name = physics\box\box_wood_01 physic_type = 0x3 mass = 10 Вообще, если более доступно описать проблему: Имеем n секций спавна, при добавлении секции n+1 получаем вылет. Удаляем секцию n+1 и еще в придачу n (в итоге получаем на одну секцию меньше, чем при последнем рабочем варианте) - все работает. Добавляем секцию n+1 (любую другую - не обязательно ту же самую, что в первой итерации - в итоге получаем количество секций, равное последнему рабочему варианту) - работает. Добавляем n+1 секцию и снова получаем вылет. То есть как бы я ни изгалялся, при достижении количества секций спавна числа n+1 получаю вылет. Также наверянка важная информация - если допустить явную ошибку в аллспавне (например, забыл из копипащенной секции удалить сид), размер лога - 7 r,? если все вроде бы должно работать - размер лога 17 кб... То есть, по идее, аллспавн он считывает и виснет уже потом. Поделиться этим сообщением Ссылка на сообщение
Dreamtale 2 Опубликовано 7 Ноября 2011 Artos, Спасибо, понял. Спавнятся, да. Я, вообще, уже думал про нумерацию, но как-то отбросил эту идею... И как тогда правильно пронумеровать алл-спавн, чтобы подобных вылетов не было? Поделиться этим сообщением Ссылка на сообщение
Dreamtale 2 Опубликовано 7 Ноября 2011 Хм... Вообще, что-то я приврал - по номеру секции у меня ничего не спавнится. Декомпилировал, нашел одинаковые имена секций (внимательностью никогда не отличался). Однако кое-как оно все же работало до секции n. gruber, Сейв не по алл.спавну объекты считывает. При нерабочем алл.спавне с сейва всегда весело загрузишься. Поделиться этим сообщением Ссылка на сообщение
Dreamtale 2 Опубликовано 7 Ноября 2011 (изменено) Artos, Я ничего не зажимал. Тебе всю папку геймдата выложить? И что, ты будешь по всем конфигам копаться? Хм... Ладно, спасибо за предложение - поеопаюсь пока сам - если ничего не выйдет, выложу. Изменено 7 Ноября 2011 пользователем Artos Поделиться этим сообщением Ссылка на сообщение
Dreamtale 2 Опубликовано 8 Ноября 2011 В общем, как будто удалось локализовать проблему: при добавлении новых секций алл.спавна в соответствующий файл уровня из дефолтного алл.спавна и последующей его компиляции в игру все работает (а секций там явно больше, чем в моем глючном). Видимо, что-то не то удалил (только вот что?). Скриптовый спавн точно ни при чем - вывел из биндера все скрипты, которые что-либо спавнят в начале игры, и все равно вылет сохранялся. Поделиться этим сообщением Ссылка на сообщение
Dreamtale 2 Опубликовано 8 Ноября 2011 KD87, Спасибо, уже разобрался. Точно установить косяк не смог, но аккуратно вкопипастил все нужные секции в дефолтный спавн и удалил ненужные - работает. Уверен, что дело в опечатке (как всегда), которую в начале просто не смог отловить. По крайней мере, сейчас все спавнится нормально. Ulman, У тебя синтаксис скрипта хромает. Лог ошибки свидетельствует о том, что луа не может распарсить то, что ты там накодил (а именно - цифры 1 и 0,1). Что хотел-то получить в итоге? Поделиться этим сообщением Ссылка на сообщение
Dreamtale 2 Опубликовано 9 Ноября 2011 (изменено) Опять наскриптовался по самое небалуйся... В общем, задача: сделать лагерь охранников ученых у бункера на Янтаре. [4725] ; cse_abstract properties section_name = smart_terrain name = scientist_guard position = 48.12174987793,-11.88060092926,-271.53497314453 direction = 0,0,0 game_vertex_id = 1480 level_vertex_id = 63987 distance = 0 object_flags = 0xffffff3e custom_data = <<END [smart_terrain] type = scientist_guard capacity = 5 communities = ecolog groups = 2 END ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 6.5 ; cse_alife_space_restrictor properties restrictor_type = 3 ; se_smart_terrain properties ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [4726] ; cse_abstract properties section_name = respawn name = scientist_guard_respawn position = 50.741165161133,-11.879903793335,-272.93768310547 direction = 0,0,0 game_vertex_id = 1480 level_vertex_id = 65146 distance = 0 object_flags = 0xffffff3e custom_data = <<END [respawn] respawn_section = scientist_guard_1, scientist_guard_2, scientist_guard_3, scientist_guard_4, scientist_guard_5 max_spawn = 999 min_count = 5 max_count = 5 idle_spawn = medium END ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 5 ; cse_alife_space_restrictor properties restrictor_type = 0 ; se_respawn properties function load_states(gname, type) if type == "scientist_guard" then return function(gulag) return 0 end end end function load_ltx(gname, type) return nil end function checkStalker(npc_community, gulag_type, npc_rank, se_obj) if gulag_type == "scientist_guard" then return npc_community == "ecolog" end end local t = {} function load_job(sj, gname, type, squad, groups) if type == "scientist_guard" then t = { section = "logic@scientist_guard_walk_1", idle = 0, prior = 20, state = {0}, -- online = true, in_rest = "", out_rest = "", position_threshold = 600 } table.insert(sj, t) t = { section = "logic@scientist_guard_walk_2", idle = 0, prior = 20, state = {0}, -- online = true, in_rest = "", out_rest = "", position_threshold = 600 } table.insert(sj, t) t = { section = "logic@scientist_guard_patrol_l", idle = 0, prior = 15, state = {0}, -- online = true, in_rest = "", out_rest = "", position_threshold = 600 } table.insert(sj, t) t = { section = "logic@scientist_guard_camp_1", idle = 0, prior = 15, state = {0}, -- online = true, in_rest = "", out_rest = "", position_threshold = 600 } table.insert(sj, t) t = { section = "logic@scientist_guard_camp_2", idle = 0, prior = 5, state = {0}, -- online = true, in_rest = "", out_rest = "", position_threshold = 600 } table.insert(sj, t) end end function checkMonster(npc_community, gulag_type) return false end [logic@scientist_guard_walk_1] active = walker@scientist_guard_walk_1 [walker@scientist_guard_walk_1] path_walk = walk_1_walk path_look = walk_1_look danger = danger_condition@scientist_guard [logic@scientist_guard_walk_2] active = walker@scientist_guard_walk_2 [walker@scientist_guard_walk_2] path_walk = walk_2_walk path_look = walk_2_look danger = danger_condition@scientist_guard [logic@scientist_guard_patrol_l] active = walker@scientist_guard_patrol_l [walker@scientist_guard_patrol_l] path_walk = patrol_l_walk path_look = patrol_l_look danger = danger_condition@scientist_guard [logic@scientist_guard_camp_1] active = kamp@scientist_guard_camp_1 [kamp@scientist_guard_camp_1] center_point = camp_1_centr danger = danger_condition@scientist_guard [logic@scientist_guard_camp_2] active = kamp@scientist_guard_camp_2 [kamp@scientist_guard_camp_2] center_point = camp_2_centr danger = danger_condition@scientist_guard [danger_condition@scientist_guard] ignore_distance = 0 ignore_distance_corpse = 0 Дело в том, что неписи не спавнятся вообще (точнее, одно время спавнился один вместо пяти, но потом и он почему-то перестал, и под гулаг он не попадал, хотя по всем понятием должен был). Первая проблема - это сам респавн (в конце концов, если они вообще будут, то под гулаг их вписать проще, чем если и вписывать некого). В принципе, разумею, что копать стоит в сторону se_respawn, но там вроде в максимальном количестве прибавил экологов, да и, допустим, снорки спавнятся отлично (а вот нпс - не хотят)... Изменено 10 Ноября 2011 пользователем Artos Поделиться этим сообщением Ссылка на сообщение
Dreamtale 2 Опубликовано 10 Ноября 2011 Artos, Выводи в лог информацию... Отлично, но как? Поделиться этим сообщением Ссылка на сообщение
Dreamtale 2 Опубликовано 10 Ноября 2011 Ок, вот такое: ! Cannot find saved game :>respawn: [scientist_guard_respawn] spawn execute ! Cannot find saved game :>spawning [scientist_guard_respawn], cant spawn. max count reached!!! Странно, вроде бы в MaxCount поставил экологов всех рангов по сотне, а все равно... Если вы в своем собственном коде не можете найти таких ключевых точек, по которым можно локализовать возникающие проблемы, то - ответ дан выше. своем собственном Собственном - конечно... Поделиться этим сообщением Ссылка на сообщение
Dreamtale 2 Опубликовано 10 Ноября 2011 (изменено) Artos, Спасибо, теперь понял. Вот видишь, как все просто - достаточно пары предложений, чтобы найти общий язык. Так же куда проще и, главное, быстрее, чем писать полотна обличительных душеспасительных постов, правда? А что мне лог выдал - выше в моем посте. Добавлено: Лог: ! Cannot find saved game :>respawn: [scientist_guard_respawn] spawn execute ! Cannot find saved game :>spawning [scientist_guard_respawn], cant spawn. max count reached!!! Вытекает отсюда: for i=1,self.max_spawn do if self.max_count ~= -1 and table.getn(self.spawned_obj) >= self.max_count then printf("SPAWNING [%s], CANT SPAWN. MAX COUNT REACHED!!!", tostring(self:name())) return end Короче, стандартный крипт АМК. Изменено 10 Ноября 2011 пользователем Artos Поделиться этим сообщением Ссылка на сообщение