Files
config_Test/quest_schema.md
2026-05-28 20:23:32 +08:00

351 lines
9.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Quest 表数据建模文档
## 1. 表概述
`quest` 表用于存储游戏中的任务数据,包括主线任务、日常任务、周常任务、成就等多种任务类型。
## 2. 字段定义
### 2.1 字段列表
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|--------|------|------|--------|------|
| id | int | 是 | - | 任务唯一标识 |
| category | int | 是 | - | 任务类型 |
| next | int | 否 | 0 | 下一个任务ID |
| desc | string | 是 | - | 任务描述 |
| type | int | 是 | - | 任务行为类型 |
| target | int | 是 | - | 任务目标值 |
| openUI_type | int | 是 | - | 界面跳转类型 |
| openUI_desc | string | 是 | - | 界面跳转描述 |
| rewards | string[] | 否 | - | 任务奖励 |
| score | int | 是 | 0 | 任务积分 |
| auto | int | 是 | 0 | 自动领奖标识 |
| extra | string | 否 | null | 额外数据 |
### 2.2 字段详细定义
#### 2.2.1 id 字段
**类型**: int
**约束**: 必须唯一,不允许重复
**构成规则**: `category类型数字 + 4位序号从0001开始`
**格式示例**:
- category=1(主线) → 10001, 10002, 10003...
- category=2(日常) → 20001, 20002, 20003...
- category=9(成就) → 90001, 90002, 90003...
**校验规则**:
- 必须为5位数字
- 第一位必须与category字段匹配
- 后四位必须从0001开始连续递增
#### 2.2.2 category 字段(任务类型)
**类型**: int
**约束**: 枚举值
**允许值**:
| 值 | 描述 |
|----|------|
| 1 | 主线任务 |
| 2 | 日常任务 |
| 3 | 通行证任务 |
| 4 | 修炼任务 |
| 5 | 周常任务 |
| 6 | 公会任务 |
| 7 | 委托任务 |
| 8 | 称号任务 |
| 9 | 成就任务 |
| 10 | 七日任务 |
#### 2.2.3 next 字段
**类型**: int
**约束**: 非负整数根据category字段决定
**填写规则**:
1. 当category=1(主线任务)时:
- 如果存在后续任务填写下一个任务的ID
- 如果不存在后续任务当前为流程终点填写0
2. 当category≠1时
- 无论是否存在后续任务统一填写0
**说明**:
- 表示当前任务完成后解锁的下一个任务ID
- 值为0表示没有后续任务或当前任务分类不需要链式任务
#### 2.2.4 desc 字段(任务描述)
**类型**: string
**约束**: 必须与type和target字段关联
**生成规则**: `type字段对应的中文描述 + target字段的数值格式化后+ 单位`
**数值单位转换规则**:
- 当数值 >= 1000000001亿转换为"亿"为单位保留整数例如500000000 → "5亿"
- 当数值 >= 100001万且 < 1000000001亿转换为"万"为单位保留整数例如9000000 → "900万"
- 当数值 < 100001万保持原数值例如1000 → "1000"
**文本格式规范**:
- 所有描述文本必须以中文句号"。"结尾
- 不得使用英文句号"."或其他符号结尾
**示例**:
- type=9(消耗X金币), target=1000 → "消耗1000金币。"
- type=9(消耗X金币), target=9000000 → "消耗900万金币。"
- type=9(消耗X金币), target=500000000 → "消耗5亿金币。"
- type=1(招募X次), target=5 → "招募5次。"
**校验规则**:
- desc字段必须能通过type和target字段反向推导验证
- 必须符合数值单位转换规则
- 必须以中文句号"。"结尾
#### 2.2.5 type 字段(任务行为类型)
**类型**: int
**约束**: 枚举值根据category字段决定取值范围
**允许值及对应描述category≠9时**:
| 值 | 描述 |
|----|------|
| 1 | 招募X次 |
| 2 | 英雄升级X次 |
| 3 | 英雄升阶X次 |
| 4 | 主角升级X次 |
| 5 | 装备升级X次 |
| 6 | 通过X关主线关卡 |
| 7 | 通过X波敌人 |
| 8 | 商店消费X次 |
| 9 | 消耗X金币 |
| 10 | 消耗X钻石 |
| 11 | 登录X天 |
| 12 | 开X次宝箱 |
| 13 | 挑战X次副本 |
| 14 | 挑战X次竞技场 |
| 15 | 获得X个英雄 |
| 16 | 领取X次游历奖励 |
| 17 | 世界频道发言X次 |
**允许值及对应描述category=9成就任务时**:
| 值 | 描述 |
|----|------|
| 1 | 累计招募X次 |
| 2 | 英雄累计升级X次 |
| 3 | 英雄累计升阶X次 |
| 4 | 主角累计升级X次 |
| 5 | 装备累计升级X次 |
| 6 | 累计通关X关主线关卡 |
| 7 | 累计通关X波敌人 |
| 8 | 商店累计消费X次 |
| 9 | 累计消耗X金币 |
| 10 | 累计消耗X钻石 |
| 11 | 累计登录X天 |
| 12 | 无X |
| 13 | 累计挑战副本X次 |
| 14 | 累计挑战竞技场X次 |
| 15 | 累计获得X位英雄 |
| 16 | 累计领取X次挂机奖励 |
| 17 | 累计消耗X秒 |
| 18 | 累计点赞好友X次 |
| 19 | 累计英雄委托X次 |
| 20 | 累计击败X个敌人 |
| 21 | 战力达到X万 |
| 22 | 主角到达X阶 |
| 23 | 累计委托X次 |
#### 2.2.6 target 字段(任务目标值)
**类型**: int
**约束**: 正整数
**说明**: 存储任务目标的具体数值,如"招募5次"中的5
#### 2.2.7 openUI_type 字段(界面跳转类型)
**类型**: int
**约束**: 枚举值由type字段决定
**允许值及对应描述**:
| 值 | 描述 |
|----|------|
| 1 | UI_MainPanel |
| 2 | UI_DrawCardPanel |
| 3 | UI_ShopPanel |
| 4 | UI_FBPanel |
| 5 | UI_IdlePanel |
| 6 | UI_ChatPanel |
| 7 | UI_EquipPanel |
| 8 | UI_HeroPanel |
| 9 | UI_FriendPanel |
| 10 | UI_ArePanel |
**type与openUI_type映射关系**:
| type | openUI_type | openUI_desc |
|------|-------------|-------------|
| 1 | 2 | UI_DrawCardPanel |
| 2 | 8 | UI_HeroPanel |
| 3 | 8 | UI_HeroPanel |
| 4 | 8 | UI_HeroPanel |
| 5 | 7 | UI_EquipPanel |
| 6 | 1 | UI_MainPanel |
| 7 | 1 | UI_MainPanel |
| 8 | 3 | UI_ShopPanel |
| 9 | 3 | UI_ShopPanel |
| 10 | 3 | UI_ShopPanel |
| 11 | 1 | UI_MainPanel |
| 12 | 1 | UI_MainPanel |
| 13 | 4 | UI_FBPanel |
| 14 | 10 | UI_ArePanel |
| 15 | 2 | UI_DrawCardPanel |
| 16 | 5 | UI_IdlePanel |
| 17 | 6 | UI_ChatPanel |
#### 2.2.8 openUI_desc 字段(界面跳转描述)
**类型**: string
**约束**: 必须与openUI_type字段严格对应
**对应关系**:
| openUI_type | openUI_desc |
|-------------|-------------|
| 1 | UI_MainPanel |
| 2 | UI_DrawCardPanel |
| 3 | UI_ShopPanel |
| 4 | UI_FBPanel |
| 5 | UI_IdlePanel |
| 6 | UI_ChatPanel |
| 7 | UI_EquipPanel |
| 8 | UI_HeroPanel |
| 9 | UI_FriendPanel |
| 10 | UI_ArePanel |
#### 2.2.9 rewards 字段(任务奖励)
**类型**: string[]
**格式**: `item_<物品ID>_<数量>,item_<物品ID>_<数量>,...`
**示例**: `item_10000001_2400,item_10000002_50`
#### 2.2.10 score 字段(任务积分)
**类型**: int
**约束**: 根据category字段计算
**取值规则**:
| category | score |
|----------|-------|
| 2(日常) | 20 |
| 5(周常) | 20 |
| 6(公会) | 20 |
| 10(七日任务) | 20 |
| 9(成就) | 25 |
| 其他 | 0 |
#### 2.2.11 auto 字段
**类型**: int
**约束**: 固定值
**允许值**:
- 0: 否(手动领奖)
#### 2.2.12 extra 字段
**类型**: string
**约束**: 固定值
**允许值**:
- null: 无额外数据
## 3. 数据校验规则
### 3.1 字段级校验
| 字段 | 校验规则 | 错误类型 |
|------|----------|----------|
| id | 必须为5位数字第一位与category匹配后四位从0001开始 | 格式错误/重复/不连续 |
| category | 必须在1-10范围内 | 枚举值错误 |
| next | 必须为非负整数若不为0则必须存在对应id | 范围错误/引用错误 |
| desc | 必须符合type+target的组合规则category=9时使用成就映射 | 格式错误/逻辑错误 |
| type | category=9时必须在1-23范围内其他category必须在1-17范围内 | 枚举值错误 |
| target | 必须为正整数 | 范围错误 |
| openUI_type | 必须与type字段正确映射 | 映射错误 |
| openUI_desc | 必须与openUI_type字段正确对应 | 映射错误 |
| score | 必须根据category字段正确计算 | 计算错误 |
| auto | 必须为0 | 固定值错误 |
| extra | 必须为null | 固定值错误 |
### 3.2 记录级校验
1. **id唯一性**: 所有记录的id字段必须唯一
2. **外键引用**: next字段引用的id必须存在
3. **逻辑一致性**: desc、type、target三者必须保持逻辑一致
4. **界面跳转一致性**: openUI_type、openUI_desc、type三者必须保持一致
## 4. 数据索引设计
### 4.1 索引字段
| 索引名 | 字段 | 类型 | 说明 |
|--------|------|------|------|
| idx_id | id | 主键 | 唯一标识,快速查询 |
| idx_category | category | 普通索引 | 按任务类型检索 |
| idx_type | type | 普通索引 | 按行为类型检索 |
### 4.2 检索方式
- **按id查询**: `SELECT * FROM quest WHERE id = ?`
- **按category查询**: `SELECT * FROM quest WHERE category = ?`
- **按type查询**: `SELECT * FROM quest WHERE type = ?`
- **组合查询**: `SELECT * FROM quest WHERE category = ? AND type = ?`
## 5. 数据导入导出规范
### 5.1 CSV文件格式
- **编码**: UTF-8
- **分隔符**: 逗号(,)
- **文件位置**: `csv_output/quest.csv`
- **首行**: 字段名(英文)
- **第二行**: 字段类型
- **第三行**: 字段说明
- **数据行**: 从第四行开始
### 5.2 格式示例
```csv
id,category,next,desc,type,target,openUI_type,openUI_desc,rewards,score,auto,extra
int,int,int,string,int,int,int,string,string[],int,int,string
主键,分类,下一个任务,描述,子类型,任务目标,打开界面类型,打开界面描述,奖励,每日任务活跃度,自动领奖,额外数据
10001,1,10002,通过1关主线关卡,6,1,1,UI_MainPanel,"item_10000001_2400,item_10000002_50",0,0,null
```
## 6. 扩展计划
### 6.1 待扩展表格
| 表格名 | 用途 | 优先级 |
|--------|------|--------|
| quest_progress | 玩家任务进度 | 高 |
| quest_group | 任务组/任务链 | 中 |
| quest_condition | 任务解锁条件 | 中 |
### 6.2 未来扩展字段
| 字段名 | 类型 | 用途 |
|--------|------|------|
| start_time | datetime | 任务开始时间 |
| end_time | datetime | 任务结束时间 |
| repeat_type | int | 重复类型(每日/每周/一次性) |
| unlock_condition | string | 解锁条件表达式 |