From 6e95e014faa5dcaa54ef627adcfa7d0e2eb6c41a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=94=E5=BF=B5?= <12574910+72wo@users.noreply.github.com> Date: Wed, 15 Apr 2026 22:16:56 +0800 Subject: [PATCH] 1 --- logic/service/fight/effect/169.go | 17 ++++++---- logic/service/fight/effect/effect_4_5.go | 7 ++-- logic/service/fight/effect/effect_76.go | 12 ++++--- logic/service/fight/effect/effect_info_map.go | 2 +- .../fight/effect/skill_target_helper.go | 34 +++++++++++++++++++ logic/service/fight/group_legacy.go | 6 +++- 6 files changed, 63 insertions(+), 15 deletions(-) create mode 100644 logic/service/fight/effect/skill_target_helper.go diff --git a/logic/service/fight/effect/169.go b/logic/service/fight/effect/169.go index 234662b7d..2d3df6f53 100644 --- a/logic/service/fight/effect/169.go +++ b/logic/service/fight/effect/169.go @@ -10,20 +10,23 @@ type Effect169 struct { } func (e *Effect169) OnSkill() bool { - chance := e.Args()[1].IntPart() success, _, _ := e.Input.Player.Roll(int(chance), 100) if success { - // 添加异常状态 - statusEffect := e.CarrierInput().InitEffect(input.EffectType.Status, int(e.Args()[2].IntPart())) // 以麻痹为例 - if statusEffect != nil { - e.TargetInput().AddEffect(e.CarrierInput(), statusEffect) - } + e.ForEachOpponentSlot(func(target *input.Input) bool { + if target == nil { + return true + } + statusEffect := e.CarrierInput().InitEffect(input.EffectType.Status, int(e.Args()[2].IntPart())) + if statusEffect != nil { + target.AddEffect(e.CarrierInput(), statusEffect) + } + return true + }) } return true } func init() { input.InitEffect(input.EffectType.Skill, 169, &Effect169{}) - } diff --git a/logic/service/fight/effect/effect_4_5.go b/logic/service/fight/effect/effect_4_5.go index 7a50add21..44e20744d 100644 --- a/logic/service/fight/effect/effect_4_5.go +++ b/logic/service/fight/effect/effect_4_5.go @@ -1,6 +1,7 @@ package effect import ( + "blazing/logic/service/fight/input" "blazing/logic/service/fight/node" ) @@ -41,14 +42,16 @@ type Effect5 struct { // 技能触发时调用 // ----------------------------------------------------------- func (e *Effect5) Skill_Use() bool { - // 概率判定 ok, _, _ := e.Input.Player.Roll(e.SideEffectArgs[1], 100) if !ok { return true } - e.Ctx().Opp.SetProp(e.Ctx().Our, int8(e.SideEffectArgs[0]), int8(e.SideEffectArgs[2])) + forEachEnemyTargetBySkill(e.Ctx().Our, e.Ctx().Opp, e.Ctx().SkillEntity, func(target *input.Input) bool { + target.SetProp(e.Ctx().Our, int8(e.SideEffectArgs[0]), int8(e.SideEffectArgs[2])) + return true + }) return true } diff --git a/logic/service/fight/effect/effect_76.go b/logic/service/fight/effect/effect_76.go index 19651076b..f130d1752 100644 --- a/logic/service/fight/effect/effect_76.go +++ b/logic/service/fight/effect/effect_76.go @@ -22,15 +22,19 @@ type Effect76 struct { } func (e *Effect76) OnSkill() bool { - // 概率判定 ok, _, _ := e.Input.Player.Roll(int(e.Args()[0].IntPart()), 100) if !ok { return true } - e.Ctx().Opp.Damage(e.Ctx().Our, &info.DamageZone{ - Type: info.DamageType.Fixed, - Damage: alpacadecimal.NewFromInt(int64(e.SideEffectArgs[2])), + + damage := alpacadecimal.NewFromInt(int64(e.SideEffectArgs[2])) + forEachEnemyTargetBySkill(e.Ctx().Our, e.Ctx().Opp, e.Ctx().SkillEntity, func(target *input.Input) bool { + target.Damage(e.Ctx().Our, &info.DamageZone{ + Type: info.DamageType.Fixed, + Damage: damage, + }) + return true }) return true } diff --git a/logic/service/fight/effect/effect_info_map.go b/logic/service/fight/effect/effect_info_map.go index e484597c8..7db483496 100644 --- a/logic/service/fight/effect/effect_info_map.go +++ b/logic/service/fight/effect/effect_info_map.go @@ -120,7 +120,7 @@ var effectInfoByID = map[int]string{ 164: "{0}回合内若受到攻击则有{1}%概率令对手{2}", 165: "{0}回合内每回合防御和特防等级+{1}", 166: "{0}回合内若对手使用属性攻击则{2}%对手{1}等级{3}", - 169: "{0}回合内每回合额外附加{1}%概率令对手{2}", + 169: "{0}回合内每回合额外附加{1}%概率令对方阵营全体{2}", 170: "若先出手,则免疫当回合伤害并回复1/{0}的最大体力值", 171: "{0}回合内自身使用属性技能时能较快出手", 172: "若后出手,则给予对方损伤的1/{0}会回复自己的体力", diff --git a/logic/service/fight/effect/skill_target_helper.go b/logic/service/fight/effect/skill_target_helper.go new file mode 100644 index 000000000..0bd454ecc --- /dev/null +++ b/logic/service/fight/effect/skill_target_helper.go @@ -0,0 +1,34 @@ +package effect + +import ( + "blazing/logic/service/fight/info" + "blazing/logic/service/fight/input" +) + +// forEachEnemyTargetBySkill 在普通情况下对单个目标生效; +// 当技能为 AtkType=3(仅自己)且当前目标仍在己方时,改为遍历敌方全部站位。 +func forEachEnemyTargetBySkill(carrier, target *input.Input, skill *info.SkillEntity, fn func(*input.Input) bool) { + if fn == nil { + return + } + if carrier == nil { + if target != nil { + fn(target) + } + return + } + if skill == nil || skill.XML.AtkType != 3 || !isSameSideTarget(carrier, target) { + if target != nil { + fn(target) + } + return + } + for _, opponent := range carrier.OpponentSlots() { + if opponent == nil { + continue + } + if !fn(opponent) { + return + } + } +} diff --git a/logic/service/fight/group_legacy.go b/logic/service/fight/group_legacy.go index 6a1f26d59..25cb19a6a 100644 --- a/logic/service/fight/group_legacy.go +++ b/logic/service/fight/group_legacy.go @@ -7,7 +7,11 @@ import ( "blazing/logic/service/fight/input" "blazing/modules/player/model" ) - +// const ( groupCmdReadyToFight uint32 = 7555 groupCmdReadyFightFinish uint32 = 7556