package input import ( "blazing/common/utils" "blazing/logic/service/common" "blazing/logic/service/fight/info" "github.com/jinzhu/copier" ) type Input struct { CanChange bool //是否可以死亡切换CanChange CurrentPet *info.BattlePetEntity //当前精灵 AllPet []*info.BattlePetEntity Player common.PlayerI Finished bool //是否加载完成 *info.AttackValue FightC common.FightI // info.BattleActionI Effects *utils.OrderedMap[int, Effect] //effects 实际上全局就是effect无限回合 //effects容器 技能的 DamageZone map[info.EnumDamageType]int //伤害容器 First bool //是否先手 } func NewInput(c common.FightI, p common.PlayerI) *Input { ret := &Input{FightC: c, Player: p} ret.Effects = utils.NewOrderedMap[int, Effect]() ret.DamageZone = make(map[info.EnumDamageType]int) // t := Geteffect(EffectType.Damage, 0) // t.Effect.SetArgs(ret) // ret.AddEffect(t) //添加默认基类,实现继承 p.SetFightC(c) //给玩家设置战斗容器 return ret } func (i *Input) GetPetInfo() *info.BattlePetEntity { return i.CurrentPet } // 这个每回合都会调用 func (i *Input) InitAttackValue() { i.AttackValue = info.NewAttackValue(i.Player.GetInfo().UserID) } func (i *Input) GetPet(id uint32) (ii *info.BattlePetEntity, Reason info.ChangePetInfo) { for _, v := range i.AllPet { if v.Info.CatchTime == uint32(id) { copier.Copy(&Reason, &v.Info) Reason.UserId = i.Player.GetInfo().UserID ii = v } } return } // GetStatusBonus 获取最高的状态倍率 // 遍历状态数组,返回存在的状态中最高的倍率(无状态则返回1.0) func (i *Input) GetStatusBonus() float64 { // 异常状态倍率映射表(状态索引 -> 倍率) var statusBonuses = map[info.EnumBattleStatus]float64{ info.PetStatus.Paralysis: 1.5, info.PetStatus.Poisoned: 1.5, info.PetStatus.Sleep: 2.0, // /info.BattleStatus.Frozen: 2.0, } maxBonus := 1.0 // 默认无状态倍率 for statusIdx := 0; statusIdx < 20; statusIdx++ { t := Geteffect(EffectType.Status, statusIdx) // 检查状态是否存在(数组中值为1表示存在该状态) if t.ID != 0 && t.Effect.Stack() > 0 { if bonus, exists := statusBonuses[info.EnumBattleStatus(statusIdx)]; exists && bonus > maxBonus { maxBonus = bonus } } } return maxBonus }