Files

5.4 KiB

数据定义使用文档

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,表示这是一个数据定义文件。例如:

<Define>
    <!-- 数据定义内容 -->
</Define>

3.2 数据块结构

每个数据块通常包含以下部分:

  • defName:该数据块的唯一标识符(在同一类型中必须唯一)。
  • 字段定义:通过字段名和值为对应的类变量赋值。
  • 引用:通过 defName 引用其他数据块。

3.3 示例解析

以下是一个典型的 Define 文件示例:

<?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,表示这是一个模块的介绍文件。例如:

<About>
    <!-- 模块信息 -->
</About>

4.2 字段说明

字段名 描述
name 模块名称。
description 模块的详细描述。
version 模块版本号。
packID 模块的唯一标识符,用于区分不同模块。
sort 模块加载顺序配置,包含 beforeafter 两个子字段,分别指定优先加载的模块和后加载的模块。

4.3 示例解析

以下是一个典型的 About 文件示例:

<?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,表示这是一个翻译文件。例如:

<Translation>
    <!-- 翻译内容 -->
</Translation>

5.2 字段说明

翻译文件中的每个字段以点号分隔的形式表示路径,格式为:

<类型名>.<defName>.<字段名>

例如:

CharacterDef.CatGirl.label

5.3 示例解析

以下是一个典型的 Translation 文件示例:

<?xml version="1.0" encoding="utf-8"?>
<Translation>
    <CharacterDef.CatGirl.label>猫娘</CharacterDef.CatGirl.label>
    <CharacterDef.CatGirl.description>她是一个猫娘,拥有猫的特性和人类的智慧。她的耳朵和尾巴显示了她的猫族血统。</CharacterDef.CatGirl.description>
</Translation>