From 315f720e49e44359b63e9e21dca9ec407b4f64f8 Mon Sep 17 00:00:00 2001 From: 1 <1@72wo.cn> Date: Fri, 21 Nov 2025 05:47:51 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=A9=BA=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- logic/service/fight/boss/NewSeIdx_1.go | 6 +++-- logic/service/fight/effect/effect_1.go | 2 +- logic/service/fight/effect/effect_101.go | 2 +- logic/service/fight/effect/effect_105.go | 2 +- logic/service/fight/effect/effect_107.go | 2 +- logic/service/fight/effect/effect_116.go | 4 +-- logic/service/fight/effect/effect_117.go | 2 +- logic/service/fight/effect/effect_21.go | 2 +- logic/service/fight/effect/effect_34.go | 2 +- logic/service/fight/effect/effect_52.go | 2 +- logic/service/fight/effect/effect_57.go | 1 - logic/service/fight/effect/effect_6.go | 2 +- logic/service/fight/effect/effect_60.go | 1 - logic/service/fight/effect/effect_73.go | 6 ++--- logic/service/fight/effect/effect_77.go | 1 - logic/service/fight/effect/effect_89.go | 4 +-- logic/service/fight/effect/effect_91.go | 2 +- logic/service/fight/fightc.go | 8 +++--- logic/service/fight/input/fight.go | 6 ++--- logic/service/fight/input/input.go | 32 +++++++++++------------- logic/service/fight/node/node.go | 2 ++ modules/blazing/model/done.go | 2 +- 22 files changed, 46 insertions(+), 47 deletions(-) diff --git a/logic/service/fight/boss/NewSeIdx_1.go b/logic/service/fight/boss/NewSeIdx_1.go index e4d0904e6..f85e7b193 100644 --- a/logic/service/fight/boss/NewSeIdx_1.go +++ b/logic/service/fight/boss/NewSeIdx_1.go @@ -7,6 +7,7 @@ import ( ) // 基类特性 +// 特性的ID=PET cacthtime+eid 这样保证不重复 type NewSel0 struct { node.EffectNode Catchtime int //保存精灵的唯一指令,保证在上场时候正确注入 @@ -16,8 +17,9 @@ type NewSel0 struct { // 重写回合结束效果,特性都是无线回合类的 // 次数类本质上也是这种 -func (e *NewSel0) TurnEnd(opp *input.Input) { - +// 特性,无法被切精灵消除 +func (e *NewSel0) Switch(in *input.Input, at info.AttackValue, outpet *info.BattlePetEntity) bool { + return true } // 免疫"能力(battle_lv)下降" diff --git a/logic/service/fight/effect/effect_1.go b/logic/service/fight/effect/effect_1.go index 69f64d433..bfe655003 100644 --- a/logic/service/fight/effect/effect_1.go +++ b/logic/service/fight/effect/effect_1.go @@ -29,7 +29,7 @@ func (e *Effect1) OnSkill() bool { } e.Input.Heal( - e.Ctx().Our, &action.SelectSkillAction{}, e.Ctx().Our.DamageZone.Damage.Div(decimal.NewFromInt(2)), + e.Ctx().Our, &action.SelectSkillAction{}, e.Ctx().Our.SumDamage.Div(decimal.NewFromInt(2)), ) return true } diff --git a/logic/service/fight/effect/effect_101.go b/logic/service/fight/effect/effect_101.go index faddc26f0..0c381b6b3 100644 --- a/logic/service/fight/effect/effect_101.go +++ b/logic/service/fight/effect/effect_101.go @@ -28,7 +28,7 @@ func (e *Effect101) OnSkill() bool { } e.Input.Heal( - e.Ctx().Our, &action.SelectSkillAction{}, e.Ctx().Our.DamageZone.Damage.Mul(decimal.NewFromInt(int64(e.Args()[0])).Div(decimal.NewFromInt(100))), + e.Ctx().Our, &action.SelectSkillAction{}, e.Ctx().Our.SumDamage.Mul(decimal.NewFromInt(int64(e.Args()[0])).Div(decimal.NewFromInt(100))), ) return true } diff --git a/logic/service/fight/effect/effect_105.go b/logic/service/fight/effect/effect_105.go index 87fe50b34..1e5666b9a 100644 --- a/logic/service/fight/effect/effect_105.go +++ b/logic/service/fight/effect/effect_105.go @@ -28,7 +28,7 @@ func (e *Effect105) OnSkill() bool { } e.Input.Heal( - e.Ctx().Our, &action.SelectSkillAction{}, e.Ctx().Our.DamageZone.Damage.Div(decimal.NewFromInt(int64(e.Args()[0]))), + e.Ctx().Our, &action.SelectSkillAction{}, e.Ctx().Our.SumDamage.Div(decimal.NewFromInt(int64(e.Args()[0]))), ) return true } diff --git a/logic/service/fight/effect/effect_107.go b/logic/service/fight/effect/effect_107.go index f578f8861..09d7f18dd 100644 --- a/logic/service/fight/effect/effect_107.go +++ b/logic/service/fight/effect/effect_107.go @@ -27,7 +27,7 @@ func (e *Effect107) Skill_Useed() bool { return true } - d := e.Ctx().Our.DamageZone.Damage.Cmp(decimal.NewFromInt(int64(e.SideEffectArgs[0]))) + d := e.Ctx().Our.SumDamage.Cmp(decimal.NewFromInt(int64(e.SideEffectArgs[0]))) //说明伤害小于N if d == -1 { diff --git a/logic/service/fight/effect/effect_116.go b/logic/service/fight/effect/effect_116.go index 204e279ed..89a69dfb2 100644 --- a/logic/service/fight/effect/effect_116.go +++ b/logic/service/fight/effect/effect_116.go @@ -16,7 +16,7 @@ func init() { t := &Effect116{ EffectNode: node.EffectNode{}, } - // t.Duration(-1) //设置成无限回合,到回合数就停止 + input.InitEffect(input.EffectType.Skill, 116, t) } @@ -38,7 +38,7 @@ func (e *Effect116) Skill_Useed() bool { } if e.Input.FightC.IsFirst(e.Input.Player) { - e.Ctx().Our.Heal(e.Ctx().Our, &action.SelectSkillAction{}, e.Ctx().Our.DamageZone.Damage.Div(decimal.NewFromInt(5))) + e.Ctx().Our.Heal(e.Ctx().Our, &action.SelectSkillAction{}, e.Ctx().Our.SumDamage.Div(decimal.NewFromInt(5))) } return true diff --git a/logic/service/fight/effect/effect_117.go b/logic/service/fight/effect/effect_117.go index a8d68e600..45adbfa57 100644 --- a/logic/service/fight/effect/effect_117.go +++ b/logic/service/fight/effect/effect_117.go @@ -14,7 +14,7 @@ func init() { t := &Effect117{ EffectNode: node.EffectNode{}, } - // t.Duration(-1) //设置成无限回合,到回合数就停止 + input.InitEffect(input.EffectType.Skill, 117, t) } diff --git a/logic/service/fight/effect/effect_21.go b/logic/service/fight/effect/effect_21.go index beec37404..27f16d491 100644 --- a/logic/service/fight/effect/effect_21.go +++ b/logic/service/fight/effect/effect_21.go @@ -61,7 +61,7 @@ func (e *Effect21) Skill_Use_ex() bool { e.Ctx().Opp.Damage(e.Ctx().Our, &info.DamageZone{ Type: info.DamageType.Fixed, - Damage: decimal.NewFromInt(int64(e.Ctx().Opp.DamageZone.Damage.IntPart())).Div(decimal.NewFromInt(int64(e.SideEffectArgs[0]))), + Damage: decimal.NewFromInt(int64(e.Ctx().Opp.SumDamage.IntPart())).Div(decimal.NewFromInt(int64(e.SideEffectArgs[0]))), }) return true } diff --git a/logic/service/fight/effect/effect_34.go b/logic/service/fight/effect/effect_34.go index 66d077626..68d086137 100644 --- a/logic/service/fight/effect/effect_34.go +++ b/logic/service/fight/effect/effect_34.go @@ -41,7 +41,7 @@ func (e *Effect34) Damage_Floor(t *info.DamageZone) bool { if e.Ctx().SkillEntity == nil { return true } - t.Damage = decimal.NewFromInt(int64(e.Ctx().Opp.DamageZone.Damage.IntPart())).Mul(decimal.NewFromInt(int64(e.SideEffectArgs[0]))) + t.Damage = decimal.NewFromInt(int64(e.Ctx().Opp.SumDamage.IntPart())).Mul(decimal.NewFromInt(int64(e.SideEffectArgs[0]))) return true } diff --git a/logic/service/fight/effect/effect_52.go b/logic/service/fight/effect/effect_52.go index 8ae693960..9c51f685a 100644 --- a/logic/service/fight/effect/effect_52.go +++ b/logic/service/fight/effect/effect_52.go @@ -13,7 +13,7 @@ func init() { t := &Effect52{ EffectNode: node.EffectNode{}, } - // t.Duration(-1) //设置成无限回合,到回合数就停止 + input.InitEffect(input.EffectType.Skill, 52, t) } diff --git a/logic/service/fight/effect/effect_57.go b/logic/service/fight/effect/effect_57.go index 5740ab7f2..8bd1a45da 100644 --- a/logic/service/fight/effect/effect_57.go +++ b/logic/service/fight/effect/effect_57.go @@ -14,7 +14,6 @@ import ( func init() { - // t.Duration(-1) //设置成无限回合,到回合数就停止 input.InitEffect(input.EffectType.Skill, 57, &Effect57{}) } diff --git a/logic/service/fight/effect/effect_6.go b/logic/service/fight/effect/effect_6.go index 611458349..61749f0c5 100644 --- a/logic/service/fight/effect/effect_6.go +++ b/logic/service/fight/effect/effect_6.go @@ -26,7 +26,7 @@ func (e *Effect6) Skill_Useed() bool { e.Ctx().Our.Damage(e.Ctx().Our, &info.DamageZone{ Type: info.DamageType.Fixed, //这个对面计算前是在他的回合,所以后手也能拿到伤害 - Damage: e.Ctx().Our.DamageZone.Damage.Div(decimal.NewFromInt(int64(e.SideEffectArgs[0]))), + Damage: e.Ctx().Our.SumDamage.Div(decimal.NewFromInt(int64(e.SideEffectArgs[0]))), }) return true diff --git a/logic/service/fight/effect/effect_60.go b/logic/service/fight/effect/effect_60.go index f841a0c0b..de7483710 100644 --- a/logic/service/fight/effect/effect_60.go +++ b/logic/service/fight/effect/effect_60.go @@ -14,7 +14,6 @@ import ( func init() { - // t.Duration(-1) //设置成无限回合,到回合数就停止 input.InitEffect(input.EffectType.Skill, 60, &Effect60{}) } diff --git a/logic/service/fight/effect/effect_73.go b/logic/service/fight/effect/effect_73.go index 926e403dd..2c4079b72 100644 --- a/logic/service/fight/effect/effect_73.go +++ b/logic/service/fight/effect/effect_73.go @@ -16,7 +16,7 @@ func init() { t := &Effect73{ EffectNode: node.EffectNode{}, } - // t.Duration(-1) //设置成无限回合,到回合数就停止 + input.InitEffect(input.EffectType.Skill, 73, t) } @@ -29,7 +29,7 @@ type Effect73 struct { func (e *Effect73) SetArgs(t *input.Input, a ...int) { e.EffectNode.SetArgs(t, a...) - e.EffectNode.Duration(e.EffectNode.SideEffectArgs[0]-1) + e.EffectNode.Duration(e.EffectNode.SideEffectArgs[0] - 1) } func (e *Effect73) Skill_Use_ex() bool { @@ -43,7 +43,7 @@ func (e *Effect73) Skill_Use_ex() bool { e.Ctx().Opp.Damage(e.Ctx().Our, &info.DamageZone{ Type: info.DamageType.Fixed, - Damage: e.Ctx().Opp.DamageZone.Damage.Mul(decimal.NewFromInt(2)), + Damage: e.Ctx().Opp.SumDamage.Mul(decimal.NewFromInt(2)), }) return true diff --git a/logic/service/fight/effect/effect_77.go b/logic/service/fight/effect/effect_77.go index 960dfe08c..c8143535c 100644 --- a/logic/service/fight/effect/effect_77.go +++ b/logic/service/fight/effect/effect_77.go @@ -14,7 +14,6 @@ import ( func init() { - // t.Duration(-1) //设置成无限回合,到回合数就停止 input.InitEffect(input.EffectType.Skill, 77, &Effect77{}) } diff --git a/logic/service/fight/effect/effect_89.go b/logic/service/fight/effect/effect_89.go index 51392e36f..b6f6fa396 100644 --- a/logic/service/fight/effect/effect_89.go +++ b/logic/service/fight/effect/effect_89.go @@ -16,7 +16,7 @@ func init() { t := &Effect89{ EffectNode: node.EffectNode{}, } - // t.Duration(-1) //设置成无限回合,到回合数就停止 + input.InitEffect(input.EffectType.Skill, 89, t) } @@ -37,7 +37,7 @@ func (e *Effect89) Skill_Useed() bool { return true } - e.Ctx().Our.Heal(e.Ctx().Our, &action.SelectSkillAction{}, e.Ctx().Our.DamageZone.Damage.Div(decimal.NewFromInt(int64(e.Args()[1])))) + e.Ctx().Our.Heal(e.Ctx().Our, &action.SelectSkillAction{}, e.Ctx().Our.SumDamage.Div(decimal.NewFromInt(int64(e.Args()[1])))) return true } diff --git a/logic/service/fight/effect/effect_91.go b/logic/service/fight/effect/effect_91.go index 805807ec5..f6ff8a2d7 100644 --- a/logic/service/fight/effect/effect_91.go +++ b/logic/service/fight/effect/effect_91.go @@ -15,7 +15,7 @@ func init() { t := &Effect91{ EffectNode: node.EffectNode{}, } - // t.Duration(-1) //设置成无限回合,到回合数就停止 + input.InitEffect(input.EffectType.Skill, 91, t) } diff --git a/logic/service/fight/fightc.go b/logic/service/fight/fightc.go index 2b17aca02..3ea6aaf7f 100644 --- a/logic/service/fight/fightc.go +++ b/logic/service/fight/fightc.go @@ -47,7 +47,7 @@ func (f *FightC) processSkillAttack(attacker, defender *input.Input, a *info.Ski attacker.CalculateCrit(defender, a) //暴击计算 attacker.IsCritical = a.Crit - attacker.DamageZone.Damage = attacker.CalculatePower(defender, a) + attacker.SumDamage = attacker.CalculatePower(defender, a) //睡眠受击消除 } @@ -63,7 +63,7 @@ func (f *FightC) processSkillAttack(attacker, defender *input.Input, a *info.Ski } //暴击翻倍 - attacker.DamageZone.Damage = attacker.DamageZone.Damage.Mul(decimal.NewFromInt(2)) + attacker.SumDamage = attacker.SumDamage.Mul(decimal.NewFromInt(2)) } // attacker.AddEffects(attacker.EffectCache...) //命中再添加效果 @@ -83,7 +83,7 @@ func (f *FightC) processSkillAttack(attacker, defender *input.Input, a *info.Ski defender.Damage(attacker, &info.DamageZone{ - Damage: attacker.DamageZone.Damage, + Damage: attacker.SumDamage, }, ) //这里其实是受到致死伤害 @@ -266,7 +266,7 @@ func (f *FightC) enterturn(fattack, sattack *action.SelectSkillAction) { fmt.Println(i, // "玩家技能:", oldskill.(*info.SkillEntity).ID, - "玩家技能伤害:", attacker.DamageZone.Damage, + "玩家技能伤害:", attacker.SumDamage, "自身剩余血量:", attacker.CurrentPet.Info.Hp, "对手剩余血量:", defender.CurrentPet.Info.Hp, ) diff --git a/logic/service/fight/input/fight.go b/logic/service/fight/input/fight.go index 8482c9a73..832708ea7 100644 --- a/logic/service/fight/input/fight.go +++ b/logic/service/fight/input/fight.go @@ -101,7 +101,7 @@ func (our *Input) DelPP(value int) { // 伤害落实 // 血量扣减节点比如触发回神,反弹也在这里实现 func (our *Input) Damage(in *Input, sub *info.DamageZone) { if sub.Type == info.DamageType.Red { //每回合计算伤害的时候重置伤害 - our.Opp.DamageZone.Damage = sub.Damage + our.Opp.SumDamage = sub.Damage } // 对方对我方造成,需要吃到对方的加成 @@ -174,8 +174,8 @@ func (our *Input) Damage(in *Input, sub *info.DamageZone) { } if sub.Type == info.DamageType.Red { //红才会产生造成伤害 - our.Opp.DamageZone.Damage = sub.Damage // 叠加总伤害 这里相当于记录红伤 - our.Opp.AttackValue.LostHp = uint32(our.Opp.DamageZone.Damage.IntPart()) //红伤落实 + our.Opp.SumDamage = sub.Damage // 叠加总伤害 这里相当于记录红伤 + our.Opp.AttackValue.LostHp = uint32(our.Opp.SumDamage.IntPart()) //红伤落实 } if uint32(sub.Damage.IntPart()) > our.CurrentPet.Info.Hp { diff --git a/logic/service/fight/input/input.go b/logic/service/fight/input/input.go index 60373c44b..4cb7527d8 100644 --- a/logic/service/fight/input/input.go +++ b/logic/service/fight/input/input.go @@ -26,23 +26,21 @@ type Input struct { Effects []Effect //effects 实际上全局就是effect无限回合 //effects容器 技能的 EffectCache []Effect //这里是命中前执行的容器,也就是命中前执行的所有逻辑相关,理论上一个effect被激活,就应该同时将其他的effect取消激活 Effect_Lost []Effect - //CanUseSkill bool - //Effect_Lost []Effect - //NewEffects []Effect + // 删掉伤害记录,可以在回调中记录,而不是每次调用记录 + SumDamage decimal.Decimal //伤害 + // DamageZone struct { + // Damage decimal.Decimal //伤害 + // BeforeADD decimal.Decimal //攻击伤害 + // BeforeMul decimal.Decimal + // BeforeFloor decimal.Decimal + // BeforeDiv decimal.Decimal + // BeforeSUB decimal.Decimal + // BeforeLock decimal.Decimal //锁伤 先锁受击方,再锁攻击方 受击方免疫也是这么锁 免疫等于锁0 + // BeforeLocked decimal.Decimal + // //BeforePost decimal.Decimal - DamageZone struct { - Damage decimal.Decimal //伤害 - BeforeADD decimal.Decimal //攻击伤害 - BeforeMul decimal.Decimal - BeforeFloor decimal.Decimal - BeforeDiv decimal.Decimal - BeforeSUB decimal.Decimal - BeforeLock decimal.Decimal //锁伤 先锁受击方,再锁攻击方 受击方免疫也是这么锁 免疫等于锁0 - BeforeLocked decimal.Decimal - //BeforePost decimal.Decimal - - //OldAttack int //攻击伤害被挡前伤害记录 - } //伤害容器 + // //OldAttack int //攻击伤害被挡前伤害记录 + // } //伤害容器 //First bool //是否先手 } @@ -123,7 +121,7 @@ func (our *Input) ResetAttackValue() { our.AttackValue.IsCritical = 0 our.AttackValue.GainHp = 0 our.AttackValue.LostHp = 0 - our.DamageZone.Damage = decimal.NewFromInt(0) + our.SumDamage = decimal.NewFromInt(0) //our.CanUseSkill = true } diff --git a/logic/service/fight/node/node.go b/logic/service/fight/node/node.go index e0f72c2b1..9e69b331f 100644 --- a/logic/service/fight/node/node.go +++ b/logic/service/fight/node/node.go @@ -77,6 +77,8 @@ func (e *EffectNode) CanStack(t ...bool) bool { return e.canStack } + +// 回合类改成int.max,然后魂印类重写切换精灵替换 func (e *EffectNode) Duration(t ...int) int { if len(t) > 0 { e.duration = t[0] diff --git a/modules/blazing/model/done.go b/modules/blazing/model/done.go index bb241a98b..89ee3f32a 100644 --- a/modules/blazing/model/done.go +++ b/modules/blazing/model/done.go @@ -9,7 +9,7 @@ import ( type EnumMilestone int var MilestoneMode = enum.New[struct { - BOSS EnumMilestone //boss类 地图ID->BOSSID ,胜利次数 + BOSS EnumMilestone //boss类 地图ID->BOSSID ,胜利次数 mapid bossid petid,防止换boss后数据不可用 ITEM EnumMilestone //物品类 物品ID 使用精灵 Fight EnumMilestone //挑战类 对战模式->对战类型->1是赢,0是总局数 }]()