Commit 27cc372e327168f2c61ba3d6e28c321919961baf

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

feat✨:房间排行活动基本框架

service/cardholder/handle.go
@@ -48,9 +48,9 @@ func HandleInfo(req *models.ReqCardHolderInfo) (code string, rsp models.RspCardH @@ -48,9 +48,9 @@ func HandleInfo(req *models.ReqCardHolderInfo) (code string, rsp models.RspCardH
48 } 48 }
49 49
50 // 读取游戏数据 50 // 读取游戏数据
51 - gameData := LoadData(req.GameID, req.UID, config) 51 + player := LoadPlayer(req.GameID, req.UID, config)
52 52
53 - rsp.CardHolderInfo = GetInfo(gameData, config) 53 + rsp.CardHolderInfo = GetInfo(player, config)
54 54
55 return 55 return
56 } 56 }
@@ -85,21 +85,21 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH @@ -85,21 +85,21 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH
85 } 85 }
86 86
87 // 读取游戏数据 87 // 读取游戏数据
88 - gameData := LoadData(req.GameID, req.UID, config) 88 + player := LoadPlayer(req.GameID, req.UID, config)
89 // 检查游戏数据 轮次等 89 // 检查游戏数据 轮次等
90 - code = CheckGameData(gameData, config) 90 + code = CheckGameData(player, config)
91 if code != code_msg.RECODE_OK { 91 if code != code_msg.RECODE_OK {
92 return 92 return
93 } 93 }
94 94
95 // 开始处理抽卡 95 // 开始处理抽卡
96 openMode := 0 96 openMode := 0
97 - sequenceId, cohort := GetUserSequenceIdAndCohort(gameData.Uid) 97 + sequenceId, cohort := GetUserSequenceIdAndCohort(player.Uid)
98 allNewCards := make([]int, 0) 98 allNewCards := make([]int, 0)
99 for _, idCardholder := range req.Ids { 99 for _, idCardholder := range req.Ids {
100 confCardholder, _ := config.CardholderConfig[strconv.Itoa(idCardholder)] 100 confCardholder, _ := config.CardholderConfig[strconv.Itoa(idCardholder)]
101 newCards := DoOpen(req.GameID, 101 newCards := DoOpen(req.GameID,
102 - gameData, config, 102 + player, config,
103 confCardholder, 103 confCardholder,
104 sequenceId, cohort, 104 sequenceId, cohort,
105 openMode) 105 openMode)
@@ -111,7 +111,7 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH @@ -111,7 +111,7 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH
111 rsp.NewCards = append(rsp.NewCards, newCards) 111 rsp.NewCards = append(rsp.NewCards, newCards)
112 } 112 }
113 awardAlbum, awardRound := DoOpenCheckAward(req.GameID, 113 awardAlbum, awardRound := DoOpenCheckAward(req.GameID,
114 - gameData, config, 114 + player, config,
115 sequenceId, cohort, 115 sequenceId, cohort,
116 allNewCards, 116 allNewCards,
117 openMode) 117 openMode)
@@ -119,13 +119,13 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH @@ -119,13 +119,13 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH
119 rsp.AwardRound = awardRound 119 rsp.AwardRound = awardRound
120 120
121 // 计算星星点数 121 // 计算星星点数
122 - CalculateStarCount(gameData, config) 122 + CalculateStarCount(player, config)
123 123
124 // 存档 124 // 存档
125 - SaveData(req.GameID, gameData) 125 + SavePlayer(req.GameID, player)
126 126
127 // 返回信息 127 // 返回信息
128 - rsp.CardHolderInfo = GetInfo(gameData, config) 128 + rsp.CardHolderInfo = GetInfo(player, config)
129 129
130 return 130 return
131 } 131 }
@@ -158,15 +158,15 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model @@ -158,15 +158,15 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model
158 } 158 }
159 159
160 // 读取游戏数据 160 // 读取游戏数据
161 - gameData := LoadData(req.GameID, req.UID, config) 161 + player := LoadPlayer(req.GameID, req.UID, config)
162 // 检查游戏数据 轮次等 162 // 检查游戏数据 轮次等
163 - code = CheckGameData(gameData, config) 163 + code = CheckGameData(player, config)
164 if code != code_msg.RECODE_OK { 164 if code != code_msg.RECODE_OK {
165 return 165 return
166 } 166 }
167 167
168 // 判断星星数是否足够 168 // 判断星星数是否足够
169 - if gameData.Details.StarCount < confStarShop.NeedStarNumber { 169 + if player.Details.StarCount < confStarShop.NeedStarNumber {
170 code = code_msg.RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR 170 code = code_msg.RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR
171 return 171 return
172 } 172 }
@@ -191,21 +191,21 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model @@ -191,21 +191,21 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model
191 } 191 }
192 192
193 // 按照规则扣除星星 193 // 按照规则扣除星星
194 - enough, cardList := GetStarCardList(gameData, config, confStarShop.NeedStarNumber) 194 + enough, cardList := GetStarCardList(player, config, confStarShop.NeedStarNumber)
195 if !enough { 195 if !enough {
196 code = code_msg.RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR 196 code = code_msg.RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR
197 return 197 return
198 } 198 }
199 for i, i2 := range cardList { 199 for i, i2 := range cardList {
200 - gameData.Details.Cards[i] -= i2 200 + player.Details.Cards[i] -= i2
201 } 201 }
202 202
203 // 开始处理抽卡 203 // 开始处理抽卡
204 openMode := 1 204 openMode := 1
205 - sequenceId, cohort := GetUserSequenceIdAndCohort(gameData.Uid) 205 + sequenceId, cohort := GetUserSequenceIdAndCohort(player.Uid)
206 for i := 0; i < cardholderCount; i++ { 206 for i := 0; i < cardholderCount; i++ {
207 newCards := DoOpen(req.GameID, 207 newCards := DoOpen(req.GameID,
208 - gameData, config, 208 + player, config,
209 confCardholder, 209 confCardholder,
210 sequenceId, cohort, 210 sequenceId, cohort,
211 openMode) 211 openMode)
@@ -214,7 +214,7 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model @@ -214,7 +214,7 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model
214 } 214 }
215 } 215 }
216 awardAlbum, awardRound := DoOpenCheckAward(req.GameID, 216 awardAlbum, awardRound := DoOpenCheckAward(req.GameID,
217 - gameData, config, 217 + player, config,
218 sequenceId, cohort, 218 sequenceId, cohort,
219 rsp.NewCards, 219 rsp.NewCards,
220 openMode) 220 openMode)
@@ -222,15 +222,15 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model @@ -222,15 +222,15 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model
222 rsp.AwardRound = awardRound 222 rsp.AwardRound = awardRound
223 223
224 // 计算星星点数 224 // 计算星星点数
225 - CalculateStarCount(gameData, config) 225 + CalculateStarCount(player, config)
226 226
227 // 存档 227 // 存档
228 - SaveData(req.GameID, gameData) 228 + SavePlayer(req.GameID, player)
229 229
230 utslice.Shuffle(rsp.NewCards) 230 utslice.Shuffle(rsp.NewCards)
231 231
232 // 返回信息 232 // 返回信息
233 - rsp.CardHolderInfo = GetInfo(gameData, config) 233 + rsp.CardHolderInfo = GetInfo(player, config)
234 234
235 return 235 return
236 } 236 }
@@ -258,38 +258,38 @@ func HandleAutoExchangeInfo(req *models.ReqAutoExchangeInfo) (code string, rsp m @@ -258,38 +258,38 @@ func HandleAutoExchangeInfo(req *models.ReqAutoExchangeInfo) (code string, rsp m
258 } 258 }
259 259
260 // 读取游戏数据 260 // 读取游戏数据
261 - gameData := LoadData(req.GameID, req.UID, config) 261 + player := LoadPlayer(req.GameID, req.UID, config)
262 // 检查游戏数据 轮次等 262 // 检查游戏数据 轮次等
263 - code = CheckGameData(gameData, config) 263 + code = CheckGameData(player, config)
264 if code != code_msg.RECODE_OK { 264 if code != code_msg.RECODE_OK {
265 return 265 return
266 } 266 }
267 267
268 - if gameData.Details.LastStarCount <= 0 { 268 + if player.Details.LastStarCount <= 0 {
269 code = code_msg.RECODE_MERGE_CARDHOLDER_NOAUTOEXCHANGEINFO_ERROR 269 code = code_msg.RECODE_MERGE_CARDHOLDER_NOAUTOEXCHANGEINFO_ERROR
270 return 270 return
271 } 271 }
272 272
273 - rsp.LastStarCount = gameData.Details.LastStarCount  
274 - for _, i2 := range gameData.Details.AutoExchangeHolder { 273 + rsp.LastStarCount = player.Details.LastStarCount
  274 + for _, i2 := range player.Details.AutoExchangeHolder {
275 rsp.AutoExchangeHolder = append(rsp.AutoExchangeHolder, i2) 275 rsp.AutoExchangeHolder = append(rsp.AutoExchangeHolder, i2)
276 } 276 }
277 // 把当前的卡包内数据放在新卡数据里给客户端 277 // 把当前的卡包内数据放在新卡数据里给客户端
278 - for i1, i2 := range gameData.Details.Cards { 278 + for i1, i2 := range player.Details.Cards {
279 for i := 0; i < i2; i++ { 279 for i := 0; i < i2; i++ {
280 rsp.NewCards = append(rsp.NewCards, i1) 280 rsp.NewCards = append(rsp.NewCards, i1)
281 } 281 }
282 } 282 }
283 283
284 - gameData.Details.LastStarCount = 0  
285 - gameData.Details.AutoExchangeHolder = make([]int, 0) 284 + player.Details.LastStarCount = 0
  285 + player.Details.AutoExchangeHolder = make([]int, 0)
286 // 存档 286 // 存档
287 - SaveData(req.GameID, gameData) 287 + SavePlayer(req.GameID, player)
288 288
289 utslice.Shuffle(rsp.NewCards) 289 utslice.Shuffle(rsp.NewCards)
290 290
291 // 返回信息 291 // 返回信息
292 - rsp.CardHolderInfo = GetInfo(gameData, config) 292 + rsp.CardHolderInfo = GetInfo(player, config)
293 293
294 return 294 return
295 } 295 }
service/cardholder/logic.go
@@ -15,52 +15,6 @@ import ( @@ -15,52 +15,6 @@ import (
15 "strconv" 15 "strconv"
16 ) 16 )
17 17
18 -// SaveData 存储数据  
19 -func SaveData(gameId string, d *DataCardHolder) {  
20 - d.UpdateTime = lxtime.NowUninx()  
21 - d.Encode()  
22 -  
23 - _ = svmysql.Save(d, gameId)  
24 -}  
25 -  
26 -func _LoadData(gameId string, uid int64) (d *DataCardHolder) {  
27 - d = NewDataCardHolder(uid)  
28 - has, err := svmysql.First(d, gameId)  
29 - if err != nil {  
30 - return  
31 - }  
32 - if has {  
33 - d.Decode()  
34 - } else {  
35 - d.Init(uid)  
36 - _ = svmysql.Insert(d, gameId)  
37 - }  
38 - return  
39 -}  
40 -  
41 -// LoadData 获取数据 外部接口  
42 -func LoadData(gameId string, uid int64, config *configs.CardActivityConfig) (d *DataCardHolder) {  
43 - configId := config.Id  
44 - d = _LoadData(gameId, uid)  
45 - // 如果当前有上线活动(活动ID不为0),且活动ID和玩家数据不同,说明活动已切换 需更新  
46 - if configId != 0 &&  
47 - configId != d.ActivityId {  
48 -  
49 - // 剩余的星星数  
50 - starCount := d.Details.StarCount  
51 -  
52 - d.ActivityId = configId  
53 - d.Details = NewDataCardHolderDetails()  
54 -  
55 - // 使用剩余的星星数来自动兑换卡包  
56 - d.Details.LastStarCount = starCount  
57 - NextActivityAutoExchange(gameId, d, config)  
58 -  
59 - SaveData(gameId, d)  
60 - }  
61 - return  
62 -}  
63 -  
64 // CheckStatus 判断活动是否开启 18 // CheckStatus 判断活动是否开启
65 func CheckStatus(conf *configs.CardActivityConfig) string { 19 func CheckStatus(conf *configs.CardActivityConfig) string {
66 sec := lxtime.NowUninx() 20 sec := lxtime.NowUninx()
@@ -120,14 +74,14 @@ func GetListFromArray(array []string, scale, count int) []string { @@ -120,14 +74,14 @@ func GetListFromArray(array []string, scale, count int) []string {
120 } 74 }
121 75
122 // GetNewCard 按顺序查找数目最少的一张卡抽取 76 // GetNewCard 按顺序查找数目最少的一张卡抽取
123 -func GetNewCard(gameData *DataCardHolder, conf *configs.CardActivityConfig) int { 77 +func GetNewCard(player *DataCardHolder, conf *configs.CardActivityConfig) int {
124 if len(conf.CardConfig) < 1 { 78 if len(conf.CardConfig) < 1 {
125 return 0 79 return 0
126 } 80 }
127 rate := int64(100000000) 81 rate := int64(100000000)
128 list := make([]int64, 0) 82 list := make([]int64, 0)
129 for id, _ := range conf.CardConfig { 83 for id, _ := range conf.CardConfig {
130 - count, _ := gameData.Details.Cards[id] 84 + count, _ := player.Details.Cards[id]
131 index := int64(count)*rate + int64(id) 85 index := int64(count)*rate + int64(id)
132 list = append(list, index) 86 list = append(list, index)
133 } 87 }
@@ -137,10 +91,10 @@ func GetNewCard(gameData *DataCardHolder, conf *configs.CardActivityConfig) int @@ -137,10 +91,10 @@ func GetNewCard(gameData *DataCardHolder, conf *configs.CardActivityConfig) int
137 } 91 }
138 92
139 // CheckAlbumFinish 判断卡组是否已集齐 93 // CheckAlbumFinish 判断卡组是否已集齐
140 -func CheckAlbumFinish(albumId int, gameData *DataCardHolder, config *configs.CardActivityConfig) bool { 94 +func CheckAlbumFinish(albumId int, player *DataCardHolder, config *configs.CardActivityConfig) bool {
141 for _, conf := range config.CardConfig { 95 for _, conf := range config.CardConfig {
142 if conf.SetId == albumId { 96 if conf.SetId == albumId {
143 - count := gameData.Details.Cards[conf.Id] 97 + count := player.Details.Cards[conf.Id]
144 if count < 1 { 98 if count < 1 {
145 return false 99 return false
146 } 100 }
@@ -150,9 +104,9 @@ func CheckAlbumFinish(albumId int, gameData *DataCardHolder, config *configs.Car @@ -150,9 +104,9 @@ func CheckAlbumFinish(albumId int, gameData *DataCardHolder, config *configs.Car
150 } 104 }
151 105
152 // CheckRoundFinish 判断轮次是否已集齐(所有卡组集齐) 106 // CheckRoundFinish 判断轮次是否已集齐(所有卡组集齐)
153 -func CheckRoundFinish(gameData *DataCardHolder, config *configs.CardActivityConfig) bool { 107 +func CheckRoundFinish(player *DataCardHolder, config *configs.CardActivityConfig) bool {
154 for _, conf := range config.AlbumConfig { 108 for _, conf := range config.AlbumConfig {
155 - count := gameData.Details.Album[conf.SetId] 109 + count := player.Details.Album[conf.SetId]
156 if count < 1 { 110 if count < 1 {
157 return false 111 return false
158 } 112 }
@@ -161,34 +115,34 @@ func CheckRoundFinish(gameData *DataCardHolder, config *configs.CardActivityConf @@ -161,34 +115,34 @@ func CheckRoundFinish(gameData *DataCardHolder, config *configs.CardActivityConf
161 } 115 }
162 116
163 // HandleNextRound 处理轮次完成 星级序列刻度 卡牌序列刻度 117 // HandleNextRound 处理轮次完成 星级序列刻度 卡牌序列刻度
164 -func HandleNextRound(gameData *DataCardHolder) {  
165 - gameData.Details.Round += 1  
166 - gameData.Details.Cards = make(map[int]int)  
167 - gameData.Details.Album = make(map[int]int) 118 +func HandleNextRound(player *DataCardHolder) {
  119 + player.Details.Round += 1
  120 + player.Details.Cards = make(map[int]int)
  121 + player.Details.Album = make(map[int]int)
168 } 122 }
169 123
170 // GetInfo 玩家卡牌活动信息 124 // GetInfo 玩家卡牌活动信息
171 -func GetInfo(gameData *DataCardHolder, conf *configs.CardActivityConfig) models.CardHolderInfo { 125 +func GetInfo(player *DataCardHolder, conf *configs.CardActivityConfig) models.CardHolderInfo {
172 info := models.CardHolderInfo{ 126 info := models.CardHolderInfo{
173 Cards: make(map[int]int), 127 Cards: make(map[int]int),
174 Album: make(map[int]int), 128 Album: make(map[int]int),
175 Round: 0, 129 Round: 0,
176 } 130 }
177 - for i, i2 := range gameData.Details.Cards { 131 + for i, i2 := range player.Details.Cards {
178 info.Cards[i] = i2 132 info.Cards[i] = i2
179 } 133 }
180 - for i, i2 := range gameData.Details.Album { 134 + for i, i2 := range player.Details.Album {
181 info.Album[i] = i2 135 info.Album[i] = i2
182 } 136 }
183 - info.StarCount = gameData.Details.StarCount  
184 - info.Round = gameData.Details.Round 137 + info.StarCount = player.Details.StarCount
  138 + info.Round = player.Details.Round
185 return info 139 return info
186 } 140 }
187 141
188 // DoOpen 封装的抽卡逻辑 142 // DoOpen 封装的抽卡逻辑
189 // openMode:开包类型0客户端驱动1星星商店购买2剩余星星兑换 143 // openMode:开包类型0客户端驱动1星星商店购买2剩余星星兑换
190 func DoOpen(gameId string, 144 func DoOpen(gameId string,
191 - gameData *DataCardHolder, 145 + player *DataCardHolder,
192 config *configs.CardActivityConfig, 146 config *configs.CardActivityConfig,
193 confCardholder configs.OpenCardholderConfig, 147 confCardholder configs.OpenCardholderConfig,
194 sequenceId, cohort string, 148 sequenceId, cohort string,
@@ -198,22 +152,22 @@ func DoOpen(gameId string, @@ -198,22 +152,22 @@ func DoOpen(gameId string,
198 152
199 if confCardholder.IsNew != 0 { 153 if confCardholder.IsNew != 0 {
200 // 如果是新卡包 按顺序查找数目最少的一张卡抽取 154 // 如果是新卡包 按顺序查找数目最少的一张卡抽取
201 - cardId := GetNewCard(gameData, config) 155 + cardId := GetNewCard(player, config)
202 // 增加卡牌 156 // 增加卡牌
203 - gameData.Details.Cards[cardId] += 1 157 + player.Details.Cards[cardId] += 1
204 newCards = append(newCards, cardId) 158 newCards = append(newCards, cardId)
205 } else { 159 } else {
206 getCardFunc := func(cardConfigId string) { 160 getCardFunc := func(cardConfigId string) {
207 confCardSequence, hasCardSequence := config.FindCardSequenceConfig(cardConfigId, sequenceId, cohort) 161 confCardSequence, hasCardSequence := config.FindCardSequenceConfig(cardConfigId, sequenceId, cohort)
208 if hasCardSequence { 162 if hasCardSequence {
209 combineId := configs.CombineIdSequenceIdCohort(cardConfigId, sequenceId, cohort) 163 combineId := configs.CombineIdSequenceIdCohort(cardConfigId, sequenceId, cohort)
210 - scale := gameData.Details.CardSequenceScales[combineId] 164 + scale := player.Details.CardSequenceScales[combineId]
211 cardId := GetOneFromArray(confCardSequence.CardIdLists, scale) 165 cardId := GetOneFromArray(confCardSequence.CardIdLists, scale)
212 cardIdInt := utstring.StringToInt(cardId) 166 cardIdInt := utstring.StringToInt(cardId)
213 // 增加刻度 167 // 增加刻度
214 - gameData.Details.CardSequenceScales[combineId] = scale + 1 168 + player.Details.CardSequenceScales[combineId] = scale + 1
215 // 增加卡牌 169 // 增加卡牌
216 - gameData.Details.Cards[cardIdInt] += 1 170 + player.Details.Cards[cardIdInt] += 1
217 newCards = append(newCards, cardIdInt) 171 newCards = append(newCards, cardIdInt)
218 } 172 }
219 } 173 }
@@ -228,10 +182,10 @@ func DoOpen(gameId string, @@ -228,10 +182,10 @@ func DoOpen(gameId string,
228 confNormalCardStar, hasNormalCardStar := config.FindNormalCardStarConfig(confCardholder.MinimumGuaranteeCardId, sequenceId, cohort) 182 confNormalCardStar, hasNormalCardStar := config.FindNormalCardStarConfig(confCardholder.MinimumGuaranteeCardId, sequenceId, cohort)
229 if hasNormalCardStar { 183 if hasNormalCardStar {
230 combineIdStar := configs.CombineIdSequenceIdCohort(confCardholder.MinimumGuaranteeCardId, sequenceId, cohort) 184 combineIdStar := configs.CombineIdSequenceIdCohort(confCardholder.MinimumGuaranteeCardId, sequenceId, cohort)
231 - scaleStar := gameData.Details.StarSequenceScales[combineIdStar] 185 + scaleStar := player.Details.StarSequenceScales[combineIdStar]
232 starIds := GetListFromArray(confNormalCardStar.NormalCardSequenceIds, scaleStar, count) 186 starIds := GetListFromArray(confNormalCardStar.NormalCardSequenceIds, scaleStar, count)
233 // 增加星级刻度 187 // 增加星级刻度
234 - gameData.Details.StarSequenceScales[combineIdStar] = scaleStar + count 188 + player.Details.StarSequenceScales[combineIdStar] = scaleStar + count
235 // 遍历星级刻度抽取n张卡牌 189 // 遍历星级刻度抽取n张卡牌
236 for _, id := range starIds { 190 for _, id := range starIds {
237 getCardFunc(id) 191 getCardFunc(id)
@@ -241,7 +195,7 @@ func DoOpen(gameId string, @@ -241,7 +195,7 @@ func DoOpen(gameId string,
241 } 195 }
242 // 记录开卡包日志 196 // 记录开卡包日志
243 { 197 {
244 - recordBase := NewRecordCardHolderBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round) 198 + recordBase := NewRecordCardHolderBase(player.Uid, sequenceId, cohort, config.Id, player.Details.Round)
245 _ = svmysql.Insert(NewRecordCardHolderOpen(recordBase, 199 _ = svmysql.Insert(NewRecordCardHolderOpen(recordBase,
246 openMode, utstring.StringToInt(confCardholder.Id), utjson.JsonString(newCards)), 200 openMode, utstring.StringToInt(confCardholder.Id), utjson.JsonString(newCards)),
247 gameId) 201 gameId)
@@ -252,7 +206,7 @@ func DoOpen(gameId string, @@ -252,7 +206,7 @@ func DoOpen(gameId string,
252 206
253 // DoOpenCheckAward 封装的新卡判断是否出发卡组和轮次奖励的逻辑 207 // DoOpenCheckAward 封装的新卡判断是否出发卡组和轮次奖励的逻辑
254 func DoOpenCheckAward(gameId string, 208 func DoOpenCheckAward(gameId string,
255 - gameData *DataCardHolder, 209 + player *DataCardHolder,
256 config *configs.CardActivityConfig, 210 config *configs.CardActivityConfig,
257 sequenceId, cohort string, 211 sequenceId, cohort string,
258 newCards []int, 212 newCards []int,
@@ -271,7 +225,7 @@ func DoOpenCheckAward(gameId string, @@ -271,7 +225,7 @@ func DoOpenCheckAward(gameId string,
271 } 225 }
272 albumId := confCard.SetId 226 albumId := confCard.SetId
273 // 是否已领过 227 // 是否已领过
274 - countGot := gameData.Details.Album[albumId] 228 + countGot := player.Details.Album[albumId]
275 if countGot > 0 { 229 if countGot > 0 {
276 continue 230 continue
277 } 231 }
@@ -281,34 +235,34 @@ func DoOpenCheckAward(gameId string, @@ -281,34 +235,34 @@ func DoOpenCheckAward(gameId string,
281 continue 235 continue
282 } 236 }
283 // 检查卡组内卡是否集齐 237 // 检查卡组内卡是否集齐
284 - if !CheckAlbumFinish(albumId, gameData, config) { 238 + if !CheckAlbumFinish(albumId, player, config) {
285 continue 239 continue
286 } 240 }
287 // 集齐处理发奖 241 // 集齐处理发奖
288 - gameData.Details.Album[albumId] += 1  
289 - award := confAlbum.Rewards[utstring.IntToString(gameData.Details.Round)] 242 + player.Details.Album[albumId] += 1
  243 + award := confAlbum.Rewards[utstring.IntToString(player.Details.Round)]
290 awardAlbum[albumId] = award 244 awardAlbum[albumId] = award
291 { 245 {
292 // 记录日志 246 // 记录日志
293 - recordBase := NewRecordCardHolderBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round) 247 + recordBase := NewRecordCardHolderBase(player.Uid, sequenceId, cohort, config.Id, player.Details.Round)
294 _ = svmysql.Insert(NewRecordCardHolderRewardAlbum(recordBase, 248 _ = svmysql.Insert(NewRecordCardHolderRewardAlbum(recordBase,
295 albumId, award), 249 albumId, award),
296 gameId) 250 gameId)
297 } 251 }
298 } 252 }
299 // 判断 处理 发放轮次奖励 轮次完成 253 // 判断 处理 发放轮次奖励 轮次完成
300 - if CheckRoundFinish(gameData, config) { 254 + if CheckRoundFinish(player, config) {
301 // 返回奖励 255 // 返回奖励
302 - awardRound = config.Awards[utstring.IntToString(gameData.Details.Round)] 256 + awardRound = config.Awards[utstring.IntToString(player.Details.Round)]
303 257
304 // 记录日志 258 // 记录日志
305 - recordBase := NewRecordCardHolderBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round) 259 + recordBase := NewRecordCardHolderBase(player.Uid, sequenceId, cohort, config.Id, player.Details.Round)
306 _ = svmysql.Insert(NewRecordCardHolderRewardRound(recordBase, 260 _ = svmysql.Insert(NewRecordCardHolderRewardRound(recordBase,
307 awardRound), 261 awardRound),
308 gameId) 262 gameId)
309 263
310 // 处理轮次完成 264 // 处理轮次完成
311 - HandleNextRound(gameData) 265 + HandleNextRound(player)
312 } 266 }
313 } 267 }
314 268
@@ -316,9 +270,9 @@ func DoOpenCheckAward(gameId string, @@ -316,9 +270,9 @@ func DoOpenCheckAward(gameId string,
316 } 270 }
317 271
318 // CalculateStarCount 计算星星点数 272 // CalculateStarCount 计算星星点数
319 -func CalculateStarCount(gameData *DataCardHolder, config *configs.CardActivityConfig) { 273 +func CalculateStarCount(player *DataCardHolder, config *configs.CardActivityConfig) {
320 starCount := 0 274 starCount := 0
321 - for cardId, cardCount := range gameData.Details.Cards { 275 + for cardId, cardCount := range player.Details.Cards {
322 if cardCount <= 1 { 276 if cardCount <= 1 {
323 continue 277 continue
324 } 278 }
@@ -334,11 +288,11 @@ func CalculateStarCount(gameData *DataCardHolder, config *configs.CardActivityCo @@ -334,11 +288,11 @@ func CalculateStarCount(gameData *DataCardHolder, config *configs.CardActivityCo
334 starCount += (cardCount - 1) * confCard.Star 288 starCount += (cardCount - 1) * confCard.Star
335 } 289 }
336 } 290 }
337 - gameData.Details.StarCount = starCount 291 + player.Details.StarCount = starCount
338 } 292 }
339 293
340 // GetStarCardList 按照规则扣除星星数找到需要扣除的卡牌列表 294 // GetStarCardList 按照规则扣除星星数找到需要扣除的卡牌列表
341 -func GetStarCardList(gameData *DataCardHolder, config *configs.CardActivityConfig, needStar int) (enough bool, cardList map[int]int) { 295 +func GetStarCardList(player *DataCardHolder, config *configs.CardActivityConfig, needStar int) (enough bool, cardList map[int]int) {
342 enough = false 296 enough = false
343 cardList = make(map[int]int) 297 cardList = make(map[int]int)
344 starAmount := 0 298 starAmount := 0
@@ -346,7 +300,7 @@ func GetStarCardList(gameData *DataCardHolder, config *configs.CardActivityConfi @@ -346,7 +300,7 @@ func GetStarCardList(gameData *DataCardHolder, config *configs.CardActivityConfi
346 // 等级依次从低到高 300 // 等级依次从低到高
347 // 先普卡 301 // 先普卡
348 for i := 1; i <= levelMax; i++ { 302 for i := 1; i <= levelMax; i++ {
349 - for cardId, cardCount := range gameData.Details.Cards { 303 + for cardId, cardCount := range player.Details.Cards {
350 if starAmount >= needStar { 304 if starAmount >= needStar {
351 enough = true 305 enough = true
352 return 306 return
@@ -373,7 +327,7 @@ func GetStarCardList(gameData *DataCardHolder, config *configs.CardActivityConfi @@ -373,7 +327,7 @@ func GetStarCardList(gameData *DataCardHolder, config *configs.CardActivityConfi
373 } 327 }
374 // 金卡 328 // 金卡
375 for i := 1; i <= levelMax; i++ { 329 for i := 1; i <= levelMax; i++ {
376 - for cardId, cardCount := range gameData.Details.Cards { 330 + for cardId, cardCount := range player.Details.Cards {
377 if starAmount >= needStar { 331 if starAmount >= needStar {
378 enough = true 332 enough = true
379 return 333 return
@@ -407,8 +361,8 @@ func GetStarCardList(gameData *DataCardHolder, config *configs.CardActivityConfi @@ -407,8 +361,8 @@ func GetStarCardList(gameData *DataCardHolder, config *configs.CardActivityConfi
407 } 361 }
408 362
409 // NextActivityAutoExchange 活动切换时自动兑换卡包 363 // NextActivityAutoExchange 活动切换时自动兑换卡包
410 -func NextActivityAutoExchange(gameId string, gameData *DataCardHolder, config *configs.CardActivityConfig) {  
411 - starCount := gameData.Details.LastStarCount 364 +func NextActivityAutoExchange(gameId string, player *DataCardHolder, config *configs.CardActivityConfig) {
  365 + starCount := player.Details.LastStarCount
412 // 把星星的配置按照需要的星星数降序排列 366 // 把星星的配置按照需要的星星数降序排列
413 list := lo.Values[int, configs.StarShopConfig](config.StarShopConfig) 367 list := lo.Values[int, configs.StarShopConfig](config.StarShopConfig)
414 sort.Slice(list, func(i, j int) bool { 368 sort.Slice(list, func(i, j int) bool {
@@ -418,19 +372,19 @@ func NextActivityAutoExchange(gameId string, gameData *DataCardHolder, config *c @@ -418,19 +372,19 @@ func NextActivityAutoExchange(gameId string, gameData *DataCardHolder, config *c
418 // 遍历 372 // 遍历
419 for _, config := range list { 373 for _, config := range list {
420 for starCount >= config.NeedStarNumber { 374 for starCount >= config.NeedStarNumber {
421 - gameData.Details.AutoExchangeHolder = append(gameData.Details.AutoExchangeHolder, config.Id) 375 + player.Details.AutoExchangeHolder = append(player.Details.AutoExchangeHolder, config.Id)
422 starCount -= config.NeedStarNumber 376 starCount -= config.NeedStarNumber
423 } 377 }
424 } 378 }
425 379
426 // 开始处理抽卡 380 // 开始处理抽卡
427 openMode := 2 381 openMode := 2
428 - sequenceId, cohort := GetUserSequenceIdAndCohort(gameData.Uid) 382 + sequenceId, cohort := GetUserSequenceIdAndCohort(player.Uid)
429 allNewCards := make([]int, 0) 383 allNewCards := make([]int, 0)
430 - for _, idCardholder := range gameData.Details.AutoExchangeHolder { 384 + for _, idCardholder := range player.Details.AutoExchangeHolder {
431 confCardholder, _ := config.CardholderConfig[strconv.Itoa(idCardholder)] 385 confCardholder, _ := config.CardholderConfig[strconv.Itoa(idCardholder)]
432 newCards := DoOpen(gameId, 386 newCards := DoOpen(gameId,
433 - gameData, config, 387 + player, config,
434 confCardholder, 388 confCardholder,
435 sequenceId, cohort, 389 sequenceId, cohort,
436 openMode) 390 openMode)
@@ -441,11 +395,11 @@ func NextActivityAutoExchange(gameId string, gameData *DataCardHolder, config *c @@ -441,11 +395,11 @@ func NextActivityAutoExchange(gameId string, gameData *DataCardHolder, config *c
441 } 395 }
442 } 396 }
443 _, _ = DoOpenCheckAward(gameId, 397 _, _ = DoOpenCheckAward(gameId,
444 - gameData, config, 398 + player, config,
445 sequenceId, cohort, 399 sequenceId, cohort,
446 allNewCards, 400 allNewCards,
447 openMode) 401 openMode)
448 402
449 // 计算星星点数 403 // 计算星星点数
450 - CalculateStarCount(gameData, config) 404 + CalculateStarCount(player, config)
451 } 405 }
service/cardholder/player.go 0 → 100644
@@ -0,0 +1,53 @@ @@ -0,0 +1,53 @@
  1 +package cardholder
  2 +
  3 +import (
  4 + "apigame/configs"
  5 + "apigame/service-common/svmysql"
  6 + "apigame/util/util-lx/lxtime"
  7 +)
  8 +
  9 +// SavePlayer 存储数据
  10 +func SavePlayer(gameId string, d *DataCardHolder) {
  11 + d.UpdateTime = lxtime.NowUninx()
  12 + d.Encode()
  13 +
  14 + _ = svmysql.Save(d, gameId)
  15 +}
  16 +
  17 +func _LoadPlayer(gameId string, uid int64) (d *DataCardHolder) {
  18 + d = NewDataCardHolder(uid)
  19 + has, err := svmysql.First(d, gameId)
  20 + if err != nil {
  21 + return
  22 + }
  23 + if has {
  24 + d.Decode()
  25 + } else {
  26 + d.Init(uid)
  27 + _ = svmysql.Insert(d, gameId)
  28 + }
  29 + return
  30 +}
  31 +
  32 +// LoadPlayer 获取数据 外部接口
  33 +func LoadPlayer(gameId string, uid int64, config *configs.CardActivityConfig) (d *DataCardHolder) {
  34 + configId := config.Id
  35 + d = _LoadPlayer(gameId, uid)
  36 + // 如果当前有上线活动(活动ID不为0),且活动ID和玩家数据不同,说明活动已切换 需更新
  37 + if configId != 0 &&
  38 + configId != d.ActivityId {
  39 +
  40 + // 剩余的星星数
  41 + starCount := d.Details.StarCount
  42 +
  43 + d.ActivityId = configId
  44 + d.Details = NewDataCardHolderDetails()
  45 +
  46 + // 使用剩余的星星数来自动兑换卡包
  47 + d.Details.LastStarCount = starCount
  48 + NextActivityAutoExchange(gameId, d, config)
  49 +
  50 + SavePlayer(gameId, d)
  51 + }
  52 + return
  53 +}
service/roomrank/dto-game.go
@@ -1,42 +0,0 @@ @@ -1,42 +0,0 @@
1 -package roomrank  
2 -  
3 -import (  
4 - "apigame/service-common/svconst"  
5 - "apigame/service-common/svmysql"  
6 - "apigame/util/util-lx/lxtime"  
7 -)  
8 -  
9 -// DataRoomRank 房间排行持久数据  
10 -type DataRoomRank struct {  
11 - Uid int64 `gorm:"column:uid;primaryKey;comment:玩家唯一ID"`  
12 - ActivityId int64 `gorm:"comment:活动ID"`  
13 -  
14 - UserType int `gorm:"comment:用户类型"` // 0=新手用户 1=优质用户 2=普通用户 3=垃圾用户  
15 - UserScore int `gorm:"comment:用户评级分"`  
16 - UserClass int `gorm:"comment:用户评级"`  
17 -  
18 - RoomUid int `gorm:"comment:所在房间唯一ID"`  
19 -  
20 - CreateTime int64 `gorm:"comment:创建时间戳"`  
21 - UpdateTime int64 `gorm:"comment:修改时间戳"`  
22 -}  
23 -  
24 -func (d *DataRoomRank) MysqlInfo(suffix string) *svmysql.MysqlInfo {  
25 - tableName := svconst.MYSQL_TABLE_S_ROOMRANK_DATA  
26 - return &svmysql.MysqlInfo{  
27 - DbMysql: svconst.DbCommon,  
28 - TableName: tableName + suffix,  
29 - }  
30 -}  
31 -  
32 -func NewDataRoomRank(uid int64) *DataRoomRank {  
33 - d := &DataRoomRank{  
34 - Uid: uid,  
35 - }  
36 - return d  
37 -}  
38 -  
39 -func (d *DataRoomRank) Init(uid int64) {  
40 - d.Uid = uid  
41 - d.CreateTime = lxtime.NowUninx()  
42 -}  
service/roomrank/dto-player.go 0 → 100644
@@ -0,0 +1,42 @@ @@ -0,0 +1,42 @@
  1 +package roomrank
  2 +
  3 +import (
  4 + "apigame/service-common/svconst"
  5 + "apigame/service-common/svmysql"
  6 + "apigame/util/util-lx/lxtime"
  7 +)
  8 +
  9 +// DataRoomRank 房间排行持久数据
  10 +type DataRoomRank struct {
  11 + Uid int64 `gorm:"column:uid;primaryKey;comment:玩家唯一ID"`
  12 + ActivityId int64 `gorm:"comment:活动ID"`
  13 +
  14 + UserType int `gorm:"comment:用户类型"` // 0=新手用户 1=优质用户 2=普通用户 3=垃圾用户
  15 + UserScore int `gorm:"comment:用户评级分"`
  16 + UserClass int `gorm:"comment:用户评级"`
  17 +
  18 + RoomUid int `gorm:"comment:所在房间唯一ID"`
  19 +
  20 + CreateTime int64 `gorm:"comment:创建时间戳"`
  21 + UpdateTime int64 `gorm:"comment:修改时间戳"`
  22 +}
  23 +
  24 +func (d *DataRoomRank) MysqlInfo(suffix string) *svmysql.MysqlInfo {
  25 + tableName := svconst.MYSQL_TABLE_S_ROOMRANK_DATA
  26 + return &svmysql.MysqlInfo{
  27 + DbMysql: svconst.DbCommon,
  28 + TableName: tableName + suffix,
  29 + }
  30 +}
  31 +
  32 +func NewDataRoomRank(uid int64) *DataRoomRank {
  33 + d := &DataRoomRank{
  34 + Uid: uid,
  35 + }
  36 + return d
  37 +}
  38 +
  39 +func (d *DataRoomRank) Init(uid int64) {
  40 + d.Uid = uid
  41 + d.CreateTime = lxtime.NowUninx()
  42 +}
service/roomrank/handle.go
@@ -41,9 +41,9 @@ func HandleInfo(req *models.ReqRoomRankInfo) (code string, rsp models.RspRoomRan @@ -41,9 +41,9 @@ func HandleInfo(req *models.ReqRoomRankInfo) (code string, rsp models.RspRoomRan
41 //} 41 //}
42 42
43 // 读取游戏数据 43 // 读取游戏数据
44 - gameData := LoadData(req.GameID, req.UID, config) 44 + player := LoadPlayer(req.GameID, req.UID, config)
45 45
46 - rsp.RoomRankInfo = GetInfo(gameData, config) 46 + rsp.RoomRankInfo = GetInfo(player, config)
47 47
48 return 48 return
49 } 49 }
service/roomrank/logic.go
1 package roomrank 1 package roomrank
2 -  
3 -import (  
4 - "apigame/configs"  
5 - "apigame/models"  
6 - "apigame/service-common/svmysql"  
7 - "apigame/util/util-lx/lxtime"  
8 -)  
9 -  
10 -// SaveData 存储数据  
11 -func SaveData(gameId string, d *DataRoomRank) {  
12 - d.UpdateTime = lxtime.NowUninx()  
13 -  
14 - _ = svmysql.Save(d, gameId)  
15 -}  
16 -  
17 -func _LoadData(gameId string, uid int64) (d *DataRoomRank) {  
18 - d = NewDataRoomRank(uid)  
19 - has, err := svmysql.First(d, gameId)  
20 - if err != nil {  
21 - return  
22 - }  
23 - if has {  
24 - } else {  
25 - d.Init(uid)  
26 - _ = svmysql.Insert(d, gameId)  
27 - }  
28 - return  
29 -}  
30 -  
31 -// LoadData 获取数据 外部接口  
32 -func LoadData(gameId string, uid int64, config *configs.RoomRankConfig) (d *DataRoomRank) {  
33 - configId := config.Id  
34 - d = _LoadData(gameId, uid)  
35 - // 如果当前有上线活动(活动ID不为0),且活动ID和玩家数据不同,说明活动已切换 需更新  
36 - if configId != 0 &&  
37 - configId != d.ActivityId {  
38 -  
39 - d.ActivityId = configId  
40 -  
41 - SaveData(gameId, d)  
42 - }  
43 - return  
44 -}  
45 -  
46 -// GetInfo 活动信息  
47 -func GetInfo(gameData *DataRoomRank, conf *configs.RoomRankConfig) models.RoomRankInfo {  
48 - info := models.RoomRankInfo{}  
49 - return info  
50 -}  
service/roomrank/player.go 0 → 100644
@@ -0,0 +1,50 @@ @@ -0,0 +1,50 @@
  1 +package roomrank
  2 +
  3 +import (
  4 + "apigame/configs"
  5 + "apigame/models"
  6 + "apigame/service-common/svmysql"
  7 + "apigame/util/util-lx/lxtime"
  8 +)
  9 +
  10 +// SavePlayer 存储数据
  11 +func SavePlayer(gameId string, d *DataRoomRank) {
  12 + d.UpdateTime = lxtime.NowUninx()
  13 +
  14 + _ = svmysql.Save(d, gameId)
  15 +}
  16 +
  17 +func _LoadPlayer(gameId string, uid int64) (d *DataRoomRank) {
  18 + d = NewDataRoomRank(uid)
  19 + has, err := svmysql.First(d, gameId)
  20 + if err != nil {
  21 + return
  22 + }
  23 + if has {
  24 + } else {
  25 + d.Init(uid)
  26 + _ = svmysql.Insert(d, gameId)
  27 + }
  28 + return
  29 +}
  30 +
  31 +// LoadPlayer 获取数据 外部接口
  32 +func LoadPlayer(gameId string, uid int64, config *configs.RoomRankConfig) (d *DataRoomRank) {
  33 + configId := config.Id
  34 + d = _LoadPlayer(gameId, uid)
  35 + // 如果当前有上线活动(活动ID不为0),且活动ID和玩家数据不同,说明活动已切换 需更新
  36 + if configId != 0 &&
  37 + configId != d.ActivityId {
  38 +
  39 + d.ActivityId = configId
  40 +
  41 + SavePlayer(gameId, d)
  42 + }
  43 + return
  44 +}
  45 +
  46 +// GetInfo 活动信息
  47 +func GetInfo(player *DataRoomRank, conf *configs.RoomRankConfig) models.RoomRankInfo {
  48 + info := models.RoomRankInfo{}
  49 + return info
  50 +}