168 lines
5.4 KiB
Markdown
168 lines
5.4 KiB
Markdown
### 数据定义使用文档
|
|
|
|
#### 1. 文件夹结构
|
|
程序在启动时会读取程序所在文件夹中的以下两个文件夹:
|
|
- **Data**:包含游戏的核心数据定义。
|
|
- **Mods**:包含用户或开发者创建的扩展模块。
|
|
|
|
每个文件夹下的子文件夹被视为一个独立的模块,但模块之间可以互相引用。推荐的文件夹结构如下:
|
|
```
|
|
root/
|
|
├── Data/
|
|
│ ├── Pack1/
|
|
│ │ ├── About/
|
|
│ │ ├── Define/
|
|
│ │ └── Translation/
|
|
│ └── Pack2/
|
|
│ ├── About/
|
|
│ ├── Define/
|
|
│ └── Translation/
|
|
└── Mods/
|
|
├── Mod1/
|
|
│ ├── About/
|
|
│ ├── Define/
|
|
│ └── Translation/
|
|
└── Mod2/
|
|
├── About/
|
|
├── Define/
|
|
└── Translation/
|
|
```
|
|
|
|
#### 2. XML 文件类型及用途
|
|
XML 文件根据根属性名分为三种类型:
|
|
- **Define**:用于定义游戏中的数据类型和具体实例。
|
|
- **About**:用于描述模块的基本信息(如名称、版本、依赖关系等)。
|
|
- **Translation**:用于提供多语言支持的翻译内容。
|
|
|
|
---
|
|
|
|
### 3. Define 定义
|
|
#### 3.1 根节点
|
|
根节点的属性名为 `Define`,表示这是一个数据定义文件。例如:
|
|
```xml
|
|
<Define>
|
|
<!-- 数据定义内容 -->
|
|
</Define>
|
|
```
|
|
|
|
#### 3.2 数据块结构
|
|
每个数据块通常包含以下部分:
|
|
- **defName**:该数据块的唯一标识符(在同一类型中必须唯一)。
|
|
- **字段定义**:通过字段名和值为对应的类变量赋值。
|
|
- **引用**:通过 `defName` 引用其他数据块。
|
|
|
|
#### 3.3 示例解析
|
|
以下是一个典型的 `Define` 文件示例:
|
|
|
|
```xml
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<Define>
|
|
<AttributesDef>
|
|
<defName>CatGirl</defName>
|
|
<health>100</health>
|
|
<speed>1.2</speed>
|
|
<strength>5</strength>
|
|
</AttributesDef>
|
|
|
|
<CharacterDef>
|
|
<defName>CatGirl</defName>
|
|
<label>CatGirl</label>
|
|
<description>She is a cat girl with agile movements and sharp senses.</description>
|
|
<attributes>CatGirl</attributes> <!-- 引用 AttributesDef 类型的数据块 -->
|
|
|
|
<drawingOrder_down>CatGirl_down</drawingOrder_down> <!-- 引用 DrawingOrderDef 类型的数据块 -->
|
|
<drawingOrder_left>CatGirl_left</drawingOrder_left>
|
|
<drawingOrder_right>CatGirl_right</drawingOrder_right>
|
|
<drawingOrder_up>CatGirl_up</drawingOrder_up>
|
|
</CharacterDef>
|
|
|
|
<DrawingOrderDef>
|
|
<defName>CatGirl_down</defName>
|
|
<DrawNodeDef name="body">
|
|
<DrawNodeDef name="head">
|
|
<DrawNodeDef name="backHair"/>
|
|
<DrawNodeDef name="ear"/>
|
|
<DrawNodeDef name="face"/>
|
|
<DrawNodeDef name="frontHair"/>
|
|
<DrawNodeDef name="hat"/>
|
|
</DrawNodeDef>
|
|
<DrawNodeDef name="clothes"/>
|
|
</DrawNodeDef>
|
|
</DrawingOrderDef>
|
|
</Define>
|
|
```
|
|
|
|
#### 3.4 加载流程
|
|
1. **索引建立**:程序加载时会依次读取所有 `Define` 文件,并记录每个数据块的 `defName` 和类型。
|
|
2. **引用连接**:在所有数据块加载完成后,程序会根据 `defName` 连接引用关系。
|
|
|
|
---
|
|
|
|
### 4. About 定义
|
|
#### 4.1 根节点
|
|
根节点的属性名为 `About`,表示这是一个模块的介绍文件。例如:
|
|
```xml
|
|
<About>
|
|
<!-- 模块信息 -->
|
|
</About>
|
|
```
|
|
|
|
#### 4.2 字段说明
|
|
| 字段名 | 描述 |
|
|
|--------------|----------------------------------------------------------------------|
|
|
| `name` | 模块名称。 |
|
|
| `description` | 模块的详细描述。 |
|
|
| `version` | 模块版本号。 |
|
|
| `packID` | 模块的唯一标识符,用于区分不同模块。 |
|
|
| `sort` | 模块加载顺序配置,包含 `before` 和 `after` 两个子字段,分别指定优先加载的模块和后加载的模块。 |
|
|
|
|
#### 4.3 示例解析
|
|
以下是一个典型的 `About` 文件示例:
|
|
|
|
```xml
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<About>
|
|
<name>核心</name>
|
|
<description>这是游戏的核心模块,除非有完整的代替,否则应该永远作为启动项</description>
|
|
<version>0.1</version>
|
|
<packID>core</packID>
|
|
<sort>
|
|
<before></before> <!-- 优先于哪些模块加载 -->
|
|
<after></after> <!-- 在哪些模块之后加载 -->
|
|
</sort>
|
|
</About>
|
|
```
|
|
|
|
---
|
|
|
|
### 5. Translation 定义
|
|
#### 5.1 根节点
|
|
根节点的属性名为 `Translation`,表示这是一个翻译文件。例如:
|
|
```xml
|
|
<Translation>
|
|
<!-- 翻译内容 -->
|
|
</Translation>
|
|
```
|
|
|
|
#### 5.2 字段说明
|
|
翻译文件中的每个字段以点号分隔的形式表示路径,格式为:
|
|
```
|
|
<类型名>.<defName>.<字段名>
|
|
```
|
|
例如:
|
|
```
|
|
CharacterDef.CatGirl.label
|
|
```
|
|
|
|
#### 5.3 示例解析
|
|
以下是一个典型的 `Translation` 文件示例:
|
|
|
|
```xml
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
<Translation>
|
|
<CharacterDef.CatGirl.label>猫娘</CharacterDef.CatGirl.label>
|
|
<CharacterDef.CatGirl.description>她是一个猫娘,拥有猫的特性和人类的智慧。她的耳朵和尾巴显示了她的猫族血统。</CharacterDef.CatGirl.description>
|
|
</Translation>
|
|
```
|
|
|