You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
AdLike2048/docs/需求-宝石装备合成.md

68 lines
2.9 KiB

# 需求:宝石装备与合成
> 状态:局外 UI / 存档 / 合成已实现;局内属性与技能已接入战斗。
## 背景
老项目武器功能改造为宝石:`Weapon` 表每行一颗宝石;部分宝石带 `act_skill`。宝石在局外宝石页镶嵌到金木水火土五行,装备后局内对应属性数字获得属性与技能。
## 配表
| 表 | 用途 |
|---|---|
| `Weapon` | 宝石定义:`type` 1 通用 / 2~6 金木水火土;`quality` 0~5 与等级对应;`itemid` 道具;`synthesisnumber` 合成消耗本宝石数量;`synthesisitem` 合成目标 id 列表;`attritubes` / `act_skill` |
| `Item` | `type=3` 宝石道具;`para` 指向 `Weapon.id` |
## 镶嵌规则
- 每五行 4 槽(g1~g4)。
- 通用(`type=1`)可装任意五行。
- 属性专属(`type=2~6`)须 `type === elementType + 1`(elementType 1~5 = 金木水火土),且每五行最多 1 颗专属。
- 目标槽有宝石:先卸再装(或交换)。
- 仓库拖到槽 = 装备;槽拖到仓库区 = 卸下。
## 拥有量
- 库存:`Item` 数量(`Weapon.itemid`)。
- 可用数 = 库存 − 已镶嵌数;仓库与合成只使用可用数。
## 存档
- `OtherDataType.ElementGem`
- 格式:`element|s0,s1,s2,s3#...`(element=1~5,槽位宝石 id,0=空)
## 一键合成
1. 每轮对当前可用数做快照,仅用快照计算可合成次数;本轮产出不参与本轮材料。
2. 消耗 `synthesisnumber` 个本宝石,产出 1 个目标:`synthesisitem` 仅 1 个则取之,多个则随机取 1。
3. 多轮直到无可合成。
4. 弹窗展示:各宝石「合成后可用数 − 合成前可用数」中 `delta > 0` 的条目。
## UI 注意
- 仓库按页签展示,无「全部」、无滚动:`btn0~btn5` → `Weapon.type` 1~6(通用/金木水火土),默认通用。
- 仓库格分帧实例化进 `ui_content`(Layout 排布);交互为直接拖拽镶嵌/卸下。
- 仓库全量重建仅:打开页 / 切页签 / 一键合成。镶嵌成功只局部改数量与槽位;失败不刷列表。
- 仓库项 `bg` 用 `宝石框大{quality}`;镶嵌位 `g1~g4` 仍用 `宝石框小`。
## 局内(已接入)
五行数字上阵时(`TowerLoadoutService.setupCombat`):
1. 本机玩家:`gg.gem.getElementSlots(Hero.herotype)` 读该五行最多 4 槽宝石。
2. 每颗 `attritubes` 写入该数字属性(多槽累加);刷新上阵前清除旧 `gem_` modifier。
3. 有 `act_skill` 的宝石接到原有武器技能槽(主动 / 被动 / atk_buff);同五行多颗技能宝石时取品质更高者(配表异常时 warn)。
4. AI 对手不读本机镶嵌。
### `attritubes` 类型
| type | 含义 | 战斗写入 |
|------|------|----------|
| 1 | 攻击万分比 | Attack Mul |
| 2 | 暴击万分比 | CritRate Add |
| 3 | 暴击伤害万分比 | CritDamage Add |
| 4 | 攻速万分比 | aspd_add |
| 5 | 伤害加成万分比 | dmg_mul |
实现:`assets/script/battle/combat/GemBattleEffect.ts`。