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 c7bcb85c..1f0bef25 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,68 +4,82 @@ 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 newp(t1 info.EnumBattleStatus) *Effect10 { - t := &Effect10{ - Status: t1, +// 工厂函数 +func newEffectStatus(status info.EnumBattleStatus) *Effect10 { + return &Effect10{ + Status: status, } - - return t } func init() { - //n%令对方麻痹 + // 批量注册状态类技能 + registerStatusEffects() +} - input.InitEffect(input.EffectType.Skill, 10, newp(info.PetStatus.Paralysis)) +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, + } - // 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)) + for id, status := range statusList { + input.InitEffect(input.EffectType.Skill, id, newEffectStatus(status)) + } } + +// ----------------------------------------------------------- +// 技能触发时调用 +// ----------------------------------------------------------- func (e *Effect10) OnSkill(ctx input.Ctx) bool { - t, _, _ := e.Input.Player.Roll(e.EffectNode.SideEffectArgs[0], 100) - if t { - - t1 := e.Input.FightC.GetRand().Int31n(3) - - eff := input.Geteffect(input.EffectType.Status, int(e.Status)) - if eff != nil { - eff.Duration(int(t1)) - - ctx.AddEffect(eff) - } - + if !e.Hit() { + return true } + + // 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] + } + // 持续回合 + + if duration == 0 { + duration = int(rand.Int31n(3)) // 默认随机 1~3 回合 + } + + // 获取状态效果 + 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) { - -}