127 lines
3.9 KiB
Go
127 lines
3.9 KiB
Go
package input
|
||
|
||
import (
|
||
"blazing/common/utils"
|
||
"blazing/logic/service/fight/info"
|
||
|
||
"fmt"
|
||
)
|
||
|
||
// 攻击,防御,特攻,特防,速度,命中
|
||
// 施加方(source),属性类型(prop),等级(level),操作类别(opType),返回是否成功
|
||
func (target *Input) SetProp(source *Input, prop, level int8, opType info.EnumAbilityOpType) bool {
|
||
// 前置状态结算:判断是否允许执行属性操作
|
||
canExecute := target.Exec(func(effect Effect) bool {
|
||
// 执行前置效果,返回true表示可以继续操作
|
||
return effect.Prop_Befer(source, prop, level, opType)
|
||
})
|
||
if !canExecute {
|
||
return false
|
||
}
|
||
|
||
var newValue int8
|
||
// 计算新属性值并判断操作是否有效(属性是否会发生变化)
|
||
calcNewValue := func(p, l int8, t info.EnumAbilityOpType) bool {
|
||
switch t {
|
||
case info.AbilityOpType.ADD:
|
||
// 属性提升,上限为6
|
||
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:
|
||
// 属性降低,下限为-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 { // 反转强化(仅当有强化时生效)
|
||
if currentProp <= 0 {
|
||
return false
|
||
}
|
||
// 强化反转:当前值currentProp → -currentProp(调整量为-2*currentProp)
|
||
if calcNewValue(prop, -2*currentProp, info.AbilityOpType.ADD) {
|
||
target.AttackValue.Prop[prop] = newValue
|
||
return true
|
||
}
|
||
return false
|
||
} else { // 反转弱化(仅当有弱化时生效)
|
||
if currentProp >= 0 {
|
||
return false
|
||
}
|
||
// 弱化反转:当前值currentProp → -currentProp(调整量为-2*currentProp)
|
||
if calcNewValue(prop, -2*currentProp, 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]
|
||
adjustLevel := oppProp - target.AttackValue.Prop[prop]
|
||
return target.SetProp(source, prop, adjustLevel, info.AbilityOpType.ADD)
|
||
|
||
default:
|
||
// 处理常规操作(ADD/SUB/RESET)
|
||
if calcNewValue(prop, level, opType) {
|
||
target.AttackValue.Prop[prop] = newValue
|
||
return true
|
||
}
|
||
return false
|
||
}
|
||
}
|