Это популярное сообщение. 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 Ссылка на комментарий
naxac 2 477 Опубликовано 6 Марта 2020 Поделиться Опубликовано 6 Марта 2020 (изменено) @mdm64, тут дело вернее всего в версии перла. У меня стоит эта версия, с ней все отлично работает. Пробовал до этого другие какие-то, не помню уже, какие, ничего тоже не получалось, постоянные ошибки. Изменено 6 Марта 2020 пользователем naxac 2 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
mdm64 586 Опубликовано 6 Марта 2020 Поделиться Опубликовано 6 Марта 2020 (изменено) @naxac, У меня стоит 5.26 версия.У тебя 5.12.3, я сначала поставил 5.10 и всё работало, а потом напрочь забыл, что лучшее враг хорошего... Изменено 6 Марта 2020 пользователем mdm64 Ссылка на комментарий
WolfHeart 705 Опубликовано 6 Марта 2020 Поделиться Опубликовано 6 Марта 2020 (изменено) 5 минут назад, mdm64 сказал: У меня стоит 5.26 версия. Пробуй установить другую. Например ту что советует @naxac, раз уж у него она работает. Но сначала попробуй все же скопировать stkutils из ggRC в C:\Perl\lib, это проще и лишним не будет. Изменено 6 Марта 2020 пользователем WolfHeart 1 AMD FX-8370 (8 X 4.35GHz); RAM 16Gb; MSI GTX 1070 (8Gb). Windows -10 PRO (х64) Ссылка на комментарий
mdm64 586 Опубликовано 6 Марта 2020 Поделиться Опубликовано 6 Марта 2020 (изменено) @WolfHeart, Да, так и сделаю, вернее, уже делаю...Благодарю! @WolfHeart, Папку из ggrc скопировал в c:\Perl , поставил версию 5.12.3, ошибка исчезла. Но теперь прога орёт, что не может почему-то открыть section4.bin... Скрытый текст D:\0\ggrc>perl ggrc.pl -g1 section4.bin,cop -l1 zaton,jupiter,pripyat,labx8,jupi ter_underground,darkvalley,digger_stash,l04u_labx18,military,agroprom,agroprom_u nderground,marsh,escape,red_forest,collector22 -g2 section4nl.bin,cop -l2 garbag e,limansk,yantar reading section4.bin... cannot open section4.bin D:\0\ggrc>pause Для продолжения нажмите любую клавишу . . . Сделал не по инструкции, перенёс section4 из папки gamedata "наружу" к ggrc и вроде как процесс прошёл...вот о чём и говорю, походу авторы инструкций пишут их для самих себя... Вот что получилось: Скрытый текст D:\0\ggrc>perl ggrc.pl -g1 section4.bin,cop -l1 zaton,jupiter,pripyat,labx8,jupi ter_underground,darkvalley,digger_stash,l04u_labx18,military,agroprom,agroprom_u nderground,marsh,escape,red_forest,collector22 -g2 section4nl.bin,cop -l2 garbag e,limansk,yantar reading section4.bin... reading header... reading levels... reading vertices... reading edges... reading cross tables... cross table offset for zaton is 7499315 size = 11107554 cross table offset for jupiter is 18606869 size = 8917968 cross table offset for pripyat is 27524837 size = 2923578 cross table offset for labx8 is 30448415 size = 40734 cross table offset for jupiter_underground is 30489149 size = 246054 cross table offset for darkvalley is 30735203 size = 2165892 cross table offset for digger_stash is 32901095 size = 972 cross table offset for l04u_labx18 is 32902067 size = 45534 cross table offset for military is 32947601 size = 2311980 cross table offset for agroprom is 35259581 size = 2251446 cross table offset for agroprom_underground is 37511027 size = 32136 cross table offset for marsh is 37543163 size = 3173814 cross table offset for escape is 40716977 size = 3749754 cross table offset for red_forest is 44466731 size = 989022 cross table offset for collector22 is 45455753 size = 34668 reading section4nl.bin... reading header... reading levels... reading vertices... reading edges... reading cross tables... cross table offset for zaton is 8537660 size = 11107554 cross table offset for jupiter is 19645214 size = 8917968 cross table offset for pripyat is 28563182 size = 2923578 cross table offset for labx8 is 31486760 size = 40734 cross table offset for jupiter_underground is 31527494 size = 246054 cross table offset for darkvalley is 31773548 size = 2165892 cross table offset for digger_stash is 33939440 size = 972 cross table offset for l04u_labx18 is 33940412 size = 45534 cross table offset for military is 33985946 size = 2311980 cross table offset for agroprom is 36297926 size = 2251446 cross table offset for agroprom_underground is 38549372 size = 32136 cross table offset for marsh is 38581508 size = 3173814 cross table offset for escape is 41755322 size = 3749754 cross table offset for red_forest is 45505076 size = 989022 cross table offset for garbage is 46494098 size = 2148444 cross table offset for limansk is 48642542 size = 369192 cross table offset for yantar is 49011734 size = 886320 forming new graph... writing level graphs... Died at ggrc.pl line 683. D:\0\ggrc>pause Для продолжения нажмите любую клавишу . . . 681 if (exists($self->{append_levels}{$level->{level_name}})) { 682 my $dir = 'levels\\'.$level->{level_name}.''; 683 chdir ($dir) or die; 684 my $lg_file = IO::File->new('level.graph', 'w'); Возможно я ошибаюсь, но мне думается, дело в том, что пришлось переименовать второй файл section4.bin в section4nl.bin, иначе их никак в одной папке не разместишь... Но может и не в том дело, не знаю даже... Изменено 6 Марта 2020 пользователем mdm64 1 Ссылка на комментарий
naxac 2 477 Опубликовано 6 Марта 2020 Поделиться Опубликовано 6 Марта 2020 38 минут назад, mdm64 сказал: забыл, что лучшее враг хорошего... Просто скрипты написаны давно, для старых версий перла, поэтому на новых они не всегда работают. Попробуй stkutils обратно положить.. 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
mdm64 586 Опубликовано 6 Марта 2020 Поделиться Опубликовано 6 Марта 2020 (изменено) Так,ещё раз сделал не по инструкции, вытащил папку levels "наружу", вот лог. Скрытый текст D:\0\ggrc>perl ggrc.pl -g1 section4.bin,cop -l1 zaton,jupiter,pripyat,labx8,jupi ter_underground,darkvalley,digger_stash,l04u_labx18,military,agroprom,agroprom_u nderground,marsh,escape,red_forest,collector22 -g2 section4nl.bin,cop -l2 garbag e,limansk,yantar reading section4.bin... reading header... reading levels... reading vertices... reading edges... reading cross tables... cross table offset for zaton is 7499315 size = 11107554 cross table offset for jupiter is 18606869 size = 8917968 cross table offset for pripyat is 27524837 size = 2923578 cross table offset for labx8 is 30448415 size = 40734 cross table offset for jupiter_underground is 30489149 size = 246054 cross table offset for darkvalley is 30735203 size = 2165892 cross table offset for digger_stash is 32901095 size = 972 cross table offset for l04u_labx18 is 32902067 size = 45534 cross table offset for military is 32947601 size = 2311980 cross table offset for agroprom is 35259581 size = 2251446 cross table offset for agroprom_underground is 37511027 size = 32136 cross table offset for marsh is 37543163 size = 3173814 cross table offset for escape is 40716977 size = 3749754 cross table offset for red_forest is 44466731 size = 989022 cross table offset for collector22 is 45455753 size = 34668 reading section4nl.bin... reading header... reading levels... reading vertices... reading edges... reading cross tables... cross table offset for zaton is 8537660 size = 11107554 cross table offset for jupiter is 19645214 size = 8917968 cross table offset for pripyat is 28563182 size = 2923578 cross table offset for labx8 is 31486760 size = 40734 cross table offset for jupiter_underground is 31527494 size = 246054 cross table offset for darkvalley is 31773548 size = 2165892 cross table offset for digger_stash is 33939440 size = 972 cross table offset for l04u_labx18 is 33940412 size = 45534 cross table offset for military is 33985946 size = 2311980 cross table offset for agroprom is 36297926 size = 2251446 cross table offset for agroprom_underground is 38549372 size = 32136 cross table offset for marsh is 38581508 size = 3173814 cross table offset for escape is 41755322 size = 3749754 cross table offset for red_forest is 45505076 size = 989022 cross table offset for garbage is 46494098 size = 2148444 cross table offset for limansk is 48642542 size = 369192 cross table offset for yantar is 49011734 size = 886320 forming new graph... writing level graphs... writing new graph... writing levels... writing vertices... writing edges... writing level points... writing cross tables... writing cross tables for level zaton... writing cross tables for level jupiter... writing cross tables for level pripyat... writing cross tables for level labx8... writing cross tables for level jupiter_underground... writing cross tables for level darkvalley... writing cross tables for level digger_stash... writing cross tables for level l04u_labx18... writing cross tables for level military... writing cross tables for level agroprom... writing cross tables for level agroprom_underground... writing cross tables for level marsh... writing cross tables for level escape... writing cross tables for level red_forest... writing cross tables for level collector22... writing cross tables for level garbage... writing cross tables for level limansk... writing cross tables for level yantar... no need to update resource files done! D:\0\ggrc>pause Для продолжения нажмите любую клавишу . . . Вроде как получилось...Но сформировался файл game.graph.new, а не section4.bin.new.... Теперь что делать, распаковать section4.bin (кстати чем лучше?) и вставить в него game.graph.new или как-то ещё? Если можно, объясните этот пункт инструкции, не совсем понял, особенно на предмет тупого переименования: Скрытый текст 5) переименовываете game.graph.new в game.graph (ну или в section4.bin, если родительский граф у вас от ЗП), копируете level.ai и level.gct (если утлитика не совмещена с игрой) и запускаете с ними игру. И насчёт копирования не очень понял - у меня не появилось этих файлов (level.ai и level.gct). Изменено 6 Марта 2020 пользователем mdm64 Ссылка на комментарий
WolfHeart 705 Опубликовано 6 Марта 2020 Поделиться Опубликовано 6 Марта 2020 36 минут назад, mdm64 сказал: Папку из ggrc скопировал в c:\Perl 38 минут назад, WolfHeart сказал: Но сначала попробуй все же скопировать stkutils из ggRC в C:\Perl\lib, это проще и лишним не будет. 3 минуты назад, naxac сказал: Попробуй stkutils обратно положить.. Да дело не в ней, перл ее не читает, он читает ее из ggRC, так как он ее не удалял, а скопировал. Правда не туда скопировал, но это уже не важно, дело не в ней. Дело скорее всего в батнике. 1 AMD FX-8370 (8 X 4.35GHz); RAM 16Gb; MSI GTX 1070 (8Gb). Windows -10 PRO (х64) Ссылка на комментарий
mdm64 586 Опубликовано 6 Марта 2020 Поделиться Опубликовано 6 Марта 2020 (изменено) @WolfHeart, не туда это как? А куда нужно было? и ещё раз насчёт переименования section4.bin - это вообще здесь можно делать или нет? P.S. Прошу прощения за назойливые вопросы, но уж очень хочется по-человечески и подробно разобраться, в инструкциях уже почти разочаровался.... Изменено 6 Марта 2020 пользователем mdm64 Ссылка на комментарий
WolfHeart 705 Опубликовано 6 Марта 2020 Поделиться Опубликовано 6 Марта 2020 (изменено) 4 минуты назад, mdm64 сказал: не туда это как? Ты написал, что скопировал в c:\Perl, а нужно было в C:\Perl\lib. Но это уже не нужно, можешь ее вообще удалить из c:\Perl, так как она нормально читается из папки ggRC. Просто бывают случаи когда из папки утелиты перл не хочет читать stkutils и в таких случаях помогает перенос ее в C:\Perl\lib. Изменено 6 Марта 2020 пользователем WolfHeart 1 AMD FX-8370 (8 X 4.35GHz); RAM 16Gb; MSI GTX 1070 (8Gb). Windows -10 PRO (х64) Ссылка на комментарий
mdm64 586 Опубликовано 6 Марта 2020 Поделиться Опубликовано 6 Марта 2020 @WolfHeart, А, это просто неверно написал, разумеется в c:\Perl\Lib...прошу прощения за неточность... Ссылка на комментарий
WolfHeart 705 Опубликовано 6 Марта 2020 Поделиться Опубликовано 6 Марта 2020 1 минуту назад, mdm64 сказал: А, это просто неверно написал, разумеется в c:\Perl\Lib...прошу прощения за неточность... Ничего бывает. Ну тогда вопрос о том от куда перл читает папку stkutils остается открытым, но не важным, главное что читает. Можно конечно попробовать удалить папку stkutils из c:\Perl\Lib и тем самым убедиться что она читается или нет из ggRC, но это не столь важно. Дугрое дело на сколько правильно или не правильно работает сам скрипт ggRC. Но тут я тебе не помошник, я никогда им не пользовался, да и он мне без надобности. Предпочитаю SDK. 1 AMD FX-8370 (8 X 4.35GHz); RAM 16Gb; MSI GTX 1070 (8Gb). Windows -10 PRO (х64) Ссылка на комментарий
mdm64 586 Опубликовано 6 Марта 2020 Поделиться Опубликовано 6 Марта 2020 (изменено) @WolfHeart, Ты и так помогаешь много! За что я искренне благодарен! А по правильности скрипта - я делал по инструкции и по образцу скрипта в той же инструкции, так что сам не знаю. Попробовал поиском найти в тырнете что-то конкретное по ggRC, да бесполезно, ничего кроме нескольких версий утилиты без внятного описания не нашёл, увы... К тому же Яндекс, зараза, постоянно подменяет аббревиатуру утилиты при поиске, вместо "работа с утилитой ggrc" норовит искать "работа с утилитой ппКС" и выдаёт редкостную чушь... Изменено 6 Марта 2020 пользователем mdm64 1 Ссылка на комментарий
WolfHeart 705 Опубликовано 6 Марта 2020 Поделиться Опубликовано 6 Марта 2020 7 минут назад, mdm64 сказал: Ты и так помогаешь много! Чем могу. 1 AMD FX-8370 (8 X 4.35GHz); RAM 16Gb; MSI GTX 1070 (8Gb). Windows -10 PRO (х64) Ссылка на комментарий
mdm64 586 Опубликовано 6 Марта 2020 Поделиться Опубликовано 6 Марта 2020 19 минут назад, WolfHeart сказал: Предпочитаю SDK. Да я посмотрел, инструмент отличный, только вот не нашёл, как его пользовать для моих пока простых задач. А так да, если локацию, предмет или какое оружие инопланетное сварганить - штука незаменимая... Ссылка на комментарий
WolfHeart 705 Опубликовано 6 Марта 2020 Поделиться Опубликовано 6 Марта 2020 5 минут назад, mdm64 сказал: только вот не нашёл, как его пользовать для моих пока простых задач. Ну, в теории, конечно скриптом вроде как должно быть проще (не могу судить так как скриптом не пользовался). Но вот то, что првильно это делать все же с помощю СДК - это 100%. Присоединение новых локаций с помощью SDK 1 AMD FX-8370 (8 X 4.35GHz); RAM 16Gb; MSI GTX 1070 (8Gb). Windows -10 PRO (х64) Ссылка на комментарий
mdm64 586 Опубликовано 6 Марта 2020 Поделиться Опубликовано 6 Марта 2020 (изменено) Ну и надеюсь, последний глобальный вопрос по слиянию локаций - на добавленных локациях есть переходы. Переходы между новыми локациями, как я понимаю, сохраняются, поскольку они не затрагивают основных локаций. А вот с переходами с основных локаций на новые и обратно я не очень понял даже из инструкций. Конкретная ситуация такова, необходимо связать следующие переходы основных локаций и новых: 1. Кордон - Коллектор, Коллектор - Кордон. 2. Кордон - Свалка, Свалка - Кордон. Со Свалки далее идут переходы на Лиманск и Янтарь (и обратно), как я понимаю, с ними ничего делать не нужно (или я не прав?). Требуется связать переходы на локациях в п.1 и 2. При установке любого из минимодов с новыми локациями (1 - с локацией Коллектор,2 - с локациями Свалка, Лиманск, Янтарь) отдельно, переходы нормально действуют, то есть уже связаны с Кордоном и между собой. Требуется помощь по этому вопросу - где, что и как менять? @WolfHeart, У меня сразу ранее задававшийся вопрос - какие файлы новой локации требуются и куда их необходимо поместить для правильной работы (чтобы не проходить все этапы создания новой локации "с нуля")? При наличии этой информации я с большой долей вероятности смогу сделать нужное мне в SDK без больших проблем. И вот какой момент мне не совсем понятен - кроме слияния локаций в section4.bin требуется секции с переходами из дочернего alife_escape.ltx (например) прописать в родительский alife_escape.ltx , и при этом внести в них определённые изменения. Требуется инструкция по внесению необходимых изменений. Потому как, если я правильно понял инструкцию к ggrc, то там АИ-переходы связываются уже в подготовленных файлах вида alife_escape.ltx и результаты пишутся опять же в section4.bin: Скрытый текст АИ-переходы необходимы для оффлайн-навигации неписей между разными локациями. Выбираете два вертекса, один на одной локации, второй на другой, соединяете связью - переход для непися готов. Команда: ggrc.pl [-g1 <имя_графа,номер_билда>] [-ai <vertex1,vertex2>] -g1 <имя_графа,ключ_билда> - граф для добавления переходов -ai <vert1,vert2> - соединяемые вертексы, через запятую (без пробелов!). Пример: ggrc.pl -g1 game.graph,2215 -ai 14,134 На выходе получите файл типа game.graph.new_edge. Это геймграф с готовыми переходами. Больше ключей не нужно. Изменено 6 Марта 2020 пользователем mdm64 Ссылка на комментарий
naxac 2 477 Опубликовано 7 Марта 2020 Поделиться Опубликовано 7 Марта 2020 @mdm64, аи-переходы - это переходы между точками графа (вертексами) для перемещения нпс. Есть ещё левел-чейнджеры - они уже служат для перемещения актёра между уровнями. Добавлять нужно и те, и те. Левел-чейнджеры добавляются в спавн (section_name = level_changer), а аи-переходы - в граф (в section4.bin в твоём случае) 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
mdm64 586 Опубликовано 7 Марта 2020 Поделиться Опубликовано 7 Марта 2020 @naxac, Да, я это понял, благодарю! Просто недоговорил свою мысль... Переходы "обычные" (левел-чейнджеры), точнее секции с ними, я перенесу (к примеру) из дочернего alife_escape.ltx в родительский alife_escape.ltx, это легко. Порядковые номера перенесённых секций выставлю вручную в соответствии с нумерацией родительской секции alife_escape.ltx, это тоже просто... Но требуется, как я понял, ещё после такого дополнения родительского alife_escape.ltx поменять гейм-вертексы, левел-вертексы судя по всему остаются без изменений. И вот здесь я забуксовал... Если судить по многочисленным постам в темах, то геймвертекс для одной локации во всех секциях должен быть одинаковый, то есть это как бы уникальный идентификатор локации (что к слову, подтверждает старенькая ggtool, запустил её для общего развития и проверки указанного утверждения о геймвертексах). А вот если судить по тому, что я реально вижу в файлах alife_(имя локации), в том же alife_escape.ltx, то картина немного иная - да, значительная часть вертексов в секциях действительно соответствует значению вертекса, выдаваемого той же ggtool, но также немалая часть вертексов в секциях локации имеет совсем другие номера, что противоречит правилу единого гейм-вертекса для локации. Также непонятно, по какому принципу выставлены вертексы, отличные от общего "вертекса локации". Собственно, вопрос - чем и как определять и менять гейм-вертексы локаций (кроме нерекомендованного софта "gg........")? Также, как и чем (кроме ручного метода) определять и изменять диапазоны номеров для гейм-вертексов и номеров секций в файлах локаций? Потому как посмотрел и какой-то разумной последовательности увидел (например,номера секций некоторых локаций 4-значные, а некоторых 5-ти и 6-ти значные). Если что-то забыл спросить по данному вопросу, просьба указать и по возможности ответить... Ссылка на комментарий
naxac 2 477 Опубликовано 7 Марта 2020 Поделиться Опубликовано 7 Марта 2020 (изменено) @mdm64, это тебе нужно поменять все вертексы на новые. То есть, разобрать твой новый граф (section4.bin) и посмотреть новый начальный вертекс локации, а потом ко всем game_vertex_id в спавне на этом уровне (alife_локация.ltx) прибавить/отнять необходимое значение (разницу между старым и новым). То же сделать и с путями (если они тебе нужны) - way_локация.ltx. Я это делал луа-скриптом, полностью перезаписывая файлы. Есть вроде acdc с такой функцией, либо отдельный скрипт на перле. А переходам с локации надо будет изменить dest_-координаты, то есть координаты, на которые переходит ГГ через этот переход. Это если они останутся на прежних местах. Изменено 7 Марта 2020 пользователем naxac 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
mdm64 586 Опубликовано 7 Марта 2020 Поделиться Опубликовано 7 Марта 2020 (изменено) 46 минут назад, naxac сказал: @mdm64, А переходам с локации надо будет изменить dest_-координаты, то есть координаты, на которые переходит ГГ через этот переход. Это если они останутся на прежних местах. Вот здесь совсем не понял - зачем менять координаты точки назначения, если (например) на локации Кордон они уже прописаны и связаны с локацией, с которой есть переход на Кордон? Или даже при простом добавлении новой готовой локации координаты переходов уже готовые и связанные изменяются? И есть проблемка - вертексы двух добавляемых локаций оказались одинаковые , а потому даже ggtool одну из локаций в section4 не видит. Как этот вопрос решить? Это инструкция из шапки: Скрытый текст Зачем нужно: при изменении аи-сетки у объектов изменяются game_vertex_id и level_vertex_id. Это влечет за собой необходимость повторного снятия данных параметров в игре. Данный режим позволяет автоматически обновить вертексы у всех секций спавна. Команда: universal_acdc -update <spawn_name> [common_options] Команда: universal_acdc -update <spawn_name> [common_options] -update <spawn_name> - all.spawn, для которого надо обновить вертексы. Режим update требует дополнительной настройки. В папке с acdc есть файл fs_vertex.ltx В этот файл необходимо вписать путь до локаций с ОБНОВЛЕННОЙ аи-сеткой. Обязательно должны присутствовать файлы level.ai, level.gct для всех локаций из спавна. ВНИМАНИЕ! Для нормальной отработки режима геймграф должен быть СТАРЫЙ, использовавшийся до перекомпиляции. После нормальной отработки режима спавн можно распаковывать уже с НОВЫМ геймграфом. Просьба - Можно немного более доходчиво объяснить её применительно к моему случаю? Если я правильно понимаю, это как раз то, о чём я спрашивал выше (или я не прав?). Установил СДК, настроил по инструкции, посмотрел несколько видеоуроков... Везде одно и то же - декомпилируется в СДК новая локация, вычищается от всех спав-элементов, которых нет в базе СДК (по сути делается пустой), после чего её можно заселить и компилировать в игру. Нигде нет инструкции по элементарному подключению готовых и рабочих, уже настроенных локаций на одной платформе без кардинальных изменений в её содержании. Более того, везде рассматриваются только случаи портирования локаций с других платформ. Как я понял, даже досконально изучив СДК, для моих задач этот инструмент бесполезен абсолютно. Если я что-то не понял, с удовольствием выслушаю авторитетное мнение опытных форумчан... Изменено 7 Марта 2020 пользователем mdm64 Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти