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,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 |