Skip to content

OpenDBO/BinTable

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BinTable

现代化游戏数据表格编辑器

采用 C++ 后端 + Avalonia UI 的分离架构设计

.NET Avalonia C++ License

English | 中文


截图预览

表格选择 表格编辑器
表格选择 表格编辑器

功能特性

  • 二进制表格解析: 支持自定义 Schema 定义的二进制数据文件读写
  • 现代化 UI: 基于 Avalonia 的跨平台界面,支持 Light/Dark 主题切换
  • 多语言支持: 内置中英文界面切换
  • 版本控制: 自动备份、变更追踪、历史版本恢复
  • 图标显示: 支持记录图标预览(自动匹配资源目录)
  • 灵活配置: 可配置 ID/名称/图标字段,支持额外搜索字段
  • 头部编辑器: 十六进制头部数据查看与编辑
  • 记录管理: 支持添加、复制、删除记录

架构特性

解耦设计

  • C++ 核心引擎: 专注于数据处理和二进制解析
  • Avalonia UI: 现代化跨平台界面
  • Schema 驱动: JSON Schema 定义表格结构,运行时反射

技术栈

组件 技术
后端 C++17 + nlohmann/json
前端 C# + Avalonia 11 + Semi.Avalonia
架构 MVVM + ReactiveUI
平台 Windows / Linux / macOS

项目结构

BinTable/
├── BinTable.Core/          # C++ 后端 (DLL)
│   ├── include/BinTable/   # 头文件
│   │   ├── Api.h           # C API 导出接口
│   │   ├── Schema.h        # Schema 解析
│   │   ├── Table.h         # 表格数据容器
│   │   ├── TableEngine.h   # 表格引擎
│   │   └── Types.h         # 类型定义
│   ├── src/                # 源文件
│   ├── third_party/        # 第三方库 (nlohmann/json)
│   ├── test/               # 测试程序
│   └── CMakeLists.txt      # CMake 配置
│
├── BinTable.UI/            # C# 前端 (Avalonia)
│   ├── Views/              # XAML 视图
│   ├── ViewModels/         # MVVM 视图模型
│   ├── Services/           # 业务服务
│   │   ├── ConfigService       # 配置管理
│   │   ├── HistoryService      # 版本历史
│   │   ├── IconService         # 图标加载
│   │   ├── LocalizationService # 多语言
│   │   ├── TableService        # 表格服务
│   │   └── ThemeService        # 主题切换
│   ├── Interop/            # P/Invoke 声明
│   ├── Models/             # 数据模型
│   └── BinTable.UI.csproj
│
├── schemas/                # Schema 定义文件
├── data/rdf/               # 数据文件目录
├── png/                    # 截图资源
└── README.md

快速开始

1. 编译 C++ 后端

cd BinTable.Core
mkdir build && cd build
cmake ..
cmake --build . --config Release

生成 BinTable.Core.dll

2. 添加依赖库

下载 json.hppBinTable.Core/third_party/nlohmann/

3. 运行 C# 前端

cd BinTable.UI
dotnet restore
dotnet run

注意: 需要将 BinTable.Core.dll 复制到输出目录

4. 发布独立可执行文件

cd BinTable.UI
dotnet publish -c Release

Schema 格式

Schema 使用 JSON 定义表格结构:

{
  "name": "WorldTable",
  "displayName": "世界表",
  "binaryFile": "Table_World_Data.rdf",
  "alignment": 4,
  "headerSize": 4,
  "fields": [
    {
      "name": "tblidx",
      "displayName": "ID",
      "type": "uint32",
      "key": true
    },
    {
      "name": "szName",
      "type": "string",
      "size": 33
    },
    {
      "name": "vStart",
      "type": "vector3"
    },
    {
      "name": "values",
      "type": "array",
      "elementType": "int32",
      "count": 5
    }
  ]
}

支持的字段类型

类型 别名 说明 大小
int8 char, byte 有符号 8 位整数 1
uint8 uchar, ubyte, BYTE 无符号 8 位整数 1
int16 short 有符号 16 位整数 2
uint16 ushort, WORD 无符号 16 位整数 2
int32 int, long 有符号 32 位整数 4
uint32 uint, ulong, DWORD, TBLIDX 无符号 32 位整数 4
int64 longlong 有符号 64 位整数 8
uint64 ulonglong, QWORD 无符号 64 位整数 8
float single 32 位浮点数 4
double - 64 位浮点数 8
bool boolean 布尔值 1
string str, ansi ANSI 字符串 需指定 size
wstring wstr, unicode, WCHAR Unicode 字符串 需指定 size
vector2 vec2, float2 float[2] 8
vector3 vec3, float3, CNtlVector float[3] 12
vector4 vec4, float4 float[4] 16
bytes binary, blob 原始字节 需指定 size
array array1d 一维数组 需指定 elementType + count
array2d - 二维数组 需指定 elementType + count + count2

数组显示模式

数组支持通过 displayMode 属性设置三种显示模式:

模式 说明 示例
expanded 逐元素展开显示(默认) test[0]: 1, test[1]: 2, test[2]: 3
compact 以逗号分隔的字符串显示 test[3]: "1,2,3"
rowExpanded 二维数组按行展开 test[0][x]: "1,2", test[1][x]: "3,4"

API 使用

C++ 使用

#include "BinTable/Api.h"

// 创建引擎
auto handle = BinTable_Create();
BinTable_Initialize(handle, "schemas", "data/rdf");

// 打开表格
BinTable_OpenTable(handle, "WorldTable");

// 读取数据
int count = BinTable_GetRecordCount(handle);
const char* json = BinTable_GetRecord(handle, 0);
// 使用 json...
BinTable_FreeString(json);

// 清理
BinTable_Destroy(handle);

C# 使用

using BinTable.UI.Services;

var service = new TableService();
service.Initialize("schemas", "data/rdf");

service.OpenTable("WorldTable");
var count = service.GetRecordCount();
var json = service.GetRecordJson(0);

service.Dispose();

数据流

┌─────────────────┐     JSON      ┌─────────────────┐
│   Avalonia UI   │◄────────────►│  BinTable.Core  │
│   (C# MVVM)     │   P/Invoke   │  (C++ DLL)      │
└─────────────────┘               └─────────────────┘
                                          │
                              Schema ─────┼───── Binary
                              (.json)     │     (.rdf)
                                          ▼
                                  ┌───────────────┐
                                  │   文件系统    │
                                  └───────────────┘

开发计划

  • 核心架构搭建
  • Schema 解析
  • 二进制读写
  • C API 导出
  • P/Invoke 封装
  • 基础 UI 框架
  • 字段编辑功能
  • 多语言支持 (中/英)
  • 主题切换 (Light/Dark)
  • 版本历史与备份恢复
  • 图标显示支持
  • 变更追踪与差异查看
  • 记录添加/删除/复制
  • AOT 发布支持
  • 数组类型支持 (一维/二维)
  • 变长字符串支持
  • 嵌套结构体支持
  • 嵌套结构内一维数组
  • 撤销/重做

许可证

MIT License

About

Open source editor for binary tables.

Resources

Stars

Watchers

Forks

Packages

No packages published