package controller import ( "blazing/common/data" "blazing/common/socket/errorcode" "blazing/logic/service/common" "blazing/logic/service/player" "blazing/modules/config/service" "blazing/modules/player/model" "github.com/gogf/gf/v2/util/grand" ) // EggGamePlay 处理控制器请求。 func (h Controller) EggGamePlay(data1 *C2S_EGG_GAME_PLAY, c *player.Player) (result *S2C_EGG_GAME_PLAY, err errorcode.ErrorCode) { switch data1.EggNum { case 2: data1.EggNum = 5 case 3: data1.EggNum = 10 } r := c.Service.Item.CheakItem(400501) if data1.EggNum > 10 || data1.EggNum <= 0 { return nil, errorcode.ErrorCode(errorcode.ErrorCodes.ErrSystemError) } if r <= 0 || data1.EggNum > r { return nil, errorcode.ErrorCode(errorcode.ErrorCodes.ErrGachaTicketsInsufficient) } if err := c.Service.Item.UPDATE(400501, int(-data1.EggNum)); err != nil { return nil, errorcode.ErrorCode(errorcode.ErrorCodes.ErrGachaTicketsInsufficient) } result = &S2C_EGG_GAME_PLAY{ListInfo: []data.ItemInfo{}} if grand.Meet(int(data1.EggNum), 100) { r := service.NewPetRewardService().GetEgg() newPet := model.GenPetInfo(int(r.MonID), int(r.DV), int(r.Nature), int(r.Effect), int(r.Lv), nil, 0) if grand.Meet(1, 500) { newPet.RandomByWeightShiny() } c.Service.Pet.PetAdd(newPet, 0) result.HadTime = newPet.CatchTime result.PetID = newPet.ID } items := service.NewItemService().GetEgg(int(data1.EggNum)) addedItems := c.ItemAddBatch(items) for _, item := range addedItems { result.ListInfo = append(result.ListInfo, data.ItemInfo{ItemId: item.ItemId, ItemCnt: item.ItemCnt}) } return } // C2S_EGG_GAME_PLAY 前端向后端发送的抽蛋请求结构体 // 对应原 C# 的 C2S_EGG_GAME_PLAY type C2S_EGG_GAME_PLAY struct { Head common.TomeeHeader `cmd:"3201" struc:"skip"` EggNum int64 `struc:"uint32"` // 抽蛋次数标识:1 = 1次 2 = 5次 3 = 10次 // 注:Go 中 uint 是平台相关类型(32/64位),游戏开发中推荐用 uint32 明确匹配 C# 的 uint } // S2C_EGG_GAME_PLAY 后端向前端返回的抽蛋结果结构体 // 对应原 C# 的 S2C_EGG_GAME_PLAY type S2C_EGG_GAME_PLAY struct { GiftIN uint32 `struc:"uint32"` PetID uint32 `struc:"uint32"` // 抽中精灵的id HadTime uint32 `struc:"uint32"` // 抽中精灵的捕捉时间(若为时间戳,建议改为 uint64) ListInfoLen uint32 `struc:"sizeof=ListInfo"` ListInfo []data.ItemInfo `json:"listinfo"` // 抽中物品的物品数组 }