105 lines
2.4 KiB
Go
105 lines
2.4 KiB
Go
package input
|
||
|
||
import "blazing/logic/service/fight/info"
|
||
|
||
func (our *Input) GetAction() {
|
||
|
||
next := our.Exec(func(t Effect) bool {
|
||
|
||
return t.HookAction()
|
||
})
|
||
if !next {
|
||
return
|
||
}
|
||
// 获取己方当前宠物和对方当前宠物
|
||
selfPet := our.FightC.GetCurrPET(our.Player)
|
||
//没血就切换精灵
|
||
if selfPet.Info.Hp <= 0 {
|
||
for _, v := range our.AllPet {
|
||
if v.Info.Hp > 0 {
|
||
our.FightC.ChangePet(our.Player, v.Info.CatchTime)
|
||
return
|
||
}
|
||
}
|
||
// 如果没有可用宠物,则直接返回,不执行任何操作
|
||
return
|
||
}
|
||
//oppPet := opp.FightC.GetCurrPET(opp.Player)
|
||
skills := selfPet.Skills
|
||
|
||
// 空技能列表直接返回,避免错误
|
||
if len(skills) == 0 {
|
||
return
|
||
}
|
||
var usedskill *info.SkillEntity
|
||
for _, s := range skills {
|
||
if s == nil {
|
||
continue
|
||
}
|
||
if !s.CanUse() {
|
||
continue
|
||
}
|
||
// 计算技能对对方的伤害(假设CalculatePower返回伤害值,或需从技能中获取)
|
||
s.DamageValue = our.CalculatePower(our.Opp, s)
|
||
|
||
// 判断是否能秒杀(伤害 >= 对方当前生命值)
|
||
if s.DamageValue.Cmp(our.Opp.CurrentPet.GetHP()) != -1 { // 假设oppPet.HP为对方当前剩余生命值
|
||
|
||
if usedskill != nil {
|
||
if s.DamageValue.Cmp(usedskill.DamageValue) != -1 {
|
||
usedskill = s
|
||
}
|
||
|
||
} else {
|
||
usedskill = s
|
||
}
|
||
|
||
}
|
||
}
|
||
if usedskill == nil {
|
||
|
||
for _, s := range skills {
|
||
if s == nil {
|
||
continue
|
||
}
|
||
if !s.CanUse() {
|
||
continue
|
||
}
|
||
usedskill = s
|
||
|
||
}
|
||
|
||
}
|
||
if usedskill != nil {
|
||
our.FightC.UseSkill(our.Player, uint32(usedskill.ID))
|
||
} else {
|
||
our.FightC.UseSkill(our.Player, 0)
|
||
}
|
||
|
||
// // 若存在能秒杀的技能,优先使用(选伤害最高的,避免浪费高伤害技能)
|
||
// if len(killableSkills) > 0 {
|
||
// bestKillSkill := killableSkills[0].SkillEntity
|
||
// maxDamage := killableSkills[0].damage
|
||
// for _, ks := range killableSkills[1:] {
|
||
// if ks.damage.Cmp(maxDamage) > 0 { // 使用decimal的比较方法比较伤害值
|
||
// if ks.CanUse() {
|
||
// maxDamage = ks.damage
|
||
// bestKillSkill = ks.SkillEntity
|
||
// }
|
||
|
||
// }
|
||
// }
|
||
// our.FightC.UseSkill(our.Player, uint32(bestKillSkill.ID))
|
||
// return
|
||
// }
|
||
// if len(allSkills) <= 0 {
|
||
// our.FightC.UseSkill(our.Player, 0)
|
||
// return
|
||
// }
|
||
|
||
// 优化随机选择技能的逻辑,直接使用随机索引
|
||
// randomIdx := grand.Intn(len(allSkills))
|
||
// our.FightC.UseSkill(our.Player, uint32(allSkills[randomIdx].ID))
|
||
|
||
}
|