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 8e80bac1f..102da3fa4 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 @@ -32,6 +32,7 @@ func registerStatusEffects() { 10: info.PetStatus.Paralysis, 11: info.PetStatus.Poisoned, 12: info.PetStatus.Burned, + 13: info.PetStatus.DrainedHP, 14: info.PetStatus.Frozen, 15: info.PetStatus.Fear, 16: info.PetStatus.Sleep, diff --git a/logic/service/fight/effect/effect_power_doblue.go b/logic/service/fight/effect/effect_power_doblue.go index 1de5b4fd8..1788180e6 100644 --- a/logic/service/fight/effect/effect_power_doblue.go +++ b/logic/service/fight/effect/effect_power_doblue.go @@ -31,10 +31,11 @@ type Effect96 struct { StatusID int } -func (e *Effect96) PreSkill(opp *input.Input, skill *info.SkillEntity) { - if f := statusFuncRegistry.Get(e.StatusID); f != nil && f(e.Input, opp) { - skill.Power *= 2 +func (e *Effect96) Skill_Hit(opp *input.Ctx) bool { + if f := statusFuncRegistry.Get(e.StatusID); f != nil && f(e.Input, opp.Input) { + opp.Power *= 2 } + return true } // ---- 注册所有效果 ---- diff --git a/logic/service/fight/effect/effect_status.go b/logic/service/fight/effect/effect_status.go index b18659fdd..41cc0d30f 100644 --- a/logic/service/fight/effect/effect_status.go +++ b/logic/service/fight/effect/effect_status.go @@ -29,22 +29,30 @@ type StatusSleep struct { //睡眠不能出手 ,这个挂载到对面来实现 StatusNotSkill } -func (e *StatusSleep) Skill_Useed(input.Ctx) bool { - +func (e *StatusSleep) Skill_Use(ctx input.Ctx) bool { + if ctx.SkillEntity.Category() != info.Category.STATUS { + t := e.Input.GetEffect(input.EffectType.Status, int(info.PetStatus.Sleep)) + if t != nil { + t.Alive(false) + } + } return true } // 扣血类 type DrainHP struct { EffectStatus + + damage decimal.Decimal } func (e *DrainHP) Skill_Hit_Pre(input input.Ctx) bool { + e.damage = decimal.NewFromUint64(uint64(e.Input.CurrentPet.Info.MaxHp)). + Div(decimal.NewFromInt(8)) input.DamageZone = &info.DamageZone{ - Type: info.DamageType.True, //状态类扣除无法被减伤 - Damage: decimal.NewFromUint64(uint64(e.Input.CurrentPet.Info.MaxHp)). - Div(decimal.NewFromInt(8)), + Type: info.DamageType.True, //状态类扣除无法被减伤 + Damage: e.damage, } e.Input.Damage(input) @@ -52,14 +60,16 @@ func (e *DrainHP) Skill_Hit_Pre(input input.Ctx) bool { } // 被寄生种子 扣血类 -type StatusDrainedHP struct { +type DrainedHP struct { DrainHP } -func (e *StatusDrainedHP) Skill_Hit_Pre(input input.Ctx) bool { +func (e *DrainedHP) Skill_Hit_Pre(input input.Ctx) bool { e.DrainHP.Skill_Hit_Pre(input) //先调用父类扣血 //TODO 寄生种子 给对面回血,待实现回血buff + //这个回血不属于任何类型,所以不会被阻止回血 + input.Heal(nil, e.damage) // input.CurrentPet.Info.Hp = -e.Input.CurrentPet.Info.MaxHp / 8 return true @@ -73,11 +83,13 @@ func init() { f.Status = t input.InitEffect(input.EffectType.Status, int(t), f) } - input.InitEffect(input.EffectType.Status, int(info.PetStatus.DrainHP), &EffectStatus{}) //寄生种子 - - tt(info.PetStatus.Paralysis, &StatusNotSkill{}) //麻痹 - tt(info.PetStatus.Tired, &StatusNotSkill{}) //疲惫 - tt(info.PetStatus.Fear, &StatusNotSkill{}) //害怕 - tt(info.PetStatus.Petrified, &StatusNotSkill{}) //石化 - input.InitEffect(input.EffectType.Status, 8, &StatusSleep{}) //睡眠 + input.InitEffect(input.EffectType.Status, int(info.PetStatus.DrainHP), &DrainedHP{}) //寄生种子 + input.InitEffect(input.EffectType.Status, int(info.PetStatus.Poisoned), &DrainHP{}) //中毒 + input.InitEffect(input.EffectType.Status, int(info.PetStatus.Frozen), &DrainHP{}) //冻伤 + input.InitEffect(input.EffectType.Status, int(info.PetStatus.Burned), &DrainHP{}) //烧伤 + tt(info.PetStatus.Paralysis, &StatusNotSkill{}) //麻痹 + tt(info.PetStatus.Tired, &StatusNotSkill{}) //疲惫 + tt(info.PetStatus.Fear, &StatusNotSkill{}) //害怕 + tt(info.PetStatus.Petrified, &StatusNotSkill{}) //石化 + input.InitEffect(input.EffectType.Status, 8, &StatusSleep{}) //睡眠 } diff --git a/logic/service/fight/fightc.go b/logic/service/fight/fightc.go index 17f53b3e8..3a1460846 100644 --- a/logic/service/fight/fightc.go +++ b/logic/service/fight/fightc.go @@ -264,6 +264,15 @@ func (f *FightC) processSkillAttack(attacker, defender *input.Input, a *action.S attacker.AttackValue.AttackTime = a.AttackTime //是否命中赋值 attacker.Exec(func(t input.Effect) bool { //计算命中 miss改命中 + t.Calculate_Pre(input.Ctx{ //计算视为效果 + Input: defender, + SelectSkillAction: a, + }) //相当于先调整基础命中,不光调整命中,这里还能调整技能属性,暴击率 + + return true + }) + attacker.Exec(func(t input.Effect) bool { //计算命中 miss改命中 + t.Skill_Hit(input.Ctx{ //计算变威力 Input: defender, SelectSkillAction: a, @@ -280,23 +289,9 @@ func (f *FightC) processSkillAttack(attacker, defender *input.Input, a *action.S attacker.UseSkill(defender, a) //暴击计算 attacker.AttackValue.IsCritical = a.Crit - attacker.Exec(func(t input.Effect) bool { //计算命中 miss改命中 - t.Calculate_Pre(input.Ctx{ //计算视为效果 - Input: defender, - SelectSkillAction: a, - }) //相当于先调整基础命中,不光调整命中,这里还能调整技能属性,暴击率 - - return true - }) attacker.DamageZone.Damage = attacker.CalculatePower(defender, a.SkillEntity) //睡眠受击消除 - if a.SkillEntity.Category() != info.Category.STATUS { - t := defender.GetEffect(input.EffectType.Status, int(info.PetStatus.Sleep)) - if t != nil { - t.Alive(false) - } - } if attacker.AttackValue.IsCritical == 1 { //暴击破防 @@ -469,16 +464,18 @@ func (f *FightC) enterturn(fattack, sattack *action.SelectSkillAction) { } } - canuseskillok := attacker.Exec(func(t input.Effect) bool { //这个是能否使用技能 - //结算状态 - //然后这里还可以处理自爆类 - return t.Skill_Hit_Pre(input.Ctx{ - Input: defender, - SelectSkillAction: currentskill, - }) //返回本身结算,如果false,说明不能使用技能了 + // canuseskillok := attacker.Exec(func(t input.Effect) bool { //这个是能否使用技能 + // //结算状态 + // //然后这里还可以处理自爆类 + // return t.Skill_Hit_Pre(input.Ctx{ + // Input: defender, + // SelectSkillAction: currentskill, + // }) //返回本身结算,如果false,说明不能使用技能了 - }) - if canuseskill && canuseskillok { //可以使用技能 + // }) + //结算状态 + //然后这里还可以处理自爆类 + if canuseskill { //可以使用技能 f.processSkillAttack(attacker, defender, currentskill) currentskill = oldskill @@ -494,7 +491,7 @@ func (f *FightC) enterturn(fattack, sattack *action.SelectSkillAction) { //技能使用后 defender.Exec(func(t input.Effect) bool { - t.Skill_Use(input.Ctx{Input: attacker}) + t.Skill_Use(input.Ctx{Input: attacker, SelectSkillAction: currentskill}) return true })