From fc420bfdb5203dfcbadf48026574cde0442981f9 Mon Sep 17 00:00:00 2001 From: xinian Date: Thu, 29 Jan 2026 16:43:32 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=9E=E7=8E=B0=E6=96=B0=E7=89=B9?= =?UTF-8?q?=E6=95=8820=E3=80=8121=E5=92=8C26=E7=9A=84=E6=A0=B8=E5=BF=83?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 特效20: 在被指定技能命中前免疫伤害 特效21: 除指定技能外保留1点体力 特效26: 战斗属性增减逻辑 --- logic/service/fight/boss/NewSeIdx_20.go | 31 +++++++++++++++++++++++++ logic/service/fight/boss/NewSeIdx_21.go | 27 +++++++++++++++++++++ logic/service/fight/boss/NewSeIdx_26.go | 6 +++-- 3 files changed, 62 insertions(+), 2 deletions(-) diff --git a/logic/service/fight/boss/NewSeIdx_20.go b/logic/service/fight/boss/NewSeIdx_20.go index 61c87cae..6a0131a9 100644 --- a/logic/service/fight/boss/NewSeIdx_20.go +++ b/logic/service/fight/boss/NewSeIdx_20.go @@ -1,15 +1,46 @@ package effect import ( + "blazing/logic/service/fight/info" "blazing/logic/service/fight/input" + + "github.com/alpacahq/alpacadecimal" + "github.com/samber/lo" ) // 20. 在被ID为xxx的技能命中前,任何技能都不能伤害自身;(a1-a8: 有效技能ID) // TODO: 实现在被ID为xxx的技能命中前,任何技能都不能伤害自身;(a1-a8: 有效技能ID)的核心逻辑 type NewSel20 struct { NewSel0 + can bool } +func (e *NewSel20) DamageLockEx(t *info.DamageZone) bool { + //魂印特性有不在场的情况,绑定时候将精灵和特性绑定 + if e.ID().GetCatchTime() != e.Ctx().Our.CurrentPet.Info.CatchTime { + return true + } + if e.Ctx().SkillEntity == nil { + return true + } + if t.Type != info.DamageType.Red { + return true + } + _, ok := lo.Find(e.SideEffectArgs, func(sid int) bool { + return sid == e.Ctx().SkillEntity.ID + }) + if ok { + e.can = true + } + + if e.can { + return true + } + + t.Damage = alpacadecimal.Zero + + return true +} func init() { input.InitEffect(input.EffectType.NewSel, 20, &NewSel20{}) } diff --git a/logic/service/fight/boss/NewSeIdx_21.go b/logic/service/fight/boss/NewSeIdx_21.go index 26417967..b9cf4312 100644 --- a/logic/service/fight/boss/NewSeIdx_21.go +++ b/logic/service/fight/boss/NewSeIdx_21.go @@ -1,7 +1,11 @@ package effect import ( + "blazing/logic/service/fight/info" "blazing/logic/service/fight/input" + + "github.com/alpacahq/alpacadecimal" + "github.com/samber/lo" ) // 21. 除ID为xxx的技能外,任何能将自身体力降为 0 的技能都会使自身余下 1 体力;(a1-a8: 有效技能ID) @@ -10,6 +14,29 @@ type NewSel21 struct { NewSel0 } +func (e *NewSel21) DamageLockEx(t *info.DamageZone) bool { + //魂印特性有不在场的情况,绑定时候将精灵和特性绑定 + if e.ID().GetCatchTime() != e.Ctx().Our.CurrentPet.Info.CatchTime { + return true + } + if e.Ctx().SkillEntity == nil { + return true + } + if t.Type != info.DamageType.Red { + return true + } + _, ok := lo.Find(e.SideEffectArgs, func(sid int) bool { + return sid == e.Ctx().SkillEntity.ID + }) + if !ok { + t.Damage = alpacadecimal.Min(t.Damage, e.Ctx().Opp.CurrentPet.GetHP().Sub(alpacadecimal.NewFromInt(1))) + } + + + + return true +} + func init() { input.InitEffect(input.EffectType.NewSel, 21, &NewSel21{}) } diff --git a/logic/service/fight/boss/NewSeIdx_26.go b/logic/service/fight/boss/NewSeIdx_26.go index 8584a927..549a0fc0 100644 --- a/logic/service/fight/boss/NewSeIdx_26.go +++ b/logic/service/fight/boss/NewSeIdx_26.go @@ -6,13 +6,15 @@ import ( ) // 26. 给一种 battle_attr 增加固定 n 点属性值;(a1: battle_attr, a2: n) -// TODO: 实现给一种 battle_attr 增加固定 n 点属性值;(a1: battle_attr, a2: n)的核心逻辑 type NewSel26 struct { NewSel0 } func (e *NewSel26) TurnStart(fattack *action.SelectSkillAction, sattack *action.SelectSkillAction) { - + e.Ctx().Our.CurrentPet.Info.Prop[int(e.Args()[0].IntPart())] += uint32(e.Args()[1].IntPart()) +} +func (e *NewSel26) TurnEnd() { + e.Ctx().Our.CurrentPet.Info.Prop[int(e.Args()[0].IntPart())] -= uint32(e.Args()[1].IntPart()) } func init() { input.InitEffect(input.EffectType.NewSel, 26, &NewSel26{})