refactor(fight): 优化战斗逻辑代码结构,清理冗余代码

This commit is contained in:
1
2025-11-06 20:21:43 +00:00
parent b4e1129c56
commit 31b8a27eeb

View File

@@ -6,6 +6,7 @@ import (
"blazing/logic/service/fight/action"
"blazing/logic/service/fight/info"
"fmt"
"math/rand"
"github.com/shopspring/decimal"
)
@@ -270,9 +271,64 @@ func (u *Input) SetProp(in *Input, prop, level int8, ptype info.EnumAbilityOpTyp
return false
}
func (i *Input) GetAction(opp *Input) {
//使用1#技能,实际上要按照四个技能权重去使用
i.FightC.UseSkill(i.Player, int32(i.FightC.GetCurrPET(i.Player).Skills[0].ID))
// 获取己方当前宠物和对方当前宠物
selfPet := i.FightC.GetCurrPET(i.Player)
//oppPet := opp.FightC.GetCurrPET(opp.Player)
skills := selfPet.Skills
// 空技能列表直接返回,避免错误
if len(skills) == 0 {
return
}
// 步骤1计算所有技能的伤害并筛选出能秒杀对方的技能
var killableSkills []struct {
*info.SkillEntity // 技能对象假设原技能类型为skill
damage decimal.Decimal // 技能实际伤害
}
// 存储所有技能及伤害(用于后续筛选)
type skillWithDamage struct {
*info.SkillEntity
damage decimal.Decimal
}
allSkills := make([]skillWithDamage, 0, len(skills))
for _, s := range skills {
// 计算技能对对方的伤害假设CalculatePower返回伤害值或需从技能中获取
damage := i.CalculatePower(opp, s)
if !s.CanUse() {
continue
}
allSkills = append(allSkills, skillWithDamage{SkillEntity: s, damage: damage})
// 判断是否能秒杀(伤害 >= 对方当前生命值)
if uint32(damage.IntPart()) >= opp.CurrentPet.Info.Hp { // 假设oppPet.HP为对方当前剩余生命值
killableSkills = append(killableSkills, struct {
*info.SkillEntity
damage decimal.Decimal
}{s, damage})
}
}
// 若存在能秒杀的技能,优先使用(选权重最高的,避免浪费高伤害技能)
if len(killableSkills) > 0 {
bestKillSkill := killableSkills[0].SkillEntity
// maxWeight := killableSkills[0].SkillEntity.Weight // 假设技能有Weight字段表示权重
// for _, ks := range killableSkills[1:] {
// if ks.skill.Weight > maxWeight {
// maxWeight = ks.skill.Weight
// bestKillSkill = ks.skill
// }
// }
i.FightC.UseSkill(i.Player, int32(bestKillSkill.ID))
return
}
randomIdx := rand.Intn(len(allSkills))
chosenSkill := skills[randomIdx]
i.FightC.UseSkill(i.Player, int32(chosenSkill.ID))
// i.FightC.UseSkill(i.Player, int32(bestSkill.skill.ID))
}
// 计算技能威力