From 0f524aab851f397d1543bc5d8145cdd8a6387181 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=94=E5=BF=B5?= <1@72wo.cn> Date: Sun, 4 Jan 2026 21:41:10 +0800 Subject: [PATCH] =?UTF-8?q?```=20fix(fight):=20=E4=BF=AE=E5=A4=8D=E6=88=98?= =?UTF-8?q?=E6=96=97=E5=91=BD=E4=B8=AD=E5=88=A4=E6=96=AD=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E5=B9=B6=E7=A7=BB=E9=99=A4=E5=86=97=E4=BD=99=E5=91=BD=E4=B8=AD?= =?UTF-8?q?=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复 NewSel32 中的命中判断,将 Side 字段改为 Hit 字段 - 移除 EffectAttackMiss 中的冗余命中判断逻辑 - 移除 EffectDefeatTrigger 中的重复命中检查 - 移除 EffectPhysicalAttackAddStatus 中的冗余命中判断 - 移除多个效果文件中的重复命中检查逻辑 - 修正 Effect136 中的命中处理逻辑,确保在技能命中时正确触发 - 移除其他多个效果中的重复命中检查代码 ``` --- logic/service/fight/boss/NewSeIdx_32.go | 2 +- .../service/fight/effect/EffectAttackMiss.go | 4 ---- .../fight/effect/EffectDefeatTrigger.go | 4 +--- .../effect/EffectPhysicalAttackAddStatus.go | 4 ---- logic/service/fight/effect/effect_1.go | 3 --- logic/service/fight/effect/effect_101.go | 3 --- logic/service/fight/effect/effect_104_109.go | 4 +--- logic/service/fight/effect/effect_105.go | 3 --- logic/service/fight/effect/effect_107.go | 3 --- logic/service/fight/effect/effect_110.go | 4 +--- logic/service/fight/effect/effect_111.go | 3 --- logic/service/fight/effect/effect_112.go | 4 +--- logic/service/fight/effect/effect_115.go | 4 +--- logic/service/fight/effect/effect_116.go | 3 --- logic/service/fight/effect/effect_117.go | 3 --- logic/service/fight/effect/effect_119_123.go | 14 ++---------- logic/service/fight/effect/effect_124_126.go | 3 --- logic/service/fight/effect/effect_125.go | 6 ++--- logic/service/fight/effect/effect_128.go | 4 +--- logic/service/fight/effect/effect_13.go | 4 +--- logic/service/fight/effect/effect_130.go | 3 --- logic/service/fight/effect/effect_131.go | 4 ---- logic/service/fight/effect/effect_134.go | 4 +--- logic/service/fight/effect/effect_135.go | 4 +--- logic/service/fight/effect/effect_136.go | 15 +++++++++---- logic/service/fight/effect/effect_145.go | 4 ---- logic/service/fight/effect/effect_147_159.go | 10 +-------- logic/service/fight/effect/effect_151.go | 4 ---- logic/service/fight/effect/effect_1605.go | 3 --- logic/service/fight/effect/effect_180.go | 4 +--- logic/service/fight/effect/effect_195.go | 4 +--- logic/service/fight/effect/effect_21.go | 8 +------ logic/service/fight/effect/effect_28.go | 3 --- logic/service/fight/effect/effect_29.go | 3 --- logic/service/fight/effect/effect_31.go | 3 --- logic/service/fight/effect/effect_32.go | 4 +--- logic/service/fight/effect/effect_34.go | 4 +--- logic/service/fight/effect/effect_36.go | 4 +--- logic/service/fight/effect/effect_39.go | 4 +--- logic/service/fight/effect/effect_41.go | 3 --- logic/service/fight/effect/effect_42.go | 4 +--- logic/service/fight/effect/effect_43.go | 4 +--- logic/service/fight/effect/effect_44.go | 4 +--- logic/service/fight/effect/effect_46.go | 4 +--- logic/service/fight/effect/effect_466.go | 4 +--- logic/service/fight/effect/effect_478.go | 8 ++----- logic/service/fight/effect/effect_48.go | 4 ---- logic/service/fight/effect/effect_49.go | 4 +--- logic/service/fight/effect/effect_4_5.go | 3 --- logic/service/fight/effect/effect_50.go | 4 +--- logic/service/fight/effect/effect_53_90.go | 3 --- logic/service/fight/effect/effect_54.go | 4 +--- logic/service/fight/effect/effect_566.go | 4 +--- logic/service/fight/effect/effect_57.go | 4 +--- logic/service/fight/effect/effect_58.go | 8 ++----- logic/service/fight/effect/effect_59.go | 4 +--- logic/service/fight/effect/effect_60.go | 4 +--- logic/service/fight/effect/effect_62.go | 4 ---- logic/service/fight/effect/effect_65.go | 3 --- logic/service/fight/effect/effect_68.go | 4 +--- logic/service/fight/effect/effect_69.go | 4 +--- logic/service/fight/effect/effect_7.go | 8 ++----- logic/service/fight/effect/effect_71.go | 4 +--- logic/service/fight/effect/effect_72.go | 21 ++++++++++++------ logic/service/fight/effect/effect_73.go | 3 --- logic/service/fight/effect/effect_74_75.go | 3 --- logic/service/fight/effect/effect_76.go | 4 +--- logic/service/fight/effect/effect_77.go | 4 +--- logic/service/fight/effect/effect_776.go | 3 --- logic/service/fight/effect/effect_79.go | 3 --- logic/service/fight/effect/effect_8.go | 4 +--- logic/service/fight/effect/effect_80.go | 3 --- logic/service/fight/effect/effect_81.go | 8 ++----- logic/service/fight/effect/effect_83.go | 12 +++------- logic/service/fight/effect/effect_87.go | 3 --- logic/service/fight/effect/effect_88.go | 4 +--- logic/service/fight/effect/effect_89.go | 3 --- logic/service/fight/effect/effect_93.go | 4 +--- logic/service/fight/effect/effect_95.go | 3 --- logic/service/fight/effect/effect_98.go | 3 --- .../effect_EffectConditionalAddDamage.go | 3 --- logic/service/fight/effect/effect_attr.go | 3 --- logic/service/fight/effect/effect_prop.go | 3 --- .../service/fight/effect/sterStatusEffects.go | 3 --- logic/service/fight/fightc.go | 22 ++++++++++--------- logic/service/fight/info/BattleSkillEntity.go | 10 ++++----- logic/service/fight/input/input.go | 19 ++++++++++------ logic/service/fight/input/interface.go | 2 +- logic/service/fight/loop.go | 2 +- logic/service/fight/node/node.go | 15 +++++++------ 90 files changed, 117 insertions(+), 331 deletions(-) diff --git a/logic/service/fight/boss/NewSeIdx_32.go b/logic/service/fight/boss/NewSeIdx_32.go index e6d6e9fa8..37ee50aec 100644 --- a/logic/service/fight/boss/NewSeIdx_32.go +++ b/logic/service/fight/boss/NewSeIdx_32.go @@ -26,7 +26,7 @@ func (e *NewSel32) OnSkill() bool { if e.Ctx().SkillEntity.AttackTime == 0 { return true } - if !e.Ctx().SkillEntity.Side { + if !e.Ctx().SkillEntity.Hit { return true } success, _, _ := e.Input.Player.Roll(int(e.Args()[0].Div(alpacadecimal.NewFromInt(10)).IntPart()), 100) diff --git a/logic/service/fight/effect/EffectAttackMiss.go b/logic/service/fight/effect/EffectAttackMiss.go index 2e487ea9b..d2e263849 100644 --- a/logic/service/fight/effect/EffectAttackMiss.go +++ b/logic/service/fight/effect/EffectAttackMiss.go @@ -46,10 +46,6 @@ func registerAttackMissEffects() { // 核心逻辑:技能命中时,若为目标攻击类型则强制miss // ----------------------------------------------------------- func (e *EffectAttackMiss) Skill_Hit_ex() bool { - // 命中判定失败,不触发 - if !e.Hit() { - return true - } // 技能为空时不处理 skill := e.Ctx().SkillEntity diff --git a/logic/service/fight/effect/EffectDefeatTrigger.go b/logic/service/fight/effect/EffectDefeatTrigger.go index b19ee1ddf..8b82167ee 100644 --- a/logic/service/fight/effect/EffectDefeatTrigger.go +++ b/logic/service/fight/effect/EffectDefeatTrigger.go @@ -47,9 +47,7 @@ func registerDefeatTriggerEffects() { // ----------------------------------------------------------- // OnSkill:命中时标记当次攻击可触发效果 func (e *EffectDefeatTrigger) OnSkill() bool { - if !e.Hit() { - return true - } + e.can = true // 标记当次攻击有效 return true } diff --git a/logic/service/fight/effect/EffectPhysicalAttackAddStatus.go b/logic/service/fight/effect/EffectPhysicalAttackAddStatus.go index e7f397e26..121027578 100644 --- a/logic/service/fight/effect/EffectPhysicalAttackAddStatus.go +++ b/logic/service/fight/effect/EffectPhysicalAttackAddStatus.go @@ -47,10 +47,6 @@ func registerPhysicalAttackAddStatusEffects() { // 核心逻辑:受物理攻击时触发(覆盖父类方法) // ----------------------------------------------------------- func (e *EffectPhysicalAttackAddStatus) Skill_Use_ex() bool { - // 1. 命中判定失败,不触发 - if !e.Hit() { - return true - } // 2. 技能为空或非物理攻击,不触发 skill := e.Ctx().SkillEntity diff --git a/logic/service/fight/effect/effect_1.go b/logic/service/fight/effect/effect_1.go index af96790b9..3589b12bb 100644 --- a/logic/service/fight/effect/effect_1.go +++ b/logic/service/fight/effect/effect_1.go @@ -25,9 +25,6 @@ func init() { // 命中之后 func (e *Effect1) OnSkill() bool { - if !e.Hit() { - return true - } e.Input.Heal( e.Ctx().Our, &action.SelectSkillAction{}, e.Ctx().Our.SumDamage.Div(alpacadecimal.NewFromInt(2)), diff --git a/logic/service/fight/effect/effect_101.go b/logic/service/fight/effect/effect_101.go index 5ffedfa26..9c843f8e6 100644 --- a/logic/service/fight/effect/effect_101.go +++ b/logic/service/fight/effect/effect_101.go @@ -23,9 +23,6 @@ func init() { // 命中之后 func (e *Effect101) OnSkill() bool { - if !e.Hit() { - return true - } e.Input.Heal( e.Ctx().Our, &action.SelectSkillAction{}, e.Ctx().Our.SumDamage.Mul(e.Args()[0].Div(alpacadecimal.NewFromInt(100))), diff --git a/logic/service/fight/effect/effect_104_109.go b/logic/service/fight/effect/effect_104_109.go index ec3d7f7a4..8177dc2c6 100644 --- a/logic/service/fight/effect/effect_104_109.go +++ b/logic/service/fight/effect/effect_104_109.go @@ -51,9 +51,7 @@ func (e *Effect104) SetArgs(t *input.Input, a ...int) { // 技能触发时调用 // ----------------------------------------------------------- func (e *Effect104) OnSkill() bool { - if !e.Hit() { - return true - } + if !e.can { e.can = true return true diff --git a/logic/service/fight/effect/effect_105.go b/logic/service/fight/effect/effect_105.go index 92d43f177..98ee3c770 100644 --- a/logic/service/fight/effect/effect_105.go +++ b/logic/service/fight/effect/effect_105.go @@ -21,9 +21,6 @@ func init() { // 命中之后 func (e *Effect105) OnSkill() bool { - if !e.Hit() { - return true - } e.Input.Heal( e.Ctx().Our, &action.SelectSkillAction{}, e.Ctx().Our.SumDamage.Div(e.Args()[0]), diff --git a/logic/service/fight/effect/effect_107.go b/logic/service/fight/effect/effect_107.go index d33742fd2..fcf18d435 100644 --- a/logic/service/fight/effect/effect_107.go +++ b/logic/service/fight/effect/effect_107.go @@ -23,9 +23,6 @@ type Effect107 struct { // 我方使用效果 func (e *Effect107) Skill_Useed() bool { - if !e.Hit() { - return true - } d := e.Ctx().Our.SumDamage.Cmp(alpacadecimal.NewFromInt(int64(e.SideEffectArgs[0]))) //说明伤害小于N diff --git a/logic/service/fight/effect/effect_110.go b/logic/service/fight/effect/effect_110.go index 0c57014ad..302125f14 100644 --- a/logic/service/fight/effect/effect_110.go +++ b/logic/service/fight/effect/effect_110.go @@ -19,9 +19,7 @@ func (e *Effect110) SetArgs(t *input.Input, a ...int) { } func (e *Effect110) Skill_Use_ex() bool { - if !e.Hit() { - return true - } + if e.Ctx().SkillEntity != nil { if e.Ctx().SkillEntity.AttackTime != 0 { //没有闪避掉 return true diff --git a/logic/service/fight/effect/effect_111.go b/logic/service/fight/effect/effect_111.go index c0097e054..6f282ad32 100644 --- a/logic/service/fight/effect/effect_111.go +++ b/logic/service/fight/effect/effect_111.go @@ -15,9 +15,6 @@ type Effect111 struct { } func (e *Effect111) OnSkill() bool { - if !e.Hit() { - return true - } e.Ctx().Opp.Damage(e.Ctx().Our, &info.DamageZone{ Type: info.DamageType.Fixed, diff --git a/logic/service/fight/effect/effect_112.go b/logic/service/fight/effect/effect_112.go index 6ed5134a3..767cee095 100644 --- a/logic/service/fight/effect/effect_112.go +++ b/logic/service/fight/effect/effect_112.go @@ -24,9 +24,7 @@ func init() { // 命中之后 func (e *Effect112) OnSkill() bool { - if !e.Hit() { - return true - } + e.can = true e.Ctx().Our.Damage(e.Ctx().Our, &info.DamageZone{ Type: info.DamageType.Fixed, diff --git a/logic/service/fight/effect/effect_115.go b/logic/service/fight/effect/effect_115.go index 019e689b1..162961dc6 100644 --- a/logic/service/fight/effect/effect_115.go +++ b/logic/service/fight/effect/effect_115.go @@ -24,9 +24,7 @@ type Effect115 struct { } func (e *Effect115) OnSkill() bool { - if !e.Hit() { - return true - } + // 概率判定 ok, _, _ := e.Input.Player.Roll(int(e.Args()[0].IntPart()), 100) if !ok { diff --git a/logic/service/fight/effect/effect_116.go b/logic/service/fight/effect/effect_116.go index 9d865c199..d6af60145 100644 --- a/logic/service/fight/effect/effect_116.go +++ b/logic/service/fight/effect/effect_116.go @@ -33,9 +33,6 @@ func (e *Effect116) SetArgs(t *input.Input, a ...int) { } func (e *Effect116) Skill_Useed() bool { - if !e.Hit() { - return true - } if e.Input.FightC.IsFirst(e.Input.Player) { e.Ctx().Our.Heal(e.Ctx().Our, &action.SelectSkillAction{}, e.Ctx().Our.SumDamage.Div(alpacadecimal.NewFromInt(5))) diff --git a/logic/service/fight/effect/effect_117.go b/logic/service/fight/effect/effect_117.go index 45adbfa57..d0eda3293 100644 --- a/logic/service/fight/effect/effect_117.go +++ b/logic/service/fight/effect/effect_117.go @@ -31,9 +31,6 @@ func (e *Effect117) SetArgs(t *input.Input, a ...int) { } func (e *Effect117) OnSkill() bool { - if !e.Hit() { - return true - } if e.Input.FightC.IsFirst(e.Input.Player) { // 概率判定 diff --git a/logic/service/fight/effect/effect_119_123.go b/logic/service/fight/effect/effect_119_123.go index aa19471e5..1a5bafe22 100644 --- a/logic/service/fight/effect/effect_119_123.go +++ b/logic/service/fight/effect/effect_119_123.go @@ -18,9 +18,7 @@ type Effect119 struct { } func (e *Effect119) OnSkill() bool { - if !e.Hit() { - return true - } + e.can = true return true } @@ -67,9 +65,6 @@ type Effect120 struct { } func (e *Effect120) OnSkill() bool { - if !e.Hit() { - return true - } // 50%概率 ok, _, _ := e.Input.Player.Roll(50, 100) @@ -105,9 +100,6 @@ type Effect121 struct { } func (e *Effect121) OnSkill() bool { - if !e.Hit() { - return true - } // 检查属性是否相同 if e.Ctx().Our.CurrentPet.PetInfo.Type == e.Ctx().Opp.CurrentPet.PetInfo.Type { @@ -143,9 +135,7 @@ func (e *Effect122) Skill_Hit() bool { } func (e *Effect122) OnSkill() bool { - if !e.Hit() { - return true - } + if e.can { propIndex := int(e.Args()[0].IntPart()) chance := int(e.Args()[1].IntPart()) diff --git a/logic/service/fight/effect/effect_124_126.go b/logic/service/fight/effect/effect_124_126.go index 8dd43291c..b4171b0ea 100644 --- a/logic/service/fight/effect/effect_124_126.go +++ b/logic/service/fight/effect/effect_124_126.go @@ -15,9 +15,6 @@ type Effect124 struct { } func (e *Effect124) OnSkill() bool { - if !e.Hit() { - return true - } chance := int(e.Args()[0].IntPart()) changeAmount := int(e.Args()[1].IntPart()) diff --git a/logic/service/fight/effect/effect_125.go b/logic/service/fight/effect/effect_125.go index ccbff8ad0..1cac72676 100644 --- a/logic/service/fight/effect/effect_125.go +++ b/logic/service/fight/effect/effect_125.go @@ -27,9 +27,7 @@ func (e *Effect125) SetArgs(t *input.Input, a ...int) { } func (e *Effect125) DamageLock_ex(t *info.DamageZone) bool { - if !e.Hit() { - return true - } + if t.Type != info.DamageType.Red { return true } @@ -37,6 +35,6 @@ func (e *Effect125) DamageLock_ex(t *info.DamageZone) bool { if t.Damage.Cmp(e.Args()[1]) == -1 { return true } - t.Damage=e.Args()[1] + t.Damage = e.Args()[1] return true } diff --git a/logic/service/fight/effect/effect_128.go b/logic/service/fight/effect/effect_128.go index d4f3e537b..971244de0 100644 --- a/logic/service/fight/effect/effect_128.go +++ b/logic/service/fight/effect/effect_128.go @@ -30,9 +30,7 @@ func (e *Effect128) SetArgs(t *input.Input, a ...int) { } func (e *Effect128) DamageLock_ex(t *info.DamageZone) bool { - if !e.Hit() { - return true - } + if t.Type != info.DamageType.Red { return true } diff --git a/logic/service/fight/effect/effect_13.go b/logic/service/fight/effect/effect_13.go index 3f08af2e3..d5d2df4b1 100644 --- a/logic/service/fight/effect/effect_13.go +++ b/logic/service/fight/effect/effect_13.go @@ -26,9 +26,7 @@ func init() { // 技能触发时调用 // ----------------------------------------------------------- func (e *Effect13) OnSkill() bool { - if !e.Hit() { - return true - } + if gconv.Int(e.Ctx().Opp.CurrentPet.PetInfo.Type) == int(element.ElementTypeGrass) { return true } diff --git a/logic/service/fight/effect/effect_130.go b/logic/service/fight/effect/effect_130.go index a003d3aa4..a7fc26c4c 100644 --- a/logic/service/fight/effect/effect_130.go +++ b/logic/service/fight/effect/effect_130.go @@ -17,9 +17,6 @@ type Effect130 struct { // ----------------------------------------------------------- func (e *Effect130) OnSkill() bool { // 1. 命中判定失败,不触发 - if !e.Hit() { - return true - } if e.Ctx().Opp.CurrentPet.PetInfo.Gender != int(e.Args()[0].IntPart()) { return true diff --git a/logic/service/fight/effect/effect_131.go b/logic/service/fight/effect/effect_131.go index a4c67104c..130e18fb6 100644 --- a/logic/service/fight/effect/effect_131.go +++ b/logic/service/fight/effect/effect_131.go @@ -28,10 +28,6 @@ type Effect131 struct { // Damage_DIV_ex 受击前触发(核心伤害拦截节点) // 该方法在伤害计算前执行,适合修改/清零伤害实现免疫效果 func (e *Effect131) DamageLock_ex(t *info.DamageZone) bool { - // 1. 检查效果是否命中(未命中则不生效) - if !e.Hit() { - return true - } // 3. 获取配置的目标性别X(Args[0]存储X性别的数值) xGender := e.Args()[0].IntPart() diff --git a/logic/service/fight/effect/effect_134.go b/logic/service/fight/effect/effect_134.go index 2ddcc9e7a..574ed3af8 100644 --- a/logic/service/fight/effect/effect_134.go +++ b/logic/service/fight/effect/effect_134.go @@ -20,9 +20,7 @@ type Effect134 struct { } func (e *Effect134) DamageFloor(t *info.DamageZone) bool { - if !e.Hit() { - return true - } + // fmt.Println("Effect134_old", t.Damage.IntPart()) if t.Type == info.DamageType.Red { diff --git a/logic/service/fight/effect/effect_135.go b/logic/service/fight/effect/effect_135.go index d33e7465a..235aa3fdb 100644 --- a/logic/service/fight/effect/effect_135.go +++ b/logic/service/fight/effect/effect_135.go @@ -22,9 +22,7 @@ type Effect135 struct { } func (e *Effect135) DamageFloor(t *info.DamageZone) bool { - if !e.Hit() { - return true - } + // fmt.Println("Effect135_old", t.Damage.IntPart()) if t.Type == info.DamageType.Red { diff --git a/logic/service/fight/effect/effect_136.go b/logic/service/fight/effect/effect_136.go index e742d8fe8..ad9948775 100644 --- a/logic/service/fight/effect/effect_136.go +++ b/logic/service/fight/effect/effect_136.go @@ -21,11 +21,18 @@ func init() { } // 命中之后 -func (e *Effect136) OnSkill() bool { - if !e.Hit() { - heal := e.Ctx().Our.CurrentPet.GetMaxHP().Div(e.Args()[0]) - e.Ctx().Our.Heal(e.Ctx().Our, &action.SelectSkillAction{}, heal) +func (e *Effect136) Skill_Hit() bool { + + if e.Ctx().SkillEntity == nil { + return true } + if e.Ctx().SkillEntity.AttackTime != 0 { + return true + } + +heal := e.Ctx().Our.CurrentPet.GetMaxHP().Div(e.Args()[0]) + e.Ctx().Our.Heal(e.Ctx().Our, &action.SelectSkillAction{}, heal) + return true } diff --git a/logic/service/fight/effect/effect_145.go b/logic/service/fight/effect/effect_145.go index 92fbe6036..4562effce 100644 --- a/logic/service/fight/effect/effect_145.go +++ b/logic/service/fight/effect/effect_145.go @@ -20,10 +20,6 @@ func init() { // 命中之后 func (e *Effect145) OnSkill() bool { - if !e.Hit() { - return true - - } if e.Ctx().Opp.StatEffect_Exist(info.PetStatus.Poisoned) { heal := e.Ctx().Our.CurrentPet.GetMaxHP().Div(e.Args()[0]) diff --git a/logic/service/fight/effect/effect_147_159.go b/logic/service/fight/effect/effect_147_159.go index bf1480c02..310ea640e 100644 --- a/logic/service/fight/effect/effect_147_159.go +++ b/logic/service/fight/effect/effect_147_159.go @@ -15,9 +15,6 @@ type Effect147 struct { } func (e *Effect147) OnSkill() bool { - if !e.Hit() { - return true - } if e.Ctx().Our.FightC.IsFirst(e.Ctx().Our.Player) { return true @@ -47,9 +44,7 @@ type Effect148 struct { } func (e *Effect148) OnSkill() bool { - if !e.Hit() { - return true - } + if e.Ctx().Our.FightC.IsFirst(e.Ctx().Our.Player) { return true } @@ -77,9 +72,6 @@ type Effect159 struct { } func (e *Effect159) OnSkill() bool { - if !e.Hit() { - return true - } // 检查自身体力是否小于最大值的1/{0} maxHP := int64(e.Ctx().Our.CurrentPet.Info.MaxHp) diff --git a/logic/service/fight/effect/effect_151.go b/logic/service/fight/effect/effect_151.go index 007ed99d2..d70ad849e 100644 --- a/logic/service/fight/effect/effect_151.go +++ b/logic/service/fight/effect/effect_151.go @@ -19,10 +19,6 @@ func init() { // 命中之后 func (e *Effect151) OnSkill() bool { - if !e.Hit() { - return true - - } if e.Ctx().Opp.StatEffect_Exist(info.PetStatus.Burned) { chance := e.EffectNode.SideEffectArgs[0] diff --git a/logic/service/fight/effect/effect_1605.go b/logic/service/fight/effect/effect_1605.go index ba205e41c..3243f6272 100644 --- a/logic/service/fight/effect/effect_1605.go +++ b/logic/service/fight/effect/effect_1605.go @@ -23,9 +23,6 @@ func init() { // 技能触发时调用 // ----------------------------------------------------------- func (e *Effect1605) OnSkill() bool { - if !e.Hit() { - return true - } // n% 触发概率(默认 SideEffectArgs[0]) chance := e.SideEffectArgs[0] diff --git a/logic/service/fight/effect/effect_180.go b/logic/service/fight/effect/effect_180.go index 5d2c815b7..8e5b09b25 100644 --- a/logic/service/fight/effect/effect_180.go +++ b/logic/service/fight/effect/effect_180.go @@ -21,9 +21,7 @@ func init() { // 命中之后 func (e *Effect180) OnSkill() bool { - if !e.Hit() { - return true - } + e.Ctx().Opp.CancelTurn(e.Ctx().Our) return true } diff --git a/logic/service/fight/effect/effect_195.go b/logic/service/fight/effect/effect_195.go index 8c73e7c7c..d070b7cb5 100644 --- a/logic/service/fight/effect/effect_195.go +++ b/logic/service/fight/effect/effect_195.go @@ -22,9 +22,7 @@ func init() { // 命中之后 func (e *Effect195) OnSkill() bool { - if !e.Hit() { - return true - } + e.Ctx().Opp.CancelTurn(e.Ctx().Our) return true } diff --git a/logic/service/fight/effect/effect_21.go b/logic/service/fight/effect/effect_21.go index 4f3ea81c2..733f66142 100644 --- a/logic/service/fight/effect/effect_21.go +++ b/logic/service/fight/effect/effect_21.go @@ -26,9 +26,7 @@ type Effect21 struct { // 使用技能时,不可被继承,继承Miss和Hit就行 func (e *Effect21) OnSkill() bool { - if !e.Hit() { - return true - } + e.l.Do(func() { //保证技能使用后初始化一次就行 statIndex := e.SideEffectArgs[0] @@ -45,10 +43,6 @@ func (e *Effect21) OnSkill() bool { // 被攻击时候反弹 func (e *Effect21) Skill_Use_ex() bool { - //未命中 - if !e.Hit() { - return true - } //不是技能 if e.Ctx().SkillEntity == nil { return true diff --git a/logic/service/fight/effect/effect_28.go b/logic/service/fight/effect/effect_28.go index 58182acc7..1f101ce66 100644 --- a/logic/service/fight/effect/effect_28.go +++ b/logic/service/fight/effect/effect_28.go @@ -22,9 +22,6 @@ type Effect28 struct { } func (e *Effect28) OnSkill() bool { - if !e.Hit() { - return true - } e.Ctx().Opp.Damage(e.Ctx().Our, &info.DamageZone{ Type: info.DamageType.Fixed, diff --git a/logic/service/fight/effect/effect_29.go b/logic/service/fight/effect/effect_29.go index 8c22ac8e2..597a13d69 100644 --- a/logic/service/fight/effect/effect_29.go +++ b/logic/service/fight/effect/effect_29.go @@ -24,9 +24,6 @@ type Effect29 struct { } func (e *Effect29) OnSkill() bool { - if !e.Hit() { - return true - } e.Ctx().Opp.Damage(e.Ctx().Our, &info.DamageZone{ diff --git a/logic/service/fight/effect/effect_31.go b/logic/service/fight/effect/effect_31.go index 3f95b9b67..a6f5cc55c 100644 --- a/logic/service/fight/effect/effect_31.go +++ b/logic/service/fight/effect/effect_31.go @@ -24,9 +24,6 @@ type Effect31 struct { } func (e *Effect31) Damage_Mul(t *info.DamageZone) bool { - if !e.Hit() { - return true - } if t.Type == info.DamageType.Red { n := int(e.Input.FightC.GetRand().Int31n(int32(e.SideEffectArgs[1]-e.SideEffectArgs[0]+1))) + e.SideEffectArgs[0] diff --git a/logic/service/fight/effect/effect_32.go b/logic/service/fight/effect/effect_32.go index 3799c143b..eb798fb62 100644 --- a/logic/service/fight/effect/effect_32.go +++ b/logic/service/fight/effect/effect_32.go @@ -22,9 +22,7 @@ type Effect32 struct { } func (e *Effect32) Action_start(a, b *action.SelectSkillAction) bool { - if !e.Hit() { - return true - } + if e.Ctx().SkillEntity == nil { return true } diff --git a/logic/service/fight/effect/effect_34.go b/logic/service/fight/effect/effect_34.go index 839a2f4fc..32d850f2f 100644 --- a/logic/service/fight/effect/effect_34.go +++ b/logic/service/fight/effect/effect_34.go @@ -24,9 +24,7 @@ type Effect34 struct { // 使用技能时,不可被继承,继承Miss和Hit就行 func (e *Effect34) OnSkill() bool { - if !e.Hit() { - return true - } + e.can = true return true } diff --git a/logic/service/fight/effect/effect_36.go b/logic/service/fight/effect/effect_36.go index 068f34678..80a3a7f32 100644 --- a/logic/service/fight/effect/effect_36.go +++ b/logic/service/fight/effect/effect_36.go @@ -23,9 +23,7 @@ type Effect36 struct { } func (e *Effect36) OnSkill() bool { - if !e.Hit() { - return true - } + e.can = true return true } diff --git a/logic/service/fight/effect/effect_39.go b/logic/service/fight/effect/effect_39.go index ef531c5fb..f1143805b 100644 --- a/logic/service/fight/effect/effect_39.go +++ b/logic/service/fight/effect/effect_39.go @@ -21,9 +21,7 @@ type Effect39 struct { } func (e *Effect39) OnSkill() bool { - if !e.Hit() { - return true - } + // 概率判定 ok, _, _ := e.Input.Player.Roll(e.SideEffectArgs[0], 100) if !ok { diff --git a/logic/service/fight/effect/effect_41.go b/logic/service/fight/effect/effect_41.go index 8fa3affc2..dbec47869 100644 --- a/logic/service/fight/effect/effect_41.go +++ b/logic/service/fight/effect/effect_41.go @@ -36,9 +36,6 @@ func (e *Effect41) SetArgs(t *input.Input, a ...int) { // 伤害落实前触发,限制最大伤害 func (e *Effect41) Damage_DIV_ex(t *info.DamageZone) bool { - if !e.Hit() { - return true - } if e.Ctx().SkillEntity == nil { return true } diff --git a/logic/service/fight/effect/effect_42.go b/logic/service/fight/effect/effect_42.go index 7a941c7d4..a2e33c084 100644 --- a/logic/service/fight/effect/effect_42.go +++ b/logic/service/fight/effect/effect_42.go @@ -16,9 +16,7 @@ type Effect42 struct { } func (e *Effect42) Damage_Mul(t *info.DamageZone) bool { - if !e.Hit() { - return true - } + if e.Ctx().SkillEntity == nil { return true } diff --git a/logic/service/fight/effect/effect_43.go b/logic/service/fight/effect/effect_43.go index b5b16b0a1..848d6ed11 100644 --- a/logic/service/fight/effect/effect_43.go +++ b/logic/service/fight/effect/effect_43.go @@ -22,9 +22,7 @@ type Effect43 struct { } func (e *Effect43) OnSkill() bool { - if !e.Hit() { - return true - } + tt := alpacadecimal.NewFromInt(int64(e.Ctx().Our.CurrentPet.Info.MaxHp)).Div(alpacadecimal.NewFromInt(int64(e.SideEffectArgs[0]))) //fmt.Println("恢复自身最大体量的1/n", tt.IntPart()) e.Ctx().Our.Heal(e.Ctx().Our, &action.SelectSkillAction{}, tt) diff --git a/logic/service/fight/effect/effect_44.go b/logic/service/fight/effect/effect_44.go index 0e55c5eb9..35ff7b5a7 100644 --- a/logic/service/fight/effect/effect_44.go +++ b/logic/service/fight/effect/effect_44.go @@ -16,9 +16,7 @@ type Effect44 struct { } func (e *Effect44) Damage_DIV_ex(t *info.DamageZone) bool { - if !e.Hit() { - return true - } + if e.Ctx().SkillEntity == nil { return true } diff --git a/logic/service/fight/effect/effect_46.go b/logic/service/fight/effect/effect_46.go index ae4849ebd..5ebfef5a6 100644 --- a/logic/service/fight/effect/effect_46.go +++ b/logic/service/fight/effect/effect_46.go @@ -17,9 +17,7 @@ type Effect46 struct { } func (e *Effect46) Damage_DIV_ex(t *info.DamageZone) bool { - if !e.Hit() { - return true - } + if e.Ctx().SkillEntity == nil { return true } diff --git a/logic/service/fight/effect/effect_466.go b/logic/service/fight/effect/effect_466.go index b536fb86e..95ed96edc 100644 --- a/logic/service/fight/effect/effect_466.go +++ b/logic/service/fight/effect/effect_466.go @@ -21,9 +21,7 @@ type Effect466 struct { } func (e *Effect466) OnSkill() bool { - if !e.Hit() { - return true - } + e.Ctx().Our.Heal(e.Ctx().Our, &action.SelectSkillAction{}, e.Args()[0]) return true } diff --git a/logic/service/fight/effect/effect_478.go b/logic/service/fight/effect/effect_478.go index e09b2d6a5..dd634283d 100644 --- a/logic/service/fight/effect/effect_478.go +++ b/logic/service/fight/effect/effect_478.go @@ -23,17 +23,13 @@ func init() { // 命中之后 func (e *Effect478) OnSkill() bool { - if !e.Hit() { - return true - } + e.can = true return true } func (e *Effect478) Skill_Hit_ex() bool { - if !e.Hit() { - return true - } + if !e.can { return true } diff --git a/logic/service/fight/effect/effect_48.go b/logic/service/fight/effect/effect_48.go index 7c7cb331a..5fc685fbf 100644 --- a/logic/service/fight/effect/effect_48.go +++ b/logic/service/fight/effect/effect_48.go @@ -15,10 +15,6 @@ type Effect48 struct { func (e *Effect48) EFFect_Befer(in *input.Input, effEffect input.Effect) bool { - if !e.Hit() { - return true - } - if in != e.Ctx().Opp { return true } diff --git a/logic/service/fight/effect/effect_49.go b/logic/service/fight/effect/effect_49.go index fee3ac952..eb1ce2f1b 100644 --- a/logic/service/fight/effect/effect_49.go +++ b/logic/service/fight/effect/effect_49.go @@ -13,9 +13,7 @@ type Effect49 struct { } func (e *Effect49) Damage_SUB_ex(t *info.DamageZone) bool { - if !e.Hit() { - return true - } + if e.Ctx().SkillEntity == nil { return true } diff --git a/logic/service/fight/effect/effect_4_5.go b/logic/service/fight/effect/effect_4_5.go index 61c60631a..8c8bba491 100644 --- a/logic/service/fight/effect/effect_4_5.go +++ b/logic/service/fight/effect/effect_4_5.go @@ -38,9 +38,6 @@ type EffectStat struct { // 技能触发时调用 // ----------------------------------------------------------- func (e *EffectStat) OnSkill() bool { - if !e.Hit() { - return true - } // 参数解构 (防止 SideEffectArgs 长度不足) var ( diff --git a/logic/service/fight/effect/effect_50.go b/logic/service/fight/effect/effect_50.go index 84a726039..b006e8f88 100644 --- a/logic/service/fight/effect/effect_50.go +++ b/logic/service/fight/effect/effect_50.go @@ -16,9 +16,7 @@ type Effect50 struct { } func (e *Effect50) Damage_DIV_ex(t *info.DamageZone) bool { - if !e.Hit() { - return true - } + if e.Ctx().SkillEntity == nil { return true } diff --git a/logic/service/fight/effect/effect_53_90.go b/logic/service/fight/effect/effect_53_90.go index 5c06e6011..8fe8ce2ec 100644 --- a/logic/service/fight/effect/effect_53_90.go +++ b/logic/service/fight/effect/effect_53_90.go @@ -22,9 +22,6 @@ type Effect90 struct { } func (e *Effect90) Damage_Mul(t *info.DamageZone) bool { - if !e.Hit() { - return true - } if t.Type == info.DamageType.Red { diff --git a/logic/service/fight/effect/effect_54.go b/logic/service/fight/effect/effect_54.go index aea015763..d7fc6e646 100644 --- a/logic/service/fight/effect/effect_54.go +++ b/logic/service/fight/effect/effect_54.go @@ -14,9 +14,7 @@ type Effect54 struct { } func (e *Effect54) Damage_DIV_ex(t *info.DamageZone) bool { - if !e.Hit() { - return true - } + if e.Ctx().SkillEntity == nil { return true } diff --git a/logic/service/fight/effect/effect_566.go b/logic/service/fight/effect/effect_566.go index 8fc27a434..204dbdfa2 100644 --- a/logic/service/fight/effect/effect_566.go +++ b/logic/service/fight/effect/effect_566.go @@ -22,9 +22,7 @@ func init() { // 命中之后 func (e *Effect566) OnSkill() bool { - if !e.Hit() { - return true - } + e.Ctx().Opp.CancelTurn(e.Ctx().Our) return true } diff --git a/logic/service/fight/effect/effect_57.go b/logic/service/fight/effect/effect_57.go index 3e7cf9cd9..22a55457a 100644 --- a/logic/service/fight/effect/effect_57.go +++ b/logic/service/fight/effect/effect_57.go @@ -28,9 +28,7 @@ func (e *Effect57) SetArgs(t *input.Input, a ...int) { } func (e *Effect57) OnSkill() bool { - if !e.Hit() { - return true - } + heal := e.Ctx().Our.CurrentPet.GetMaxHP().Div(e.Args()[1]) e.Ctx().Our.Heal(e.Ctx().Our, &action.SelectSkillAction{}, heal) return true diff --git a/logic/service/fight/effect/effect_58.go b/logic/service/fight/effect/effect_58.go index 635934ca0..05624988d 100644 --- a/logic/service/fight/effect/effect_58.go +++ b/logic/service/fight/effect/effect_58.go @@ -22,18 +22,14 @@ type Effect58 struct { } func (e *Effect58) OnSkill() bool { - if !e.Hit() { - return true - } + e.Can = true return true } func (e *Effect58) Action_start(a, b *action.SelectSkillAction) bool { - if !e.Hit() { - return true - } + if !e.Can { return true } diff --git a/logic/service/fight/effect/effect_59.go b/logic/service/fight/effect/effect_59.go index 89e90cd69..536d5f362 100644 --- a/logic/service/fight/effect/effect_59.go +++ b/logic/service/fight/effect/effect_59.go @@ -31,9 +31,7 @@ func (e *Effect59) SetArgs(t *input.Input, a ...int) { // 命中之后 func (e *Effect59) OnSkill() bool { - if !e.Hit() { - return true - } + e.can = true e.Ctx().Our.Damage(e.Ctx().Our, &info.DamageZone{ Type: info.DamageType.Fixed, diff --git a/logic/service/fight/effect/effect_60.go b/logic/service/fight/effect/effect_60.go index 0444acb74..26368973c 100644 --- a/logic/service/fight/effect/effect_60.go +++ b/logic/service/fight/effect/effect_60.go @@ -28,9 +28,7 @@ func (e *Effect60) SetArgs(t *input.Input, a ...int) { } func (e *Effect60) OnSkill() bool { - if !e.Hit() { - return true - } + if e.Ctx().SkillEntity == nil { return true } diff --git a/logic/service/fight/effect/effect_62.go b/logic/service/fight/effect/effect_62.go index 511c6c61f..af35b5a7a 100644 --- a/logic/service/fight/effect/effect_62.go +++ b/logic/service/fight/effect/effect_62.go @@ -86,10 +86,6 @@ func init() { // 魂印开局添加,然后切精灵不消失 func (e *Effect62) OnSkill() bool { - if !e.Hit() { - //e.Alive(false) - return true - } //e.Duration(1) //必须保持到下一回合,这样才会被复制 // e.opp = ctx.Input diff --git a/logic/service/fight/effect/effect_65.go b/logic/service/fight/effect/effect_65.go index 844db05ab..bf434510e 100644 --- a/logic/service/fight/effect/effect_65.go +++ b/logic/service/fight/effect/effect_65.go @@ -14,9 +14,6 @@ type Effect65 struct { } func (e *Effect65) Skill_Hit() bool { - if !e.Hit() { - return true - } if e.Ctx().SkillEntity == nil { return true diff --git a/logic/service/fight/effect/effect_68.go b/logic/service/fight/effect/effect_68.go index 804f9e0bd..b2c1eb848 100644 --- a/logic/service/fight/effect/effect_68.go +++ b/logic/service/fight/effect/effect_68.go @@ -16,9 +16,7 @@ type Effect68 struct { } func (e *Effect68) DamageLock_ex(t *info.DamageZone) bool { - if !e.Hit() { - return true - } + if e.Ctx().SkillEntity == nil { return true } diff --git a/logic/service/fight/effect/effect_69.go b/logic/service/fight/effect/effect_69.go index d0edb3eab..e900be6d4 100644 --- a/logic/service/fight/effect/effect_69.go +++ b/logic/service/fight/effect/effect_69.go @@ -27,9 +27,7 @@ func init() { } func (e *Effect69) OnSkill() bool { - if !e.Hit() { - return true - } + t := &Effect69_sub{ EffectNode: node.EffectNode{}, } diff --git a/logic/service/fight/effect/effect_7.go b/logic/service/fight/effect/effect_7.go index 4b4de944f..f012312d2 100644 --- a/logic/service/fight/effect/effect_7.go +++ b/logic/service/fight/effect/effect_7.go @@ -32,9 +32,7 @@ func (e *Effect7) Skill_Hit() bool { return true } func (e *Effect7) DamageFloor(t *info.DamageZone) bool { - if !e.Hit() { - return true - } + //fmt.Println("Effect7_old", t.Damage.IntPart()) if t.Type == info.DamageType.Red { if e.Ctx().Our.CurrentPet.Info.Hp <= e.Ctx().Opp.CurrentPet.Info.Hp { @@ -49,9 +47,7 @@ func (e *Effect7) DamageFloor(t *info.DamageZone) bool { return true } func (e *Effect7) DamageLock(t *info.DamageZone) bool { - if !e.Hit() { - return true - } + //fmt.Println("Effect7_old", t.Damage.IntPart()) if t.Type == info.DamageType.Red { if t.Damage.Cmp(e.max) == 1 { diff --git a/logic/service/fight/effect/effect_71.go b/logic/service/fight/effect/effect_71.go index 19a585767..36e90d66a 100644 --- a/logic/service/fight/effect/effect_71.go +++ b/logic/service/fight/effect/effect_71.go @@ -35,9 +35,7 @@ func (e *Effect71) SetArgs(t *input.Input, a ...int) { // 命中之后 func (e *Effect71) OnSkill() bool { - if !e.Hit() { - return true - } + e.can = true e.Ctx().Our.Damage(e.Ctx().Our, &info.DamageZone{ Type: info.DamageType.Fixed, diff --git a/logic/service/fight/effect/effect_72.go b/logic/service/fight/effect/effect_72.go index 639f5c77b..3dd5c7176 100644 --- a/logic/service/fight/effect/effect_72.go +++ b/logic/service/fight/effect/effect_72.go @@ -23,14 +23,21 @@ func init() { } // 命中之后 -func (e *Effect72) OnSkill() bool { - if !e.Hit() { - e.Ctx().Our.Damage(e.Ctx().Our, &info.DamageZone{ - Type: info.DamageType.True, - Damage: alpacadecimal.NewFromInt(int64(e.Ctx().Our.CurrentPet.Info.Hp)), - }) - e.Ctx().Our.CurrentPet.NotAlive = true +func (e *Effect72) Skill_Hit() bool { + + if e.Ctx().SkillEntity == nil { + return true } + if e.Ctx().SkillEntity.AttackTime != 0 { + return true + } + + e.Ctx().Our.Damage(e.Ctx().Our, &info.DamageZone{ + Type: info.DamageType.True, + Damage: alpacadecimal.NewFromInt(int64(e.Ctx().Our.CurrentPet.Info.Hp)), + }) + e.Ctx().Our.CurrentPet.NotAlive = true + return true } diff --git a/logic/service/fight/effect/effect_73.go b/logic/service/fight/effect/effect_73.go index 7203d836c..53291c918 100644 --- a/logic/service/fight/effect/effect_73.go +++ b/logic/service/fight/effect/effect_73.go @@ -34,9 +34,6 @@ func (e *Effect73) SetArgs(t *input.Input, a ...int) { } func (e *Effect73) Action_end_ex() bool { - if !e.Hit() { - return true - } if !e.Input.FightC.IsFirst(e.Ctx().Our.Player) { return true } diff --git a/logic/service/fight/effect/effect_74_75.go b/logic/service/fight/effect/effect_74_75.go index c33d99ff9..50f7690a3 100644 --- a/logic/service/fight/effect/effect_74_75.go +++ b/logic/service/fight/effect/effect_74_75.go @@ -27,9 +27,6 @@ func newEffectRandomStatus(ranges []statusRange) *EffectRandomStatus { // 通用逻辑:命中后按概率随机触发状态 func (e *EffectRandomStatus) OnSkill() bool { - if !e.Hit() { - return true - } // 生成0-99的随机数(100种可能) randVal := int(e.Input.FightC.GetRand().Int31n(100)) diff --git a/logic/service/fight/effect/effect_76.go b/logic/service/fight/effect/effect_76.go index 6fcaf9fd3..af90be05c 100644 --- a/logic/service/fight/effect/effect_76.go +++ b/logic/service/fight/effect/effect_76.go @@ -24,9 +24,7 @@ type Effect76 struct { } func (e *Effect76) OnSkill() bool { - if !e.Hit() { - return true - } + // 概率判定 ok, _, _ := e.Input.Player.Roll(int(e.Args()[0].IntPart()), 100) if !ok { diff --git a/logic/service/fight/effect/effect_77.go b/logic/service/fight/effect/effect_77.go index 52266f4eb..35740f8d6 100644 --- a/logic/service/fight/effect/effect_77.go +++ b/logic/service/fight/effect/effect_77.go @@ -28,9 +28,7 @@ func (e *Effect77) SetArgs(t *input.Input, a ...int) { } func (e *Effect77) OnSkill() bool { - if !e.Hit() { - return true - } + e.Ctx().Our.Heal(e.Ctx().Our, &action.SelectSkillAction{}, e.Args()[1]) return true } diff --git a/logic/service/fight/effect/effect_776.go b/logic/service/fight/effect/effect_776.go index c4d484564..6e3b87668 100644 --- a/logic/service/fight/effect/effect_776.go +++ b/logic/service/fight/effect/effect_776.go @@ -13,9 +13,6 @@ type Effect776 struct { } func (e *Effect776) Damage_Mul(t *info.DamageZone) bool { - if !e.Hit() { - return true - } if t.Type == info.DamageType.Red { diff --git a/logic/service/fight/effect/effect_79.go b/logic/service/fight/effect/effect_79.go index e25f52911..a98e57cad 100644 --- a/logic/service/fight/effect/effect_79.go +++ b/logic/service/fight/effect/effect_79.go @@ -24,9 +24,6 @@ func init() { // 命中之后 // 特攻+2速度+1命中+1, func (e *Effect79) OnSkill() bool { - if !e.Hit() { - return true - } e.Ctx().Our.SetProp(e.Ctx().Our, 2, 2, info.AbilityOpType.ADD) e.Ctx().Our.SetProp(e.Ctx().Our, 4, 1, info.AbilityOpType.ADD) diff --git a/logic/service/fight/effect/effect_8.go b/logic/service/fight/effect/effect_8.go index 4b15009a9..c644a4e61 100644 --- a/logic/service/fight/effect/effect_8.go +++ b/logic/service/fight/effect/effect_8.go @@ -34,9 +34,7 @@ func (e *Effect8) DamageFloor(t *info.DamageZone) bool { return true } func (e *Effect8) DamageLock(t *info.DamageZone) bool { - if !e.Hit() { - return true - } + //fmt.Println("Effect7_old", t.Damage.IntPart()) if t.Type == info.DamageType.Red { if t.Damage.Cmp(e.max) == 1 { diff --git a/logic/service/fight/effect/effect_80.go b/logic/service/fight/effect/effect_80.go index ac4b0e590..f1e0647fd 100644 --- a/logic/service/fight/effect/effect_80.go +++ b/logic/service/fight/effect/effect_80.go @@ -22,9 +22,6 @@ func init() { } func (e *Effect80) OnSkill() bool { - if !e.Hit() { - return true - } att := e.Ctx().Our.CurrentPet.GetMaxHP().Div(alpacadecimal.NewFromInt(2)) e.Ctx().Our.Damage(e.Ctx().Our, &info.DamageZone{ diff --git a/logic/service/fight/effect/effect_81.go b/logic/service/fight/effect/effect_81.go index 32a2b087f..70d92d4ed 100644 --- a/logic/service/fight/effect/effect_81.go +++ b/logic/service/fight/effect/effect_81.go @@ -20,18 +20,14 @@ type Effect81 struct { } func (e *Effect81) OnSkill() bool { - if !e.Hit() { - return true - } + e.can = true return true } func (e *Effect81) Action_start(a, b *action.SelectSkillAction) bool { - if !e.Hit() { - return true - } + if !e.can { return true } diff --git a/logic/service/fight/effect/effect_83.go b/logic/service/fight/effect/effect_83.go index c4b459003..c3f3f66d7 100644 --- a/logic/service/fight/effect/effect_83.go +++ b/logic/service/fight/effect/effect_83.go @@ -23,18 +23,14 @@ type Effect83 struct { } func (e *Effect83) OnSkill() bool { - if !e.Hit() { - return true - } + e.can = true return true } func (e *Effect83) Compare_Pre(fattack *action.SelectSkillAction, sattack *action.SelectSkillAction) bool { - if !e.Hit() { - return true - } + if !e.can { return true } @@ -63,9 +59,7 @@ func (e *Effect83) Compare_Pre(fattack *action.SelectSkillAction, sattack *actio // /自身雄性,下两回合必定先手;自身雌性,下两回合必定致命一击 func (e *Effect83) Action_start(a, b *action.SelectSkillAction) bool { - if !e.Hit() { - return true - } + if !e.can { return true } diff --git a/logic/service/fight/effect/effect_87.go b/logic/service/fight/effect/effect_87.go index 62abb1b59..78ce9eaee 100644 --- a/logic/service/fight/effect/effect_87.go +++ b/logic/service/fight/effect/effect_87.go @@ -19,9 +19,6 @@ type Effect87 struct { } func (e *Effect87) OnSkill() bool { - if !e.Hit() { - return true - } e.Ctx().Our.HealPP(-1) return true diff --git a/logic/service/fight/effect/effect_88.go b/logic/service/fight/effect/effect_88.go index d5a0aa37d..1dffd8373 100644 --- a/logic/service/fight/effect/effect_88.go +++ b/logic/service/fight/effect/effect_88.go @@ -22,9 +22,7 @@ type Effect88 struct { } func (e *Effect88) Damage_Mul(t *info.DamageZone) bool { - if !e.Hit() { - return true - } + // 概率判定 ok, _, _ := e.Input.Player.Roll(int(e.Args()[0].IntPart()), 100) if !ok { diff --git a/logic/service/fight/effect/effect_89.go b/logic/service/fight/effect/effect_89.go index fecde7a3d..dfddeb590 100644 --- a/logic/service/fight/effect/effect_89.go +++ b/logic/service/fight/effect/effect_89.go @@ -31,9 +31,6 @@ func (e *Effect89) SetArgs(t *input.Input, a ...int) { } func (e *Effect89) Skill_Useed() bool { - if !e.Hit() { - return true - } e.Ctx().Our.Heal(e.Ctx().Our, &action.SelectSkillAction{}, e.Ctx().Our.SumDamage.Div(e.Args()[1])) diff --git a/logic/service/fight/effect/effect_93.go b/logic/service/fight/effect/effect_93.go index 14f37a905..f8c73efb4 100644 --- a/logic/service/fight/effect/effect_93.go +++ b/logic/service/fight/effect/effect_93.go @@ -24,9 +24,7 @@ type Effect93 struct { } func (e *Effect93) OnSkill() bool { - if !e.Hit() { - return true - } + // 概率判定 ok, _, _ := e.Input.Player.Roll(int(e.Args()[0].IntPart()), 100) if !ok { diff --git a/logic/service/fight/effect/effect_95.go b/logic/service/fight/effect/effect_95.go index e8cc228d3..b95bf338f 100644 --- a/logic/service/fight/effect/effect_95.go +++ b/logic/service/fight/effect/effect_95.go @@ -21,9 +21,6 @@ type Effect95 struct { } func (e *Effect95) Action_start(a, b *action.SelectSkillAction) bool { - if !e.Hit() { - return true - } //fmt.Println(e.Ctx().SkillEntity) if e.Ctx().SkillEntity == nil { diff --git a/logic/service/fight/effect/effect_98.go b/logic/service/fight/effect/effect_98.go index 20102e991..3138a5edf 100644 --- a/logic/service/fight/effect/effect_98.go +++ b/logic/service/fight/effect/effect_98.go @@ -24,9 +24,6 @@ type Effect98 struct { } func (e *Effect98) Damage_Mul(t *info.DamageZone) bool { - if !e.Hit() { - return true - } if e.Ctx().Opp.CurrentPet.Gender != 1 { return true diff --git a/logic/service/fight/effect/effect_EffectConditionalAddDamage.go b/logic/service/fight/effect/effect_EffectConditionalAddDamage.go index 253ee3396..755a49dde 100644 --- a/logic/service/fight/effect/effect_EffectConditionalAddDamage.go +++ b/logic/service/fight/effect/effect_EffectConditionalAddDamage.go @@ -56,9 +56,6 @@ func registerConditionalAddDamageEffects() { // ----------------------------------------------------------- func (e *EffectConditionalAddDamage) OnSkill() bool { // 1. 命中判定失败,不触发 - if !e.Hit() { - return true - } // 2. 获取当前效果ID对应的条件函数 cond, ok := conditionMap[int(e.ID().Suffix())] diff --git a/logic/service/fight/effect/effect_attr.go b/logic/service/fight/effect/effect_attr.go index f7643505c..9cb589f8c 100644 --- a/logic/service/fight/effect/effect_attr.go +++ b/logic/service/fight/effect/effect_attr.go @@ -90,9 +90,6 @@ func (e *EffectPropSyncReverse) SetArgs(t *input.Input, a ...int) { } func (e *EffectPropSyncReverse) OnSkill() bool { - if !e.Hit() { - return true - } if e.opppet != nil { return true } diff --git a/logic/service/fight/effect/effect_prop.go b/logic/service/fight/effect/effect_prop.go index 47b23d020..c399d4476 100644 --- a/logic/service/fight/effect/effect_prop.go +++ b/logic/service/fight/effect/effect_prop.go @@ -18,9 +18,6 @@ type Effect3 struct { // 执行时逻辑 // ---------------------- func (e *Effect3) OnSkill() bool { - if !e.Hit() { - return true - } // 遍历六项能力值(攻击、防御、速度等) for i := 0; i < 6; i++ { diff --git a/logic/service/fight/effect/sterStatusEffects.go b/logic/service/fight/effect/sterStatusEffects.go index adeda34a0..a4b4ba295 100644 --- a/logic/service/fight/effect/sterStatusEffects.go +++ b/logic/service/fight/effect/sterStatusEffects.go @@ -53,9 +53,6 @@ func registerStatusEffects() { // 技能触发时调用 // ----------------------------------------------------------- func (e *Effect10) OnSkill() bool { - if !e.Hit() { - return true - } // n% 触发概率(默认 SideEffectArgs[0]) chance := e.EffectNode.SideEffectArgs[0] diff --git a/logic/service/fight/fightc.go b/logic/service/fight/fightc.go index 367868e0e..2b11cda8a 100644 --- a/logic/service/fight/fightc.go +++ b/logic/service/fight/fightc.go @@ -60,16 +60,18 @@ func (f *FightC) processSkillAttack(attacker, defender *input.Input, skill *info attacker.SumDamage = attacker.SumDamage.Mul(alpacadecimal.NewFromInt(2)) } - if !skill.Side { - //这时候将被覆盖的效果全部装回来enterturn - for _, effect := range attacker.Effect_Lost { - if effect.Duration() > 0 || effect.Duration() == -1 { - effect.Alive(true) - } - } - } else { + //到这里已经是强制miss或者命中,所以根本不存在强制miss改命中的情况,因为miss的时候不会执行到这里 + if !skill.Hit { + for _, effect := range attacker.EffectCache { - effect.Hit(true) //我方效果命中 + effect.Alive(false) //我方效果命中 + } + //这时候将被覆盖的效果全部装回来enterturn + for _, effect := range attacker.EffectLost { + if effect.Duration() > 0 || effect.Duration() == -1 { + //effect.Alive(true) + attacker.AddEffect(effect.GetInput(), effect) + } } } @@ -123,7 +125,7 @@ func (f *FightC) enterturn(firstAttack, secondAttack *action.SelectSkillAction) f.Broadcast(func(ff *input.Input) { ff.EffectCache = make([]input.Effect, 0) //先把上一回合数据清空,但是应该把本身延续类效果集成过来 - ff.Effect_Lost = make([]input.Effect, 0) + ff.EffectLost = make([]input.Effect, 0) ff.Exec(func(effect input.Effect) bool { //回合开始前 effect.Turn_Start(firstAttack, secondAttack) return true diff --git a/logic/service/fight/info/BattleSkillEntity.go b/logic/service/fight/info/BattleSkillEntity.go index cee8913e5..4d9903104 100644 --- a/logic/service/fight/info/BattleSkillEntity.go +++ b/logic/service/fight/info/BattleSkillEntity.go @@ -61,8 +61,8 @@ type SkillEntity struct { Pet *BattlePetEntity //MaxValue func(ahp, bhp uint32) decimal.Decimal Crit uint32 - AttackTime uint32 //记录技能实际是否命中 - Side bool + AttackTime uint32 //记录技能实际是否命中,0表示未命中,1表示命中,2表示必中 + Hit bool } // CreateSkill 创建战斗技能实例(可指定是否无限PP) @@ -115,7 +115,7 @@ func (s *SkillEntity) SetMiss() bool { // 无效掉附带属性 func (s *SkillEntity) SetNoSide() bool { - s.Side = false + s.Hit = false return true } @@ -176,14 +176,14 @@ func (s *SkillEntity) AttackTimeC(level int) uint32 { if s.MustHit != 0 { s.AttackTime = 2 - s.Side = true + s.Hit = true return s.AttackTime } a := int64(s.GetAccuracy(level)) r := s.Rand.Int63n(100) if a >= r { - s.Side = true + s.Hit = true s.AttackTime = 1 } return s.AttackTime diff --git a/logic/service/fight/input/input.go b/logic/service/fight/input/input.go index 32773781c..33d8b883c 100644 --- a/logic/service/fight/input/input.go +++ b/logic/service/fight/input/input.go @@ -27,7 +27,7 @@ type Input struct { // info.BattleActionI Effects []Effect //effects 实际上全局就是effect无限回合 //effects容器 技能的 EffectCache []Effect //这里是命中前执行的容器,也就是命中前执行的所有逻辑相关,理论上一个effect被激活,就应该同时将其他的effect取消激活 - Effect_Lost []Effect + EffectLost []Effect // 删掉伤害记录,可以在回调中记录,而不是每次调用记录 SumDamage alpacadecimal.Decimal //伤害 // DamageZone struct { @@ -105,6 +105,7 @@ func (our *Input) SetOPP(t *Input) { } func (our *Input) RecoverEffect() { + //println("恢复效果",our.UserID) //根本没释放技能,这些效果全部失效 for _, e := range our.EffectCache { @@ -114,9 +115,10 @@ func (our *Input) RecoverEffect() { } //这时候将被覆盖的效果全部装回来enterturn - for _, e := range our.Effect_Lost { + for _, e := range our.EffectLost { if e.Duration() > 0 || e.Duration() == -1 { - e.Alive(true) + // e.Alive(true) + our.AddEffect(e.GetInput(), e) } } @@ -125,15 +127,18 @@ func (our *Input) RecoverEffect() { func (our *Input) ReactvieEffect() { //根本没释放技能,这些效果全部失效 - for _, e := range our.Effect_Lost { + for _, e := range our.EffectLost { e.Alive(false) + // our.AddEffect(e.GetInput(), e) + } //这时候将被覆盖的效果全部装回来enterturn for _, e := range our.EffectCache { - e.Alive(true) - + // e.Alive(true) + //因为后手方实际上是到了他出手阶段重新添加的结果,而非后手方重新激活效果 + our.AddEffect(e.GetInput(), e) } } @@ -250,7 +255,7 @@ func (our *Input) Parseskill(skill *action.SelectSkillAction) { //t.SetArgs(i, temparg[:args]...) //设置入参 loste := our.AddEffect(our, t) if loste != nil { - our.Effect_Lost = append(our.Effect_Lost, loste) + our.EffectLost = append(our.EffectLost, loste) } // } diff --git a/logic/service/fight/input/interface.go b/logic/service/fight/input/interface.go index 6902e3319..c2c272179 100644 --- a/logic/service/fight/input/interface.go +++ b/logic/service/fight/input/interface.go @@ -62,7 +62,7 @@ type Effect interface { Ctx() *Ctx //回合数,然后次数另外维护 Duration(...int) int - Hit(...bool) bool + //Hit(...bool) bool Alive(...bool) bool Stack(...int) int CanStack(...bool) bool diff --git a/logic/service/fight/loop.go b/logic/service/fight/loop.go index af7e082a0..57707e739 100644 --- a/logic/service/fight/loop.go +++ b/logic/service/fight/loop.go @@ -39,7 +39,7 @@ func (f *FightC) battleLoop() { break } - println("进入回合") + println("进入回合", f.Round) f.resolveRound(actions[ourID], actions[oppID]) } diff --git a/logic/service/fight/node/node.go b/logic/service/fight/node/node.go index 0dd41ffc3..64e0e6414 100644 --- a/logic/service/fight/node/node.go +++ b/logic/service/fight/node/node.go @@ -68,16 +68,17 @@ func (e *EffectNode) ID(t ...input.EffectIDCombiner) input.EffectIDCombiner { return e.id } -func (e *EffectNode) Hit(t ...bool) bool { - if len(t) > 0 { - // println("效果命中", e.id.GetEffectType(), e.id.Suffix(), t[0]) - e.hit = t[0] - } +// func (e *EffectNode) Hit(t ...bool) bool { - return e.hit +// if len(t) > 0 { +// // println("效果命中", e.id.GetEffectType(), e.id.Suffix(), t[0]) +// e.hit = t[0] +// } -} +// return e.hit + +// } func (e *EffectNode) CanStack(t ...bool) bool { if len(t) > 0 {