Commit 0b461d56c472e37446ac97c01476a1bbce50e309

Authored by 王家文
1 parent 823e90e6
Exists in master

feat✨:卡牌活动星星商店的卡包可能为多个

models/cardholder.go
... ... @@ -96,5 +96,5 @@ type RspAutoExchangeInfo struct {
96 96 AwardAlbum map[int]string `form:"award_album" json:"award_album"` // 触发的卡组奖励列表 k=出发的卡组ID v=对应奖励
97 97 AwardRound string `form:"award_round" json:"award_round"` // 触发的轮次奖励列表 空字符串未触发
98 98 LastStarCount int `form:"last_star_count" json:"last_star_count"` // 上期活动剩余星星点数
99   - AutoExchangeHolder int `form:"auto_exchange_holder" json:"auto_exchange_holder"` // 活动切换时自动兑换的卡包
  99 + AutoExchangeHolder []int `form:"auto_exchange_holder" json:"auto_exchange_holder"` // 活动切换时自动兑换的卡包
100 100 }
... ...
service/cardholder/dto-player.go
... ... @@ -47,7 +47,7 @@ type PlayerDetails struct {
47 47 Round int // 卡册当前轮次
48 48 StarCount int // 星星点数
49 49 LastStarCount int // 上期活动剩余星星点数
50   - AutoExchangeHolder int // 活动切换时自动兑换的卡包 2024年4月26日 这里策划要求改为只能兑换一个最高级的
  50 + AutoExchangeHolder []int // 活动切换时自动兑换的卡包
51 51 SequenceId int // 用户序列组ID
52 52 }
53 53  
... ... @@ -59,7 +59,7 @@ func NewPlayerDetails() *PlayerDetails {
59 59 CardSequenceScales: make(map[string]int),
60 60 Round: 1,
61 61 StarCount: 0,
62   - AutoExchangeHolder: 0,
  62 + AutoExchangeHolder: make([]int, 0),
63 63 }
64 64 }
65 65  
... ...
service/cardholder/handle.go
... ... @@ -7,7 +7,6 @@ import (
7 7 "apigame/service/code-msg"
8 8 "apigame/util/util-lx/lxalilog"
9 9 "apigame/util/util-lx/lxtime"
10   - "apigame/util/zconvert"
11 10 "apigame/util/zslice"
12 11 )
13 12  
... ... @@ -269,38 +268,29 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model
269 268 }
270 269  
271 270 // 从配置里拿到卡包ID和数量列表
272   - cardholderIdCount := make(map[int]int)
273   - cardholderIdCountList := zconvert.ToListListInt(confStarShop.CardBagIds, "|", ",")
274   - for _, i2 := range cardholderIdCountList {
275   - if len(i2) >= 3 {
276   - cardholderIdCount[i2[1]] = i2[2]
277   - }
278   - }
  271 + rsp.NewHolders = GetCardholder(confStarShop)
279 272 // 开始处理抽卡
280 273 openMode := 1
281 274 sequenceId := player.Details.SequenceId
282 275 cohort := GetCohort(player.Uid)
283 276 allNewCards := make([]int, 0)
284   - for cardholderId, cardholderCount := range cardholderIdCount {
  277 + for _, cardholderId := range rsp.NewHolders {
285 278 confCardholder, okCardholder := config.CardholderConfig[cardholderId]
286 279 if !okCardholder {
287 280 lxalilog.Errors("StarShopConfig.CardBagIds error", confStarShop.Id)
288 281 continue
289 282 }
290   - rsp.NewHolders = append(rsp.NewHolders, cardholderId)
291   - for i := 0; i < cardholderCount; i++ {
292   - newCards := DoOpen(gameId,
293   - player, config,
294   - confCardholder,
295   - sequenceId, cohort,
296   - openMode)
297   - // 打乱顺序
298   - zslice.Shuffle(newCards)
299   - for _, i3 := range newCards {
300   - allNewCards = append(allNewCards, i3)
301   - }
302   - rsp.NewCards = append(rsp.NewCards, newCards)
  283 + newCards := DoOpen(gameId,
  284 + player, config,
  285 + confCardholder,
  286 + sequenceId, cohort,
  287 + openMode)
  288 + // 打乱顺序
  289 + zslice.Shuffle(newCards)
  290 + for _, i3 := range newCards {
  291 + allNewCards = append(allNewCards, i3)
303 292 }
  293 + rsp.NewCards = append(rsp.NewCards, newCards)
304 294 }
305 295  
306 296 awardAlbum, awardRound := DoOpenCheckAward(gameId,
... ... @@ -330,7 +320,7 @@ func HandleAutoExchangeInfo(req *models.ReqAutoExchangeInfo) (code string, rsp m
330 320 rsp = models.RspAutoExchangeInfo{
331 321 NewCards: make([]int, 0),
332 322 AwardAlbum: make(map[int]string),
333   - AutoExchangeHolder: 0,
  323 + AutoExchangeHolder: make([]int, 0),
334 324 }
335 325 code = code_msg.RECODE_OK
336 326 gameId := req.GameID
... ... @@ -373,7 +363,7 @@ func HandleAutoExchangeInfo(req *models.ReqAutoExchangeInfo) (code string, rsp m
373 363 }
374 364  
375 365 player.Details.LastStarCount = 0
376   - player.Details.AutoExchangeHolder = 0
  366 + player.Details.AutoExchangeHolder = make([]int, 0)
377 367 // 存档
378 368 SavePlayer(gameId, player)
379 369  
... ...
service/cardholder/logic.go
... ... @@ -364,6 +364,23 @@ func GetStarCardList(player *Player, config *confcardholder.ActivityConfig, need
364 364 return
365 365 }
366 366  
  367 +func GetCardholder(confStarShop confcardholder.StarShopConfig) (list []int) {
  368 + // 从配置里拿到卡包ID和数量列表
  369 + cardholderIdCount := make(map[int]int)
  370 + cardholderIdCountList := zconvert.ToListListInt(confStarShop.CardBagIds, "|", ",")
  371 + for _, i2 := range cardholderIdCountList {
  372 + if len(i2) >= 3 {
  373 + cardholderIdCount[i2[1]] = i2[2]
  374 + }
  375 + }
  376 + for cardholderId, cardholderCount := range cardholderIdCount {
  377 + for i := 0; i < cardholderCount; i++ {
  378 + list = append(list, cardholderId)
  379 + }
  380 + }
  381 + return
  382 +}
  383 +
367 384 // NextActivityAutoExchange 活动切换时自动兑换卡包
368 385 func NextActivityAutoExchange(gameId string, player *Player, config *confcardholder.ActivityConfig) {
369 386 // 把星星的配置按照需要的星星数降序排列
... ... @@ -373,9 +390,9 @@ func NextActivityAutoExchange(gameId string, player *Player, config *confcardhol
373 390 })
374 391 list = lo.Reverse(list)
375 392 // 遍历
376   - for _, config := range list {
377   - if player.Details.LastStarCount >= config.NeedStarNumber {
378   - player.Details.AutoExchangeHolder = config.Id
  393 + for _, configStarShop := range list {
  394 + if player.Details.LastStarCount >= configStarShop.NeedStarNumber {
  395 + player.Details.AutoExchangeHolder = GetCardholder(configStarShop)
379 396 break
380 397 }
381 398 }
... ... @@ -385,8 +402,12 @@ func NextActivityAutoExchange(gameId string, player *Player, config *confcardhol
385 402 sequenceId := player.Details.SequenceId
386 403 cohort := GetCohort(player.Uid)
387 404 allNewCards := make([]int, 0)
388   - if player.Details.AutoExchangeHolder != 0 {
389   - confCardholder, _ := config.CardholderConfig[player.Details.AutoExchangeHolder]
  405 + for _, cardholderId := range player.Details.AutoExchangeHolder {
  406 + confCardholder, okCardholder := config.CardholderConfig[cardholderId]
  407 + if !okCardholder {
  408 + lxalilog.Errors("StarShopConfig.CardBagIds error", cardholderId)
  409 + continue
  410 + }
390 411 newCards := DoOpen(gameId,
391 412 player, config,
392 413 confCardholder,
... ...