Files
bl/logic/controller/pet_elo.go
xinian c9b5f8569f
Some checks failed
ci/woodpecker/push/my-first-workflow Pipeline failed
fix: 修复道具扣除和宠物融合事务处理问题
2026-04-14 13:06:28 +08:00

65 lines
2.3 KiB
Go
Raw Permalink 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/data/xmlres"
"blazing/common/socket/errorcode"
"blazing/logic/service/common"
"blazing/logic/service/fight"
"blazing/logic/service/fight/info"
"blazing/logic/service/player"
"github.com/jinzhu/copier"
)
// PetELV 处理控制器请求。
func (h Controller) PetELV(data *C2S_PET_EVOLVTION, c *player.Player) (result *fight.NullOutboundInfo, err errorcode.ErrorCode) {
_, currentPet, found := c.FindPet(data.CacthTime)
if !found {
return nil, errorcode.ErrorCodes.Err10401
}
petCfg, ok := xmlres.PetMAP[int(currentPet.ID)]
if !ok || petCfg.EvolvFlag == 0 {
return nil, errorcode.ErrorCodes.ErrPokemonNotEvolveReady
}
if petCfg.EvolvingLv > int(currentPet.Level) {
return nil, errorcode.ErrorCodes.ErrPokemonNotEvolveReady
}
evolveCfg, ok := xmlres.EVOLVMAP[petCfg.EvolvFlag]
if !ok || data.Index == 0 || int(data.Index) > len(evolveCfg.Branches) {
return nil, errorcode.ErrorCodes.ErrPokemonNotEvolveReady
}
branch := evolveCfg.Branches[data.Index-1]
if branch.EvolvItem != 0 && c.Service.Item.CheakItem(uint32(branch.EvolvItem)) < int64(branch.EvolvItemCount) {
return nil, errorcode.ErrorCodes.ErrInsufficientItemsMulti
}
if branch.EvolvItem != 0 {
if err := c.Service.Item.UPDATE(uint32(branch.EvolvItem), -branch.EvolvItemCount); err != nil {
return nil, errorcode.ErrorCodes.ErrInsufficientItemsMulti
}
}
currentPet.ID = uint32(branch.MonTo)
currentPet.Update(true)
currentPet.CalculatePetPane(100)
updateOutbound := &info.PetUpdateOutboundInfo{}
var petUpdateInfo info.UpdatePropInfo
copier.Copy(&petUpdateInfo, currentPet)
updateOutbound.Data = append(updateOutbound.Data, petUpdateInfo)
c.SendPackCmd(2508, updateOutbound) //准备包由各自发,因为协议不一样
return nil, -1
}
// C2S_PET_EVOLVTION 精灵进化相关的客户端到服务端的消息结构
type C2S_PET_EVOLVTION struct {
Head common.TomeeHeader `cmd:"2314" struc:"skip"`
CacthTime uint32 // 精灵的捕捉时间
Index uint32 // 进化的分支索引。0代表没选择进化1就是第一种进化形态2就是其他分支进化形态
// 如果没有分支进化只有一种进化形态Index只能为1
// 后端直接判断进化条件的材料,执行进化并扣除材料
}