``` feat(fight): 新增状态类技能效果104和109,重构特效类型枚举并优化技能效果实现

This commit is contained in:
1
2025-12-11 13:58:24 +00:00
parent 6b534adc07
commit 29ddbdd7e6
4 changed files with 122 additions and 6 deletions

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -21,8 +21,6 @@ func init() {
}
// 命中之后
// 特攻+2速度+1命中+1
func (e *Effect80) OnSkill() bool {
if !e.Hit() {
return true

View File

@@ -17,12 +17,21 @@ import (
// 战斗结束原因枚举
type EnumEffectType uint16
// <!-- Stat: 精灵特效Stat: 0: 无效(默认值), 1: 永久, 2: 有`有效次数'的特效 3: 爆发特效 4: 异能精灵特质5特训6魂印-->
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)