Files
bl/logic/service/fight/input/ai.go

81 lines
1.6 KiB
Go
Raw Normal View History

2026-01-21 20:46:05 +00:00
package input
import "blazing/logic/service/fight/info"
2026-01-21 20:46:05 +00:00
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 {
2026-02-07 00:18:14 +08:00
println("AI出手,切换宠物")
2026-01-21 20:46:05 +00:00
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
2026-01-21 20:46:05 +00:00
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
}
2026-01-21 20:46:05 +00:00
}
}
if usedskill == nil {
2026-01-21 20:46:05 +00:00
for _, s := range skills {
if s == nil {
continue
}
if !s.CanUse() {
continue
}
usedskill = s
2026-01-21 20:46:05 +00:00
}
}
if usedskill != nil {
our.FightC.UseSkill(our.Player, uint32(usedskill.ID))
} else {
our.FightC.UseSkill(our.Player, 0)
}
2026-01-21 20:46:05 +00:00
}