diff --git a/logic/service/fight/boss/NewSeIdx_1.go b/logic/service/fight/boss/NewSeIdx_1.go index e4d0904e..f85e7b19 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 69f64d43..bfe65500 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 faddc26f..0c381b6b 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 87fe50b3..1e5666b9 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 f578f886..09d7f18d 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 204e279e..89a69dfb 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 a8d68e60..45adbfa5 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 beec3740..27f16d49 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 66d07762..68d08613 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 8ae69396..9c51f685 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 5740ab7f..8bd1a45d 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 61145834..61749f0c 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 f841a0c0..de748371 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 926e403d..2c4079b7 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 960dfe08..c8143535 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 51392e36..b6f6fa39 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 805807ec..f6ff8a2d 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 2b17aca0..3ea6aaf7 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 8482c9a7..832708ea 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 60373c44..4cb7527d 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 e0f72c2b..9e69b331 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 bb241a98..89ee3f32 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是总局数 }]()