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 f5949dda..c7bcb85c 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 @@ -4,82 +4,68 @@ import ( "blazing/logic/service/fight/info" "blazing/logic/service/fight/input" "blazing/logic/service/fight/node" - "math/rand" ) -// ----------------------------------------------------------- -// 通用状态效果(例如 麻痹 / 中毒 / 疲惫 / 混乱 等) -// ----------------------------------------------------------- type Effect10 struct { node.EffectNode - Status info.EnumBattleStatus // 要施加的状态类型 - + Status info.EnumBattleStatus } -// 工厂函数 -func newEffectStatus(status info.EnumBattleStatus) *Effect10 { - return &Effect10{ - Status: status, +func newp(t1 info.EnumBattleStatus) *Effect10 { + t := &Effect10{ + Status: t1, } + + return t } func init() { - // 批量注册状态类技能 - registerStatusEffects() -} + //n%令对方麻痹 -func registerStatusEffects() { - statusList := map[int]info.EnumBattleStatus{ - 10: info.PetStatus.Paralysis, - 11: info.PetStatus.Poisoned, - 12: info.PetStatus.Burned, - 14: info.PetStatus.Frozen, - 15: info.PetStatus.Fear, - 16: info.PetStatus.Sleep, - 22: info.PetStatus.Tired, - 94: info.PetStatus.Petrified, - 99: info.PetStatus.Confused, - 114: info.PetStatus.Flammable, - } + input.InitEffect(input.EffectType.Skill, 10, newp(info.PetStatus.Paralysis)) - for id, status := range statusList { - input.InitEffect(input.EffectType.Skill, id, newEffectStatus(status)) - } + // n%令对方中毒 + input.InitEffect(input.EffectType.Skill, 11, newp(info.PetStatus.Poisoned)) + //n%令对方烧伤 + input.InitEffect(input.EffectType.Skill, 12, newp(info.PetStatus.Burned)) + + //n回合吸取对方最大体力的1/8(草系无效) + + //n%令对方冻伤 + input.InitEffect(input.EffectType.Skill, 14, newp(info.PetStatus.Frozen)) + + //n%令对方害怕 + input.InitEffect(input.EffectType.Skill, 15, newp(info.PetStatus.Fear)) + + //n%令对手睡眠 + input.InitEffect(input.EffectType.Skill, 16, newp(info.PetStatus.Sleep)) + + //n%令对方石化 + input.InitEffect(input.EffectType.Skill, 94, newp(info.PetStatus.Petrified)) + + //n%几率令对手混乱 + input.InitEffect(input.EffectType.Skill, 99, newp(info.PetStatus.Confused)) + + //n%几率令对方易燃 + input.InitEffect(input.EffectType.Skill, 114, newp(info.PetStatus.Flammable)) } +func (e *Effect10) OnSkill(ctx input.Ctx) bool { + t, _, _ := e.Input.Player.Roll(e.EffectNode.SideEffectArgs[0], 100) + if t { -// ----------------------------------------------------------- -// 技能触发时调用 -// ----------------------------------------------------------- -func (e *EffectStatus) OnSkill(ctx input.Ctx) bool { - if !e.Hit() { - return true - } + t1 := e.Input.FightC.GetRand().Int31n(3) - // n% 触发概率(默认 SideEffectArgs[0]) - chance := e.EffectNode.SideEffectArgs[0] - success, _, _ := e.Input.Player.Roll(chance, 100) - if !success { - return true - } - var duration int - if len(e.EffectNode.SideEffectArgs) > 1 { - // 持续回合 - duration = e.EffectNode.SideEffectArgs[1] - } - // 持续回合 + eff := input.Geteffect(input.EffectType.Status, int(e.Status)) + if eff != nil { + eff.Duration(int(t1)) - if duration == 0 { - duration = int(rand.Int31n(3) + 10) // 默认随机 1~3 回合 - } + ctx.AddEffect(eff) + } - // 获取状态效果 - eff := input.Geteffect(input.EffectType.Status, int(e.Status)) - if eff == nil { - return true } - - eff.Duration(duration) - ctx.AddEffect(eff) return true } +func (e *Effect10) OnMiss(opp *input.Input, skill *info.SkillEntity) { + +} diff --git a/logic/service/fight/fightc.go b/logic/service/fight/fightc.go index 44d6700d..d53e838e 100644 --- a/logic/service/fight/fightc.go +++ b/logic/service/fight/fightc.go @@ -286,12 +286,12 @@ func (f *FightC) processSkillAttack(attacker, defender *input.Input, a *action.S }) 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.NotALive() - // } - // } + if a.SkillEntity.Category() != info.Category.STATUS { + t := defender.GetEffect(input.EffectType.Status, int(info.PetStatus.Sleep)) + if t != nil { + t.NotALive() + } + } if attacker.AttackValue.IsCritical == 1 { //暴击破防