From cd9e7296a169d03139804e0ce00d7a1875f7912b Mon Sep 17 00:00:00 2001 From: pan Date: Mon, 21 Sep 2026 16:01:41 +0800 Subject: [PATCH] =?UTF-8?q?feat(trigger-editor):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E8=A7=A6=E5=8F=91=E7=BB=84=E6=A6=82=E7=8E=87=E4=B8=8E=E4=BF=9D?= =?UTF-8?q?=E5=BA=95=E9=85=8D=E7=BD=AE=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 新增触发组条目字段t_chance(触发概率)和pity_add(保底叠加),仅攻击/受击组生效 2. 为TriggerGroupEditor传入分组标识,动态显示概率配置表单项 3. 新增条目创建时继承同组末档概率参数的逻辑 4. 更新常量定义与文档说明,补充概率参数使用规则 5. 在前端展示和服务端导出中添加概率相关信息展示 --- assets/script/game/common/HeroSkillText.ts | 27 +++++++++++++--- .../script/game/common/config/英雄设计表.csv | 32 +++++++++++++------ put/server/data/heroes.json | 12 +++---- put/server/data/heroes.json编辑指引.md | 4 ++- put/server/index.js | 5 +++ put/web/src/App.vue | 20 ++++++++---- put/web/src/components/TemplateManager.vue | 10 ++++++ put/web/src/components/TriggerGroupEditor.vue | 9 +++++- put/web/src/constants.js | 2 +- 9 files changed, 93 insertions(+), 28 deletions(-) diff --git a/assets/script/game/common/HeroSkillText.ts b/assets/script/game/common/HeroSkillText.ts index 67106b5e..834be55f 100644 --- a/assets/script/game/common/HeroSkillText.ts +++ b/assets/script/game/common/HeroSkillText.ts @@ -139,18 +139,25 @@ function getBuffValue(skill: SkillConfig): number { * Why: 数值不写死在模板里,overrides 调整档位数值时文案自动同步。 * @param tmpl 描述模板(含占位符) * @param skill mergeSkillParams 合并后的技能配置 + * @param extra 条目级参数占位符(触发技能的 t_chance/pity_add 不在 SkillConfig,由调用方透传;优先于技能字段) */ -function renderDesc(tmpl: string, skill: SkillConfig): string { +function renderDesc(tmpl: string, skill: SkillConfig, extra?: Record): string { return tmpl.replace(PLACEHOLDER_PATTERN, (raw, key: string) => { if (key === "target") return buildTargetDesc(skill); if (key === "dur") return valueRich(getBuffDuration(skill)); if (key === "buff_value") return valueRich(getBuffValue(skill)); + if (extra && key in extra) return valueRich(String(extra[key])); const v = (skill as unknown as Record)[key]; // 未定义数值字段按 0 渲染,避免面板出现 undefined(模板与配置不匹配的兜底) return v === undefined ? valueRich(0) : valueRich(String(v)); }); } +/** 触发档位的条目级占位符上下文(普攻/大招档位无此层参数,返回 undefined 走技能字段) */ +function tierExtras(t: ISkillTierInfo): Record | undefined { + return t.tChance === undefined ? undefined : { t_chance: t.tChance, pity_add: t.pityAdd ?? 0 }; +} + /** 无模板时兜底:回退底座技能的 info 备注 */ function fallbackDesc(skill: SkillConfig): string { return String(skill.info ?? ""); @@ -226,9 +233,12 @@ export function buildHeroSkillDesc(heroUuid: number, showName: boolean = true, s if (e.lv <= lv && e.desc) tmpl = e.desc; } tmpl = tmpl ?? entries[0]?.desc; - const text = tmpl ? renderDesc(tmpl, skill) : fallbackDesc(skill); + const text = tmpl + ? renderDesc(tmpl, skill, { t_chance: item.t_chance ?? 100, pity_add: item.pity_add ?? 0 }) + : fallbackDesc(skill); // 触发语境:"每攻击N次"循环语义(buildTriggerLabel),逗号衔接效果文本 - const trig = buildTriggerLabel(type, item.t_num, item.t_chance); + // 模板已显式使用 {t_chance} 时不再自动追加概率后缀,避免同一行重复展示 + const trig = buildTriggerLabel(type, item.t_num, tmpl?.includes("{t_chance}") ? undefined : item.t_chance); parts.push(`${trig}, ${text}`); } // dead 组内的复活效果(revive_hp / revive_count)并入同一行 @@ -281,12 +291,17 @@ interface ISkillTierInfo { ownDesc?: string; /** 触发技能档位的触发次数(普攻无) */ tNum: number; + /** 触发技能档位的触发概率百分点(普攻无;缺省 100 必触发) */ + tChance?: number; + /** 触发技能档位的保底叠加百分点(普攻无;缺省 0) */ + pityAdd?: number; } /** 相邻档 diff 参与展示的字段(排除动画/弹道/特效等玩家无感字段),t_num 为触发技能专有 */ const DIFF_KEYS: string[] = [ "ap", "hit_count", "num", "summon_count", "crt", "frz", "stun", "para", "bck", "bck_chance", "buff_duration", "buff_value", "t_num", "timed_buff_id", + "t_chance", "pity_add", ]; /** diff 字段的称谓与单位("新增/漂移"描述共用) */ @@ -304,11 +319,15 @@ const DIFF_META: Record = { buff_duration: { label: "持续", unit: "秒" }, buff_value: { label: "增益强度", unit: "" }, t_num: { label: "触发次数", unit: "次" }, + t_chance: { label: "触发概率", unit: "%" }, + pity_add: { label: "保底叠加", unit: "%" }, }; -/** 读取档位某展示字段的实时值(t_num/buff_value 走专用取值) */ +/** 读取档位某展示字段的实时值(t_num/t_chance/pity_add/buff_value 走专用取值) */ function getTierValue(tier: ISkillTierInfo, key: string): number { if (key === "t_num") return tier.tNum; + if (key === "t_chance") return tier.tChance ?? 100; + if (key === "pity_add") return tier.pityAdd ?? 0; if (key === "buff_value") return getBuffValue(tier.skill); const v = (tier.skill as unknown as Record)[key]; return typeof v === "number" ? v : 0; diff --git a/assets/script/game/common/config/英雄设计表.csv b/assets/script/game/common/config/英雄设计表.csv index 0c2b4d8e..1faad7a3 100644 --- a/assets/script/game/common/config/英雄设计表.csv +++ b/assets/script/game/common/config/英雄设计表.csv @@ -1,9 +1,23 @@ -uuid,英雄名称,简化说明,rarity,类型,形态,ap,hp,def,skill[0]_lv1,skill[0]_lv2,skill[1]_lv1,skill[1]_lv8,skill[1]_lv16,atking[0]_lv4,atked[0]_lv4,fstart[0]_lv4,dead[0]_lv4,field[0]_lv4 -5001,叠甲骑士,CSV导入:自身护盾+全体护盾,1,tank,近战,tank,tank+20,tank+10,6004 强化普攻(ap100;慢速1.20s;触发飞剑6001(100%)),ap120,6301 魔法盾(ap30),ap60,ap120,无,6301 全体圣盾(t_num3;ap10):全队获得本英雄生命最大值{ap}%的护盾,无,无,无 -5002,易伤剑仙,CSV导入:击退压场+易伤放大;复刻酒仙,1,warrior,近战,warrior+20,warrior+5,warrior+5,6004 强化普攻(ap100;慢速1.20s),ap120,6101 气斩(ap150;附加易伤7002),,ap180;bck60,6004 风暴打击(t_num3;ap300):立刻打击{target},造成攻击力{ap}%伤害,无,无,无,无 -5003,眩晕暴击哥,CSV导入:高爆发+击晕收割;复刻齐天大圣,1,warrior,近战,warrior+20,warrior+5,warrior+5,6004 强化普攻(ap100;慢速1.20s),stun10,6104 开山斧(ap300;stun100),ap450;stun100,ap450;stun100,无,无,无,无,7005 大圣神威0.25 -5004,刀刀暴击,CSV导入:暴击/暴伤双光环乘区;复刻剑圣,1,assassin,中程,assassin+30,assassin,assassin,6002 强化普攻(ap100;快速0.90s),crt10,6100 光闪(ap150),ap250,ap350,无,无,无,无,7004 剑刃风暴0.12+7005 斩魂利刃0.2 -5005,出血贼,CSV导入:入场先手+受击格挡;复刻剑豪,1,assassin,中程,assassin+30,assassin,assassin,6002 强化普攻(ap100;快速0.90s),附加30出血7007buff_chance30,6103 闪电斩(ap150),ap250;附加出血7007,ap350;para50;附加60出血7007,无,无,无,无,7018 连击光环1 -5006,冻箭哥,CSV导入:多重单体箭,带冰冻,1,archer,远程,archer+30,archer,archer,6006 强化普攻(ap100;中速1.05s),bck10,6150 万箭齐发·冰(ap150;frz30),ap200;frz50,ap250;frz70,无,无,无,无,7006 攻速光环0.15 -5007,击退火女,CSV导入:群体击退/麻痹压场;复刻深渊女王,1,mage,远程,mage+10,mage-5,mage,6010 强化普攻(ap100;慢速1.20s;bck30),bck40,6200 火焰喷射(ap250;bck100),ap350;bck100,ap450;bck100;summon2,无,无,无,无,7002 深渊威压0.15 -5008,团疗奶爸,CSV导入:全体治疗续航+自身护盾,1,support,远程,support+20,support+10,support,6011 强化普攻(ap100;中速1.05s),bck10,6302 治疗(ap30),ap40,ap50,6301 圣愈之盾(t_num3;ap30):{target}获得生命最大值{ap}%的护盾,无,无,无,无 +字段,5001,5002,5003,5004,5005,5006,5007,5008,5009,5010,5011,5012,5013,5014,5015,5016,5017,5018,5019 +英雄名称,叠甲骑士,易伤剑仙,眩晕暴击哥,刀刀暴击,出血贼,冻箭哥,击退火女,团疗奶爸,甲虫领主,火箭哥,控血大师,疾风法师,反伤哥,闪避哥,毒箭猎手,连珠神射,碎甲术士,雷暴领主,圣盾贤者 +简化说明,CSV导入:自身护盾+全体护盾,CSV导入:击退压场+易伤放大;复刻酒仙,CSV导入:高爆发+击晕收割;复刻齐天大圣,CSV导入:暴击/暴伤双光环乘区;复刻剑圣,CSV导入:入场先手+受击格挡;复刻剑豪,CSV导入:多重单体箭,带冰冻,CSV导入:群体击退/麻痹压场;复刻深渊女王,CSV导入:全体治疗续航+自身护盾,,,,,,,毒伤持续流:普攻淬毒叠层+毒雨铺DoT+攻击光环喂养毒伤,暴击连射爆发流:VeryFast极速普攻+概率追射必暴箭+开局团队暴击爆发,破甲减防法师:fstart先手/普攻概率/大招必定三通道施加破甲7008+穿透光环,团队物理增伤位,雷暴AOE爆发+麻痹控场:先手雷击+高倍率能量波,护盾反伤生存法:全队圣盾+荆棘反伤+受击荆棘 +rarity,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +类型,tank,warrior,warrior,assassin,assassin,archer,mage,support,tank,archer,tank,mage,support,warrior,archer,archer,mage,mage,mage +形态,近战,近战,近战,中程,中程,远程,远程,远程,近战,中程,近战,远程,远程,近战,远程,中程,远程,远程,远程 +ap,tank,warrior+20,warrior+20,assassin+30,assassin+30,archer+30,mage+10,support+20,tank,archer,tank,mage,support,warrior,archer,archer+10,mage+10,mage+20,mage-5 +hp,tank+20,warrior+5,warrior+5,assassin,assassin,archer,mage-5,support+10,tank,archer,tank,mage,support,warrior,archer+10,archer,mage,mage-10,mage+20 +def,tank+10,warrior+5,warrior+5,assassin,assassin,archer,mage,support,tank,archer,tank,mage,support,warrior,archer,archer,mage,mage,mage+5 +dodge,,,,,,,,,,,,,,,,,,, +accuracy,,,,,,,,,,,,,,,,,,, +skill[0]_lv1,6004 强化普攻(ap100;慢速1.20s),6004 强化普攻(ap100;慢速1.20s),6004 强化普攻(ap100;慢速1.20s),6002 强化普攻(ap100;快速0.90s),6002 强化普攻(ap100;快速0.90s),6006 强化普攻(ap100;中速1.05s),6010 强化普攻(ap100;慢速1.20s),6011 强化普攻(ap100;中速1.05s),6004 普攻强化(慢速1.20s),6006 强化普攻(快速0.90s),6004 普攻强化(中速1.05s),6009 普攻强化(中速1.05s),6004 攻击(中速1.05s),6004 普攻强化(中速1.05s),6007 淬毒箭(ap100;中速1.05s),6008 连珠箭(ap100;极速0.75s),6012 蚀甲酸瓶(ap100;中速1.05s),6009 雷霆弹(ap100;快速0.90s),6011 圣光飞瓶(ap100;中速1.05s) +skill[0]_lv2,ap120,ap120,stun10,crt10,命中附加30出血7007debuff_chance30,frz10,,ap120,施法触发计时回血6502(10%;ap5),ap100,施法触发计时回血6502(10%;ap5),施法触发攻速爆发6507(10%),附加10生命爆发7029buff_chance20,附加10闪避爆发7030buff_chance20,命中附加30中毒7005debuff_chance30,crt20;施法触发蓝箭6007(20%),命中附加破甲7008debuff_chance30,para15,施法触发次级反伤6516(20%) +skill[1]_lv1,6301 魔法盾(ap30),6101 气斩(ap150;命中附加易伤7002),6104 开山斧(ap300;stun100),6100 光闪(ap150),6103 闪电斩(ap150),6150 万箭齐发·冰(ap150;frz30),6200 火焰喷射(ap250;bck100),6302 治疗(ap30),6102 火焰斩(ap250;bck30),6151 万箭齐发.火(ap70;summon5),6517 生命爆发(),6201 飓风(ap100;summon2;施法触发攻速爆发6507(20%)),6515 荆棘护盾(),6100 寒冰斩(ap200;附加50闪避爆发7030),6150 万箭齐发·毒(ap150;命中附加30中毒7005debuff_chance50),6151 裂空箭雨(ap150;crt30;summon5),6203 碎甲能量波(ap150;命中附加破甲7008),6203 雷霆裂空(ap200;para40),6301 奥术圣壁(ap20;附加10荆棘7027) +skill[1]_lv8,ap60,,ap450;stun100,ap250,ap250;命中附加40出血7007,ap200;frz50,ap350;bck100,ap40,ap300;bck50,ap80;summon5,,ap100;summon3;施法触发攻速爆发6507(20%),,ap250;附加50闪避爆发7030,ap200,ap200;crt50,ap200,ap250;para60,ap30 +skill[1]_lv16,ap120,ap180;bck60,ap450;stun100,ap350,ap350;命中附加60出血7007,ap250;frz70,ap450;bck100;summon2,ap50,ap350;bck70,ap100;summon6,,ap100;summon4;施法触发攻速爆发6507(20%),,ap350;附加80闪避爆发7030,ap250,ap250;crt70;summon6,ap250,ap300;para80,ap40 +atking[0]_lv4,无,6004 风暴打击(t_num3;ap300):立刻打击{target},造成攻击力{ap}%伤害,无,无,无,无,无,6301 圣愈之盾(t_num3;ap30):{target}获得生命最大值{ap}%的护盾,无,6008 红箭(t_num3;ap120):,无,无,无,无,6007 蚀骨毒箭(t_num3;ap80):追加射出蚀骨毒箭,对{target}造成攻击力{ap}%伤害,必定使目标中毒(每0.5秒受到{debuff_value}点伤害,持续{dur}秒),无,无,无,无 +atked[0]_lv4,6302 治疗(t_num3;概率50%;ap10):有 {t_chance}% 的概率,治疗自己 {ap}%生命最大值,无,无,无,无,无,无,无,6302 治疗(t_num3;ap5):为自己释放治疗,恢复生命值的{ap}%,无,6402 生命强化(t_num5;ap1):全队永久增加 1% 生命最大值,无,无,无,无,无,无,无,6516 荆棘回应(t_num3):凝聚荆棘护体,受击时反弹{buff_value}%所受伤害,持续{dur}秒 +fstart[0]_lv4,无,无,无,无,无,无,无,无,无,无,无,无,6301 护盾(t_num1;ap20):,无,无,6504 猎杀时刻(t_num1):战斗开始时释放暴击爆发,全体友方暴击率提升{buff_value}%,持续{dur}秒,6012 先手蚀甲(t_num1;ap150):战斗开始时掷出蚀甲酸瓶,对{target}造成攻击力{ap}%伤害,并必定使其破甲(防御降低,持续{dur}秒),6203 雷击先手(t_num1;ap150):战斗开始释放雷击,对{target}造成攻击力{ap}%伤害,{para}%概率麻痹敌人,无 +fend[0]_lv4,无,无,无,无,无,无,无,无,无,无,无,无,无,无,无,无,无,无,无 +dead[0]_lv4,无,无,无,无,无,无,无,无,无,无,无,无,无,无,无,无,无,无,无 +field[0]_lv4,无,无,7005 大圣神威0.25,7004 剑刃风暴0.12+7005 斩魂利刃0.2,7002 攻击光环10,7006 攻速光环0.15,7002 深渊威压0.15,无,无,无,无,7006 攻速光环10,无,7023 闪避光环10,7002 淬毒磨砺0.1,7004 猎手集结0.15,7009 锐矛之赐0.1,7003 雷云领域10,7022 荆棘领域8 +bonus,lv12 def+50%,lv12 hp+50%,lv12 hp+50%,lv12 ap+50%,lv12 ap+50%,lv12 ap+50%,lv12 ap+50%,lv12 hp+50%,lv12 def+50%,lv12 ap+50%,lv12 def+50%,lv12 ap+50%,lv12 hp+50%,lv12 hp+50%,lv12 ap+50%,lv12 ap+50%,lv12 ap+50%,lv12 ap+50%,lv12 hp+50% diff --git a/put/server/data/heroes.json b/put/server/data/heroes.json index dcd5a05d..eb71a9f7 100644 --- a/put/server/data/heroes.json +++ b/put/server/data/heroes.json @@ -68,18 +68,18 @@ ], "atking": {}, "atked": { - "6301": [ + "6302": [ { "lv": 4, "s_lv": 1, - "name": "全体圣盾", + "name": "", "t_num": 3, "overrides": { - "TGroup": null, - "ap": 10, - "icon": "Stat_UnitSummonIncrease_01" + "ap": 10 }, - "desc": "全队获得本英雄生命最大值{ap}%的护盾" + "desc": "有 {t_chance}% 的概率,治疗自己 {ap}%生命最大值", + "t_chance": 50, + "pity_add": 20 } ] }, diff --git a/put/server/data/heroes.json编辑指引.md b/put/server/data/heroes.json编辑指引.md index 5bf440ca..65329204 100644 --- a/put/server/data/heroes.json编辑指引.md +++ b/put/server/data/heroes.json编辑指引.md @@ -70,9 +70,11 @@ ## 4. 触发组规范(atking / atked / fstart / fend / dead) - 结构:`{ "<技能uuid字符串>": [条目, ...] }`,一个组可挂多个技能 uuid; -- 条目:`{lv, s_lv, name, t_num, overrides, desc}`; +- 条目:`{lv, s_lv, name, t_num, t_chance?, pity_add?, overrides, desc}`; - 解锁等级惯例 **lv4**(`lv:4, s_lv:1`;heroSet.ts 头部注释写的 lv6 已过时,现有英雄与编辑器默认值均为 lv4); - `t_num`:每 n 次普攻(atking)/受击(atked)触发一次;fstart/fend 为每回合开始/结束固定触发 1 次,`t_num` 恒填 1; +- `t_chance`:触发概率(百分点 0~100,**仅 atking/atked 生效**,其余组忽略);缺省/100 = 必触发。示例 30 表示次数条件达成后掷骰 30%; +- `pity_add`:保底叠加(百分点,仅 atking/atked 生效);未触发时为该技能累积下次概率增量,触发成功后清零、封顶 100。示例 `t_chance:30, pity_add:20` → 30/50/70/90/100 递进; - `name` 为组对外展示名(写在该组首档),留空回退底座名; - 复活:在 `dead` 某条目 `overrides` 配 `revive_hp`(回血%)+ `revive_count`(次数上限); - 无触发组时写空对象 `{}`,**不要省略字段**。 diff --git a/put/server/index.js b/put/server/index.js index 1285905c..3d72c29a 100644 --- a/put/server/index.js +++ b/put/server/index.js @@ -215,6 +215,9 @@ function renderSingleHero(h) { if (e.s_lv) eparts.push(`s_lv: SkillLv.Lv${e.s_lv}`) if (e.name) eparts.push(`name: ${JSON.stringify(e.name)}`) eparts.push(`t_num: ${e.t_num}`) + // 概率参数:仅攻/受击触发消费;缺省(100/0)不输出,保持生成 TS 干净 + if (e.t_chance != null && e.t_chance < 100) eparts.push(`t_chance: ${e.t_chance}`) + if (e.pity_add != null && e.pity_add > 0) eparts.push(`pity_add: ${e.pity_add}`) if (e.overrides && Object.keys(e.overrides).length) eparts.push(`overrides: ${serializeOverrides(e.overrides)}`) if (e.desc) eparts.push(`desc: ${JSON.stringify(e.desc)}`) push(` { ${eparts.join(', ')} },`) @@ -351,6 +354,8 @@ function csvTrigger(grp) { const name = e.name || base?.name || '' const ov = e.overrides || {} const parts = [`t_num${e.t_num}`] + // 攻/受击组附带概率信息(缺省 100 不展示) + if (e.t_chance != null && e.t_chance < 100) parts.push(`概率${e.t_chance}%`) if (ov.ap != null) parts.push(`ap${ov.ap}`) const desc = e.desc || '' return `${sid} ${name}(${parts.join(';')}):${desc}` diff --git a/put/web/src/App.vue b/put/web/src/App.vue index 4f464c58..3ca1220e 100644 --- a/put/web/src/App.vue +++ b/put/web/src/App.vue @@ -165,11 +165,11 @@

触发技能(lv4 激活)

- - - - - + + + + +
@@ -380,7 +380,15 @@ 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}`, ...overrideParts(ov)] + const parts = [`t_num${e?.t_num}`] + // 攻/受击组附带概率与保底信息(缺省 100%/0 不展示) + if (tk === 'atking' || tk === 'atked') { + if (e?.t_chance != null && e.t_chance < 100) { + parts.push(`概率${e.t_chance}%`) + if (e.pity_add > 0) parts.push(`保底+${e.pity_add}%`) + } + } + parts.push(...overrideParts(ov)) lines.push(`${tk}: ${sid} ${name} lv${minLv} ${parts.join(' ')}`) } } diff --git a/put/web/src/components/TemplateManager.vue b/put/web/src/components/TemplateManager.vue index 36dd504f..e2fea502 100644 --- a/put/web/src/components/TemplateManager.vue +++ b/put/web/src/components/TemplateManager.vue @@ -32,6 +32,8 @@ {{ p.uuid }} {{ skillName(p.uuid) }} · t_num {{ p.entry.t_num }} + · + 概率 {{ p.entry.t_chance }}% · lv{{ p.entry.lv }} @@ -129,6 +131,14 @@ + diff --git a/put/web/src/components/TriggerGroupEditor.vue b/put/web/src/components/TriggerGroupEditor.vue index 9586ba84..cd686df7 100644 --- a/put/web/src/components/TriggerGroupEditor.vue +++ b/put/web/src/components/TriggerGroupEditor.vue @@ -81,6 +81,13 @@ function removeGroup(sid) { } function addEntry(group) { const lastLv = group.length ? group[group.length - 1].lv : 4 - group.push({ lv: lastLv + 3, s_lv: 2, name: '', t_num: 3, overrides: {}, desc: '' }) + const entry = { lv: lastLv + 3, s_lv: 2, name: '', t_num: 3, overrides: {}, desc: '' } + // 概率参数沿袭组内末档(攻/受击触发才生效) + if (chanceVisible.value && group.length) { + const last = group[group.length - 1] + entry.t_chance = last.t_chance ?? null + entry.pity_add = last.pity_add ?? null + } + group.push(entry) } diff --git a/put/web/src/constants.js b/put/web/src/constants.js index 4518eec2..ef53103d 100644 --- a/put/web/src/constants.js +++ b/put/web/src/constants.js @@ -117,7 +117,7 @@ export function defaultHero() { dodge: null, // 闪避率(null = 全局默认 15,填值覆盖) accuracy: null, // 命中率(null = 全局默认 10,填值覆盖) skills: [], // [{uuid,name,cd,cdExpr,overrides,desc,lv_entries:[{lv,s_lv,overrides,desc}]}] - atking: {}, // {uuid:[{lv,s_lv,name,t_num,overrides,desc}]} + atking: {}, // {uuid:[{lv,s_lv,name,t_num,t_chance?,pity_add?,overrides,desc}]} t_chance/pity_add 仅攻/受击组生效 atked: {}, fstart: {}, fend: {},