fix(fight): 修复战斗中属性变化与暴击判定逻辑

- 调整能力提升计算时机,确保命中后再恢复原始属性
- 暴击判断前置,仅在命中时计算暴击翻倍及破防逻辑
- 优化回合结束效果清除逻辑,增加状态存活判断

refactor(controller): 重构擂台相关接口返回结构体类型

- 将 ARENA_SET_OWENR、ARENA_FIGHT_OWENR 等函数的返回值统一改为
  NullOutboundInfo,并移除冗余字段返回
- 广播逻辑调整,统一使用 Broadcast
This commit is contained in:
2025-11-20 05:57:29 +08:00
parent c0b09c92c4
commit 53d6db7e17
37 changed files with 555 additions and 151 deletions

View File

@@ -29,16 +29,17 @@ func InitEffect(etype EnumEffectType, id int, t Effect) {
NodeM[id+int(etype)] = t
}
func Geteffect(etype EnumEffectType, id int) Effect {
func Geteffect[T int | byte](etype EnumEffectType, id T) Effect {
//todo 获取前GetEffect
ret, ok := NodeM[id+int(etype)]
ret, ok := NodeM[int(id)+int(etype)]
if ok {
//todo 获取前GetEffect
eff := deep.MustCopy(ret)
if eff.ID() >= int(EffectType.Status) && eff.ID() < int(EffectType.Sub) {
eff.CanStack(true) //状态类不能被覆盖,只能无限叠加
}
return eff
@@ -150,6 +151,7 @@ func (our *Input) AddEffect(in *Input, e Effect) Effect {
return nil
}
e.Alive(true) //添加后默认激活
//todo 免疫
//TODO 先激活
@@ -212,9 +214,9 @@ func (our *Input) Exec(fn func(Effect) bool) bool {
}
// 消除回合类效果 efftype 输入是消对方的还是自己的,false是自己,true是对方
func (our *Input) CancelTurn() {
func (our *Input) CancelTurn(in *Input) {
for _, value := range our.Effects {
if value.Duration() > 0 { //false是自身,true是对方,反转后为真就是自己的
if value.Duration() > 0 && value.Alive() { //false是自身,true是对方,反转后为真就是自己的
//slice = append(slice[:i], slice[i+1:]...)
value.Alive(false)
}