refactor(fight): 优化战斗逻辑代码结构,清理冗余代码
This commit is contained in:
@@ -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))
|
||||
}
|
||||
|
||||
// 计算技能威力
|
||||
|
||||
Reference in New Issue
Block a user