From 55c79092417ab3cd1926c61d79e039df20869b3c Mon Sep 17 00:00:00 2001 From: pan Date: Mon, 7 Sep 2026 09:32:25 +0800 Subject: [PATCH] =?UTF-8?q?feat(editor):=20=E6=96=B0=E5=A2=9E=E6=9E=9A?= =?UTF-8?q?=E4=B8=BE=E5=9E=8B=E8=A6=86=E5=86=99=E7=BC=96=E8=BE=91=E5=99=A8?= =?UTF-8?q?=E4=B8=8E=E4=BC=98=E5=8C=96=E6=8A=80=E8=83=BD=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 新增TGroup枚举覆写类型到常量配置,添加对应下拉编辑组件 2. 重构覆写解析逻辑,统一处理枚举与对象类型覆写 3. 批量更新全英雄技能的描述文本与覆写参数,修正技能效果描述 4. 优化技能详情展示逻辑,复用覆写解析函数减少重复代码 --- assets/script/game/common/config/heroSet.ts | 20 +++---- put/server/data/heroes.json | 29 +++++---- put/web/src/App.vue | 65 +++++++++------------ put/web/src/components/OverrideEditor.vue | 23 ++++++++ put/web/src/constants.js | 8 +++ 5 files changed, 81 insertions(+), 64 deletions(-) diff --git a/assets/script/game/common/config/heroSet.ts b/assets/script/game/common/config/heroSet.ts index c50dc4d4..0a40f57b 100644 --- a/assets/script/game/common/config/heroSet.ts +++ b/assets/script/game/common/config/heroSet.ts @@ -550,7 +550,7 @@ export const HeroInfo: Record = { skills: { 6004: { uuid: 6004, name: "强化普攻", lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, overrides: {"ap":100,"proc_skill":{"s_uuid":6001,"chance":100,"overrides":{"crt":100}}}, desc: "挥剑对{target}造成攻击力{ap}%伤害", lv_entries: [ - { lv: 2, s_lv: SkillLv.Lv2, overrides: {"ap":120} }, + { lv: 2, s_lv: SkillLv.Lv2, overrides: {"ap":120}, desc: "普通攻击造成 120% 攻击伤害" }, ], }, 6301: { uuid: 6301, name: "魔法盾", lv: 1, cd: 8, ccd: 0, overrides: {"ap":30}, desc: "{target}获得生命最大值{ap}%的护盾", @@ -573,7 +573,7 @@ export const HeroInfo: Record = { skills: { 6004: { uuid: 6004, name: "强化普攻", lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, overrides: {"ap":100}, desc: "对{target}造成攻击力{ap}%伤害", lv_entries: [ - { lv: 2, s_lv: SkillLv.Lv2, overrides: {"ap":120} }, + { lv: 2, s_lv: SkillLv.Lv2, overrides: {"ap":120}, desc: "普通攻击造成 120% 攻击伤害" }, ], }, 6101: { uuid: 6101, name: "气斩", lv: 1, cd: 8, ccd: 0, overrides: {"ap":150,"timed_buff_id":7002,"icon":"Stat_AttackSpeed_02"}, desc: "斩出气刃,对{target}造成攻击力{ap}%伤害,并使目标易伤(受到伤害加深,持续{dur}秒)", @@ -596,7 +596,7 @@ export const HeroInfo: Record = { skills: { 6004: { uuid: 6004, name: "强化普攻", lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, overrides: {"ap":100}, desc: "挥斧对{target}造成攻击力{ap}%伤害", lv_entries: [ - { lv: 2, s_lv: SkillLv.Lv2, overrides: {"stun":10}, desc: "挥斧对{target}造成攻击力{ap}%伤害,{stun}%概率击晕" }, + { lv: 2, s_lv: SkillLv.Lv2, overrides: {"stun":10}, desc: "普通攻击有{stun}%概率击晕敌人" }, ], }, 6104: { uuid: 6104, name: "开山斧", lv: 1, cd: 8, ccd: 0, overrides: {"ap":300,"stun":100}, desc: "劈出开山斧,对{target}造成攻击力{ap}%伤害,必定击晕", @@ -617,7 +617,7 @@ export const HeroInfo: Record = { skills: { 6002: { uuid: 6002, name: "强化普攻", lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Fast].cd, ccd: 0, overrides: {"ap":100}, desc: "挥刀对{target}造成攻击力{ap}%伤害", lv_entries: [ - { lv: 2, s_lv: SkillLv.Lv2, overrides: {"crt":10}, desc: "挥刀对{target}造成攻击力{ap}%伤害,{crt}%概率暴击" }, + { lv: 2, s_lv: SkillLv.Lv2, overrides: {"crt":10}, desc: "普通攻击有{crt}%概率暴击" }, ], }, 6100: { uuid: 6100, name: "光闪", lv: 1, cd: 8, ccd: 0, overrides: {"ap":150}, desc: "斩出光闪,对{target}造成攻击力{ap}%伤害", @@ -638,7 +638,7 @@ export const HeroInfo: Record = { skills: { 6002: { uuid: 6002, name: "强化普攻", lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Fast].cd, ccd: 0, overrides: {"ap":100}, desc: "挥刀对{target}造成攻击力{ap}%伤害", lv_entries: [ - { lv: 2, s_lv: SkillLv.Lv2, overrides: {"timed_buff_id":7007,"buff_value":30,"buff_chance":30}, desc: "挥刀对{target}造成攻击力{ap}%伤害,{buff_chance}%概率使目标出血(每0.5秒受到{buff_value}点伤害,持续{dur}秒)" }, + { lv: 2, s_lv: SkillLv.Lv2, overrides: {"timed_buff_id":7007,"buff_value":30,"buff_chance":30}, desc: "普通攻击有{buff_chance}%概率使目标出血(每0.5秒受到{buff_value}点伤害,持续{dur}秒)" }, ], }, 6103: { uuid: 6103, name: "闪电斩", lv: 1, cd: 8, ccd: 0, overrides: {"ap":150}, desc: "召唤落雷斩击{target},造成攻击力{ap}%伤害", @@ -659,7 +659,7 @@ export const HeroInfo: Record = { skills: { 6006: { uuid: 6006, name: "强化普攻", lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal].cd, ccd: 0, overrides: {"ap":100}, desc: "射出箭矢,对{target}造成攻击力{ap}%伤害", lv_entries: [ - { lv: 2, s_lv: SkillLv.Lv2, overrides: {"bck":10}, desc: "射出箭矢,对{target}造成攻击力{ap}%伤害,击退{bck}" }, + { lv: 2, s_lv: SkillLv.Lv2, overrides: {"frz":10}, desc: "普通攻击有{frz}%概率 冰冻敌人" }, ], }, 6150: { uuid: 6150, name: "万箭齐发·冰", lv: 1, cd: 8, ccd: 0, overrides: {"ap":150,"frz":30,"icon":"Stat_AttackRangeIncrease_02"}, desc: "万箭齐发,对{target}造成攻击力{ap}%伤害,{frz}%概率冰冻", @@ -678,9 +678,9 @@ export const HeroInfo: Record = { 5007: { uuid: 5007, name: "击退火女", path: "hm1", fac: FacSet.HERO, rarity: 1, lv: 1, type: HType.Long, grow_type: HGrowType.Mage, role: HRole.Mage, hp: HERO_ROLE_BASE[HRole.Mage].hp - 5, ap: HERO_ROLE_BASE[HRole.Mage].ap + 10, def: HERO_ROLE_BASE[HRole.Mage].def, skills: { - 6010: { uuid: 6010, name: "强化普攻", lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, overrides: {"ap":100,"bck":30}, desc: "掷出紫魔球,对{target}造成攻击力{ap}%伤害,击退{bck}", + 6010: { uuid: 6010, name: "强化普攻", lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, overrides: {"ap":100}, desc: "掷出紫魔球,对{target}造成攻击力{ap}%伤害", lv_entries: [ - { lv: 2, s_lv: SkillLv.Lv2, overrides: {"bck":40} }, + { lv: 2, s_lv: SkillLv.Lv2, overrides: {"bck_chance":20}, desc: "普通攻击有{bck_chance}%概率击退敌人" }, ], }, 6200: { uuid: 6200, name: "火焰喷射", lv: 1, cd: 8, ccd: 0, overrides: {"ap":250,"bck":100}, desc: "喷出烈焰风暴,对{target}造成攻击力{ap}%伤害,击退{bck}", @@ -701,7 +701,7 @@ export const HeroInfo: Record = { skills: { 6011: { uuid: 6011, name: "强化普攻", lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Normal].cd, ccd: 0, overrides: {"ap":100}, desc: "挥杖对{target}造成攻击力{ap}%伤害", lv_entries: [ - { lv: 2, s_lv: SkillLv.Lv2, overrides: {"bck":10}, desc: "挥杖对{target}造成攻击力{ap}%伤害,击退{bck}" }, + { lv: 2, s_lv: SkillLv.Lv2, overrides: {"ap":120}, desc: "普通攻击造成 120% 攻击伤害" }, ], }, 6302: { uuid: 6302, name: "治疗", lv: 1, cd: 8, ccd: 0, overrides: {"ap":30}, desc: "为{target}回复攻击力{ap}%生命", @@ -724,7 +724,7 @@ export const HeroInfo: Record = { skills: { 6004: { uuid: 6004, name: "普攻强化", lv: 1, cd: AtkSpeedSet[AtkSpeedLv.Slow].cd, ccd: 0, lv_entries: [ - { lv: 2, s_lv: SkillLv.Lv2, overrides: {"proc_skill":{"s_uuid":6502,"chance":10,"overrides":{"ap":10}}} }, + { lv: 2, s_lv: SkillLv.Lv2, overrides: {"proc_skill":{"s_uuid":6502,"chance":10,"overrides":{"ap":10}}}, desc: "普通攻击有 10% 的概率为自己释放回春" }, ], }, 6102: { uuid: 6102, lv: 1, cd: 8, ccd: 0, overrides: {"ap":250,"bck":30}, diff --git a/put/server/data/heroes.json b/put/server/data/heroes.json index 65a42726..5a50cc3d 100644 --- a/put/server/data/heroes.json +++ b/put/server/data/heroes.json @@ -40,7 +40,7 @@ "overrides": { "ap": 120 }, - "desc": "" + "desc": "普通攻击造成 120% 攻击伤害" } ] }, @@ -132,7 +132,7 @@ "overrides": { "ap": 120 }, - "desc": "" + "desc": "普通攻击造成 120% 攻击伤害" } ] }, @@ -227,7 +227,7 @@ "overrides": { "stun": 10 }, - "desc": "挥斧对{target}造成攻击力{ap}%伤害,{stun}%概率击晕" + "desc": "普通攻击有{stun}%概率击晕敌人" } ] }, @@ -319,7 +319,7 @@ "overrides": { "crt": 10 }, - "desc": "挥刀对{target}造成攻击力{ap}%伤害,{crt}%概率暴击" + "desc": "普通攻击有{crt}%概率暴击" } ] }, @@ -415,7 +415,7 @@ "buff_value": 30, "buff_chance": 30 }, - "desc": "挥刀对{target}造成攻击力{ap}%伤害,{buff_chance}%概率使目标出血(每0.5秒受到{buff_value}点伤害,持续{dur}秒)" + "desc": "普通攻击有{buff_chance}%概率使目标出血(每0.5秒受到{buff_value}点伤害,持续{dur}秒)" } ] }, @@ -506,9 +506,9 @@ "lv": 2, "s_lv": 2, "overrides": { - "bck": 10 + "frz": 10 }, - "desc": "射出箭矢,对{target}造成攻击力{ap}%伤害,击退{bck}" + "desc": "普通攻击有{frz}%概率 冰冻敌人" } ] }, @@ -591,18 +591,17 @@ "cd": 1.2, "cdExpr": "AtkSpeedSet[AtkSpeedLv.Slow].cd", "overrides": { - "ap": 100, - "bck": 30 + "ap": 100 }, - "desc": "掷出紫魔球,对{target}造成攻击力{ap}%伤害,击退{bck}", + "desc": "掷出紫魔球,对{target}造成攻击力{ap}%伤害", "lv_entries": [ { "lv": 2, "s_lv": 2, "overrides": { - "bck": 40 + "bck_chance": 20 }, - "desc": "" + "desc": "普通攻击有{bck_chance}%概率击退敌人" } ] }, @@ -693,9 +692,9 @@ "lv": 2, "s_lv": 2, "overrides": { - "bck": 10 + "ap": 120 }, - "desc": "挥杖对{target}造成攻击力{ap}%伤害,击退{bck}" + "desc": "普通攻击造成 120% 攻击伤害" } ] }, @@ -789,7 +788,7 @@ } } }, - "desc": "" + "desc": "普通攻击有 10% 的概率为自己释放回春" } ] }, diff --git a/put/web/src/App.vue b/put/web/src/App.vue index 9dec7702..e89ddd1f 100644 --- a/put/web/src/App.vue +++ b/put/web/src/App.vue @@ -235,39 +235,36 @@ function skillLabel(sk) { if (!sk) return '-' return `${sk.uuid} ${sk.name || skillMap.value[sk.uuid]?.name || ''}`.trim() } -// 技能数值摘要:关键 overrides 与成长档位上限(如 ap150 →lv16) -function skillDetail(sk) { - if (!sk) return '' - const parts = [] - if (sk.overrides?.ap != null) parts.push(`ap${sk.overrides.ap}`) - if (sk.overrides?.timed_buff_id != null) parts.push(`buff${sk.overrides.timed_buff_id}`) - if (sk.overrides?.frz != null) parts.push(`frz${sk.overrides.frz}`) - if (sk.overrides?.stun != null) parts.push(`stun${sk.overrides.stun}`) - if (sk.overrides?.thorns_dmg != null) parts.push(`thorns${sk.overrides.thorns_dmg}`) - if (sk.overrides?.thorns_rate != null) parts.push(`thorns${sk.overrides.thorns_rate}%`) - if (sk.overrides?.summon_count != null) parts.push(`数${sk.overrides.summon_count}`) - if (sk.lv_entries?.length) parts.push(`→lv${Math.max(...sk.lv_entries.map((e) => e.lv))}`) - return parts.join(' ') +// 覆写键 → 短标签映射,未列出的键直接用原始键名兜底,保证任何参数都能显示 +const OV_LABELS = { + hit_count: 'hit', + timed_buff_id: 'buff', + buff_value: 'val', + buff_chance: 'chance', + summon_count: '数', + thorns_dmg: 'thorns', + thorns_rate: 'thorns', } -// 覆写对象转简写(如 ap100、crt10、stun20、summon2) +// 覆写对象转简写(如 ap100、crt10、proc:6001×100%、bck_chance20) function overrideParts(ov) { if (!ov) return [] const parts = [] - if (ov.ap != null) parts.push(`ap${ov.ap}`) - if (ov.hit_count != null) parts.push(`hit${ov.hit_count}`) - if (ov.crt != null) parts.push(`crt${ov.crt}`) - if (ov.frz != null) parts.push(`frz${ov.frz}`) - if (ov.stun != null) parts.push(`stun${ov.stun}`) - if (ov.para != null) parts.push(`para${ov.para}`) - if (ov.bck != null) parts.push(`bck${ov.bck}`) - if (ov.thorns_dmg != null) parts.push(`thorns${ov.thorns_dmg}`) - if (ov.thorns_rate != null) parts.push(`thorns${ov.thorns_rate}%`) - if (ov.summon_count != null) parts.push(`数${ov.summon_count}`) - if (ov.num != null) parts.push(`num${ov.num}`) - if (ov.timed_buff_id != null) parts.push(`buff${ov.timed_buff_id}`) - if (ov.buff_value != null) parts.push(`val${ov.buff_value}`) - if (ov.buff_chance != null) parts.push(`chance${ov.buff_chance}`) + for (const [k, v] of Object.entries(ov)) { + // 跳过空值与编辑器内部标记键 + if (v == null || k === 'TGroup' || k === 'desc') continue + if (k === 'proc_skill') { + const sub = overrideParts(v.overrides).join(',') + parts.push(`proc:${v.s_uuid}×${v.chance}%${sub ? `(${sub})` : ''}`) + continue + } + if (typeof v === 'object') { + parts.push(`${k}${JSON.stringify(v)}`) + continue + } + const label = OV_LABELS[k] ?? k + parts.push(k === 'thorns_rate' ? `${label}${v}%` : `${label}${v}`) + } return parts } @@ -305,17 +302,7 @@ function triggerSummary(h) { const name = entries[0]?.name || skillMap.value[sid]?.name || '' const e = entries[0] const ov = e?.overrides || {} - const parts = [`t_num${e?.t_num}`] - if (ov.ap != null) parts.push(`ap${ov.ap}`) - if (ov.crt != null) parts.push(`crt${ov.crt}`) - if (ov.stun != null) parts.push(`stun${ov.stun}`) - if (ov.frz != null) parts.push(`frz${ov.frz}`) - if (ov.para != null) parts.push(`para${ov.para}`) - if (ov.bck != null) parts.push(`bck${ov.bck}`) - if (ov.thorns_dmg != null) parts.push(`thorns${ov.thorns_dmg}`) - if (ov.thorns_rate != null) parts.push(`thorns${ov.thorns_rate}%`) - if (ov.timed_buff_id != null) parts.push(`buff${ov.timed_buff_id}`) - if (ov.summon_count != null) parts.push(`数${ov.summon_count}`) + const parts = [`t_num${e?.t_num}`, ...overrideParts(ov)] lines.push(`${tk}: ${sid} ${name} lv${minLv} ${parts.join(' ')}`) } } diff --git a/put/web/src/components/OverrideEditor.vue b/put/web/src/components/OverrideEditor.vue index 8d3c69c8..5995427a 100644 --- a/put/web/src/components/OverrideEditor.vue +++ b/put/web/src/components/OverrideEditor.vue @@ -17,6 +17,16 @@ > + + + +