All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful
fix(fight): 修复战斗效果和属性设置中的边界条件问题 - 修复Effect468中负值处理后提前返回的问题 - 重命名Effect470的SkillHit方法为Skill_Use_ex以匹配实际功能 - 注释掉调试用的println语句 - 在SetProp方法中添加属性值边界检查,确保属性值在-6到6范围内 ```
223 lines
6.6 KiB
Go
223 lines
6.6 KiB
Go
package input
|
||
|
||
func (our *Input) HasPropADD() bool {
|
||
for _, v := range our.Prop[:] {
|
||
if v > 0 {
|
||
|
||
return true
|
||
}
|
||
|
||
}
|
||
return false
|
||
}
|
||
func (our *Input) HasPropSub() bool {
|
||
for _, v := range our.Prop[:] {
|
||
if v < 0 {
|
||
|
||
return true
|
||
}
|
||
|
||
}
|
||
return false
|
||
}
|
||
func (target *Input) SetProp(source *Input, index, level int8) bool {
|
||
// 前置状态结算:判断是否允许执行属性操作
|
||
canExecute := target.Exec(func(effect Effect) bool {
|
||
// 执行前置效果,返回true表示可以继续操作
|
||
return effect.PropBefer(source, index, level)
|
||
})
|
||
if !canExecute {
|
||
return false
|
||
}
|
||
|
||
switch {
|
||
case level < 0:
|
||
if target.AttackValue.Prop[index] > -6 {
|
||
target.AttackValue.Prop[index] += level
|
||
if target.AttackValue.Prop[index] < -6 {
|
||
target.AttackValue.Prop[index] = -6
|
||
}
|
||
} else {
|
||
return false
|
||
}
|
||
|
||
case level > 0:
|
||
if target.AttackValue.Prop[index] < 6 {
|
||
target.AttackValue.Prop[index] += level
|
||
if target.AttackValue.Prop[index] > 6 {
|
||
target.AttackValue.Prop[index] = 6
|
||
}
|
||
} else {
|
||
return false
|
||
}
|
||
|
||
case level == 0:
|
||
|
||
if target.AttackValue.Prop[index] != 0 {
|
||
target.AttackValue.Prop[index] = 0
|
||
return true
|
||
} else {
|
||
return false
|
||
}
|
||
// // 重置属性:level>0时清除强化(属性>0则置0),level<0时清除弱化(属性<0则置0)
|
||
// if (level > 0 && target.AttackValue.Prop[p] > 0) ||
|
||
// (level < 0 && target.AttackValue.Prop[p] < 0) {
|
||
// newValue = 0
|
||
// return true
|
||
// }
|
||
//return true
|
||
}
|
||
return true
|
||
}
|
||
|
||
// // 攻击,防御,特攻,特防,速度,命中
|
||
// // 施加方(source),属性类型(prop),等级(level), 返回是否成功
|
||
// func (target *Input) SetProp(source *Input, prop, level int8) bool {
|
||
// // 前置状态结算:判断是否允许执行属性操作
|
||
// canExecute := target.Exec(func(effect Effect) bool {
|
||
// // 执行前置效果,返回true表示可以继续操作
|
||
// return effect.PropBefer(source, prop, level)
|
||
// })
|
||
// if !canExecute {
|
||
// return false
|
||
// }
|
||
|
||
// var newValue int8
|
||
// // 计算新属性值并判断操作是否有效(属性是否会发生变化)
|
||
// calcNewValue := func(p, l int8, t info.EnumAbilityOpType) bool {
|
||
// switch t {
|
||
// case info.AbilityOpType.ADD:
|
||
// // 属性提升,上限为6
|
||
// if l < 0 {
|
||
// l = -l
|
||
// }
|
||
// newValue = utils.Min(target.AttackValue.Prop[p]+l, 6)
|
||
// if newValue > target.AttackValue.Prop[p] {
|
||
// //fmt.Println("属性值会增加")
|
||
// return true
|
||
// }
|
||
// //fmt.Println("属性值不会增加")
|
||
// return false
|
||
|
||
// case info.AbilityOpType.SUB:
|
||
// if l > 0 {
|
||
// l = -l
|
||
// }
|
||
// // 属性降低,下限为-6
|
||
// newValue = utils.Max(target.AttackValue.Prop[p]+l, -6)
|
||
// if newValue < target.AttackValue.Prop[p] {
|
||
// //fmt.Println("属性值会减少")
|
||
// return true
|
||
// }
|
||
// //fmt.Println("属性值不会减少")
|
||
// return false
|
||
|
||
// case info.AbilityOpType.RESET:
|
||
// // 重置属性:level>0时清除强化(属性>0则置0),level<0时清除弱化(属性<0则置0)
|
||
// if (level > 0 && target.AttackValue.Prop[p] > 0) ||
|
||
// (level < 0 && target.AttackValue.Prop[p] < 0) {
|
||
// newValue = 0
|
||
// return true
|
||
// }
|
||
// return false
|
||
// }
|
||
// return false
|
||
// }
|
||
|
||
// switch opType {
|
||
// case info.AbilityOpType.StealStrengthen:
|
||
// // 窃取强化:获取对手的强化属性并转移到自身
|
||
// oppProp := target.Opp.AttackValue.Prop[prop]
|
||
// if oppProp <= 0 { // 对手无强化,无法窃取
|
||
// return false
|
||
// }
|
||
// // 尝试添加对手的强化值到自身
|
||
// if calcNewValue(prop, oppProp, info.AbilityOpType.ADD) {
|
||
// target.AttackValue.Prop[prop] = newValue
|
||
// // 窃取后清除对手的强化
|
||
// target.Opp.SetProp(source, prop, 1, info.AbilityOpType.RESET)
|
||
// return true
|
||
// }
|
||
// return false
|
||
|
||
// case info.AbilityOpType.Reverse:
|
||
// currentProp := target.AttackValue.Prop[prop]
|
||
// if level > 0 { // 反转强化(仅当有强化时生效:+N → -N,需扣除2*N)
|
||
// if currentProp <= 0 {
|
||
// return false
|
||
// }
|
||
// // 强化反转:调整量为-2*currentProp(从+N到-N需要减少2N),用SUB操作
|
||
// adjustLevel := -2 * currentProp
|
||
// if calcNewValue(prop, adjustLevel, info.AbilityOpType.SUB) {
|
||
// target.AttackValue.Prop[prop] = newValue
|
||
// return true
|
||
// }
|
||
// return false
|
||
// } else { // 反转弱化(仅当有弱化时生效:-N → +N,需增加2*N)
|
||
// if currentProp >= 0 {
|
||
// return false
|
||
// }
|
||
// // 弱化反转:调整量为-2*currentProp(从-N到+N需要增加2N),用ADD操作
|
||
// adjustLevel := -2 * currentProp
|
||
// if calcNewValue(prop, adjustLevel, info.AbilityOpType.ADD) {
|
||
// target.AttackValue.Prop[prop] = newValue
|
||
// return true
|
||
// }
|
||
// return false
|
||
// }
|
||
|
||
// case info.AbilityOpType.BounceWeaken:
|
||
// // 反弹弱化:将自身弱化转移给对手并清除自身弱化
|
||
// currentProp := target.AttackValue.Prop[prop]
|
||
// if currentProp >= 0 { // 无弱化可反弹
|
||
// return false
|
||
// }
|
||
// // 向对手施加同等弱化
|
||
// if target.Opp.SetProp(source, prop, currentProp, info.AbilityOpType.SUB) {
|
||
// // 清除自身弱化
|
||
// target.SetProp(source, prop, -1, info.AbilityOpType.RESET)
|
||
// return true
|
||
// }
|
||
// return false
|
||
|
||
// case info.AbilityOpType.COPY:
|
||
// // 复制对手属性:将对手的强化/弱化值叠加到自身(遵守上下限)
|
||
// oppProp := target.Opp.AttackValue.Prop[prop] // 对手的属性值(可正可负)
|
||
// currentProp := target.AttackValue.Prop[prop] // 自身当前属性值
|
||
|
||
// // 1. 计算叠加后的目标值(自身+对手)
|
||
// targetProp := currentProp + oppProp
|
||
|
||
// // 2. 限制目标值在 [-6, 6] 范围内
|
||
// if targetProp > 6 {
|
||
// targetProp = 6
|
||
// } else if targetProp < -6 {
|
||
// targetProp = -6
|
||
// }
|
||
|
||
// // 3. 若目标值与当前值一致,无需操作
|
||
// if targetProp == currentProp {
|
||
// return false
|
||
// }
|
||
|
||
// // 4. 根据目标值与当前值的差异,选择 ADD 或 SUB 操作叠加
|
||
// if targetProp > currentProp {
|
||
// // 目标值更高:用 ADD 操作提升(调整量为差值)
|
||
// adjustLevel := targetProp - currentProp
|
||
// return target.SetProp(source, prop, adjustLevel, info.AbilityOpType.ADD)
|
||
// } else {
|
||
// // 目标值更低:用 SUB 操作降低(调整量为差值的绝对值)
|
||
// adjustLevel := currentProp - targetProp
|
||
// return target.SetProp(source, prop, adjustLevel, info.AbilityOpType.SUB)
|
||
// }
|
||
|
||
// default:
|
||
// // 处理常规操作(ADD/SUB/RESET)
|
||
// if calcNewValue(prop, level, opType) {
|
||
// target.AttackValue.Prop[prop] = newValue
|
||
// return true
|
||
// }
|
||
// return false
|
||
// }
|
||
// }
|