# commonResourceExtractor **Repository Path**: laudasur/common-resource-extractor ## Basic Information - **Project Name**: commonResourceExtractor - **Description**: 基于dll/lua插件技术的通用游戏资源解包器 - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2026-03-30 - **Last Updated**: 2026-03-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # commonResourceExtractor 参考了痴汉公贼的crass++解包器程序设计: https://gitee.com/h128/Crass-source 顶想云文档 ## 编译 1. 安装mingw 2. 安装xmake 3. xmake build 需要32位请手动编译 ## 切换debug release 1. xmake f -m release 2. xmake f -m debug ## 使用 ```bash commonResourceExtractor.exe [参数] commonResourceExtractor -f 指定要转换的单个文件 commonResourceExtractor -p 指定要批量转换的目录 commonResourceExtractor -path 指定要批量转换的目录 commonResourceExtractor -o 指定输出的目录(默认output) commonResourceExtractor --output 指定输出的目录(默认output) commonResourceExtractor -P 使用特定的插件解包(插件名为源码中注册的插件名,参考 MYDAT插件的第95行std::string pluginName = "MYDAT") commonResourceExtractor --plugin 使用特定的插件解包(插件名为源码中注册的插件名,参考 MYDAT插件的第95行std::string pluginName = "MYDAT") commonResourceExtractor --list 显示所有已安装插件信息 commonResourceExtractor --version 显示版本信息 commonResourceExtractor -V 显示版本信息 commonResourceExtractor --verbose是否开启详细输出 commonResourceExtractor -m [pluginMode] 插件模式,lua或者dll; commonResourceExtractor --mode [pluginMode] 插件模式,lua或者dll; ``` ## 注意 使用特定插件进行解包时,如果是dll模式,--plugin参数的值必须为源码中注册的插件名,参考 MYDAT插件的第95行std::string pluginName = "MYDAT"), 如果是lua模式,--plugin参数的值必须为lua脚本文件名如test.lua ## 关于dll插件的开发 1. 参考plugin/MYDAT/MYDAT.cpp ```c++ #include "../../include/plugin.h" #include "../../include/plugin_error.h" // 必须实现的函数 extern "C" __declspec(dllexport) void show_plugin_info(struct plugin_information *info); extern "C" __declspec(dllexport) int register_plugin(struct plugin_register_callback *callback); /* 封包处理回调函数集合 */ static plugin_ext_operation; // 封包处理回调函数集合原型 这些函数必须实现,或者未实现的使用NULL参数填充 struct plugin_ext_operation { bool (*match)(std::string& fileName); /* 是否支持该封包 */ int (*extract_directory)(std::string dirName); /* 提取directory数据 */ int (*extract_resource)(std::string package_path,std::string output_dir); /* 提取资源文件数据 */ int (*save_resource)(const char *fileName); /* 保存资源数据 */ void (*release)(std::ifstream fin); /* 释放相关资源 */ }; ``` ## 关于lua插件开发 1. 参考lua/MYDAT.lua 2. 参考lua/test_use_cpp_parse_binary_file.lua ## 关于lua插件的内置二进制文件处理模块 1. 参考src/lua_plugin/binary_parser.cpp 在lua用表定义二进制文件结构,然后调用binary_parser的函数进行解包 对于更加细节的处理优先推荐开发和使用dll插件,lua插件适用于快速开发(但是没有dll插件那么功能强大)