Commit d57ff0e0971e9c87b96e3dc1b0db94ba13ace775
1 parent
dbc06836
Exists in
master
and in
1 other branch
feat✨:星星商店兑换
Showing
3 changed files
with
40 additions
and
42 deletions
Show diff stats
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 | ... | ... |