From a198100547bbb1f39de1980d623dfea471dadaf5 Mon Sep 17 00:00:00 2001 From: xinian Date: Tue, 31 Mar 2026 10:02:48 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=95=88=E6=9E=9C1071?= =?UTF-8?q?=E7=9A=84=E6=81=A2=E5=A4=8D=E5=88=A4=E5=AE=9A=E5=8F=8A=E5=AD=90?= =?UTF-8?q?=E6=95=88=E6=9E=9C=E5=AE=9E=E7=8E=B0=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/effect-refactor-summary-2026-03-28.md | 28 ++++++++++++--- .../task-091-effects-1067-1071.md | 35 ------------------- logic/service/fight/effect/1067_1071.go | 33 +++++------------ logic/service/fight/effect/effect_info_map.go | 5 +++ 4 files changed, 37 insertions(+), 64 deletions(-) delete mode 100644 docs/effect-unimplemented-tasks/task-091-effects-1067-1071.md diff --git a/docs/effect-refactor-summary-2026-03-28.md b/docs/effect-refactor-summary-2026-03-28.md index 726103bf7..61cb7c872 100644 --- a/docs/effect-refactor-summary-2026-03-28.md +++ b/docs/effect-refactor-summary-2026-03-28.md @@ -261,9 +261,9 @@ JSON 中存在但代码未注册(示例前 60 项): --- -## 9. 2026-03-31 增量记录 +## 16. 2026-03-31 增量记录 -### 9.1 本轮补齐的 effect +### 16.1 本轮补齐的 effect - `764` `{0}回合内若对手使用攻击技能降低对手最大体力的1/{1}` - `765` `{0}回合对手无法使自身能力出现提升状态` - `766` 消除对手能力提升状态,消除成功则`{0}`回合内对手造成的攻击伤害不超过`{1}`点 @@ -333,14 +333,14 @@ JSON 中存在但代码未注册(示例前 60 项): ## 9. 2026-03-29 增量记录(二) -### 9.1 本轮补齐的 effect +### 16.1 本轮补齐的 effect - `668` 若对手处于能力提升状态则先制额外+1 - `669` 当回合击败对手则下回合自身攻击先制+1 - `670` `{0}`回合,每回合附加`{1}`的`{2}`值的`{3}%`的百分比伤害 - `671` 若对手处于异常状态则恢复造成伤害的`{0}%`的体力 - `672` 当回合击败对手则恢复自身全部体力 -### 9.2 实现口径 +### 16.2 实现口径 - `668` 复用 `539` 的条件先制模式,在 `ComparePre()` 中于对手存在能力提升状态时直接给当前技能先制+1。 - `669` 按“当回合击败后,为下回合攻击技能生效”处理:在 `SwitchOut()` 中标记击败成立,下一回合 `ComparePre()` 仅对攻击技能追加先制+1。 - `670` 参照 `419` 与 `593` 的组合语义,实现为回合类附加伤害:效果持续期间每次使用技能时,附加一次基于指定目标属性值的固定伤害。 @@ -545,3 +545,23 @@ JSON 中存在但代码未注册(示例前 60 项): ### 15.4 本轮验证 - `cd /workspace/logic && go test ./service/fight/effect` - `cd /workspace/logic && go build ./...` + +## 16. 2026-03-31 增量记录 + +### 9.1 本轮补齐的 effect +- `1067` `{0}回合内每回合使用技能恢复自身最大体力的1/{1},恢复体力时若自身体力低于最大体力的1/{2}则恢复效果转变为吸取对手最大体力的1/{3}` +- `1068` 下`{0}`回合受到致命伤害时残留`{1}`点体力 +- `1069` 反转自身能力下降状态,反转成功则`{0}`回合内躲避所有攻击 +- `1070` 对手处于能力下降状态时自身先制+1 +- `1071` `{0}`回合内若对手恢复体力(药剂恢复除外),则`{1}`回合内自身攻击附加`{2}`点固定伤害 + +### 16.2 实现口径 +- `1067` 复用 `707` 的“每回合使用技能后回复”模式,在低血线时改为按对手最大体力比例吸取并同步治疗自身。 +- `1068` 通过回合子效果在致命伤害结算前锁定剩余体力值,满足“下{0}回合保留{1}点体力”。 +- `1069` 先反转自身全部能力下降,再在成功时挂载受击 MISS 子效果,仅拦截攻击技能。 +- `1070` 复用现有 `1243` 同类优先级判断,对手存在任一能力下降时自身先制+1。 +- `1071` 在对手身上挂恢复监听子效果,排除药剂恢复;触发后给自身挂固定伤害增益子效果。 + +### 16.3 本轮同步项 +- 已补 `logic/service/fight/effect/effect_info_map.go` 中 `1067-1071` 的说明映射。 +- `docs/effect-unimplemented-tasks/task-091-effects-1067-1071.md` 已删除。 diff --git a/docs/effect-unimplemented-tasks/task-091-effects-1067-1071.md b/docs/effect-unimplemented-tasks/task-091-effects-1067-1071.md deleted file mode 100644 index 79b76884e..000000000 --- a/docs/effect-unimplemented-tasks/task-091-effects-1067-1071.md +++ /dev/null @@ -1,35 +0,0 @@ -# Task 091: Effects 1067-1071 - -## 目标 - -- 补齐以下 5 个(或最后一组不足 5 个)当前判定未实现的 skill effect。 -- 实现位置优先放在 `logic/service/fight/effect/`。 -- 如 effect 需要展示说明,同步更新 `logic/service/fight/effect/effect_info_map.go`。 -- 完成后至少执行:`cd /workspace/logic && go test ./service/fight/effect`。 - -## Effect 列表 - -### Effect 1067 -- `argsNum`: `4` -- `info`: `{0}回合内每回合使用技能恢复自身最大体力的1/{1},恢复体力时若自身体力低于最大体力的1/{2}则恢复效果转变为吸取对手最大体力的1/{3}` - -### Effect 1068 -- `argsNum`: `2` -- `info`: `下{0}回合受到致命伤害时残留{1}点体力` - -### Effect 1069 -- `argsNum`: `1` -- `info`: `反转自身能力下降状态,反转成功则{0}回合内躲避所有攻击` - -### Effect 1070 -- `argsNum`: `0` -- `info`: `对手处于能力下降状态时自身先制+1` - -### Effect 1071 -- `argsNum`: `3` -- `info`: `{0}回合内若对手恢复体力(药剂恢复除外),则{1}回合内自身攻击附加{2}点固定伤害` - -## 备注 - -- 该清单按当前仓库静态注册结果生成;如果某个 effect 实际通过其他模块或运行时路径实现,需要先复核后再落代码。 -- 对 `201`、`445` 这类占位 effect,优先补核心逻辑或补充明确的不可实现说明。 diff --git a/logic/service/fight/effect/1067_1071.go b/logic/service/fight/effect/1067_1071.go index 792a519cb..4815759dd 100644 --- a/logic/service/fight/effect/1067_1071.go +++ b/logic/service/fight/effect/1067_1071.go @@ -25,7 +25,7 @@ func (e *Effect1067) Skill_Use() bool { type Effect1067Sub struct{ RoundEffectArg0Base } -func (e *Effect1067Sub) OnSkill() bool { +func (e *Effect1067Sub) Skill_Use() bool { if len(e.Args()) < 4 || e.Args()[1].Cmp(alpacadecimal.Zero) <= 0 { return true } @@ -146,10 +146,13 @@ func (e *Effect1071) Skill_Use() bool { type Effect1071Sub struct{ RoundEffectArg0Base } -func (e *Effect1071Sub) Heal_Pre(_ action.BattleActionI, value *int) bool { +func (e *Effect1071Sub) Heal_Pre(ac action.BattleActionI, value *int) bool { if value == nil || *value <= 0 || len(e.Args()) < 3 { return true } + if _, ok := ac.(*action.UseItemAction); ok { + return true + } sub := e.Ctx().Opp.InitEffect(input.EffectType.Sub, 10711, int(e.Args()[1].IntPart()), int(e.Args()[2].IntPart())) if sub != nil { e.Ctx().Opp.AddEffect(e.Ctx().Opp, sub) @@ -157,36 +160,16 @@ func (e *Effect1071Sub) Heal_Pre(_ action.BattleActionI, value *int) bool { return true } -type Effect1071BoostSub struct { - node.EffectNode - remaining int - damage alpacadecimal.Decimal -} - -func (e *Effect1071BoostSub) SetArgs(t *input.Input, a ...int) { - e.EffectNode.SetArgs(t, a...) - e.Duration(-1) - if len(a) > 0 { - e.remaining = a[0] - } - if len(a) > 1 { - e.damage = alpacadecimal.NewFromInt(int64(a[1])) - } -} +type Effect1071BoostSub struct{ RoundEffectArg0Base } func (e *Effect1071BoostSub) OnSkill() bool { - if e.remaining <= 0 || e.damage.Cmp(alpacadecimal.Zero) <= 0 { - e.Alive(false) + if len(e.Args()) < 2 || e.Args()[1].Cmp(alpacadecimal.Zero) <= 0 { return true } if e.Ctx().SkillEntity == nil || e.Ctx().SkillEntity.Category() == info.Category.STATUS { return true } - e.Ctx().Opp.Damage(e.Ctx().Our, &info.DamageZone{Type: info.DamageType.Fixed, Damage: e.damage}) - e.remaining-- - if e.remaining <= 0 { - e.Alive(false) - } + e.Ctx().Opp.Damage(e.Ctx().Our, &info.DamageZone{Type: info.DamageType.Fixed, Damage: e.Args()[1]}) return true } diff --git a/logic/service/fight/effect/effect_info_map.go b/logic/service/fight/effect/effect_info_map.go index ab3b387c6..d5152879c 100644 --- a/logic/service/fight/effect/effect_info_map.go +++ b/logic/service/fight/effect/effect_info_map.go @@ -596,6 +596,11 @@ var effectInfoByID = map[int]string{ 1049: "击败对手则自身全属性+{0}", 1050: "未击败对手则下{0}回合攻击使对手{1}%{2}", 1051: "对手体力高于{0}则将对手体力减少到{1}", + 1067: "{0}回合内每回合使用技能恢复自身最大体力的1/{1},恢复体力时若自身体力低于最大体力的1/{2}则恢复效果转变为吸取对手最大体力的1/{3}", + 1068: "下{0}回合受到致命伤害时残留{1}点体力", + 1069: "反转自身能力下降状态,反转成功则{0}回合内躲避所有攻击", + 1070: "对手处于能力下降状态时自身先制+1", + 1071: "{0}回合内若对手恢复体力(药剂恢复除外),则{1}回合内自身攻击附加{2}点固定伤害", 1097: "造成的攻击伤害若低于280则令对手疲惫;未击败对手则令对手下1回合使用的攻击技能无效;技能结束后对手体力值高于0,则50%进行一次额外行动以触发星皇之怒(星皇之怒:50%令对手失明,未触发则2回合内令对手使用的属性技能无效)", 1098: "致命一击率提升20%,每次使用增加20%,最高100%;打出致命一击后令自身下2次技能触发的星皇之怒威力不再减少;技能结束后对手体力值高于0,则50%进行一次额外行动以触发星皇之怒(星皇之怒:下2次自身使用的攻击技能先制+2)", 1099: "消除对手能力提升状态,消除成功则自身免疫下{0}次受到的异常状态",