From 0b461d56c472e37446ac97c01476a1bbce50e309 Mon Sep 17 00:00:00 2001 From: 王家文 Date: Thu, 30 May 2024 11:03:47 +0800 Subject: [PATCH] feat✨:卡牌活动星星商店的卡包可能为多个 --- models/cardholder.go | 2 +- service/cardholder/dto-player.go | 4 ++-- service/cardholder/handle.go | 38 ++++++++++++++------------------------ service/cardholder/logic.go | 31 ++++++++++++++++++++++++++----- 4 files changed, 43 insertions(+), 32 deletions(-) diff --git a/models/cardholder.go b/models/cardholder.go index e5fc455..48c0923 100644 --- a/models/cardholder.go +++ b/models/cardholder.go @@ -96,5 +96,5 @@ type RspAutoExchangeInfo struct { AwardAlbum map[int]string `form:"award_album" json:"award_album"` // 触发的卡组奖励列表 k=出发的卡组ID v=对应奖励 AwardRound string `form:"award_round" json:"award_round"` // 触发的轮次奖励列表 空字符串未触发 LastStarCount int `form:"last_star_count" json:"last_star_count"` // 上期活动剩余星星点数 - AutoExchangeHolder int `form:"auto_exchange_holder" json:"auto_exchange_holder"` // 活动切换时自动兑换的卡包 + AutoExchangeHolder []int `form:"auto_exchange_holder" json:"auto_exchange_holder"` // 活动切换时自动兑换的卡包 } diff --git a/service/cardholder/dto-player.go b/service/cardholder/dto-player.go index 1afb77d..11db132 100644 --- a/service/cardholder/dto-player.go +++ b/service/cardholder/dto-player.go @@ -47,7 +47,7 @@ type PlayerDetails struct { Round int // 卡册当前轮次 StarCount int // 星星点数 LastStarCount int // 上期活动剩余星星点数 - AutoExchangeHolder int // 活动切换时自动兑换的卡包 2024年4月26日 这里策划要求改为只能兑换一个最高级的 + AutoExchangeHolder []int // 活动切换时自动兑换的卡包 SequenceId int // 用户序列组ID } @@ -59,7 +59,7 @@ func NewPlayerDetails() *PlayerDetails { CardSequenceScales: make(map[string]int), Round: 1, StarCount: 0, - AutoExchangeHolder: 0, + AutoExchangeHolder: make([]int, 0), } } diff --git a/service/cardholder/handle.go b/service/cardholder/handle.go index 2ea111f..5cbe1b8 100644 --- a/service/cardholder/handle.go +++ b/service/cardholder/handle.go @@ -7,7 +7,6 @@ import ( "apigame/service/code-msg" "apigame/util/util-lx/lxalilog" "apigame/util/util-lx/lxtime" - "apigame/util/zconvert" "apigame/util/zslice" ) @@ -269,38 +268,29 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model } // 从配置里拿到卡包ID和数量列表 - cardholderIdCount := make(map[int]int) - cardholderIdCountList := zconvert.ToListListInt(confStarShop.CardBagIds, "|", ",") - for _, i2 := range cardholderIdCountList { - if len(i2) >= 3 { - cardholderIdCount[i2[1]] = i2[2] - } - } + rsp.NewHolders = GetCardholder(confStarShop) // 开始处理抽卡 openMode := 1 sequenceId := player.Details.SequenceId cohort := GetCohort(player.Uid) allNewCards := make([]int, 0) - for cardholderId, cardholderCount := range cardholderIdCount { + for _, cardholderId := range rsp.NewHolders { confCardholder, okCardholder := config.CardholderConfig[cardholderId] if !okCardholder { lxalilog.Errors("StarShopConfig.CardBagIds error", confStarShop.Id) continue } - rsp.NewHolders = append(rsp.NewHolders, cardholderId) - for i := 0; i < cardholderCount; i++ { - newCards := DoOpen(gameId, - player, config, - confCardholder, - sequenceId, cohort, - openMode) - // 打乱顺序 - zslice.Shuffle(newCards) - for _, i3 := range newCards { - allNewCards = append(allNewCards, i3) - } - rsp.NewCards = append(rsp.NewCards, newCards) + newCards := DoOpen(gameId, + player, config, + confCardholder, + sequenceId, cohort, + openMode) + // 打乱顺序 + zslice.Shuffle(newCards) + for _, i3 := range newCards { + allNewCards = append(allNewCards, i3) } + rsp.NewCards = append(rsp.NewCards, newCards) } awardAlbum, awardRound := DoOpenCheckAward(gameId, @@ -330,7 +320,7 @@ func HandleAutoExchangeInfo(req *models.ReqAutoExchangeInfo) (code string, rsp m rsp = models.RspAutoExchangeInfo{ NewCards: make([]int, 0), AwardAlbum: make(map[int]string), - AutoExchangeHolder: 0, + AutoExchangeHolder: make([]int, 0), } code = code_msg.RECODE_OK gameId := req.GameID @@ -373,7 +363,7 @@ func HandleAutoExchangeInfo(req *models.ReqAutoExchangeInfo) (code string, rsp m } player.Details.LastStarCount = 0 - player.Details.AutoExchangeHolder = 0 + player.Details.AutoExchangeHolder = make([]int, 0) // 存档 SavePlayer(gameId, player) diff --git a/service/cardholder/logic.go b/service/cardholder/logic.go index 26c3a2d..38c6526 100644 --- a/service/cardholder/logic.go +++ b/service/cardholder/logic.go @@ -364,6 +364,23 @@ func GetStarCardList(player *Player, config *confcardholder.ActivityConfig, need return } +func GetCardholder(confStarShop confcardholder.StarShopConfig) (list []int) { + // 从配置里拿到卡包ID和数量列表 + cardholderIdCount := make(map[int]int) + cardholderIdCountList := zconvert.ToListListInt(confStarShop.CardBagIds, "|", ",") + for _, i2 := range cardholderIdCountList { + if len(i2) >= 3 { + cardholderIdCount[i2[1]] = i2[2] + } + } + for cardholderId, cardholderCount := range cardholderIdCount { + for i := 0; i < cardholderCount; i++ { + list = append(list, cardholderId) + } + } + return +} + // NextActivityAutoExchange 活动切换时自动兑换卡包 func NextActivityAutoExchange(gameId string, player *Player, config *confcardholder.ActivityConfig) { // 把星星的配置按照需要的星星数降序排列 @@ -373,9 +390,9 @@ func NextActivityAutoExchange(gameId string, player *Player, config *confcardhol }) list = lo.Reverse(list) // 遍历 - for _, config := range list { - if player.Details.LastStarCount >= config.NeedStarNumber { - player.Details.AutoExchangeHolder = config.Id + for _, configStarShop := range list { + if player.Details.LastStarCount >= configStarShop.NeedStarNumber { + player.Details.AutoExchangeHolder = GetCardholder(configStarShop) break } } @@ -385,8 +402,12 @@ func NextActivityAutoExchange(gameId string, player *Player, config *confcardhol sequenceId := player.Details.SequenceId cohort := GetCohort(player.Uid) allNewCards := make([]int, 0) - if player.Details.AutoExchangeHolder != 0 { - confCardholder, _ := config.CardholderConfig[player.Details.AutoExchangeHolder] + for _, cardholderId := range player.Details.AutoExchangeHolder { + confCardholder, okCardholder := config.CardholderConfig[cardholderId] + if !okCardholder { + lxalilog.Errors("StarShopConfig.CardBagIds error", cardholderId) + continue + } newCards := DoOpen(gameId, player, config, confCardholder, -- libgit2 0.21.0