package controller import ( "blazing/common/socket/errorcode" "blazing/logic/service/common" "blazing/logic/service/fight" "blazing/logic/service/player" "github.com/samber/lo" ) // PetEVDiy 自定义分配宠物努力值(EV) // data: 包含宠物捕获时间和EV分配数据的输入信息 // c: 当前玩家对象 // 返回: 分配结果和错误码 func (h Controller) PetEVDiy(data *PetEV, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) { _, currentPet, found := c.FindPet(data.CacthTime) if !found { return nil, errorcode.ErrorCodes.Err10401 } // 分配超过510的数据 if lo.Sum(data.EVs[:]) > 510 { return nil, errorcode.ErrorCodes.Err10401 } for i, evValue := range data.EVs { // 分配超过255的数据 if evValue > 255 { return nil, errorcode.ErrorCodes.Err10401 } // 分配比之前点数少的 if evValue < currentPet.Ev[i] { return nil, errorcode.ErrorCodes.Err10401 } } if lo.Sum(data.EVs[:]) < lo.Sum(currentPet.Ev[:]) { return nil, errorcode.ErrorCodes.Err10401 } usedEV := lo.Sum(data.EVs[:]) - lo.Sum(currentPet.Ev[:]) // 加的比池子还多 if int64(usedEV) > c.Info.EVPool { return nil, errorcode.ErrorCodes.Err10401 } currentPet.Ev = data.EVs currentPet.CalculatePetPane(false) c.Info.EVPool -= int64(usedEV) // result = &pet.S2C_50001{} // result.UseEV = -int32(usedEV) return result, 0 } type PetEV struct { Head common.TomeeHeader `cmd:"50001" struc:"skip"` CacthTime uint32 `description:"捕捉时间" codec:"cacthTime"` EVs [6]uint32 `description:"属性" codec:"evs"` }