From d57ff0e0971e9c87b96e3dc1b0db94ba13ace775 Mon Sep 17 00:00:00 2001 From: 王家文 Date: Mon, 15 Apr 2024 16:19:26 +0800 Subject: [PATCH] feat✨:星星商店兑换 --- models/cardholder.go | 17 ++--------------- service/cardholder/config.go | 7 +++---- service/cardholder/handle.go | 58 +++++++++++++++++++++++++++++++++++----------------------- 3 files changed, 40 insertions(+), 42 deletions(-) diff --git a/models/cardholder.go b/models/cardholder.go index 775d055..b10760f 100644 --- a/models/cardholder.go +++ b/models/cardholder.go @@ -37,30 +37,17 @@ type RspCardHolderInfo struct { CardHolderInfo } -// ReqCardHolderGetNew 请求 获取卡包 -type ReqCardHolderGetNew struct { - BaseLoginInfo - BaseSign - Id int `form:"id" json:"id" valid:"Required"` // 卡包ID - Count int `form:"count" json:"count" valid:"Required"` // 卡包数量 -} - -// RspCardHolderGetNew 返回 获取卡包 -type RspCardHolderGetNew struct { - CardHolderInfo -} - // ReqCardHolderOpen 请求 打开卡包 type ReqCardHolderOpen struct { BaseLoginInfo BaseSign - Id int `form:"id" json:"id" valid:"Required"` // 卡包ID + Ids []int `form:"ids" json:"ids" valid:"Required"` // 卡包ID列表 } // RspCardHolderOpen 返回 打开卡包 type RspCardHolderOpen struct { CardHolderInfo - NewCards []int `form:"new_cards" json:"new_cards"` // 新获得的卡牌列表 + NewCards [][]int `form:"new_cards" json:"new_cards"` // 新获得的卡牌列表 AwardAlbum map[int]string `form:"award_album" json:"award_album"` // 触发的卡组奖励列表 k=出发的卡组ID v=对应奖励 AwardRound string `form:"award_round" json:"award_round"` // 触发的轮次奖励列表 空字符串未触发 } diff --git a/service/cardholder/config.go b/service/cardholder/config.go index a181848..a8df256 100644 --- a/service/cardholder/config.go +++ b/service/cardholder/config.go @@ -115,8 +115,7 @@ type CardSequenceConfig struct { // StarShopConfig 星星商店配置 type StarShopConfig struct { - Id int `json:"id"` // ID - StarNumber int `json:"star_number"` // 需求星星数 - CardholderId []int `json:"cardholder_id"` // 可换取的卡包ID {卡包类型,卡包ID,卡包数量} // todo 要重命名 - AlbumId int `json:"album_id"` // 对应卡册活动ID // todo 要重命名 + Id int `json:"id"` // ID + NeedStarNumber int `json:"need_star_number"` // 需求星星数 + CardBagIds string `json:"card_bag_ids"` // 可换取的卡包ID {卡包类型,卡包ID,卡包数量} } diff --git a/service/cardholder/handle.go b/service/cardholder/handle.go index af938b4..47d1d73 100644 --- a/service/cardholder/handle.go +++ b/service/cardholder/handle.go @@ -7,6 +7,7 @@ import ( "apigame/util/util-lx/lxtime" "apigame/util/uttype" "strconv" + "strings" ) // HandleGetConfig 活动配置 @@ -57,7 +58,7 @@ func HandleInfo(req *models.ReqCardHolderInfo) (code string, rsp models.RspCardH // HandleOpen 打开卡包 func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardHolderOpen) { rsp = models.RspCardHolderOpen{ - NewCards: make([]int, 0), + NewCards: make([][]int, 0), AwardAlbum: make(map[int]string), } code = constd.RECODE_OK @@ -75,10 +76,12 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH return } // 检查卡包ID - confCardholder, okCardholderConfig := config.CardholderConfig[strconv.Itoa(req.Id)] - if !okCardholderConfig { - code = constd.RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR - return + for _, idCardholder := range req.Ids { + _, okCardholder := config.CardholderConfig[strconv.Itoa(idCardholder)] + if !okCardholder { + code = constd.RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR + return + } } // 读取游戏数据 @@ -92,16 +95,25 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH // 开始处理抽卡 openMode := 0 sequenceId, cohort := GetUserSequenceIdAndCohort(req.UID) - newCards := DoOpen(req.GameID, - gameData, config, - confCardholder, - sequenceId, cohort, - openMode) - rsp.NewCards = newCards + allNewCards := make([]int, 0) + for _, idCardholder := range req.Ids { + confCardholder, _ := config.CardholderConfig[strconv.Itoa(idCardholder)] + newCards := DoOpen(req.GameID, + gameData, config, + confCardholder, + sequenceId, cohort, + openMode) + // 打乱顺序 + uttype.Shuffle(newCards) + for _, i3 := range newCards { + allNewCards = append(allNewCards, i3) + } + rsp.NewCards = append(rsp.NewCards, newCards) + } awardAlbum, awardRound := DoOpenCheckAward(req.GameID, gameData, config, sequenceId, cohort, - rsp.NewCards, + allNewCards, openMode) rsp.AwardAlbum = awardAlbum rsp.AwardRound = awardRound @@ -112,8 +124,6 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH // 存档 SaveData(req.GameID, gameData) - uttype.Shuffle(rsp.NewCards) - // 返回信息 rsp.CardHolderInfo = GetInfo(gameData, config) @@ -156,32 +166,34 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model } // 判断星星数是否足够 - if gameData.Details.StarCount < confStarShop.StarNumber { + if gameData.Details.StarCount < confStarShop.NeedStarNumber { code = constd.RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR return } // 判断配置 - if len(confStarShop.CardholderId) < 3 { - lxalilog.Errors("StarShopConfig.CardholderId error", confStarShop.Id) + cardBagIdsStr := strings.Split(confStarShop.CardBagIds, ",") + cardBagIds := uttype.ListStringToListInt(cardBagIdsStr) + if len(cardBagIds) < 3 { + lxalilog.Errors("StarShopConfig.CardBagIds error", confStarShop.Id) code = constd.RECODE_MERGE_CONFIG_ERROR return } - cardholderId := confStarShop.CardholderId[1] - cardholderCount := confStarShop.CardholderId[2] + cardholderId := cardBagIds[1] + cardholderCount := cardBagIds[2] if cardholderCount < 1 { - lxalilog.Errors("StarShopConfig.CardholderId error", confStarShop.Id) + lxalilog.Errors("StarShopConfig.CardBagIds error", confStarShop.Id) code = constd.RECODE_MERGE_CONFIG_ERROR return } - confCardholder, okCardholderConfig := config.CardholderConfig[strconv.Itoa(cardholderId)] - if !okCardholderConfig { + confCardholder, okCardholder := config.CardholderConfig[strconv.Itoa(cardholderId)] + if !okCardholder { code = constd.RECODE_MERGE_CONFIG_ERROR return } // 按照规则扣除星星 - enough, cardList := GetStarCardList(gameData, config, confStarShop.StarNumber) + enough, cardList := GetStarCardList(gameData, config, confStarShop.NeedStarNumber) if !enough { code = constd.RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR return -- libgit2 0.21.0