Новая программа ACDC, для тех кто не хочет заниматься гемороем, типа: установка active perl и т. д.
Для извлечения файлов all.spawn нада лишь два файла - all.spawn и game.graph.
Основные фичи:
-распаковка оригинальных спавнов ТЧ, ЧН, ЗП и билдов ТЧ, начиная с 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 в папку с программой, делаете батник (команды ниже),
запускаете батник, радуетесь жизни.
Пояснение по дальнейшему тексту: в угловых скобочках () указано значение опции. Это путь до спавна,
папка для распаковки и т.п., то есть то, что нужно вписывать вам. В квадратных скобочках ([])
указаны необязательные опции. Опции без скобочек - обязательны.
----------------------------------------------------
----------------[Распаковка спавна]-----------------
----------------------------------------------------
Команда: universal_acdc.pl -d [common_options]
-d - путь до спавна.
common_options - общие опции. Читайте про них ниже.
----------------------------------------------------
----------------[Запаковка спавна]------------------
----------------------------------------------------
Команда: universal_acdc.pl -compile
- [-idx ] [-f ] [common_options]
-compile
- - папка, в которой лежит распакованный спавн. Если работаете в текущей папке,
- не нужно.
common_options - общие опции. Читайте про них ниже.
-idx - с этим ключом скрипт сформирует ltx конфиг с секциями вида:
[13_box_wood_01_0021] ;формат - "индекс_локации"_"имя_объекта"
id = 2907 ;id объекта
story_id = -1 ;story_id объекта
Такие записи создадутся для ВСЕХ объектов из спавна.
Если указать ключ -idx без пути до конфига, он появится в папке с acdc (spawn_ids).
Зачем это нужно? В игре вы сможете открыть этот файл из скриптов и найти нужный вам объект.
Если раньше для нахождения нужного id объекта по имени требовалось перебрать все объеты в игре,
теперь это можно сделать, просто считав id из нужной секции конфига.
----------------------------------------------------
------------[Конвертирование спавна]----------------
----------------------------------------------------
Команда: universal_acdc.pl -convert -version [-ini ] [common_options]
-convert - файл, который нужно сконвертировать. Можно указывать как запакованный (*.spawn) спавн,
так и распакованный (alife_***.ltx). Внимание! Так как граф и кросс-таблицы в ЧН и ЗП вшиты в спавн,
для конвертирования ЗАПАКОВАННЫХ спавнов ТЧ в эти форматы вам потребуется положить в папку с acdc
папку levels из игры. Необязательно копировать все файлы, достаточно оставить в папке с каждой локацией
файл level.gct.
-version - новая версия спавна. Подобрать версию вы сможете, посмотрев файл spawn_versions.txt
-ini - файл тонкой настройки конвертации (convert.ini). Если не указан, используется convert.ini, лежащий
в текущей папке.
common_options - общие опции. Читайте про них ниже.
Также поддерживается тонкая настройка конвертации через файл convert.ini.
В файле есть две секции: [exclude] и [change]. В секции exclude можно прописать те секции,
которые надо удалить из спава при конвертации. Пример:
[exclude]
secti m_trader, m_car, flesh_weak
Также поддерживается маскирование. Вместо кучи однотипных секций (stalker_zombied, stalker_sakharov и т.д.)
можно задать маску, используя символ *. Пример: stalker*. Такая запись приведет к исключению всех
секций, в названии которых есть слово stalker.
В секции change прописываются имена тех секций, в которых нужно что-то поменять или дополнить.
Пример:
[change]
secti 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]
secti stalker
[stalker]
add:game_vertex_id = 500
rep:visual_name = actors/soldier/soldier_antigas.ogf
----------------------------------------------------
----------[Массовая замена вертексов]---------------
----------------------------------------------------
Команда: acdc -parse -old -new [-way] [common_options]
-parse - имя ltx, в котором находится спавн.
-old - старый начальный game_vertex_id локации.
-new - новый начальный game_vertex_id локации.
-way - обрабатывает аткже файл way_***.ltx для этой же локации.
Пример: acdc -parse alife_l01_escape.ltx -old 0 -new 934
----------------------------------------------------
-------[Разбивка all.spawn на level.spawn]----------
----------------------------------------------------
Команда: acdc -split [-use_graph] [-way] [common_options]
-split - разбиваемый спавн. Для восстановления граф-поинтов необходимы level.spawn для всех локаций,
находящихся в графе. Их следует поместить в папку levels согласно их положению в геймдате сталкера - по папкам,
соответствующим локациям. Папка levels должна быть в папке с acdc (или путь до нее можно задать ключом - читайте далее).
-use_graph - использование game.graph для восстановления граф-поинтов. Плюс - не нужны level.spawn, минус -
не восстанавливаются имена граф-поинтов (за исключением граф-поинтов переходов).
-way - также из спавна генерируются level.game
----------------------------------------------------
------------------[Общие опции]---------------------
----------------------------------------------------
-out - путь до файла/папки с результатом. Имеет разный смысл для разных опций:
для decompile, parse - папка с результатом
для compile, convert - результрующий файл.
для split - папка levels, куда сохранять level.spawn.
-scan - путь до папки с конфигами. Используется в случае спавнов от модов.
-g - путь до папки с game.graph. Бесполезен для compile и parse, а также
если работаете со спавном ЧН, ЗП, build 3120.
-level - обрабатывать спавн как level.spawn.
-af - также распаковываются\запаковываются места спавна артефактов в аномалиях (section2.bin).
-nofatal - отключает вылет при фатальной ошибке, заменяя ее предупреждением.
======================================
Если acdc генерирует ошибку 'unknown clsid ... for section...', это означает,
что в данном моде добавлены новые пары клиентский/серверный класс в class_registrator.script.
Дабы не усложнять работу с acdc, такие пары не определяются автоматически.
Лучше всего сообщить об этом мне (www.amk-team.ru/forum/index.php?showuser=11696),
однако, если вы понимаете, что находится внутри class_registrator.script, можете добавить
новые сеты в clsids.ini сами. Сеты добавляются в таком формате:
clsid = соответствующий_серверный_класс
Пример:
ZS_ELECT = se_zone_anom
======================================
Любые имена опций можно сокращать. К примеру, необязательно использовать именно -use_graph, скрипт поймет также и -use, и -u.
Однако ряд опций при сокращении их имени могут конфликтовать друг с другом. -compile нельзя сократить до -c, поскольку
в таком случае скрипту неясно, что имеется ввиду: -compile или -convert. В таком случае наиболее короткое имя для compile
будет таким: -com
======================================
История правок:
1.27:
исправлена ошибка парсера, в некоторых случаях приводившая к порче логики.
исправлено создание папок при сохранении результата.
[+] добавлена переинициализация параметров секции после смены класса при конвертации. Это расширяет диапазон
версий, доступных для конвертирования.
[+] добавлена поддержка маск при конвертации.
[+] добавлен ключ -ini в режиме конвертации
1.26:
поправлена распаковка спавнов ЧН.
[+] добавлено автоматическое заполнение версии спавна из первой секции (если актора в спавне нет).
[+] что-то еще по мелочи, не помню.
1.25:
отключен вывод пустого параметра spawned_obj при распаковке.
[+] реализовано автоматическое заполнение параметров version и script_version при запаковке спавнов с секциями из
разных версий игры. Версия берется из конфига актора.
1.24:
исправлена распаковка/запаковка спавна билда 2571.
исправлена запись guids.ltx
мелкие правки
1.23b:
[+] убрано предупреждение "state data left" при распаковке спавнов ЗП, запакованных
ранее с помощью acdccop.
исправлены ошибки split, из-за которых могли получаться кривые level.spawn
переделана логика чтения/записи пакетов se_stalker/se_monster
мелкие изменения
1.22b:
[+] добавлен ключ -nofatal
1.21b:
исправлены небольшие опечатки в коде.
парсер теперь корректно читает значения с комментариями.
1.2b:
[+] небольшие правки по конвертации.
[+] добавленные в модах соответствия clsid -> серверный класс теперь редактируются
в отдельном конфиге (clsids.ini).
[+] ошибка при встрече незнакомого clsid теперь выдается при распаковки секции
спавна с таким clsid, а не при сканировании конфигов, как раньше.
1.1b:
[+] проверена распаковка билд-спавнов, решена проблема декомпиляции спавнов
билдов 25хх.
[+] добавлен контроль наличия параметра version в секциях распакованного спавна.
исправлено исключение файла со spawn_id объектов при сканировании конфигов.
1.0b:
[+] основательно переработан код, часть скрипта вынесена в отдельные модули.
исправлены все неработавшие функции.
[+] увеличена скорость выполнения кода, уменьшены требования по памяти.
================================================================
Копирайты:
ACDC для ТЧ - bardak, для ЗП - bardak, Kolmogor. Все остальное - K.D.
норм
Не работает, нужен Perl
Хм, вроде было уже, и не раз. Но все равно плюс - полезная вещь.