职业系统数据包配置教程 (cbs)
职业系统数据包配置教程
本文档详细介绍如何通过数据包配置职业系统,包括职业树布局和职业详情页面。
目录
相关文档
- 📖 指令系统教程 - 包含
/profession reload layouts指令说明 - 🌳 职业树系统技术文档 - 系统架构与技术细节
- 👥 职业配置教程 - 职业数值配置
- 🔌 API 集成指南 - 开发者 API 文档
概述
职业系统由两部分配置组成:
- 职业树布局 (
tree_layout.json) - 定义职业在树状图中的位置、图标和关系 - 职业详情页面 (
details/{profession_id}.json) - 定义点击职业后显示的详细信息页面
文件位置
1 | data/classbioarsenal/profession_layouts/ |
职业树布局配置
文件路径
data/classbioarsenal/profession_layouts/tree_layout.json
基本结构
1 | [ |
字段说明
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
professionId | String | ✅ | 职业的唯一标识符,必须与职业定义文件名一致 |
x | Number | ✅ | 职业节点在树状图中的 X 坐标(像素) |
y | Number | ✅ | 职业节点在树状图中的 Y 坐标(像素) |
iconItemId | String | ✅ | 显示的物品图标,格式:namespace:item_id |
description | String | ❌ | 鼠标悬停时显示的简短描述 |
children | Object | ❌ | 可升级的子职业,键为子职业 ID,值为升级条件 |
示例
1 | [ |
布局建议
- 起始职业:建议 X 从 100 开始,Y 间隔 100 像素
- 进阶职业:向右偏移(X + 150),根据分支调整 Y 坐标
- 分支结构:多个职业可以升级到同一个进阶职业(如上例中的 berserker)
职业详情页面配置
文件路径
data/classbioarsenal/profession_layouts/details/{profession_id}.json
⚠️ 重要:文件名必须与
professionId完全一致
基本结构
1 | { |
支持的 UI 元素类型
1. TITLE - 标题
显示大号标题文本。
1 | { |
参数:
content(String) - 文本内容,支持变量color(String) - 颜色,格式:0xAARRGGBBalign(String) - 对齐方式:left、center、right
2. TEXT - 普通文本
显示常规文本,支持自动换行。
1 | { |
参数:
content(String) - 文本内容,支持变量color(String) - 颜色align(String) - 对齐方式wrapWidth(Number) - 换行宽度(像素),默认 300
3. SECTION_HEADER - 分节标题
带装饰的分节标题(如 --- 标题 ---)。
1 | { |
参数:
content(String) - 标题内容color(String) - 颜色decorator(String) - 装饰符号,默认---
4. ATTRIBUTE_LIST - 属性列表
自动显示职业的所有属性加成。
1 | { |
参数:
color(String) - 文本颜色align(String) - 对齐方式
显示格式:属性名: +数值/级
5. INFO_LIST - 信息列表
显示自定义的项目列表,每项前带 • 符号。
1 | { |
参数:
items(Array) - 列表项数组,每项支持变量color(String) - 文本颜色align(String) - 对齐方式wrapWidth(Number) - 换行宽度
6. SPACER - 垂直间距
添加垂直空白间距。
1 | { |
参数:
height(Number) - 间距高度(像素)
7. DIVIDER - 分隔线
绘制水平分隔线。
1 | { |
参数:
color(String) - 线条颜色(支持半透明)wrapWidth(Number) - 线条宽度height(Number) - 分隔线后的间距
8. ICON - 物品图标
显示物品图标(16x16)。
1 | { |
参数:
itemId(String) - 物品 ID,格式:namespace:item_id
按钮配置
详情页面支持自定义” 选择职业” 和” 返回” 两个按钮的样式和位置。
按钮配置结构
在根对象中添加 selectButton 和 backButton 字段:
1 | { |
按钮参数说明
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
text | String | “按钮” | 按钮显示的文本 |
x | Number | 0 | X 坐标偏移(相对于屏幕中心,正值向右) |
y | Number | -40 | Y 坐标偏移(相对于屏幕底部,负值向上) |
width | Number | 100 | 按钮宽度(像素) |
height | Number | 20 | 按钮高度(像素) |
enabled | Boolean | true | 是否可点击(selectButton 会根据职业解锁状态自动调整) |
坐标系统说明
- X 坐标:0 表示屏幕水平中心,正值向右,负值向左
- Y 坐标:0 表示屏幕底部,负值向上,正值向下(会超出屏幕)
示例:
x: 0, y: -40- 屏幕底部上方 40 像素,水平居中x: -60, y: -40- 屏幕底部上方 40 像素,向左偏移 60 像素x: 60, y: -40- 屏幕底部上方 40 像素,向右偏移 60 像素
按钮布局建议
标准布局(两按钮垂直排列):
1 | "selectButton": { |
水平布局(两按钮并排):
1 | "selectButton": { |
注意事项
- 如果不配置按钮,将使用默认样式和位置
- 只配置其中一个按钮也是允许的,另一个将使用默认
selectButton的enabled属性会与职业解锁状态叠加判断- 按钮文本支持中文和特殊字符
变量系统
在文本内容中可以使用变量,它们会在运行时被替换为实际值。
内置变量
| 变量 | 说明 | 示例 |
|---|---|---|
{profession_name} | 职业显示名称 | “铁剑卫” |
{max_level} | 最大等级 | “30” |
{prerequisites} | 前置职业信息 | “铁剑卫 (Lv.25)” 或 “无” |
属性变量
使用 %属性ID% 格式来显示属性数值。
格式:%namespace.attribute_path%
示例:
1 | { |
如果该职业每级提升 2 点生命值,会显示为:
1 | 每级提升 2.0 点生命值 |
常用属性 ID
generic.max_health- 最大生命值generic.attack_damage- 攻击伤害generic.armor- 护甲值generic.attack_speed- 攻击速度generic.movement_speed- 移动速度
完整示例
示例 1:标准风格(iron_swordguard)
1 | { |
示例 2:创意风格(dual_swordsman)
使用不同的颜色方案和装饰符号。
1 | { |
颜色参考
基础颜色
| 颜色名 | 16 进制 | 效果 |
|---|---|---|
| 白色 | 0xFFFFFFFF | ![]() |
| 黑色 | 0xFF000000 | ![]() |
| 红色 | 0xFFFF0000 | ![]() |
| 绿色 | 0xFF00FF00 | ![]() |
| 蓝色 | 0xFF0000FF | ![]() |
推荐配色
| 用途 | 颜色 | 16 进制 |
|---|---|---|
| 标题 | 金色 | 0xFFFFD700 |
| 正文 | 浅灰 | 0xFFCCCCCC |
| 强调 | 橙色 | 0xFFFFA500 |
| 成功 / 可用 | 浅绿 | 0xFF55FF55 |
| 警告 | 黄色 | 0xFFFFFF00 |
| 特殊 | 青绿 | 0xFF00FFAA |
颜色格式说明
格式:0xAARRGGBB
AA- Alpha(透明度):00完全透明,FF完全不透明RR- Red(红色分量)GG- Green(绿色分量)BB- Blue(蓝色分量)
示例:
0xFFFFFFFF- 不透明白色0x88FFFFFF- 半透明白色0x00000000- 完全透明
常见问题
Q1: 如何测试配置是否生效?
- 修改 JSON 文件并保存
- 在游戏中按 F3 + T 重新加载资源
- 打开职业树,点击对应职业查看效果
Q2: 职业显示” 尚未配置详情页面”?
这表示 details/ 目录下没有该职业对应的 JSON 文件。
解决方法:
- 在
details/目录创建{profession_id}.json - 文件名必须与职业 ID 完全一致
- 按照本文档格式编写配置
Q3: 变量没有被替换?
检查清单:
- ✅ 变量格式正确(
{variable}或%attribute%) - ✅ 属性 ID 存在于职业的属性定义中
- ✅ 没有拼写错误
Q4: 如何调整元素顺序?
元素按照 elements 数组中的顺序从上到下渲染。调整数组中对象的位置即可。
Q5: 颜色不生效?
常见问题:
- 忘记
0x前缀 - Alpha 值设为
00(完全透明) - 格式错误(应为 8 位 16 进制)
正确格式:"color": "0xFFFFFFFF"
Q6: 文本超出屏幕?
调整 wrapWidth 参数:
1 | { |
建议值在 250-320 之间。
Q7: 如何创建多列布局?
当前系统不支持多列布局,所有元素都是垂直排列。如需复杂布局,可以使用多个短文本元素模拟。
最佳实践
1. 保持一致的风格
在同一职业树中,建议使用统一的颜色方案和装饰风格。
2. 合理使用间距
- 标题后:5-10 像素
- 分节之间:10-15 像素
- 段落内:不使用或使用 5 像素
3. 文本长度控制
- 标题:不超过 10 个字
- 普通文本:每行建议 30-40 个字
- 列表项:每项不超过 30 个字
4. 颜色对比度
确保文本颜色与背景有足够对比度,推荐浅色文本(0xFFCCCCCC以上)。
5. 变量使用
在描述中使用变量使内容更动态:
1 | { |
参考文件
更新日期:2026-01-07
版本:v2.0


