Files
bl/logic/controller/pet_ev.go
xinian d0cf598ced
All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful
refactor: 将物品和货币相关字段从uint32改为int64以支持更大数值范围
2026-02-12 04:28:20 +08:00

52 lines
1.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package controller
import (
"blazing/common/socket/errorcode"
"blazing/logic/service/pet"
"blazing/logic/service/player"
"github.com/samber/lo"
)
// PetEVDiy 自定义分配宠物努力值EV
// data: 包含宠物捕获时间和EV分配数据的输入信息
// c: 当前玩家对象
// 返回: 分配结果和错误码
func (h Controller) PetEVDiy(data *pet.PetEV, c *player.Player) (result *pet.S2C_50001, 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 = usedEV
return result, 0
}