Это популярное сообщение. KD87 718 Опубликовано 16 Сентября 2011 Это популярное сообщение. Поделиться Опубликовано 16 Сентября 2011 Как некоторым, может быть, известно, на X-Ray Engine Toolset идет развитие утилит, доставшихся нам вместе с исходниками от выдающихся программистов коммьюнити (прежде всего, конечно, bardak'a). В силу своих скудных навыков по программированию я занимаюсь прежде всего perl-скриптами - ACDC, game.graph recompiler и т.д. В этой теме я прошу тех мододелов, кто часто работает с perl-скриптами, помочь с отловом багов. Прежде всего интересует Universal ACDC - спавны каких модов не распаковывает, какие фичи не работают, все, что найдете. Здравые мысли по развитию скриптов также приветствуются. Надеюсь на вашу помощь. ----------------------------------------------------------- --S.T.A.L.K.E.R. *.spawn compiler/decompiler-- ----------------------------------------------------------- Версия: 1.38 Дата последних правок: 21.05.2014 Данный acdc предназначен для распаковки и запаковки all.spawn/level.spawn от любого билда, начиная с 1265. Основные фичи: -распаковка оригинальных спавнов ТЧ, ЧН, ЗП и билдов ТЧ, начиная с xrCore build 1265. -распаковка спавнов от модов (требуется папка конфигов от мода) -конвертация спавна в любую другую версию. -массовая замена гейм-вертексов в распакованном спавне. -разбивка all.spawn на level.spawn'ы и level.game'ы -сравнение файлов распакованного спавна -обновление вертексов согласно координат объектов Что нужно для работы: -собственно, сам спавн (all.spawn, level.spawn) -game.graph (только если распаковываете all.spawn). Если all.spawn от билда 3120, ЧН или ЗП - game.graph не нужен (он вшит в спавн). -папка configs (если распаковываете мод и acdc жалуется на unknown section) Для корректной работы используйте с папкой stkutils строго последней версии. Использование: Кладете all.spawn (или level.spawn) и game.graph в папку с программой, делаете батник (команды ниже), запускаете батник, радуетесь жизни. Пояснение по дальнейшему тексту: в угловых скобочках (<>) указано значение опции. Это путь до спавна, папка для распаковки и т.п., то есть то, что нужно вписывать вам. В квадратных скобочках ([]) указаны необязательные опции. Опции без скобочек - обязательны. Режим предназначен для распаковки файлов all.spawn и level.spawn Команда: universal_acdc.pl -d <spawn_file> [common_options] -d <spawn_file> - путь до спавна. common_options - общие опции. Читайте про них ниже. При распаковке спавнов от модов может возникнуть ошибка "unknown section". Это означает, что в моде используются нестандартные секции предметов/мобов. Для распаковки такого спавна необходимо использовать ключ -scan, указав ему в качестве параметра путь до папки config/configs. Пример смотрите в батнике acdc_decompile_scan. Режим предназначен для запаковки распакованных текстовых файлов спавна в all.spawn или level.spawn Команда: universal_acdc.pl -compile <dir> [-idx <index_file>] [-f <flag1,flag2,...>] [common_options] -compile <dir> - папка, в которой лежит распакованный спавн. Если работаете в текущей папке, <dir> не нужно. common_options - общие опции. Читайте про них ниже. -idx <index_file> - с этим ключом скрипт сформирует ltx конфиг с секциями вида: [13_box_wood_01_0021] ;формат - "индекс_локации"_"имя_объекта" id = 2907 ;id объекта story_id = -1 ;story_id объекта Такие записи создадутся для ВСЕХ объектов из спавна. Если указать ключ -idx без пути до конфига, он появится в папке с acdc (spawn_ids). Зачем это нужно? В игре вы сможете открыть этот файл из скриптов и найти нужный вам объект. Если раньше для нахождения нужного id объекта по имени требовалось перебрать все объекты в игре, теперь это можно сделать, просто считав id из нужной секции конфига. Также есть кое-какие дополнительные фичи: - при компиляции для правильной работы необязательно проставлять всем секциям в спавне параметры version и script_version. Достаточно поставить их в секции актора, ацдц далее будет использовать их. Полезно, когда спавн "сборный". - при компиляции контролируется уникальность параметров story_id, чтобы не мучиться потом с вылетами игры. Режим позволяет конвертировать спавны ТЧ, ЧН, ЗП между собой. Команда: universal_acdc.pl -convert <file> -version <new_version> [common_options] -convert <file> - файл, который нужно сконвертировать. Можно указывать как запакованный (*.spawn) спавн, так и распакованный (alife_***.ltx). Внимание! Так как граф и кросс-таблицы в ЧН и ЗП вшиты в спавн, для конвертирования ЗАПАКОВАННЫХ спавнов ТЧ в эти форматы вам потребуется положить в папку с acdc папку levels из игры. Необязательно копировать все файлы, достаточно оставить в папке с каждой локацией файл level.gct. -version <new_version> - новая версия спавна. Подобрать версию вы сможете, посмотрев файл spawn_versions.txt common_options - общие опции. Читайте про них ниже. Также поддерживается тонкая настройка конвертации через файл convert.ini. В файле есть две секции: [exclude] и [change]. В секции exclude можно прописать те секции, которые надо удалить из спавна при конвертации. Пример: [exclude] sections = m_trader, m_car, flesh_weak В секции change прописываются имена тех секций, в которых нужно что-то поменять или дополнить. Пример: [change] sections = inventory_box Далее заполняете файл записями для тех секций, которые вы прописали в change. Пример: [inventory_box] //section_name нужной секции add:custom_data = PREVED //префикс add используется для тех параметров, в которые нужно добавить add:game_vertex_id = 10000 //необходимое значение (если число - складывается, если строка - добавляется в конец) rep:level_vertex_id = 0 //префикс rep используется для параметров, которые необходимо заменить на что-то Общий пример. Следующий конфиг приведет к тому, что у всех сталкеров прибавится 500 к гейм-вертексу и визуал сменится на визуал вояки в противогазе: [exclude] [change] sections = stalker [stalker] add:game_vertex_id = 500 rep:visual_name = actors/soldier/soldier_antigas.ogf При подключении новых локаций без перекомпиляции графа возникает необходимость одновременного сдвига всех гейм-вертексов спавна новых локаций на какое-то определенное значение. Это можно сделать в этом режиме. Команда: acdc -parse <file> -old <old_gvid0> -new <new_gvid0> [-way] [common_options] -parse <file> - имя ltx, в котором находится спавн. -old <old_gvid0> - старый начальный game_vertex_id локации. -new <new_gvid0> - новый начальный game_vertex_id локации. -way - обрабатывает также файл way_***.ltx для этой же локации. Пример: acdc -parse alife_l01_escape.ltx -old 0 -new 934 Разбивка all.spawn на level.spawn может быть полезна при одновременной правке спавна в СДК и с помощью ACDC. Команда: acdc -split <file> [-use_graph] [-way] [common_options] -split <file> - разбиваемый спавн. Для восстановления граф-поинтов необходимы level.spawn для всех локаций, находящихся в графе. Их следует поместить в папку levels согласно их положению в геймдате сталкера - по папкам, соответствующим локациям. Папка levels должна быть в папке с acdc (или путь до нее можно задать ключом - читайте далее). -use_graph - использование game.graph для восстановления граф-поинтов. Плюс - не нужны level.spawn, минус - не восстанавливаются имена граф-поинтов (за исключением граф-поинтов переходов). -way - также из спавна генерируются level.game В этом режиме сравниваются два текстовых файла спавна. Итоговый файл формируется на основе первого файла. Все секции, которых нет во втором файле, но есть в первом, удаляются, а те секции, которые есть во втором, но нет в первом, переносятся в итоговый файл. Параметры секций не меняются. Режим позволяет сэкономить время в случае, если надо совместить два файла, причем секции там идут вразнобой. Команда: acdc -compare <file1,file2> [common_options] -compare <file1,file2> - файлы для сравнения Зачем нужно: при изменении аи-сетки у объектов изменяются game_vertex_id и level_vertex_id. Это влечет за собой необходимость повторного снятия данных параметров в игре. Данный режим позволяет автоматически обновить вертексы у всех секций спавна. Команда: universal_acdc -update <spawn_name> [common_options] -update <spawn_name> - all.spawn, для которого надо обновить вертексы. Режим update требует дополнительной настройки. В папке с acdc есть файл fs_vertex.ltx В этот файл необходимо вписать путь до локаций с ОБНОВЛЕННОЙ аи-сеткой. Обязательно должны присутствовать файлы level.ai, level.gct для всех локаций из спавна. ВНИМАНИЕ! Для нормальной отработки режима геймграф должен быть СТАРЫЙ, использовавшийся до перекомпиляции. После нормальной отработки режима спавн можно распаковывать уже с НОВЫМ геймграфом. -out <file> - путь до файла/папки с результатом. Имеет разный смысл для разных опций: для decompile, parse - папка с результатом для compile, convert - результрующий файл. для split - папка levels, куда сохранять level.spawn. -scan <scan_dir> - путь до папки с конфигами. Используется в случае спавнов от модов. -g <graph_dir> - путь до папки с game.graph. Бесполезен для compile и parse, а также, если работаете со спавном ЧН, ЗП, build 3120. -level - обрабатывать спавн как level.spawn. -af - также распаковываются\запаковываются места спавна артефактов в аномалиях (section2.bin). -nofatal - отключает вылет при фатальной ошибке, заменяя ее предупреждением. Если acdc генерирует ошибку 'unknown clsid ... for section...', это означает, что в данном моде добавлены новые пары клиентский/серверный класс в class_registrator.script. Дабы не усложнять работу с acdc, такие пары не определяются автоматически. Лучше всего сообщить об этом мне, однако, если вы понимаете, что находится внутри class_registrator.script, можете добавить новые сеты в clsids.ini сами. Сеты добавляются в таком формате: clsid = соответствующий_серверный_класс Пример: ZS_ELECT = se_zone_anom ================================= Любые имена опций можно сокращать. К примеру, необязательно использовать именно -use_graph, скрипт поймет также и -use, и -u. Однако ряд опций при сокращении их имени могут конфликтовать друг с другом. -compile нельзя сократить до -c, поскольку в таком случае скрипту неясно, что имеется ввиду: -compile или -convert. В таком случае наиболее короткое имя для compile будет таким: -com 1.38: [!] добавлена поддержка релизного спавна Lost Alpha [!] исправлена конвертация и конвертация 1.37: [+] добавлена распаковка и запаковка спавна билда Lost Alpha [!] все не распознанные пути при сплите теперь сваливаются в unrecognized_ways.game 1.36: [!] исправлена разбивка спавна на level.spawn и level.game [!] исправлено сканирование конфигов 1.35: [!] исправлено автоназначение версии при отсутствии этого параметра в секции [!] убрано чтение game.graph при компиляции 1.34: [!] исправлено обновление вертексов [+] добавлено обновление параметра distance при обновлении вертексов [+] добавлен контроль уникальности story_id при компиляции 1.33: [!] исправлена распаковка спавнов некоторых билдов [+] добавлен режим обновления вертексов [+] добавлен "умный" разбор way-объектов по локациям для режима split 1.322: [+] добавлено сравнение распакованных файлов 1.321: [!] исправлена распаковка спавнов ЗП 1.32: [!] guids.ltx больше не нужен без ключа -idx [+] реализована сортировка way-объектов по алфавиту [+] реализовано определение принадлежности way-секции к локации по gvid и префиксу [+] реализована сортировка alife-объектов 1.31: [!] изменен алгоритм сканирования конфигов [!] изменен приоритет запросов из clsids.ini, теперь данные из него перекрывают внутренние таблицы [!] скрипт адаптирован под новую систему отладочных сообщений [f] поправлена логика работы с пакетом актора в ЧН [+] добавлена возможность вынесения лога в файл [+] добавлена возможность вынесения сетов в отдельный конфиг-файл 1.30: [f] теперь новая версия обработчика ошибок по-прежнему обрабатывает спавн Народной солянки [f] исправлены проблемы распаковки level.spawn некоторых билдов 1.29: [f] исправлена ошибка распаковки level.spawn билдов [f] исправлена ошибка распаковки спавна ЧН [f] всякие мелкие правки 1.28: [f] исправлено игнорирование парсером ключа -way в режиме split. [f] исправлена ошибка сканирования конфигов при компиляции. [f] исправлена ошибка чтения секций некоторых se-классов. [f] исправлена ошибка разбивки спавна, из-за которой генерировались левел спавны неправильного формата. [+] добавлен контроль дубликатов актора при компиляции. 1.27: [f] исправлена ошибка парсера, в некоторых случаях приводившая к порче логики. [f] исправлено создание папок при сохранении результата. [+] добавлена переинициализация параметров секции после смены класса при конвертации. Это расширяет диапазон версий, доступных для конвертирования. [+] добавлена поддержка масок при конвертации. [+] добавлен ключ -ini в режиме конвертации 1.26: [f] поправлена распаковка спавнов ЧН. [+] добавлено автоматическое заполнение версии спавна из первой секции (если актора в спавне нет). [+] что-то еще по мелочи, не помню. 1.25: [f] отключен вывод пустого параметра spawned_obj при распаковке. [+] реализовано автоматическое заполнение параметров version и script_version при запаковке спавнов с секциями из разных версий игры. Версия берется из конфига актора. 1.24: [f] исправлена распаковка/запаковка спавна билда 2571. [f] исправлена запись guids.ltx [f] мелкие правки 1.23b: [+] убрано предупреждение "state data left" при распаковке спавнов ЗП, запакованных ранее с помощью acdccop. [f] исправлены ошибки split, из-за которых могли получаться кривые level.spawn [f] переделана логика чтения/записи пакетов se_stalker/se_monster [f] мелкие изменения 1.22b: [+] добавлен ключ -nofatal 1.21b: [f] исправлены небольшие опечатки в коде. [f] парсер теперь корректно читает значения с комментариями. 1.2b: [f] небольшие правки по конвертации. [+] добавленные в модах соответствия clsid -> серверный класс теперь редактируются в отдельном конфиге (clsids.ini). [+] ошибка при встрече незнакомого clsid теперь выдается при распаковки секции спавна с таким clsid, а не при сканировании конфигов, как раньше. 1.1b: [+] проверена распаковка билд-спавнов, решена проблема декомпиляции спавнов билдов 25хх. [+] добавлен контроль наличия параметра version в секциях распакованного спавна. [f] исправлено исключение файла со spawn_id объектов при сканировании конфигов. 1.0b: [+] основательно переработан код, часть скрипта вынесена в отдельные модули. [f] исправлены все не работавшие функции. [+] увеличена скорость выполнения кода, уменьшены требования по памяти. ACDC для ТЧ - bardak, для ЗП - bardak, @Kolmogor. Все остальное - @KD87 Используйте/выкладывайте где и как хотите, с указанием авторов. Новичкам в редактировании спавна поможет краткая инструкция: Чтобы не плодить сторонних папок и все было под рукой для работы и игры - будем работать прямо в рабочей папке с игрой/модом. Устанавливаем и настраиваем комплект ACDC: 1. Открываем папку 'gamedata\spawns' и в ней создаем папку 'acdc'. 2. В эту папку (acdc) копируем (распаковываем) весь комплект файлов из архива 'Universal ACDC.7z', т.е. в папке должны лежать: - universal_acdc.pl - перл-скрипт утилиты; - acdc_decompile.bat - командный файл для распаковки; - acdc_compile.bat - командный файл для запаковки; - stkutils - папка со служебными библиотеками утилиты; ... - необязательные или технологические файлы (universal_acdc_readme.txt и т.п.). 4. Выходим опять в папку 'gamedata\spawns' и создаем в ней папку 'unpack' - в этой папке будут находиться файлы распакованного спавна. 5. Открываем командный файл (батник) 'acdc_decompile.bat' и изменяем в нем строку на эту: universal_acdc.pl -d ../all.spawn -o ../unpack -g ../../ -scan ../../config/ 6. Открываем командный файл (батник) 'acdc_compile.bat' и изменяем в нем строку на эту: universal_acdc.pl -c ../unpack -o ../all.spawn 7. Проверьте, есть ли в папке 'gamedata' файл 'game.graph'. Если его нет - распакуйте его из пак-файлов (gamedata.db*) оригинальной игры и скопируйте в папку 'gamedata' мода. 8. Важно! Для вашей безопасности скопируйте файл 'all.spawn' в удобное вам место (зарезервируйте) для возможности восстановления исходного файла спавна после возможных ваших ошибок при редактировании. Все, ваш комплект готов для работы с 'all/spawn'-ом на лету, т.е. вы можете запускать игру и играть, можете распаковывать, редактировать и запаковывать файл спавна. - Распаковка - запускаете 'acdc_decompile.bat' (см. по пути '\gamedata\spawns\acdc'); - Редактируете в папке 'unpack' (см. по пути '\gamedata\spawns\unpack'); - Запаковка - запускаете 'acdc_compile.bat' (см. по пути '\gamedata\spawns\acdc'); - ... проверяете в игре. Примечание: Если у вас стоит ОС Windows 7 - возможно потребуется в начало командных строк добавить вызов 'perl': perl universal_acdc.pl -d ../all.spawn -o ../unpack -g ../../ -scan ../../config/ perl universal_acdc.pl -c ../unpack -o ../all.spawn Успехов в модмейкерстве! :-) Для удобства выкладываю ссылку на ACDC отдельно (папка stkutils - ставить обязательно!) Версия 1.38 Для работы необходим Active Perl (брать с официального сайта) - LA (билд) - АМК v.1.4.1 - Z.E.N.O.B.I.A.N mod - NLC 2-6 - SIMBION - OGSM v.2.3.1 Final - Народная солянка 2010 от 19.04 (с ключом -nofatal) - R.M.A. v.1.1 - Oblivion_Lost - SRP - Тайные тропы 2 - Lost World - Requital - Lost World - Trops of Doom - OGSM v.1.7 (для распаковки исправьте в w_vintorez.ltx class = WP_VINT на class = WP_AK74 либо используйте ключ -nofatal) - Difficult Zone Mod v.1.0 (аналогично OGSM) - SolinX v.1.1.3 - SolinX v.2.0 (без сканирования) - Full Realism Mod v.1.0 - Shoker Mod v.1.2 (без сканирования) - SGM v.1.7 - SGM v.2.0 - Slayer mod beta 0.17 - ARS v.0.5.2 (без сканирования) - AMK ЗП v.0.4 Priboi Story не распаковывается из-за xrSpawner. Кому надо, вот распакованный спавн. Постите результаты распаковки спавнов, полученные вами. Внимание! Для повторного сканирования конфигов необходимо удалить файл sections.ini. Или воспользоваться батником acdc_decompile_scan (распаковка). Собрал большинство перл-скриптов в кучу и адаптировал их под единую библиотеку модулей stkutils. Написал пару новых скриптов. Итак: gamemtl.xr (поддерживается полная распаковка)lanims.xr (поддерживается полная распаковка)particles.xr (поддерживается только распаковка на бинарные файлы)shaders.xr (поддерживается полная распаковка)shaders_xrlc.xr (поддерживается полная распаковка)senvironment.xr (поддерживается полная распаковка) levellevel.snd_staticlevel.ps_static Распаковщик спавнов universal acdc 1.35 Распаковщик сохранений save unpacker 0.4 Сборщик/разборщик файлов RIFF-формата: chunk parser Скрипт для массовой замены строк файлах формата ini сталкера: data repclacement ini Скрипт для массовой замены строк в произвольных текстовых файлах: data repclacement text Скрипт для изменения высоты травы: details height changer Скрипт для копирования ресурсов разрабатываемой локации из СДК: resource copier Распакованную библиотеку модулей (папка stkutils) нужно положить в папку со скриптом или (советую) в C:\Perl\lib (или аналогичную папку, если вы установили ActivePerl в другую папку). Во втором случае stkutils будет работать для всех скриптов сразу независимо от расположения. Universal ACDC.exe от @PSI - версия утилиты, собранная в виде единого .exe файла и не требующая установки дополнительного софта.Репозиторий проектаСсылки на скачивание Universal ACDC v1.40 от @abramcumner - добавлено чтение секций из system.ltx - исправлены переносы строк при разбиении all.spawnРепозиторий проектаСcылки на скачивание 6 9 8 Ссылка на комментарий
Disord 1 Опубликовано 8 Ноября 2011 Поделиться Опубликовано 8 Ноября 2011 (изменено) Artos, Честно говоря, не знал. Так это что, если я нумерую не прям по порядку, а могу иногда накинуть тысячу-другую, чтобы не путался сам - это сильно грузит игру? Сие правится тогда запаковкой-распаковкой-запаковкой, да? Изменено 8 Ноября 2011 пользователем Disord Ссылка на комментарий
KD87 718 Опубликовано 8 Ноября 2011 Автор Поделиться Опубликовано 8 Ноября 2011 (изменено) Disord, ничего это не грузит. Все секции считываются в массив, из которой потом записываются в спавн согласно номеру в массиве. Номер секции не влияет ровно ни на что. Сделано так для того, чтобы спавн грузился - при разрывах в id секций движок не прочтет спавн корректно. Изменено 8 Ноября 2011 пользователем KD87 Ссылка на комментарий
Artmys 0 Опубликовано 8 Ноября 2011 Поделиться Опубликовано 8 Ноября 2011 Artos Просто раньше нужно было вручную переименвывать номера секций чтоб не было одинаковых, например Затон начинается с [0] Болота из ЧН тож с [0], вот я и накидывал нолики. Если сейчас программа сама всё делает, это хорошо. Ссылка на комментарий
KD87 718 Опубликовано 8 Ноября 2011 Автор Поделиться Опубликовано 8 Ноября 2011 Artmys, эм... Это о чем? На затоне можешь сделать секцию с номером хоть 95678, любой acdc это без проблем переварит. Не должно быть одинаковых номеров секций в одном и том же файле. А так хоть на каждой локации нумерацию с нуля начинай, без разницы. В универсальном acdc парсер ltx я практически не трогал, так что в этом отношении скрипт ведет себя так же, как и барадаковские acdc. Добавлено через 168 мин.: Версия 1.2b: http://narod.ru/disk/30957654001/un_acdc_08-11-2011.7z.html Изменения: небольшие правки по конвертации. [+] добавленные в модах соответствия clsid -> серверный класс теперь редактируются в отдельном конфиге (clsids.ini). [+] ошибка при встрече незнакомого clsid теперь выдается при распаковки секции спавна с таким clsid, а не при сканировании конфигов, как раньше. Ссылка на комментарий
Artos 99 Опубликовано 9 Ноября 2011 Поделиться Опубликовано 9 Ноября 2011 (изменено) KD87 Опробовал новую версию, отлично работает и удобно использовать! По clsids.ini: 1. Вкралась некритичная оЧепятка: II_FAKE = cse_alife_item_document ==> cse_alife_item 2. (чисто косметически) Чтобы соблюсти авторство добавлений классов и хронологию предлагаю такой вариант для включения в основной архив (без комментариев в строках): [clsids] ; Z.E.N.O.B.I.A.N mod Z_MINES = se_zone_anom TURRETMG = cse_alife_helicopter;#<-- авторство ; NLC2 ZS_ELECT = se_zone_anom ZS_ZHARK = se_zone_anom ; NLC6 ZS_SBZZ = se_zone_anom Z_GRED = se_zone_anom;#<-- пропущена ; SIMBION mod II_FAKE = cse_alife_item;#<-- исправлена опечатка SM_RAT = se_monster ZS_STUDEN = se_zone_anom ZS_ELECTR = se_zone_anom ZS_ZHARKA = se_zone_anom ZS_ICE = se_zone_anom Z_MINEF = cse_alife_anomalous_zone W_FIST = cse_alife_item_weapon W_GGUN = cse_alife_item_weapon_magazined WP_ZOOM = cse_alife_item_weapon_magazined 3. Может быть добавить в парсер файла контроль значений в строках, отсекая комментарии и возможные некорректные наименования? Сейчас комментарии пристыковываются к названию серверного класса, что не даст распаковывать. Т.е. исключить в названиях кроме нижнего подчеркивания все пробелы и пр. небуквенно-цифровые символы. Добавлено через 8 мин.: Disord, Artmys и др. Настоятельно рекомендую, после внесения своих правок и запаковки спавна - вновь распаковать полученный файл спавна и(!) работать далее уже именно с этой распаковкой. Именно эта распаковка соответствует тому, что вы имеете в игре, т.е. именно номера секций из распакованного спавна соответствуют игровым spawn_id. Ну а то, что добавляемые номера секций не должны пересекаться/дублироваться внутри одного файла из распакованного спавна и не обязательно должны следовать по порядку, и могут повторяться вновь в других файлах из распаковки - это уже пояснил KD87. Изменено 9 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
KD87 718 Опубликовано 9 Ноября 2011 Автор Поделиться Опубликовано 9 Ноября 2011 Artos, так нет Z_GRED в NLC6, специально проверял. Этот clsid там закомментирован и не используется даже в конфигах. Насчет парсинга, да, надо бы прикрутить. Добавлено через 130 мин.: Новая версия 1.21b: http://narod.ru/disk/30992911001/un_acdc_09-11-2011.7z.html Что нового: исправлены небольшие опечатки в коде. парсер теперь корректно читает значения с комментариями. Ссылка на комментарий
Artos 99 Опубликовано 9 Ноября 2011 Поделиться Опубликовано 9 Ноября 2011 (изменено) KD87, и вопрос не принципиален и ... не гоже конечно мне за Sak'а поправлять (тем более могу быть и не правым в конечном счете), но ... Открываем class_registrator.script из NLC6.008 (т.е. последняя актуальная версия). Последней строкою в 'register' идет: cs_register (object_factory, "CMosquitoBald", "se_zones.se_zone_anom", "Z_GRED", "zone_greedy_s") - т.е. однозначно при старте игры делается попытка зарегистрировать дополнительный класс 'Z_GRED' и этот класс регистрируется и присутствует в игре. В тоже время, в секции [greedy_zone] этот класс закомментирован (подменен на 'ZS_MBALD') и по сути в оригинальном моде объектов с этим классом не создается. Но, исхожу из того, что а) класс в игре имеется и б) вполне и сам разработчик может уже реанимировать свою задумку в разрабатываемом продолжении и кто-то из модмейкеров пишущих под NLC6 захочет задействовать его. Да и другим модмейкерам, работающих над другими модами, данная запись в ACDC - своеобразная напоминалка о 'уже занятом классе' ... что может быть учтено при 'своих' добавках. Вообще-то вопрос несколько шире. В конфигах модов может быть сколь угодно разных доп.классов, но конечно не все они предназначены для спавна через all.spswn. Те же мины/турельки из Zenobian-mod спавнятся в процессе игры, у меня в моде - кулаки,сепаратор, ... тоже не для all.spawn'а. И т.п. Т.о. возникает вопрос, а стОит ли при уже дороботанном алгоритме распаковки/запаковке, который пропускает незадействованные классы, вообще включать такие добавки в исходники скрипта? Решать конечно тебе, но (ИМХО) решение вероятно должно быть 'или/или' (однозначным), а не неким промежуточным, дабы не запутаться в дальнейшем и тебе и модмейкерам. Однозначно нужно оставить аномальные доп.классы (ZS_ICE, ZS_ELECT, ZS_ZHARK), т.к. на их базе уже немало модов выпущено и используются в алл.спавне. Изменено 9 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
KD87 718 Опубликовано 9 Ноября 2011 Автор Поделиться Опубликовано 9 Ноября 2011 Artos, ты сам говорил о Z_BBL, что это мусор. Только он мусор, потому что не зарегистрирован, а Z_GRED мусор, потому что не используется. С точки зрения acdc разницы никакой. Потому и добавлять его не буду. Для распаковки спавна мода "NLC6. Начало" эти классы не нужны. Если они будут нужны для распаковки спавнов "NLC6. Середина" или "NLC6. Конец" - обязательно добавлю. А насчет напоминания модмейкерам - сомневаюсь, что многие работают с такими вещами, а те, кто работают, уж точно не acdc берут ориентиром. Ссылка на комментарий
Artos 99 Опубликовано 9 Ноября 2011 Поделиться Опубликовано 9 Ноября 2011 (изменено) KD87 Не буду далее оффтопить на тему 'сторонних' классов, но информации ради: Ты, распарсив конфиги, видишь вроде как прописанные чему-то "классы" и отталкиваешься от предпосылки, что модмейкер этот класс создал и задействовал. Но(!), берем ситуации с дополнительными классами: 1. ZS_SBZZ - (NLC6) - класс создан и в игре объекты этого класса используются. Более того, объекты спавнятся через all.spawn. 2. ZS_BUZZ - (NS) - сделана попытка создать класс, но на базе недоступного клиентского класса 'CBuzz' это невозможно. Т.о. без переработки в моде соотв.кодов этот несуществующий класс является пока 'мусорным' (коды есть - использовать нельзя). 3. Z_GRED - (NLC6) - класс в игре создается. Объектами для его использования предполагались по задумке аномалии "Жадинки", но ... по какой-то причине пока этот класс заменен на стандартный (ZS_MBALD). Ни что не мешает задействовать этот класс, и даже при спавне аномалий в all.spawn'е. 4. Z_BBL - (NLC6) - конфиг с попыткой использовать класс имеется, и даже биндер написан, но(!) ни класс не реализован, ни естественно нет объектов в игре. Т.о. без создания класса эти коды пока являются 'мусором' (коды есть - использовать нельзя). ИМХО, критерием (не)включения в инструментарий должно вероятно являтся реальное существование класса, который может быть задействован в all.spawn'е (п.1 и п.3), а не некорректные попытки создания класса (п.2) или декларации в конфигах несуществующих классов (п.4). Иными словами: Есть класс - включается, нет класса - соответственно и в инструментарии нет. Тогда и универсальность применения сохранится и "мусор/рудименты" будут отсутствовать. Изменено 9 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Artos 99 Опубликовано 10 Ноября 2011 Поделиться Опубликовано 10 Ноября 2011 (изменено) Информация по распаковке Народной Солянки: Распаковщик ругается на пару секций: 'zone_ogon' (несколько раз, но без фатала) и с прекращением распаковки - 'wpn_ak74_m1' для имени "kat_wpn_ak74_m1" (это в alife_l03u_agr_underground). Секция 'wpn_ak74_m1' сделана на классе 'WP_LR300' (cse_alife_item_weapon_magazined) Если руками задать для секции 'wpn_ak74_m1' = cse_alife_item_weapon_magazined_w_gl (это в ACDC) или в конфиге оружия для 'wpn_ak74_m1' исправить 'WP_LR300' -> 'WP_AK74' - то спавн распаковывается. Предположение о причине ошибки: Кто-то из разработчиков вероятно ранее запаковал all.spawn, когда секции этого оружия был задан класс 'WP_AK74', и уже позже в конфигах было исправлено на 'WP_LR300'. Изменено 10 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
PoG 0 Опубликовано 10 Ноября 2011 Поделиться Опубликовано 10 Ноября 2011 У меня тут проблема, с ACDC, точнее с распаковкой all.spawn из тч версии 1,003. Везде написано что мол любая версия ACDC сойдет, но у меня ничего не выходит! Тут у меня две версии обе рабочие, с их помощью раз архивировал COP но с ТЧ завал! Я перепробовал кучи батников и даже ACDC-MENU, но ничего не помогает! Что делать Ссылка на комментарий
KD87 718 Опубликовано 10 Ноября 2011 Автор Поделиться Опубликовано 10 Ноября 2011 (изменено) Artos, да, я это знаю. Для zone_ogon у разрабов тоже стоял не тот класс в acdc. Тут проблема не в универсальном acdc. Значит, надо или делать костыль, перехватчик ошибок, или прикладывать правленые конфиги к acdc. Признаться, еще не решил. Такая же проблема в OGSM ЧН, кстати, с винторезом. А других модов у тебя нет под рукой? Статистику по распаковке бы собрать. PoG, версию из шапки пробовал? Изменено 10 Ноября 2011 пользователем KD87 Ссылка на комментарий
Artos 99 Опубликовано 11 Ноября 2011 Поделиться Опубликовано 11 Ноября 2011 (изменено) KD87 Ставить ли 'костыль' в инструментарий? Хм, непростой вопрос ... Я бы наверное не стал, дабы не давать повода разрабам/модмейкерам допускать ошибки. Тем более, вариант распаковки при некорректных конфигах существует, ну а далее - пусть перепаковывают с корректными значениями и работают дальше. (ИМХО) Модов различных у меня достаточно много. Конечно под рукою (распакована) малая часть, но если какие нужны (или мне самому проверить) - дай знать. Неплохо бы список тех, которые уже проверены, дабы не тратить время на дублирование. Хотел спросить: В кодах/скриптах игры используются серверные классы 'cse_anomalous_zone', cse_zone_visual и т.п. В кодах ACDC им, как понимаю, соответствуют 'cse_alife_anomalous_zone', cse_alife_zone_visual и т.п. В чем причина внесения изменений в имена серверных классов? (Просто иногда несоответствие сбивает несколько с толку при разборе кодов ...) Изменено 11 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
KD87 718 Опубликовано 11 Ноября 2011 Автор Поделиться Опубликовано 11 Ноября 2011 (изменено) Artos, проверенный список модов я вроде бы писал на прошлой странице. В ACDC используются движковые названия классов. Это осталось еще от бардака. Тут уж остается только гадать, почему разрабы при экспорте у ряда классов поубирали слово 'alife'. Изменено 11 Ноября 2011 пользователем KD87 Ссылка на комментарий
Artos 99 Опубликовано 11 Ноября 2011 Поделиться Опубликовано 11 Ноября 2011 (изменено) KD87, по проверенным - понятно, предполагал что это список однозначно валидных и нет ... Бум понемногу расковыривать остальные. Явно проблема имеется на линейке модов "Priboi Story". Причем, не сумев распаковать спавн - клепаются продолжения ... усугубляя ошибки тем, что меняют классы объектам которые имеются и в спавне. Выкладывать спавн и конфиги иль еще чего? (тут дело посерьезнее) По названиям тоже понятно. Жаль, вроде бы желательно состыковать с реальными кодами игры, т.к. мне в модуле нет-пакетов приходится оперировать с реальными и виртуальными именами одного и того же, но и трогать отлаженное - тоже не гоже ... Посмотрим далее. Изменено 11 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
KD87 718 Опубликовано 12 Ноября 2011 Автор Поделиться Опубликовано 12 Ноября 2011 Artos, если есть возможность выложить спавны и конфиги - выкладывай. Что-то не хочется мне качать многие сотни мегабайт этих модов Ссылка на комментарий
Artos 99 Опубликовано 12 Ноября 2011 Поделиться Опубликовано 12 Ноября 2011 (изменено) KD87, тогда буду постепенно постить. Вот это для давнего "Priboi Story". На его базе уже и продолжение вышло (с первоначальным спавном). 1. В исходном моде есть дублирование некритичных секций (иммунитеты объектов), что прерывает считывание секций и распаковку. 2. Имеются две проблемы в спавне. Логи, на чем натыкалось, я прикладываю. Второй лог получен после "ручной правки" спавна, дабы прочесть хоть как-то секцию ... 3. В архив вложил некое расширение мода (забыл уже к чему это ...), т.к. в нем второй вариант спавна, не имеющий первой ошибки. Т.к. сам любитель решать головоломки хотелось бы хотя бы кратко получать информацию о причине ошибки и кратком пояснении "как устранено". Ссылка (1.47 МБ) Изменено 12 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
KD87 718 Опубликовано 12 Ноября 2011 Автор Поделиться Опубликовано 12 Ноября 2011 (изменено) Artos, распаковать удалось Оба твоих вылета были и у меня. Первый вылет - из-за кривой секции rad_stalker_dead, как-то так. Там object_flags по какой-то причине упакован в трехбайтовый контейнер. А скорее даже, просто старший байт откушен. Пришлось добавлять этот байт и править размеры чанков, куда эта секция была вложена. Второй вылет - секция dar_af_ameba_slug (section_name = af_ameba_slug) встречается в спавне два раза, Первый раз - это простой cse_alife_item_artefact, второй раз - что-то совершенно адское, издали напоминающее cse_alife_object_physic. Тут просто отключил fatal error, заменив на warning. Обойдя это получил еще и третий вылет - секция dar_dar_document3 имеет формат cse_alife_object_physic, в то время, как в конфигах стоит II_ATTCH. Я боюсь представить, чем такой спавн можно было сделать. Изменено 12 Ноября 2011 пользователем KD87 Ссылка на комментарий
Artos 99 Опубликовано 12 Ноября 2011 Поделиться Опубликовано 12 Ноября 2011 (изменено) KD87 Если удалось распаковать (хоть как-то) - скинь в личку или тут, плз. Давно хотел посмотреть начинку, но ... именно из-за описанных тобою ошибок вроде как никто не рапаковал до сих пор этот спавн и клепают на том, что есть. Ну а запаковывался скорее всего 'своим' правленным ACDC, правки которого только у авторов мода и были. Не думаю, что стОит подстраивать универсальный ACDC под подобные ошибки/правки, все же это исключение, а не правило. Но, учитывая, что игра все же принимает даже такие спавны, наверное попробовать посмотреть что можно сделать с алгоритмом, который бы пропускал иль правил подобные ошибки. Тот же, например, 'документ' в игре ничем не отличается от 'итема' (аттача) - вот игра и принимает подмену класса. P.S. Выкладывать конечно буду продолжать, если будут попадаться те, которые штатно не распаковываются. Но проверяю те, которые (были) популярны и только по 3-4 за день ... Спасибо за распакованный спавн. P.P.S. В те давние времена были популярны 'закрывашки' кода, дабы не плагитничали ... так что вполне возможно что это искусственно привнесенные ошибки в спавн (своего рода антираспаковщик). Ну а зная алгоритм запаковки и особенности использования классов - можно двум секциям назначить чуть разные классы и ... после запаковки подправить имя секции, дабы слились в одну. Но это уже извращение, конечно. Изменено 12 Ноября 2011 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
KD87 718 Опубликовано 12 Ноября 2011 Автор Поделиться Опубликовано 12 Ноября 2011 Artos, вот: http://narod.ru/disk/31303425001/all.7z.html Нет, с помощью acdc такого запаковать нельзя. Там физически не назначишь два разных класса одной секции. И нельзя создать секцию с недостающим байтом, причем не где-то в конце, а в куске cse_alife_object. Подстраиваться под такое, конечно, не буду. Если пробовал еще что-то распаковать - пости сюда, буду в шапке какой-то лог вести - распаковывается/не распаковывается. Добавлено через 52 мин.: Новая версия: народ Что нового: [+] добавлен ключ -nofatal (отключает вылет при фатальной ошибке, заменяя ее предупреждением.) Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти