refactor(fight): 优化战斗逻辑代码结构,清理冗余代码
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
|||||||
"blazing/logic/service/fight/action"
|
"blazing/logic/service/fight/action"
|
||||||
"blazing/logic/service/fight/info"
|
"blazing/logic/service/fight/info"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"math/rand"
|
||||||
|
|
||||||
"github.com/shopspring/decimal"
|
"github.com/shopspring/decimal"
|
||||||
)
|
)
|
||||||
@@ -270,9 +271,64 @@ func (u *Input) SetProp(in *Input, prop, level int8, ptype info.EnumAbilityOpTyp
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
func (i *Input) GetAction(opp *Input) {
|
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