diff --git a/logic/service/fight/effect/effect_damage.go b/logic/service/fight/effect/effect_damage.go index fd1ad497..ec110ef6 100644 --- a/logic/service/fight/effect/effect_damage.go +++ b/logic/service/fight/effect/effect_damage.go @@ -5,6 +5,8 @@ import ( "blazing/logic/service/fight/info" "blazing/logic/service/fight/input" "blazing/logic/service/fight/node" + + "github.com/gogf/gf/v2/internal/deepcopy" ) // 施加一个基类effect @@ -33,7 +35,21 @@ func (e *Effect0) TurnEnd(opp *input.Input) { // 使用技能时 func (e *Effect0) OnSkill(opp *input.Input, skill *info.SkillEntity) { + oldour := deepcopy.Copy(e.Input.CurrentPet).(*info.BattlePetEntity) + oldouo := deepcopy.Copy(opp.CurrentPet).(*info.BattlePetEntity) + e.Input.Exec(func(t input.Effect) bool { //属性获取前 + t.BeferAttr(e.Input.CurrentPet) //使XX为XX + return true + }) + e.Input.Exec(func(t input.Effect) bool { //属性获取后 + + t.AfterAttr(opp.CurrentPet) //视为xx + return true + }) + + //威力+区 + //威力*区 spower := skill.CalculatePower(opp.CurrentPet) e.Input.AttackValue.LostHp = uint32(spower.IntPart()) @@ -53,7 +69,8 @@ func (e *Effect0) OnSkill(opp *input.Input, skill *info.SkillEntity) { // } else { // opp.CurrentPet.Info.Hp = opp.CurrentPet.Info.Hp - e.Input.AttackValue.LostHp // } - + e.Input.CurrentPet = oldour //恢复 + opp.CurrentPet = oldouo //恢复 } func (this *Effect0) IsCrit(opp *input.Input, skill *info.SkillEntity) { skill.Crit = 0 diff --git a/logic/service/fight/fightc.go b/logic/service/fight/fightc.go index 38a62497..a2fdc5e3 100644 --- a/logic/service/fight/fightc.go +++ b/logic/service/fight/fightc.go @@ -378,7 +378,7 @@ func (f *FightC) parseskill(attacker, defender *input.Input, id *SelectSkillActi args := xmlres.EffectArgs[v] - t.SetArgs(temparg[:args]) //设置入参 + t.SetArgs(temparg[:args]...) //设置入参 temparg = temparg[args:] if t.GetOwner() { //如果取反,说明是给对方添加的回合效果 @@ -437,8 +437,7 @@ func (f *FightC) processSkillAttack(attacker, defender *input.Input, a *SelectSk f.parseskill(attacker, defender, a) //命中后解析effect attacker.Exec(func(t input.Effect) bool { - //威力+区 - //威力*区 + t.OnSkill(defender, a.Skill) //调用伤害计算 return true diff --git a/logic/service/fight/input/nodemanger.go b/logic/service/fight/input/nodemanger.go index f9db7aaf..17416d3e 100644 --- a/logic/service/fight/input/nodemanger.go +++ b/logic/service/fight/input/nodemanger.go @@ -25,8 +25,8 @@ type Effect interface { // OnDamage() bool // 造成伤害时触发 //使用技能 可以取消用技能节点 SetInput(input *Input) - AfterAttr() //在获取属性前,比如重写对方属性AfterAttr - BeferAttr() //在获取属性后,比如视为对方属性 + AfterAttr(t *info.BattlePetEntity) //在获取属性前,比如重写对方属性AfterAttr + BeferAttr(t *info.BattlePetEntity) //在获取属性后,比如视为对方属性 SetArgs(param ...int) IsCrit(opp *Input, skill *info.SkillEntity) //是否暴击 CalculateDamage(opp *Input, skill *info.SkillEntity) //击判定成功且伤害计算前触发 diff --git a/logic/service/fight/node/attr.go b/logic/service/fight/node/attr.go index bca6647d..f49615cd 100644 --- a/logic/service/fight/node/attr.go +++ b/logic/service/fight/node/attr.go @@ -1,14 +1,16 @@ package node +import "blazing/logic/service/fight/info" + // 返回false阻止继续运行 // 回合开始 -func (this *EffectNode) AfterAttr() { +func (this *EffectNode) AfterAttr(t *info.BattlePetEntity) { } // 返回false阻止继续运行 // 回合开始 -func (this *EffectNode) BeferAttr() { +func (this *EffectNode) BeferAttr(t *info.BattlePetEntity) { }