Commit d57ff0e0971e9c87b96e3dc1b0db94ba13ace775

Authored by 王家文
1 parent dbc06836
Exists in master and in 1 other branch dev-wjw

feat✨:星星商店兑换

models/cardholder.go
... ... @@ -37,30 +37,17 @@ type RspCardHolderInfo struct {
37 37 CardHolderInfo
38 38 }
39 39  
40   -// ReqCardHolderGetNew 请求 获取卡包
41   -type ReqCardHolderGetNew struct {
42   - BaseLoginInfo
43   - BaseSign
44   - Id int `form:"id" json:"id" valid:"Required"` // 卡包ID
45   - Count int `form:"count" json:"count" valid:"Required"` // 卡包数量
46   -}
47   -
48   -// RspCardHolderGetNew 返回 获取卡包
49   -type RspCardHolderGetNew struct {
50   - CardHolderInfo
51   -}
52   -
53 40 // ReqCardHolderOpen 请求 打开卡包
54 41 type ReqCardHolderOpen struct {
55 42 BaseLoginInfo
56 43 BaseSign
57   - Id int `form:"id" json:"id" valid:"Required"` // 卡包ID
  44 + Ids []int `form:"ids" json:"ids" valid:"Required"` // 卡包ID列表
58 45 }
59 46  
60 47 // RspCardHolderOpen 返回 打开卡包
61 48 type RspCardHolderOpen struct {
62 49 CardHolderInfo
63   - NewCards []int `form:"new_cards" json:"new_cards"` // 新获得的卡牌列表
  50 + NewCards [][]int `form:"new_cards" json:"new_cards"` // 新获得的卡牌列表
64 51 AwardAlbum map[int]string `form:"award_album" json:"award_album"` // 触发的卡组奖励列表 k=出发的卡组ID v=对应奖励
65 52 AwardRound string `form:"award_round" json:"award_round"` // 触发的轮次奖励列表 空字符串未触发
66 53 }
... ...
service/cardholder/config.go
... ... @@ -115,8 +115,7 @@ type CardSequenceConfig struct {
115 115  
116 116 // StarShopConfig 星星商店配置
117 117 type StarShopConfig struct {
118   - Id int `json:"id"` // ID
119   - StarNumber int `json:"star_number"` // 需求星星数
120   - CardholderId []int `json:"cardholder_id"` // 可换取的卡包ID {卡包类型,卡包ID,卡包数量} // todo 要重命名
121   - AlbumId int `json:"album_id"` // 对应卡册活动ID // todo 要重命名
  118 + Id int `json:"id"` // ID
  119 + NeedStarNumber int `json:"need_star_number"` // 需求星星数
  120 + CardBagIds string `json:"card_bag_ids"` // 可换取的卡包ID {卡包类型,卡包ID,卡包数量}
122 121 }
... ...
service/cardholder/handle.go
... ... @@ -7,6 +7,7 @@ import (
7 7 "apigame/util/util-lx/lxtime"
8 8 "apigame/util/uttype"
9 9 "strconv"
  10 + "strings"
10 11 )
11 12  
12 13 // HandleGetConfig 活动配置
... ... @@ -57,7 +58,7 @@ func HandleInfo(req *models.ReqCardHolderInfo) (code string, rsp models.RspCardH
57 58 // HandleOpen 打开卡包
58 59 func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardHolderOpen) {
59 60 rsp = models.RspCardHolderOpen{
60   - NewCards: make([]int, 0),
  61 + NewCards: make([][]int, 0),
61 62 AwardAlbum: make(map[int]string),
62 63 }
63 64 code = constd.RECODE_OK
... ... @@ -75,10 +76,12 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH
75 76 return
76 77 }
77 78 // 检查卡包ID
78   - confCardholder, okCardholderConfig := config.CardholderConfig[strconv.Itoa(req.Id)]
79   - if !okCardholderConfig {
80   - code = constd.RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR
81   - return
  79 + for _, idCardholder := range req.Ids {
  80 + _, okCardholder := config.CardholderConfig[strconv.Itoa(idCardholder)]
  81 + if !okCardholder {
  82 + code = constd.RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR
  83 + return
  84 + }
82 85 }
83 86  
84 87 // 读取游戏数据
... ... @@ -92,16 +95,25 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH
92 95 // 开始处理抽卡
93 96 openMode := 0
94 97 sequenceId, cohort := GetUserSequenceIdAndCohort(req.UID)
95   - newCards := DoOpen(req.GameID,
96   - gameData, config,
97   - confCardholder,
98   - sequenceId, cohort,
99   - openMode)
100   - rsp.NewCards = newCards
  98 + allNewCards := make([]int, 0)
  99 + for _, idCardholder := range req.Ids {
  100 + confCardholder, _ := config.CardholderConfig[strconv.Itoa(idCardholder)]
  101 + newCards := DoOpen(req.GameID,
  102 + gameData, config,
  103 + confCardholder,
  104 + sequenceId, cohort,
  105 + openMode)
  106 + // 打乱顺序
  107 + uttype.Shuffle(newCards)
  108 + for _, i3 := range newCards {
  109 + allNewCards = append(allNewCards, i3)
  110 + }
  111 + rsp.NewCards = append(rsp.NewCards, newCards)
  112 + }
101 113 awardAlbum, awardRound := DoOpenCheckAward(req.GameID,
102 114 gameData, config,
103 115 sequenceId, cohort,
104   - rsp.NewCards,
  116 + allNewCards,
105 117 openMode)
106 118 rsp.AwardAlbum = awardAlbum
107 119 rsp.AwardRound = awardRound
... ... @@ -112,8 +124,6 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH
112 124 // 存档
113 125 SaveData(req.GameID, gameData)
114 126  
115   - uttype.Shuffle(rsp.NewCards)
116   -
117 127 // 返回信息
118 128 rsp.CardHolderInfo = GetInfo(gameData, config)
119 129  
... ... @@ -156,32 +166,34 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model
156 166 }
157 167  
158 168 // 判断星星数是否足够
159   - if gameData.Details.StarCount < confStarShop.StarNumber {
  169 + if gameData.Details.StarCount < confStarShop.NeedStarNumber {
160 170 code = constd.RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR
161 171 return
162 172 }
163 173  
164 174 // 判断配置
165   - if len(confStarShop.CardholderId) < 3 {
166   - lxalilog.Errors("StarShopConfig.CardholderId error", confStarShop.Id)
  175 + cardBagIdsStr := strings.Split(confStarShop.CardBagIds, ",")
  176 + cardBagIds := uttype.ListStringToListInt(cardBagIdsStr)
  177 + if len(cardBagIds) < 3 {
  178 + lxalilog.Errors("StarShopConfig.CardBagIds error", confStarShop.Id)
167 179 code = constd.RECODE_MERGE_CONFIG_ERROR
168 180 return
169 181 }
170   - cardholderId := confStarShop.CardholderId[1]
171   - cardholderCount := confStarShop.CardholderId[2]
  182 + cardholderId := cardBagIds[1]
  183 + cardholderCount := cardBagIds[2]
172 184 if cardholderCount < 1 {
173   - lxalilog.Errors("StarShopConfig.CardholderId error", confStarShop.Id)
  185 + lxalilog.Errors("StarShopConfig.CardBagIds error", confStarShop.Id)
174 186 code = constd.RECODE_MERGE_CONFIG_ERROR
175 187 return
176 188 }
177   - confCardholder, okCardholderConfig := config.CardholderConfig[strconv.Itoa(cardholderId)]
178   - if !okCardholderConfig {
  189 + confCardholder, okCardholder := config.CardholderConfig[strconv.Itoa(cardholderId)]
  190 + if !okCardholder {
179 191 code = constd.RECODE_MERGE_CONFIG_ERROR
180 192 return
181 193 }
182 194  
183 195 // 按照规则扣除星星
184   - enough, cardList := GetStarCardList(gameData, config, confStarShop.StarNumber)
  196 + enough, cardList := GetStarCardList(gameData, config, confStarShop.NeedStarNumber)
185 197 if !enough {
186 198 code = constd.RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR
187 199 return
... ...