diff --git a/logic/service/fight/effect/effect_7.go b/logic/service/fight/effect/effect_7.go index fae64ce4c..d47bee7bc 100644 --- a/logic/service/fight/effect/effect_7.go +++ b/logic/service/fight/effect/effect_7.go @@ -25,7 +25,7 @@ type Effect7 struct { } func (e *Effect7) Skill_Hit_Pre() bool { - if e.Ctx().Our.CurrentPet.Info.Hp <= e.Input.CurrentPet.Info.Hp { + if e.Ctx().Opp.CurrentPet.Info.Hp <= e.Ctx().Our.CurrentPet.Info.Hp { e.Ctx().SkillEntity.Accuracy = 0 } @@ -37,7 +37,7 @@ func (e *Effect7) Damage_Floor() bool { } fmt.Println("Effect7_old", e.Ctx().DamageZone.Damage.IntPart()) if e.Ctx().DamageZone.Type == info.DamageType.Red { - e.Ctx().DamageZone.Damage = decimal.NewFromInt(int64(e.Ctx().Our.CurrentPet.Info.Hp - e.Ctx().Opp.CurrentPet.Info.Hp)) + e.Ctx().DamageZone.Damage = decimal.NewFromInt(int64(e.Ctx().Opp.CurrentPet.Info.Hp - e.Ctx().Our.CurrentPet.Info.Hp)) } fmt.Println("Effect7_new", e.Ctx().DamageZone.Damage.IntPart()) diff --git a/logic/service/fight/fightc.go b/logic/service/fight/fightc.go index b503e405a..2d105a18f 100644 --- a/logic/service/fight/fightc.go +++ b/logic/service/fight/fightc.go @@ -17,8 +17,8 @@ import ( func (f *FightC) processSkillAttack(attacker, defender *input.Input, a *info.SkillEntity) { //oldpet := f.copypet(attacker.CurrentPet) - a.AttackTimeC(attacker.GetProp(5, true)) //计算命中 - defender.ExecCace(func(t input.Effect) bool { //计算闪避 ,然后修改对方命中),同时相当于计算属性无效这种 + a.AttackTimeC(attacker.GetProp(5, true)) //计算命中 + defender.Exec(func(t input.Effect) bool { //计算闪避 ,然后修改对方命中),同时相当于计算属性无效这种 t.Ctx().SkillEntity = a t.Skill_Hit_ex() @@ -27,14 +27,14 @@ func (f *FightC) processSkillAttack(attacker, defender *input.Input, a *info.Ski }) attacker.AttackValue.AttackTime = a.AttackTime //是否命中赋值 - attacker.ExecCace(func(t input.Effect) bool { //计算命中 miss改命中 + attacker.Exec(func(t input.Effect) bool { //计算命中 miss改命中 //计算视为效果 t.Ctx().SkillEntity = a t.Calculate_Pre() //相当于先调整基础命中,不光调整命中,这里还能调整技能属性,暴击率 return true }) - attacker.ExecCace(func(t input.Effect) bool { + attacker.Exec(func(t input.Effect) bool { //计算变威力 t.Ctx().SkillEntity = a t.Skill_Hit() //相当于先调整基础命中,不光调整命中,这里还能调整技能属性,暴击率 @@ -69,7 +69,7 @@ func (f *FightC) processSkillAttack(attacker, defender *input.Input, a *info.Ski } } - attacker.AddEffects(attacker.EffectCache...) //命中再添加效果 + // attacker.AddEffects(attacker.EffectCache...) //命中再添加效果 for _, e := range attacker.EffectCache { //这里实现应该参考本地技能是否命中,然后 e.Hit(a.AttackTime != 0) //我方效果命中 @@ -146,7 +146,7 @@ func (f *FightC) enterturn(fattack, sattack *action.SelectSkillAction) { //是否miss都应该施加解析effect f.First.Parseskill(f.Second, fattack) //解析到临时数据 - f.First.ExecCace(func(t input.Effect) bool { //回合开始前 + f.First.Exec(func(t input.Effect) bool { //回合开始前 //结算状态 t.Compare_Pre(fattack, sattack) //先结算技能的优先级 @@ -157,7 +157,7 @@ func (f *FightC) enterturn(fattack, sattack *action.SelectSkillAction) { if sattack != nil { f.Second.Parseskill(f.Second, sattack) //解析到临时数据 - f.Second.ExecCace(func(t input.Effect) bool { //回合开始前 + f.Second.Exec(func(t input.Effect) bool { //回合开始前 //结算状态 t.Compare_Pre(fattack, sattack) //先结算技能的优先级 @@ -182,13 +182,13 @@ func (f *FightC) enterturn(fattack, sattack *action.SelectSkillAction) { } } var attacker, defender *input.Input - f.First.ExecCace(func(t input.Effect) bool { //回合开始前 + f.First.Exec(func(t input.Effect) bool { //回合开始前 //结算状态 t.Turn_Start() return true }) - f.Second.ExecCace(func(t input.Effect) bool { //回合开始前 + f.Second.Exec(func(t input.Effect) bool { //回合开始前 //结算状态 t.Turn_Start() @@ -209,12 +209,12 @@ func (f *FightC) enterturn(fattack, sattack *action.SelectSkillAction) { } currentskill = oldskill - attacker.Initeffectcache() + //attacker.Initeffectcache() // fmt.Println("开始攻击威力", oldskill.Power) if oldskill != nil { fmt.Println("开始攻击威力", oldskill.Power) } - canuseskill := attacker.ExecCace(func(t input.Effect) bool { //这个是能否使用技能 + canuseskill := attacker.Exec(func(t input.Effect) bool { //这个是能否使用技能 //结算状态 //然后这里还可以处理自爆类 t.Ctx().SkillEntity = currentskill @@ -242,6 +242,13 @@ func (f *FightC) enterturn(fattack, sattack *action.SelectSkillAction) { skill.PP-- } + } else { + + //根本没释放技能,这些效果全部失效 + for _, e := range attacker.EffectCache { + e.Alive() + + } } //技能使用后 diff --git a/logic/service/fight/input/effect.go b/logic/service/fight/input/effect.go index 455fe97ce..51041bc06 100644 --- a/logic/service/fight/input/effect.go +++ b/logic/service/fight/input/effect.go @@ -124,16 +124,7 @@ func equalInts(a, b []int) bool { } return true } -func (our *Input) AddEffects(e ...Effect) { - for _, v := range e { - - // v.Alive() - our.AddEffect(v) - - } - -} func (our *Input) AddEffect(e Effect) { e.Alive(true) //添加后默认激活 //todo 免疫 @@ -198,22 +189,6 @@ func (our *Input) Exec(fn func(Effect) bool) bool { return result } -func (our *Input) ExecCace(fn func(Effect) bool) bool { - result := true - - for _, value := range our.EffectCache { - if value.Alive() { - value.Ctx().Our = our - value.Ctx().Opp = our.Opp - value.Ctx().DamageZone = &info.DamageZone{} - if !fn(value) { //存在false,但是仍然要向下执行 - result = false //如果是false,说明存在阻止向下执行的effect,比如免疫能力提升效果 - } - } - } - - return result -} // 消除回合类效果 efftype 输入是消对方的还是自己的,false是自己,true是对方 func (our *Input) CancelTurn() { diff --git a/logic/service/fight/input/input.go b/logic/service/fight/input/input.go index 95cfa46c4..ddf299a2e 100644 --- a/logic/service/fight/input/input.go +++ b/logic/service/fight/input/input.go @@ -180,10 +180,10 @@ func (our *Input) Parseskill(defender *Input, skill *action.SelectSkillAction) { // defender.AddEffect(t) // } else { //t.SetArgs(i, temparg[:args]...) //设置入参 - //i.AddEffect(t) + our.AddEffect(t) // } //这里是临时缓存buff,后面确认命中后修改HIT状态 - t.Alive() //先让效果保持存活 + // t.Alive() //先让效果保持存活 our.EffectCache = append(our.EffectCache, t) // i.NewEffects = append(i.NewEffects, t) } diff --git a/logic/service/fight/loop.go b/logic/service/fight/loop.go index 05e7140ff..47a06b261 100644 --- a/logic/service/fight/loop.go +++ b/logic/service/fight/loop.go @@ -46,6 +46,7 @@ func (f *FightC) battleLoop() { close(f.actionChan) fmt.Println("战斗循环结束") close(f.over) + } // 收集玩家动作(含超时判定) @@ -91,6 +92,7 @@ func (f *FightC) collectPlayerActions(ourID, oppID uint32) map[uint32]action.Bat if pid != 0 && (f.Info.Status == info.BattleStatus.FIGHT_WITH_BOSS || f.Info.Status == info.BattleStatus.FIGHT_WITH_NPC) { f.GetInputByAction(paction, true).GetAction(f.Our) + //panic("AI自动技能") } actions[pid] = paction diff --git a/logic/service/player/player.go b/logic/service/player/player.go index 034e9c3d4..ef8989de6 100644 --- a/logic/service/player/player.go +++ b/logic/service/player/player.go @@ -333,7 +333,13 @@ func (p *Player) Save() { p.FightC.Over(p, info.BattleOverReason.PlayerOffline) //玩家逃跑,但是不能锁线程 }() //<-ov - <-p.FightC.GetOverChan() //等待结束 + select { + case <-p.FightC.GetOverChan(): //等待结束 + case <-time.After(time.Second * 5): //等待5秒 + cool.Loger.Error(context.TODO(), "战斗崩溃", p.Info.UserID) + + } + } p.Info.TimeToday = p.Info.TimeToday + uint32(time.Now().Unix()) - uint32(p.Onlinetime) //保存电池时间