feat(fight): 移除无用代码并优化技能效果逻辑
- 删除了多个未使用的技能效果文件(effect_10-16_94_99_14.go、effect_61_70_118.go、 effect_66.go、effect_67.go、effect_78_86_106.go、effect_84_92.go、prop.go) - 修正了部分技能效果中的错误逻辑判断和数值计算方式 - 调整了伤害计算与治疗效果的参数使用顺序,使其符合预期行为 - 注释掉调试打印语句及测试调用,减少冗余输出 - 修复了部分效果中对技能分类的错误比较条件 此次修改提升了战斗系统代码的整洁性和准确性。
This commit is contained in:
97
logic/service/fight/effect/EffectPhysicalAttackAddStatus.go
Normal file
97
logic/service/fight/effect/EffectPhysicalAttackAddStatus.go
Normal file
@@ -0,0 +1,97 @@
|
||||
package effect
|
||||
|
||||
import (
|
||||
"blazing/logic/service/fight/info"
|
||||
"blazing/logic/service/fight/input"
|
||||
"blazing/logic/service/fight/node"
|
||||
)
|
||||
|
||||
// -----------------------------------------------------------
|
||||
// 通用效果:受物理攻击时概率附加指定状态(如麻痹、冰冻等)
|
||||
// -----------------------------------------------------------
|
||||
type EffectPhysicalAttackAddStatus struct {
|
||||
node.EffectNode
|
||||
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) Damage_DIV_ex(t *info.DamageZone) bool {
|
||||
// 1. 命中判定失败,不触发
|
||||
if !e.Hit() {
|
||||
return true
|
||||
}
|
||||
|
||||
// 2. 技能为空或非物理攻击,不触发
|
||||
skill := e.Ctx().SkillEntity
|
||||
if skill == nil || skill.Category() != info.Category.PHYSICAL {
|
||||
return true
|
||||
}
|
||||
|
||||
// 3. 概率判定(Args()[1]为触发概率)
|
||||
success, _, _ := e.Input.Player.Roll(e.Args()[1], 100)
|
||||
if !success {
|
||||
return true
|
||||
}
|
||||
|
||||
// 4. 计算持续回合(默认2~3回合,支持通过参数指定)
|
||||
duration := e.getDuration()
|
||||
|
||||
// 5. 获取状态效果实例并设置参数
|
||||
statusEffect := input.Geteffect(input.EffectType.Status, int(e.targetStatus))
|
||||
if statusEffect == nil {
|
||||
return true
|
||||
}
|
||||
statusEffect.Duration(duration)
|
||||
statusEffect.SetArgs(e.Ctx().Our) // 目标为对手
|
||||
|
||||
// 6. 给对手添加状态
|
||||
e.Ctx().Opp.AddEffect(statusEffect)
|
||||
return true
|
||||
}
|
||||
|
||||
// 设置参数(复用父类逻辑)
|
||||
func (e *EffectPhysicalAttackAddStatus) SetArgs(t *input.Input, a ...int) {
|
||||
e.EffectNode.SetArgs(t, a...)
|
||||
e.EffectNode.Duration(e.EffectNode.SideEffectArgs[0])
|
||||
}
|
||||
|
||||
// 计算持续回合(封装为独立方法,增强可读性)
|
||||
func (e *EffectPhysicalAttackAddStatus) getDuration() int {
|
||||
// 优先使用配置的回合数(SideEffectArgs[1])
|
||||
if len(e.EffectNode.SideEffectArgs) > 1 {
|
||||
return e.EffectNode.SideEffectArgs[1]
|
||||
}
|
||||
// 默认随机2~3回合(Int31n(2)返回0/1,+2后为2/3)
|
||||
return int(e.Input.FightC.GetRand().Int31n(2)) + 2
|
||||
}
|
||||
Reference in New Issue
Block a user