feat(fight): 调整效果叠加逻辑与精灵属性处理
- 将 `MaxStack` 方法重命名为 `CanStack`,并修改其逻辑为布尔值控制是否可叠加 - 更新多个效果文件中的注释和调用方式以适配新的叠加控制方法 - 修复精灵属性类型获取逻辑,增加缓存字段 `PType` - 修改战斗回合处理流程,优化技能解析顺序和状态比较时机 - 调整状态效果初始化逻辑,确保状态类效果默认允许无限叠加 - 更正伤害类型缺失问题,在固定伤害
This commit is contained in:
@@ -36,6 +36,9 @@ func Geteffect(etype EnumEffectType, id int) Effect {
|
||||
//todo 获取前GetEffect
|
||||
|
||||
eff := deep.MustCopy(ret)
|
||||
if eff.ID() >= int(EffectType.Status) && eff.ID() < int(EffectType.Sub) {
|
||||
eff.CanStack(true) //状态类不能被覆盖,只能无限叠加
|
||||
}
|
||||
|
||||
return eff
|
||||
//todo 获取后GetEffect
|
||||
@@ -162,19 +165,14 @@ func (our *Input) AddEffect(in *Input, e Effect) Effect {
|
||||
v.Alive() && //如果之前的效果还存活
|
||||
equalInts(v.Args(), e.Args()) { //如果层数可以叠加或者是无限层数
|
||||
|
||||
if v.MaxStack() == 0 { //说明进行了替换
|
||||
if v.CanStack() { //说明进行了替换
|
||||
v.Alive(false) //不允许叠层,取消效果
|
||||
e.Duration(utils.Max(e.Duration(), v.Duration()))
|
||||
return v //这里把V替换掉了
|
||||
} else {
|
||||
///e.Alive(false) //取消之前效果
|
||||
if v.Stack() <= v.MaxStack() { //如果小于最大叠层,状态可以叠层
|
||||
|
||||
v.Stack(v.Stack() + e.Stack()) //获取到当前叠层数然后叠加
|
||||
//这里直接返回,不再继续执行后续效果,因为这里是可以叠加的效果
|
||||
//v.Duration(e.Duration()) //回合数覆盖
|
||||
|
||||
}
|
||||
v.Stack(v.Stack() + e.Stack()) //获取到当前叠层数然后叠加
|
||||
//这里直接返回,不再继续执行后续效果,因为这里是可以叠加的效果
|
||||
//v.Duration(e.Duration()) //回合数覆盖
|
||||
v.Duration(utils.Max(e.Duration(), v.Duration()))
|
||||
return nil
|
||||
// c.Effects = append(c.Effects, e)
|
||||
|
||||
Reference in New Issue
Block a user