``` feat(fight): 新增状态类技能效果104和109,重构特效类型枚举并优化技能效果实现
This commit is contained in:
80
logic/service/fight/effect/effect_104_109.go
Normal file
80
logic/service/fight/effect/effect_104_109.go
Normal 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
|
||||
}
|
||||
29
logic/service/fight/effect/effect_466.go
Normal file
29
logic/service/fight/effect/effect_466.go
Normal 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
|
||||
}
|
||||
@@ -21,8 +21,6 @@ func init() {
|
||||
|
||||
}
|
||||
|
||||
// 命中之后
|
||||
// 特攻+2速度+1命中+1,
|
||||
func (e *Effect80) OnSkill() bool {
|
||||
if !e.Hit() {
|
||||
return true
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user