79 lines
2.5 KiB
Go
79 lines
2.5 KiB
Go
package effect
|
||
|
||
import (
|
||
"blazing/logic/service/fight/info"
|
||
"blazing/logic/service/fight/input"
|
||
)
|
||
|
||
// -----------------------------------------------------------
|
||
// 通用效果:受物理攻击时概率附加指定状态(如麻痹、冰冻等)
|
||
// -----------------------------------------------------------
|
||
type EffectPhysicalAttackAddStatus struct {
|
||
RoundEffectSideArg0Base
|
||
targetStatus info.EnumPetStatus // 差异化:要附加的目标状态
|
||
}
|
||
|
||
// 工厂函数:创建"物理攻击触发状态"效果实例
|
||
func newEffectPhysicalAttackAddStatus(status info.EnumPetStatus) *EffectPhysicalAttackAddStatus {
|
||
return &EffectPhysicalAttackAddStatus{
|
||
targetStatus: status,
|
||
}
|
||
}
|
||
|
||
// 初始化:批量注册所有"物理攻击触发状态"类效果
|
||
func init() {
|
||
registerPhysicalAttackAddStatusEffects()
|
||
}
|
||
|
||
// 批量注册:绑定效果ID与对应的目标状态
|
||
func registerPhysicalAttackAddStatusEffects() {
|
||
// 效果ID与目标状态的映射(84=麻痹,92=冰冻,可按需扩展其他状态)
|
||
statusMap := map[int]info.EnumPetStatus{
|
||
84: info.PetStatus.Paralysis, // Effect84:物理攻击触发麻痹
|
||
92: info.PetStatus.Frozen, // Effect92:物理攻击触发冰冻
|
||
108: info.PetStatus.Burned, // Effect108:物理攻击触发灼烧
|
||
// 新增类似效果只需在这里加条目,例如:
|
||
// 100: info.PetStatus.Poisoned, // 物理攻击触发中毒
|
||
}
|
||
|
||
// 循环注册所有效果
|
||
for effectID, status := range statusMap {
|
||
input.InitEffect(input.EffectType.Skill, effectID, newEffectPhysicalAttackAddStatus(status))
|
||
}
|
||
}
|
||
|
||
// -----------------------------------------------------------
|
||
// 核心逻辑:受物理攻击时触发(覆盖父类方法)
|
||
// -----------------------------------------------------------
|
||
func (e *EffectPhysicalAttackAddStatus) Skill_Use_ex() bool {
|
||
source := e.SourceInput()
|
||
target := e.TargetInput()
|
||
if source == nil || target == nil {
|
||
return true
|
||
}
|
||
|
||
// 2. 技能为空或非物理攻击,不触发
|
||
skill := e.Ctx().SkillEntity
|
||
if skill == nil || skill.Category() != info.Category.PHYSICAL {
|
||
return true
|
||
}
|
||
|
||
// 3. 概率判定(Args()[1]为触发概率)
|
||
success, _, _ := source.Player.Roll(int(e.Args()[1].IntPart()), 100)
|
||
if !success {
|
||
return true
|
||
}
|
||
|
||
// 5. 获取状态效果实例并设置参数
|
||
statusEffect := source.InitEffect(input.EffectType.Status, int(e.targetStatus))
|
||
if statusEffect == nil {
|
||
return true
|
||
}
|
||
|
||
// 6. 给对手添加状态
|
||
target.AddEffect(source, statusEffect)
|
||
return true
|
||
}
|
||
|
||
// 设置参数(复用父类逻辑)
|