diff --git a/logic/service/fight/effect/effect_10-16_94_99_114.go b/logic/service/fight/effect/effect_10-16_94_99_114.go index 7b35c071..b3322259 100644 --- a/logic/service/fight/effect/effect_10-16_94_99_114.go +++ b/logic/service/fight/effect/effect_10-16_94_99_114.go @@ -70,8 +70,8 @@ func (e *Effect10) OnSkill(ctx input.Ctx) bool { // 持续回合 if duration == 0 { - duration = int(e.Input.FightC.GetRand().Int31n(3)) // 默认随机 1~3 回合 - //duration++ + duration = int(e.Input.FightC.GetRand().Int31n(2)) // 默认随机 2~3 回合 + duration++ } // 获取状态效果 diff --git a/logic/service/fight/fightc.go b/logic/service/fight/fightc.go index a5c58ce1..5ecee398 100644 --- a/logic/service/fight/fightc.go +++ b/logic/service/fight/fightc.go @@ -242,8 +242,8 @@ func (f *FightC) Broadcast(t func(ff *input.Input)) { // 处理技能攻击逻辑 func (f *FightC) processSkillAttack(attacker, defender *input.Input, a *info.SkillEntity) { - a.AttackTimeC(attacker.GetProp(5, true)) //计算命中 - defender.Exec(func(t input.Effect) bool { //计算闪避 ,然后修改对方命中),同时相当于计算属性无效这种 + a.AttackTimeC(attacker.GetProp(5, true)) //计算命中 + defender.ExecCace(func(t input.Effect) bool { //计算闪避 ,然后修改对方命中),同时相当于计算属性无效这种 t.Skill_Hit_to(input.Ctx{ //计算命中后,我方强制改命中效果 Input: attacker, SkillEntity: a, @@ -253,7 +253,7 @@ func (f *FightC) processSkillAttack(attacker, defender *input.Input, a *info.Ski }) attacker.AttackValue.AttackTime = a.AttackTime //是否命中赋值 - attacker.Exec(func(t input.Effect) bool { //计算命中 miss改命中 + attacker.ExecCace(func(t input.Effect) bool { //计算命中 miss改命中 t.Calculate_Pre(input.Ctx{ //计算视为效果 Input: defender, @@ -262,7 +262,7 @@ func (f *FightC) processSkillAttack(attacker, defender *input.Input, a *info.Ski return true }) - attacker.Exec(func(t input.Effect) bool { //计算命中 miss改命中 + attacker.ExecCace(func(t input.Effect) bool { //计算命中 miss改命中 t.Skill_Hit(input.Ctx{ //计算变威力 Input: defender, @@ -277,8 +277,8 @@ func (f *FightC) processSkillAttack(attacker, defender *input.Input, a *info.Ski // 记录技能信息 attacker.SkillID = uint32(a.ID) //获取技能ID if attacker.AttackTime > 0 { //如果命中 - - attacker.CalculateCrit(defender, a) //暴击计算 + attacker.AddEffects(attacker.EffectCache...) //命中再添加效果 + attacker.CalculateCrit(defender, a) //暴击计算 attacker.AttackValue.IsCritical = a.Crit attacker.DamageZone.Damage = attacker.CalculatePower(defender, a) @@ -382,7 +382,7 @@ func (f *FightC) enterturn(fattack, sattack *action.SelectSkillAction) { //是否miss都应该施加解析effect f.First.Parseskill(f.Second, fattack) //解析到临时数据 - f.First.Exec(func(t input.Effect) bool { //回合开始前 + f.First.ExecCace(func(t input.Effect) bool { //回合开始前 //结算状态 t.Compare_Pre(fattack, sattack) //先结算技能的优先级 @@ -393,7 +393,7 @@ func (f *FightC) enterturn(fattack, sattack *action.SelectSkillAction) { if sattack != nil { f.Second.Parseskill(f.Second, sattack) //解析到临时数据 - f.Second.Exec(func(t input.Effect) bool { //回合开始前 + f.Second.ExecCace(func(t input.Effect) bool { //回合开始前 //结算状态 t.Compare_Pre(fattack, sattack) //先结算技能的优先级 @@ -418,13 +418,13 @@ func (f *FightC) enterturn(fattack, sattack *action.SelectSkillAction) { } } var attacker, defender *input.Input - f.First.Exec(func(t input.Effect) bool { //回合开始前 + f.First.ExecCace(func(t input.Effect) bool { //回合开始前 //结算状态 t.Turn_Start(input.Ctx{Input: f.First}) return true }) - f.Second.Exec(func(t input.Effect) bool { //回合开始前 + f.Second.ExecCace(func(t input.Effect) bool { //回合开始前 //结算状态 t.Turn_Start(input.Ctx{Input: f.Second}) @@ -456,7 +456,7 @@ func (f *FightC) enterturn(fattack, sattack *action.SelectSkillAction) { } - canuseskillok := attacker.Exec(func(t input.Effect) bool { //这个是能否使用技能 + canuseskillok := attacker.ExecCace(func(t input.Effect) bool { //这个是能否使用技能 //结算状态 //然后这里还可以处理自爆类 return t.Skill_Hit_Pre(input.Ctx{ diff --git a/logic/service/fight/input/effect.go b/logic/service/fight/input/effect.go index 1dfc3e4b..f08197da 100644 --- a/logic/service/fight/input/effect.go +++ b/logic/service/fight/input/effect.go @@ -124,7 +124,17 @@ func equalInts(a, b []int) bool { } return true } +func (c *Input) AddEffects(e ...Effect) { + for _, v := range e { + + + c.AddEffect(v) + + } + + +} func (c *Input) AddEffect(e Effect) { e.Alive(true) //添加后默认激活 //todo 免疫 @@ -183,6 +193,21 @@ func (c *Input) Exec(fn func(Effect) bool) bool { return result } +func (c *Input) ExecCace(fn func(Effect) bool) bool { + result := true + for _, value := range c.EffectCache { + if value.Alive() { + + if !fn(value) { //存在false,但是仍然要向下执行 + result = false //如果是false,说明存在阻止向下执行的effect,比如免疫能力提升效果 + } + + } + + } + + return result +} // 消除回合类效果 efftype 输入是消对方的还是自己的,false是自己,true是对方 func (c *Input) CancelTurn() { diff --git a/logic/service/fight/input/input.go b/logic/service/fight/input/input.go index b9069084..47c9334d 100644 --- a/logic/service/fight/input/input.go +++ b/logic/service/fight/input/input.go @@ -156,7 +156,7 @@ func (i *Input) Parseskill(defender *Input, skill *action.SelectSkillAction) { // defender.AddEffect(t) // } else { //t.SetArgs(i, temparg[:args]...) //设置入参 - i.AddEffect(t) + //i.AddEffect(t) // } //这里是临时缓存buff,后面确认命中后修改HIT状态