feat(fight): 添加新效果类型574并优化现有战斗逻辑 - 重命名NewSel409结构体的Action_end_ex方法为Skill_Use_ex - 将effect/523中HP检查改为Alive()方法调用 - 修复selfkill效果中的代码格式问题 - 新增效果类型574:消耗自身全部体力使下次技能必定先手、命中且暴击 - 实现Effect574的ComparePre和ActionStart方法处理先手、命中和暴击逻辑 ```
41 lines
1004 B
Go
41 lines
1004 B
Go
package effect
|
||
|
||
import (
|
||
"blazing/logic/service/fight/info"
|
||
"blazing/logic/service/fight/input"
|
||
"blazing/logic/service/fight/node"
|
||
|
||
"github.com/alpacahq/alpacadecimal"
|
||
)
|
||
|
||
// {
|
||
// "id": 576,
|
||
// "argsNum": 2,
|
||
// "info": "{0}回合内免疫低于{1}的攻击伤害"
|
||
// },
|
||
type Effect576 struct {
|
||
node.EffectNode
|
||
}
|
||
|
||
// DamageFloor 在计算伤害时触发,减少低于阈值的伤害至0
|
||
func (d *Effect576) DamageFloor(zone *info.DamageZone) bool {
|
||
// 如果伤害类型是减少体力的类型,并且伤害值低于阈值,则将伤害设为0
|
||
if (zone.Type == info.DamageType.Red || zone.Type == info.DamageType.Percent) &&
|
||
zone.Damage.Cmp(d.Args()[1]) < 0 {
|
||
zone.Damage = alpacadecimal.Zero
|
||
}
|
||
|
||
return true
|
||
}
|
||
|
||
// SetArgs 设置参数
|
||
func (e *Effect576) SetArgs(t *input.Input, a ...int) {
|
||
e.EffectNode.SetArgs(t, a...)
|
||
|
||
e.EffectNode.Duration(a[0]) // 持续m回合
|
||
}
|
||
|
||
func init() {
|
||
input.InitEffect(input.EffectType.Skill, 576, &Effect576{})
|
||
}
|