diff --git a/logic/service/fight/effect/effect_104_109.go b/logic/service/fight/effect/effect_104_109.go new file mode 100644 index 000000000..20bf0c344 --- /dev/null +++ b/logic/service/fight/effect/effect_104_109.go @@ -0,0 +1,80 @@ +package effect + +import ( + "blazing/logic/service/fight/info" + "blazing/logic/service/fight/input" + "blazing/logic/service/fight/node" +) + +// ----------------------------------------------------------- +// n回合内,每次直接攻击都有m%几率附带衰弱效果 +// ----------------------------------------------------------- +type Effect104 struct { + node.EffectNode + Status info.EnumPetStatus // 要施加的状态类型 + +} + +// 工厂函数 +func newEffectStatusn(status info.EnumPetStatus) *Effect104 { + return &Effect104{ + Status: status, + } +} + +func init() { + // 批量注册状态类技能 + registerStatusEffectsn() +} + +func registerStatusEffectsn() { + statusList := map[int]info.EnumPetStatus{ + 104: info.PetStatus.Weakened, + 109: info.PetStatus.Frozen, + } + + for id, status := range statusList { + input.InitEffect(input.EffectType.Skill, id, newEffectStatusn(status)) + } + +} + +// 默认添加回合 +func (e *Effect104) SetArgs(t *input.Input, a ...int) { + + e.EffectNode.SetArgs(t, a...) + e.EffectNode.Duration(e.EffectNode.SideEffectArgs[0]) + +} + +// ----------------------------------------------------------- +// 技能触发时调用 +// ----------------------------------------------------------- +func (e *Effect104) OnSkill() bool { + if !e.Hit() { + return true + } + + // n% 触发概率(默认 SideEffectArgs[0]) + chance := e.EffectNode.SideEffectArgs[1] + success, _, _ := e.Input.Player.Roll(chance, 100) + if !success { + return true + } + + // 持续回合 + + duration := int(e.Input.FightC.GetRand().Int31n(2)) // 默认随机 2~3 回合 + duration++ + + // 获取状态效果 + eff := input.Geteffect(input.EffectType.Status, int(e.Status)) + if eff == nil { + return true + } + + eff.Duration(duration) + eff.SetArgs(e.Ctx().Our) //输入参数是对方 + e.Ctx().Opp.AddEffect(e.Ctx().Our, eff) + return true +} diff --git a/logic/service/fight/effect/effect_466.go b/logic/service/fight/effect/effect_466.go new file mode 100644 index 000000000..b536fb86e --- /dev/null +++ b/logic/service/fight/effect/effect_466.go @@ -0,0 +1,29 @@ +package effect + +import ( + "blazing/logic/service/fight/action" + "blazing/logic/service/fight/input" + "blazing/logic/service/fight/node" +) + +/** + * 使用技能恢复m点体力值 + */ + +func init() { + + input.InitEffect(input.EffectType.Skill, 466, &Effect466{}) + +} + +type Effect466 struct { + node.EffectNode +} + +func (e *Effect466) OnSkill() bool { + if !e.Hit() { + return true + } + e.Ctx().Our.Heal(e.Ctx().Our, &action.SelectSkillAction{}, e.Args()[0]) + return true +} diff --git a/logic/service/fight/effect/effect_80.go b/logic/service/fight/effect/effect_80.go index 1e46f16f0..ac4b0e590 100644 --- a/logic/service/fight/effect/effect_80.go +++ b/logic/service/fight/effect/effect_80.go @@ -21,8 +21,6 @@ func init() { } -// 命中之后 -// 特攻+2速度+1命中+1, func (e *Effect80) OnSkill() bool { if !e.Hit() { return true diff --git a/logic/service/fight/input/effect.go b/logic/service/fight/input/effect.go index 5559cdfa7..e37d422fb 100644 --- a/logic/service/fight/input/effect.go +++ b/logic/service/fight/input/effect.go @@ -17,12 +17,21 @@ import ( // 战斗结束原因枚举 type EnumEffectType uint16 +// var EffectType = enum.New[struct { - Skill EnumEffectType `enum:"1"` //技能 - NewSel EnumEffectType `enum:"2"` //特性 - Status EnumEffectType `enum:"3"` //状态 - Sub EnumEffectType `enum:"4"` //子效果 + // ========== 新增精灵特效Stat枚举项 ========== + Invalid EnumEffectType `enum:"0"` // 无效(默认值) + NewSel EnumEffectType `enum:"1"` // 特性 + LimitedTimes EnumEffectType `enum:"2"` // 有有效次数的特效 + Burst EnumEffectType `enum:"3"` // 爆发特效 + SpecialTrait EnumEffectType `enum:"4"` // 异能精灵特质 + Training EnumEffectType `enum:"5"` // 特训 + SoulMark EnumEffectType `enum:"6"` // 魂印 + // ========== 原有枚举项 ========== + Skill EnumEffectType `enum:"7"` // 技能 + Status EnumEffectType `enum:"8"` // 状态 + Sub EnumEffectType `enum:"9"` // 子效果 }]() var NodeM = make(map[int64]Effect, 0)