Red_Noise 10 Posted June 11, 2021 Доброго времени суток! Собственно вопрос наверное изъезжен, но что-то не осилил гугл и чужие исходники. Камрады подскажите чем расшифровать xml из клиента игры? Ну или ткните в тему где это описано) Если есть где-то исходники на 3-м python вообще идеально. Зачем? - у меня есть батник которым перекрашиваю свой собственный пак иконок, все бы ничего, но он дергает кучу сторонней фигни, exe от архиватора, ccatlas, exe-макросы фотошопа, хочется привести это в порядок, да и заколебался его править под версию игры. Хочется чтобы скрипт дергал все нужные пути прямо из клиента игры. Спасибо. Quote Share this post Link to post Short link Share on other sites
MoD 33 #503796 Posted June 11, 2021 PjOrion возьми, тут где-то на форуме есть в закреплённых темах. Ещё и из консоли умеет работать Quote Share this post Link to post Short link Share on other sites
Valberton 145 #503813 Posted June 12, 2021 14 часов назад, Red_Noise сказал: Доброго времени суток! Собственно вопрос наверное изъезжен, но что-то не осилил гугл и чужие исходники. Камрады подскажите чем расшифровать xml из клиента игры? Ну или ткните в тему где это описано) Если есть где-то исходники на 3-м python вообще идеально. Зачем? - у меня есть батник которым перекрашиваю свой собственный пак иконок, все бы ничего, но он дергает кучу сторонней фигни, exe от архиватора, ccatlas, exe-макросы фотошопа, хочется привести это в порядок, да и заколебался его править под версию игры. Хочется чтобы скрипт дергал все нужные пути прямо из клиента игры. Спасибо. PjOrion - редактирование, компиляция, декомпиляция, обфускация модов (Версия: 1.3.5 Дата: 11.08.2019) - ActionScript & Python - Korean Random 1 Quote Share this post Link to post Short link Share on other sites
Red_Noise 10 #503832 Posted June 12, 2021 (edited) @MoD @VLBRTN господа, PjOrion это клево возможно даже в исходниках найду что мне нужно, но хотелось немного другого ответа. Я как раз хочу избавиться от вызова других exe-шников, чтобы не было таких зависимостей у скрипта. Все что делает скрипт можно переписать на python, вопрос у меня только в декодировании xml из клиента. Edited June 12, 2021 by Red_Noise Quote Share this post Link to post Short link Share on other sites
MoD 33 #503834 Posted June 12, 2021 Эммм, ну тогда найди сорцы бигволда на просторах интернета, там есть волшебный файлик "file_formats" - там есть описание структуры, можно по нему парсер написать альтернативно - сорцы wottools туть https://github.com/katzsmile/WoTModTools там есть исходники как оно парсит 2 Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #503849 Posted June 13, 2021 мой распаковщик/паковщик xml на питоне: https://bitbucket.org/SkepticalFox/wot-space.bin-utils/src/master/compiled_space/xml_utils/ 3 Quote Share this post Link to post Short link Share on other sites
beb 104 #503890 Posted June 14, 2021 (edited) Пользуюсь инструментом командной строки https://github.com/hedger/BWXML (соответственно, исходники открыты) "BWXML A tool for unpacking BigWorld compressed data sections to plain XML. Also supports packing XML back to its compressed form." BWXML v1.04 by hedger Usage: bwxml.exe [options] list_of_files_or_directories Allowed options: --help produce help message --pack pack files instead of unpacking --verbose print information about each file --selftest perform reversed operation on produced files --threads arg (=9) sets the size of a worker pool. Default = n_cpu_cores + 1 --input arg input files/directories --output arg (=decrypted/) directory to output files пример использования (распаковка ресурса engine_config.xml в произвольную папку vanilla): md vanilla 2>nul bwxml.exe --i %wot_folder%\res\engine_config.xml --o vanilla Edited June 14, 2021 by beb 3 Quote Share this post Link to post Short link Share on other sites
Mixaill 1,740 #503897 Posted June 14, 2021 Ещё один распаковщик с C API https://gitlab.com/xvm/xvm-extensions/xfw.extensionlib/-/tree/master/src_cpp/module_bwxml 5 Quote Share this post Link to post Short link Share on other sites
Red_Noise 10 #503932 Posted June 15, 2021 (edited) @SkepticalFoxспасибо, именно то что нужно. @Mixaill, @beb до C не дошел, но может поможет следующим ищущим. Так же спасибо всем неравнодушным, вопрос решен. Edited June 15, 2021 by Red_Noise Quote Share this post Link to post Short link Share on other sites
Red_Noise 10 #504018 Posted June 18, 2021 (edited) Мало ли кто-то еще захочет упороться по формату, тут собсно почти все что нужно https://github.com/v2v3v4/BigWorld-Engine-2.0.1/blob/master/src/lib/resmgr/packed_section.cpp Edited June 18, 2021 by Red_Noise 1 Quote Share this post Link to post Short link Share on other sites
Red_Noise 10 #509100 Posted October 1, 2021 В продолжение, хотя может и немного оффтопно, случайно никто не знает какой-нибудь python библиотеки которая умеет сохранять в DDS? Что успел нагуглить - ImageMagic, но его как-то не хочется ставить только ради сохранения. Пока остановился на Pillow + blend-modes + nvtt_export.exe (NVIDIA Texture Tools), но мне не нравится костыль с subprocess.run и гемор в запуске на Linux если созрею куда-то выложить. Скорость не принципиальна, а если будет реализация на чистом python вообще отлично, еще и поучиться на коде смогу))) Quote Share this post Link to post Short link Share on other sites
beb 104 #509368 Posted October 5, 2021 (edited) On 10/2/2021 at 1:18 AM, Red_Noise said: ImageMagic, но его как-то не хочется ставить только ради сохранения. А что там ставить? Из всего пакета достаточно извлечь и использовать только magick.exe, ну и identify.exe, если на каком то этапе потребуются расширенная информация о содержимом. конвертация png в dds: :: convert png to dds magick test.png -define dds:compression=dxt1 test.dds информаци о dds: Setlocal EnableDelayedExpansion :: identify dds for %%d in (*.dds) do ( set dds=%%~nd identify -verbose !dds!.dds > !dds!_dds_info.txt ) вставка картинки png (insert.png) в полотно dds (input.dds) по заданным координатам xy (левого верхнего угла png относительно левого верхнего угла dds): @echo off setlocal enabledelayedexpansion REM preparing dds canvas magick input.dds -define dds:mipmaps=0 -define dds:compression=dxt1 composite.dds REM composite by coordinates set xy=100100 200200 300300 for %%c in (%xy%) do (set coo=%%c set x=!coo:~0,3! set y=!coo:~-3! magick composite.dds insert.png -define dds:mipmaps=0 -define dds:compression=dxt1 -gravity NorthWest -geometry +!x!+!y! -composite composite.dds ) Edited October 6, 2021 by beb Quote Share this post Link to post Short link Share on other sites
Red_Noise 10 #509679 Posted October 12, 2021 (edited) @beb вообще я имел ввиду библиотеку Wand которая по сути биндинг к ImageMagick, просто переклинило написал так. А в вашем варианте для моей задачи абсолютно не важно будет это nvtt_export.exe или magick.exe. Мне библиотека нужна чтобы минимум писать на диск, из-за dds не получается полностью в памяти изображения обрабатывать, png можно налету прочитать из .pkg, обработать и уже готовый результат записать в .wotmod. Edited October 12, 2021 by Red_Noise Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #509680 Posted October 12, 2021 (edited) @Red_Noise вообще для dds есть не так много библиотек, я использую эту https://www.evl.uic.edu/cavern/fastdxt/ она супер быстрая и нужна для realtime сжатия текстур для virtual textures есть даже публикация по сравнению скорости библиотек (dxt compression) конечно для python я не видел библиотек, но что мешает написать обертку (или через ctypes работать) для .NET я так и сделал - написал managed C++/CLI обертку над FastDXT P.S. FastDXT не пишет header dds файла, надо его добавлять самому, но это тривиально P.P.S. в windows еще есть такая тема: Quote Specifying the FILE_ATTRIBUTE_TEMPORARY attribute causes file systems to avoid writing data back to mass storage if sufficient cache memory is available, because an application deletes a temporary file after a handle is closed. In that case, the system can entirely avoid writing the data. Although it does not directly control data caching in the same way as the previously mentioned flags, the FILE_ATTRIBUTE_TEMPORARY attribute does tell the system to hold as much as possible in the system cache without writing and therefore may be of concern for certain applications. так что я не думаю что создавать файл прямо какой-то супер медленный вариант Edited October 15, 2021 by SkepticalFox 1 Quote Share this post Link to post Short link Share on other sites
Red_Noise 10 #511589 Posted November 22, 2021 12.10.2021 в 20:56, SkepticalFox сказал: конечно для python я не видел библиотек, но что мешает написать обертку (или через ctypes работать) для .NET я так и сделал - написал managed C++/CLI обертку над FastDXT Спасибо! Да я только начал на питоне писать, до этого не было опыта, только мелкие скрипты))) Но вообще хотелось попробовать написать обертку. Думаю будет следующим шагом. Сейчас пока в асинхронную часть вникаю, но это уже оффтоп) Quote Share this post Link to post Short link Share on other sites