Files
bl/logic/controller/pet_ev.go
昔念 4a5a7727b5
All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful
```
feat(boss_fight): 完善宠物捕获和战斗奖励机制

- 在宠物捕获时记录当前地图ID作为CatchMap
- 将经验值奖励改为通过道具系统发放,统一使用ItemAdd方法处理
- 调整EXP奖励的计算方式,移除原有S2C_GET_BOSS_MONSTER中的EXP字段

feat(arena): 优化竞技场对战奖励和EV分配

- 将竞技场胜利奖励的EV值
2026-02-18 22:07:50 +08:00

53 lines
1.4 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/fight"
"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 *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
}