Это популярное сообщение. 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 Ссылка на комментарий
ХОВАН 3 Опубликовано 18 Января 2012 Поделиться Опубликовано 18 Января 2012 KD87, да я собственно про него уже не забываю, как узнал что нужно удалять перед сканом. Да и пользуюсь стандартным батником: cd ACDC\ del sections.ini PERL universal_acdc.pl -d ..\all.spawn -out ..\Unpack -scan ..\..\configs\ -nofatal Ссылка на комментарий
KD87 718 Опубликовано 18 Января 2012 Автор Поделиться Опубликовано 18 Января 2012 (изменено) ХОВАН, залей спавн и конфиги куда-нибудь. Изменено 18 Января 2012 пользователем KD87 Ссылка на комментарий
ХОВАН 3 Опубликовано 19 Января 2012 Поделиться Опубликовано 19 Января 2012 KD87, Вот; Удалил текста, описатели текстур, логику, а то инет вообще не важный Ссылка на комментарий
KD87 718 Опубликовано 19 Января 2012 Автор Поделиться Опубликовано 19 Января 2012 (изменено) ХОВАН, это не ошибка acdc. Конфиги сканируются корректно, спавн распаковывается согласно конфигам. Но вот в моде wpn_usas12, например, запакован, как шотган, а в конфигах имеет класс WP_AK74. Значит, и движок будет считать оружие автоматом, а не шотганом, со всеми вытекающими (например, в виде формата нет-пакета). Может, автор думает, что класс можно брать наобум, может, еще какие-то причины, но я такие ситуации в скрипте автоматически разрешать не могу. Возможность "ручной" распаковки есть. За отклик спасибо. Из того списка, что ты приводил, все записи в sections.ini есть. Но некоторые секции в конфигах имеют неправильный класс (WP_AK74), а именно: 'wpn_usas12' = cse_alife_item_weapon_shotgun 'wpn_g36_tactical' = cse_alife_item_weapon_magazined 'wpn_l85_m1' = cse_alife_item_weapon_magazined 'wpn_l85_m2' = cse_alife_item_weapon_magazined 'wpn_m249' = cse_alife_item_weapon_magazined Изменено 19 Января 2012 пользователем KD87 Ссылка на комментарий
Artos 99 Опубликовано 20 Января 2012 Поделиться Опубликовано 20 Января 2012 (изменено) KD87, судя по последним версиям ACDC идет чистка строк в секциях спавна имеющие дефолтные значения (что в общем то хорошо), но и заметил появление привнесенных параметров ... Вопрос: А какова причина необходимости внесения неуказанных параметров? В частности: 1. Добавляются в ; cse_alife_monster_abstract properties значения: smart_terrain_id = 0 ;<-- зачем? может быть значение = -1 (65535) (?!) - что приводит к фатальным ошибкам, т.к. свойство obj:smart_terrain_id() (или нет-пакет) возвращает вместо ID смарта - идентификатор актора (!?), что естественно недопустимо. 2. Для ; cse_alife_custom_zone properties добавляются: owner_id = 0 ;<-- зачем? может быть значение = -1 (65535) (?!) - это приводит к тому, что все аномалии и т.п. становятся как бы порождением актора (установленными актором) и любой хит от аномалии/костра/... автоматически делает актора врагом! 3. Также нечсно длбавление к ; cse_ph_skeleton properties source_id = 0 ;<-- зачем? Также, хотелось бы понять, какова природа формирования значения artefact_position_offset для аномалий/костров/... , т.е. как оно вычисляктся (если не автоматом из SDK)? Изменено 20 Января 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
KD87 718 Опубликовано 20 Января 2012 Автор Поделиться Опубликовано 20 Января 2012 Artos, это же в распакованный спавн не идет. Дефолт нужен для инициализации параметра и вывода значения, если оно в спавне такое же, как и дефолтное. По сути, в дефолте можно вообще любые числа писать. А source_id по дефолту 0xFFFF (версия 1.27), почему 0? Вообще, скоро будет большое обновление entity.pm. Я его перерабатываю для скрипта распаковки сохранений. В сохранениях объекты содержат полный пакет, включая клиентские данные и параметры, сохраняемые в скриптовых серверных классах, так что многое надо переделать. По artefact_position_offset - попробую объяснить. Для каждой аномалии в спавне прошиты места спавна артефактов (в section2.bin). Обычно их по 32 на аномалию. Так вот, параметр artefact_position_offset показывает смещения по этим местам спавна. Например, значение 256 означает, что для данной аномалии места спавна артефактов начинается с 256го. Каждое место спавна занимает 20 байт, так что, умножив на это число параметр artefact_position_offset, можно получить байтовое смещение по файлу section2.bin. Ссылка на комментарий
Artos 99 Опубликовано 20 Января 2012 Поделиться Опубликовано 20 Января 2012 (изменено) KD87, сейчас как раз довожу читалку/писалку нет-пакетов и подчищаю свой all.spawn. Так получилось, что ACDC v.1.27 только сейчас пришлось опробовать и ... столкнулся с фатальными вылетами. Решил убрать для костров 'artefact_spawn_count ~= 0' и перепаковал спавн ... Потерял полчаса, пока дошло, что не читалка нет-пакетов виновата, а именно параметры у неписей. Указанные параметры и значения (из предыдущего поста) я привел из распакованного после запаковки моего спавна, так что и в игре они о себе дают знать (читалка нет-пакетов указывает на 'акторские аномалии/костры') и вылеты в игре при спавне неписей с пропиской к актору. Откатился к проверенной версии ACDC - ошибки исчезли. Вопрос по artefact_position_offset обусловлен вот чем: В игре спавнятся аномалии/костры/... , для которых ничего нет(!) в section2.bin, да и и подставляется дефолтное '0'. Если такая аномалия все же решится заспавнить артефакт (например разрешено в конфигах) - куда ж она его заспавнит(?) иль не приведет ли это к спавну в недопустимое место? Вот и задался вопросом - а как при спавне расчитать/проконтролировать нужные цифирьки, из чего исходить? Изменено 20 Января 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
KD87 718 Опубликовано 20 Января 2012 Автор Поделиться Опубликовано 20 Января 2012 (изменено) Artos, а ты распакуй старый запакованный спавн этой версией, и все будет нормально. Я бы даже сказал, это общее правило для всех версий - прежде надо распаковать спавн новой версией, а потом его редактировать. Я так думаю, у тебя проблемы как раз из-за запаковки спавна новой версией. не приведет ли это к спавну в недопустимое место Приведет, конечно. И даже может быть вылет inivalid vertex for object. Тут контроль такой - или прописывать это параметр, беря значение от "родных" аномалий на уровне, или добавлять новые места спавна руками. Изменено 20 Января 2012 пользователем KD87 Ссылка на комментарий
Artos 99 Опубликовано 20 Января 2012 Поделиться Опубликовано 20 Января 2012 (изменено) KD87, проверил ... При распаковке прежнего спавна и дальнейшей работе с ним в версии 1.27 ошибок вроде как нет. Но ... 1. Все же неясно, почему отсутствующеие параметры из прежней распаковки новая версия засовывает с некорректными значениями. ИМХО, при чтении - отсутствует параметр -> значит дефолтный, а не некий '0'. (ну да это ладно ...) 2. Все же зачем в распаковку теперь добавляются некоторые дефолтные параметры? Например, к чему кострам (да и аномалиям) добавлять owner_id = 0xffffffff. Они могут принадлежать кому-то? Иль всяческим физ.объектам, разбросанным по локациям source_id = 65535 (?), ведь ясно же, что на сотню/тысячу таких безхозных объектов только несколько может какому модмейкеру взбредет в голову в спавне помечать хозяином. Вот пусть он себе и добавляет! Ведь случайно "задев" такое значение - потом до-о-олго можно недоумевать по поводу различных коллизий в игре. По artefact_position_offset: Брать в игре скриптами какую нить ближайшую позицию спавна - можно конечно, но ... извращение. Читаь скриптами section2.bin - врядли возможно. Если иметь ввиду спавн динамических аномалий - ненапропишешся заранее всех точек спавна для каждой. Вот и получается - желательно или расчитать нужное место спавна, но тогда нужны исходные параметры для таких вычислений или ... как то формировать заранее список допустимых мест (или хотя бы одно дефолтное) по всем локациям. Прошу уточнить: как заставиь спавниться по месту расположения аномалии, т.е. без смещения? Значение '0' для artefact_position_offset не означает ли именно это? Ведь если аномалия спавнит - значит сама она расположена по валидным координатам/вертексам - вот и использовать как заглушку спавна?! P.S. По "лишним" и их чистке - понятно, а то ... правка спавна с "лишними" - становится сейчас сродни хождению по минному полю, заденешь что-то и ... времени потерять можно много. ;-) Изменено 20 Января 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
KD87 718 Опубликовано 20 Января 2012 Автор Поделиться Опубликовано 20 Января 2012 Artos, ну, это все в процессе доработки. Лишних значений не будет. Ссылка на комментарий
Artos 99 Опубликовано 22 Января 2012 Поделиться Опубликовано 22 Января 2012 (изменено) KD87, хотелось бы обратиться с просьбою по ... уточнению и синхронизации с читалками/писалками нет-пакетов (netpk) наименований некоторых свойств/параметров для классов, тем более грядет (возможно) вариант распаковки сэйвов: ACDC -> предлагаемое (в netpk) 1. в классе 'cse_abstract' unknown_id -> object_id --/ собственно это именно игровой ID объекта, а не некая неизвестность. 2. в классе 'cse_ph_skeleton' bone_count -> bones_count --/ более интуитивно понятно (семантично) 3. в классе 'se_respawn' spawned_obj -> spawned_objects --/ более интуитивно понятно (семантично) Учитывая, что для работы с all.spawn'ом эти уточнения никак не отразятся, а более востребованы для работы уже в скриптах (т.е. в игре или с сэйвами), подобное уточнение устранит разночтения ... Первые два переименованы в рабочей версии. Что касается spawned_obj - так он именуется в скриптах. Поэтому не думаю, что стоит менять. KD87 Добавлено через 142 мин.: P.S. Согласен ... завязка на уже имеющееся имеется и может не имеет смысла заморачиваться, но все же выскажу аргументы 'за' возможное переименование: 0. Работая со скриптами/параметрами, гораздо удобнее употреблять именно смысловые наименования, чем закостеневшие (но не обязательные!) и данные когда-то кем-то ... Название 'spawned_obj', кроме указания что нечто заспавненное и что-то касательно как объекта, более ничего не несет. Это не объект(ы), а список игровых идентификаторов объектов ... , что гораздо понятнее при работе/использовании. 1. То что в скриптах кто-то из разработчиков в скрипте se_respawn.script дал байтам таблички (после 'cse_alife_smart_zone') какое-то название собственно ни к чему не обязывает и не влияет на другие скрипты/игру. Это название так и остается в самом скрипте респавнера и не передается наружу. Наименование же в ACDC вообще не имеет никакого смысла, т.к. ее (таблицы заспавненных) собственно не существует до спавна самого респавнера, а имеется только первый байт (=0) кол-ва записей в несуществующей табличке. Более правильным было бы тогда разложить заключительный чанк на две части: байт кол-ва (размер таблицы) и саму табличку со списком идентифокаторов объектов, как это сделано для различных таймерных параметров или Может так и сделать, несмотря на появление лишней строки для доп.параметра (spawned_count + spawned_ids)? (мысль вслух) 2. Схожий по сути параметр для списка индексов партонов в стволе имеет название 'ammo_ids' и, если следовать некоей логике, то подходящее название должно быть типа: 'spawned_ids'. 3. Собственно чистка этой таблички даже в самом se_respawn.script сделана через заднее место ... (ИМХО), о чем писал в топике по скриптам, и давал вариант по устранению этой недоработки. Такая правка потребует записи дополнительных байт (время последнего респавна), которые должны быть дополнены к заключительному чанку - а это значит все одно появляются для скриптера новые названия параметров ... Т.о. если кто-то и захочет работать с этими параметрами (кол-вом и самой табличкой), то названия может применять хоть прежние, хоть 'правленные'. Изменено 22 Января 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
KD87 718 Опубликовано 23 Января 2012 Автор Поделиться Опубликовано 23 Января 2012 (изменено) Маленькое объявление: для тестирования скрипта распаковки сохранений нужны сохранения ТЧ, чистого или с модами, без разницы. Желательно, где-нибудь в середине или в конце игры. Если есть возможность помочь - выкладывайте в тему. Если играли с модом - указывайте также мод. Изменено 23 Января 2012 пользователем KD87 Ссылка на комментарий
7.9 174 Опубликовано 23 Января 2012 Поделиться Опубликовано 23 Января 2012 (изменено) 5 игр, в конце, модов нет, если только пара нестандартных секций, версии ТЧ 3 и 4 где какая именно - уже не помню... http://narod.ru/disk/38635415001/saves2007.7z.html ЗЫ: Можно и середины упаковать... если пригодится. Спасибо, этого хватит - для тестов чем толще сейв, тем лучше. KD87 Изменено 24 Января 2012 пользователем KD87 всё легко Ссылка на комментарий
riddik121 193 Опубликовано 28 Января 2012 Поделиться Опубликовано 28 Января 2012 (изменено) Парни подскажите что означает строка update data left in... при распаковке all.spawn? У меня получилось распаковать all.spawn от народной солянки (местным acdc) и от Сталкер Радиоактивная земля (другим acdc). Теперь пытаюсь другого Сталкера распаковать и у меня выплывает эта строка, в частности update data left in war_wpn_knife Добавлено через 66 мин.: Всё отлично распаковалось местным acdc все сталкеры что хотел. Использовал команду -d all.spawn -scan config\ -nofatal. Теперь возник другой вопрос наверное не по теме. В Народной солянке от 14.09. стоит 2 алл спавна, распаковал и тот и другой файлы alife большинства локаций повторяются, проверял секции спавна, тоже повторяются, в некоторых просто этих секций больше а в некоторых меньше (например в all.spawn alife generators секций спавна больше чем в all.spawn_bak alife generators). Теперь вопрос: а в чём прикол??? Ну это вопрос не ко мне, а к разработчикам солянки. all.spawn_bak - просто старый забекапленный спавн, как мне думается. Ошибка update data left, как правило, свидетельствует о неправильном параметре class в конфиге проблемной секции. KD87 Изменено 28 Января 2012 пользователем KD87 Надо дело довести до конца! Ссылка на комментарий
KD87 718 Опубликовано 29 Января 2012 Автор Поделиться Опубликовано 29 Января 2012 (изменено) Скрипт для распаковки/запаковки сохранений: народ. Что умеет: распаковывать/запаковывать сохранения ТЧ. Пока не распаковывает клиентские данные объектов. Более подробная информация о работе со скриптом есть в ридми. Также в архиве есть примерные батники распаковки/запаковки. Кстати, если кто-нибудь имеет сведения о формате клиентских данных объектов - прошу поделиться. Изменено 29 Января 2012 пользователем KD87 Ссылка на комментарий
kotdaVinci 0 Опубликовано 4 Февраля 2012 Поделиться Опубликовано 4 Февраля 2012 Доброго времени суток. Я понимаю что проблема глупая, и я большой нуб но все же: Нужно что бы ggtool прочитал граф бин (тоесть sectin4.bin) от билда 3120, обычный ЗПшный понятное дело что не подходит. Быть может такая версия уже есть? Если нет то наверное бы такая штукенция пригодилась бы не только мне. Добавлено через 25 мин.: Проблема то считайте та же что и у тов Кубанца, но только хуже... Ссылка на комментарий
KD87 718 Опубликовано 4 Февраля 2012 Автор Поделиться Опубликовано 4 Февраля 2012 kotdaVinci, а с чего ты взял, что он не подходит? Прекрасно подходит. Чего ты ждешь от скрипта? Ссылка на комментарий
kotdaVinci 0 Опубликовано 4 Февраля 2012 Поделиться Опубликовано 4 Февраля 2012 Ну жду я от него как минимум работы. Взял я это с того что при попытке им воспользоватся он выдает фатальную ошибку, с кирилло-китайскими аргументами. Добавлено через 4 мин.: В прочем есть идея прибегнуть вашему совету и вовсе обойтись без него. Ссылка на комментарий
KD87 718 Опубликовано 4 Февраля 2012 Автор Поделиться Опубликовано 4 Февраля 2012 kotdaVinci, для проверки я распаковал спавн 3120, взял граф, запустил ggtool от ЗП командой ggtool.pl section4.bin. Скрипт нормально отработал. Если ты что-то не то сделал - это не вина скрипта. Ссылка на комментарий
kotdaVinci 0 Опубликовано 4 Февраля 2012 Поделиться Опубликовано 4 Февраля 2012 Хорошо, сейчас попробую еще разок, возможно где то напутал я. В случае чего поможете? Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти