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,30 +37,17 @@ type RspCardHolderInfo struct {
37 CardHolderInfo 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 // ReqCardHolderOpen 请求 打开卡包 40 // ReqCardHolderOpen 请求 打开卡包
54 type ReqCardHolderOpen struct { 41 type ReqCardHolderOpen struct {
55 BaseLoginInfo 42 BaseLoginInfo
56 BaseSign 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 // RspCardHolderOpen 返回 打开卡包 47 // RspCardHolderOpen 返回 打开卡包
61 type RspCardHolderOpen struct { 48 type RspCardHolderOpen struct {
62 CardHolderInfo 49 CardHolderInfo
63 - NewCards []int `form:"new_cards" json:"new_cards"` // 新获得的卡牌列表 50 + NewCards [][]int `form:"new_cards" json:"new_cards"` // 新获得的卡牌列表
64 AwardAlbum map[int]string `form:"award_album" json:"award_album"` // 触发的卡组奖励列表 k=出发的卡组ID v=对应奖励 51 AwardAlbum map[int]string `form:"award_album" json:"award_album"` // 触发的卡组奖励列表 k=出发的卡组ID v=对应奖励
65 AwardRound string `form:"award_round" json:"award_round"` // 触发的轮次奖励列表 空字符串未触发 52 AwardRound string `form:"award_round" json:"award_round"` // 触发的轮次奖励列表 空字符串未触发
66 } 53 }
service/cardholder/config.go
@@ -115,8 +115,7 @@ type CardSequenceConfig struct { @@ -115,8 +115,7 @@ type CardSequenceConfig struct {
115 115
116 // StarShopConfig 星星商店配置 116 // StarShopConfig 星星商店配置
117 type StarShopConfig struct { 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,6 +7,7 @@ import (
7 "apigame/util/util-lx/lxtime" 7 "apigame/util/util-lx/lxtime"
8 "apigame/util/uttype" 8 "apigame/util/uttype"
9 "strconv" 9 "strconv"
  10 + "strings"
10 ) 11 )
11 12
12 // HandleGetConfig 活动配置 13 // HandleGetConfig 活动配置
@@ -57,7 +58,7 @@ func HandleInfo(req *models.ReqCardHolderInfo) (code string, rsp models.RspCardH @@ -57,7 +58,7 @@ func HandleInfo(req *models.ReqCardHolderInfo) (code string, rsp models.RspCardH
57 // HandleOpen 打开卡包 58 // HandleOpen 打开卡包
58 func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardHolderOpen) { 59 func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardHolderOpen) {
59 rsp = models.RspCardHolderOpen{ 60 rsp = models.RspCardHolderOpen{
60 - NewCards: make([]int, 0), 61 + NewCards: make([][]int, 0),
61 AwardAlbum: make(map[int]string), 62 AwardAlbum: make(map[int]string),
62 } 63 }
63 code = constd.RECODE_OK 64 code = constd.RECODE_OK
@@ -75,10 +76,12 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH @@ -75,10 +76,12 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH
75 return 76 return
76 } 77 }
77 // 检查卡包ID 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,16 +95,25 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH
92 // 开始处理抽卡 95 // 开始处理抽卡
93 openMode := 0 96 openMode := 0
94 sequenceId, cohort := GetUserSequenceIdAndCohort(req.UID) 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 awardAlbum, awardRound := DoOpenCheckAward(req.GameID, 113 awardAlbum, awardRound := DoOpenCheckAward(req.GameID,
102 gameData, config, 114 gameData, config,
103 sequenceId, cohort, 115 sequenceId, cohort,
104 - rsp.NewCards, 116 + allNewCards,
105 openMode) 117 openMode)
106 rsp.AwardAlbum = awardAlbum 118 rsp.AwardAlbum = awardAlbum
107 rsp.AwardRound = awardRound 119 rsp.AwardRound = awardRound
@@ -112,8 +124,6 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH @@ -112,8 +124,6 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH
112 // 存档 124 // 存档
113 SaveData(req.GameID, gameData) 125 SaveData(req.GameID, gameData)
114 126
115 - uttype.Shuffle(rsp.NewCards)  
116 -  
117 // 返回信息 127 // 返回信息
118 rsp.CardHolderInfo = GetInfo(gameData, config) 128 rsp.CardHolderInfo = GetInfo(gameData, config)
119 129
@@ -156,32 +166,34 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model @@ -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 code = constd.RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR 170 code = constd.RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR
161 return 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 code = constd.RECODE_MERGE_CONFIG_ERROR 179 code = constd.RECODE_MERGE_CONFIG_ERROR
168 return 180 return
169 } 181 }
170 - cardholderId := confStarShop.CardholderId[1]  
171 - cardholderCount := confStarShop.CardholderId[2] 182 + cardholderId := cardBagIds[1]
  183 + cardholderCount := cardBagIds[2]
172 if cardholderCount < 1 { 184 if cardholderCount < 1 {
173 - lxalilog.Errors("StarShopConfig.CardholderId error", confStarShop.Id) 185 + lxalilog.Errors("StarShopConfig.CardBagIds error", confStarShop.Id)
174 code = constd.RECODE_MERGE_CONFIG_ERROR 186 code = constd.RECODE_MERGE_CONFIG_ERROR
175 return 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 code = constd.RECODE_MERGE_CONFIG_ERROR 191 code = constd.RECODE_MERGE_CONFIG_ERROR
180 return 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 if !enough { 197 if !enough {
186 code = constd.RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR 198 code = constd.RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR
187 return 199 return