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 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 55 return
56 56 }
... ... @@ -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 91 if code != code_msg.RECODE_OK {
92 92 return
93 93 }
94 94  
95 95 // 开始处理抽卡
96 96 openMode := 0
97   - sequenceId, cohort := GetUserSequenceIdAndCohort(gameData.Uid)
  97 + sequenceId, cohort := GetUserSequenceIdAndCohort(player.Uid)
98 98 allNewCards := make([]int, 0)
99 99 for _, idCardholder := range req.Ids {
100 100 confCardholder, _ := config.CardholderConfig[strconv.Itoa(idCardholder)]
101 101 newCards := DoOpen(req.GameID,
102   - gameData, config,
  102 + player, config,
103 103 confCardholder,
104 104 sequenceId, cohort,
105 105 openMode)
... ... @@ -111,7 +111,7 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH
111 111 rsp.NewCards = append(rsp.NewCards, newCards)
112 112 }
113 113 awardAlbum, awardRound := DoOpenCheckAward(req.GameID,
114   - gameData, config,
  114 + player, config,
115 115 sequenceId, cohort,
116 116 allNewCards,
117 117 openMode)
... ... @@ -119,13 +119,13 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH
119 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 130 return
131 131 }
... ... @@ -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 164 if code != code_msg.RECODE_OK {
165 165 return
166 166 }
167 167  
168 168 // 判断星星数是否足够
169   - if gameData.Details.StarCount < confStarShop.NeedStarNumber {
  169 + if player.Details.StarCount < confStarShop.NeedStarNumber {
170 170 code = code_msg.RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR
171 171 return
172 172 }
... ... @@ -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 195 if !enough {
196 196 code = code_msg.RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR
197 197 return
198 198 }
199 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 204 openMode := 1
205   - sequenceId, cohort := GetUserSequenceIdAndCohort(gameData.Uid)
  205 + sequenceId, cohort := GetUserSequenceIdAndCohort(player.Uid)
206 206 for i := 0; i < cardholderCount; i++ {
207 207 newCards := DoOpen(req.GameID,
208   - gameData, config,
  208 + player, config,
209 209 confCardholder,
210 210 sequenceId, cohort,
211 211 openMode)
... ... @@ -214,7 +214,7 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model
214 214 }
215 215 }
216 216 awardAlbum, awardRound := DoOpenCheckAward(req.GameID,
217   - gameData, config,
  217 + player, config,
218 218 sequenceId, cohort,
219 219 rsp.NewCards,
220 220 openMode)
... ... @@ -222,15 +222,15 @@ func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp model
222 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 230 utslice.Shuffle(rsp.NewCards)
231 231  
232 232 // 返回信息
233   - rsp.CardHolderInfo = GetInfo(gameData, config)
  233 + rsp.CardHolderInfo = GetInfo(player, config)
234 234  
235 235 return
236 236 }
... ... @@ -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 264 if code != code_msg.RECODE_OK {
265 265 return
266 266 }
267 267  
268   - if gameData.Details.LastStarCount <= 0 {
  268 + if player.Details.LastStarCount <= 0 {
269 269 code = code_msg.RECODE_MERGE_CARDHOLDER_NOAUTOEXCHANGEINFO_ERROR
270 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 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 279 for i := 0; i < i2; i++ {
280 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 289 utslice.Shuffle(rsp.NewCards)
290 290  
291 291 // 返回信息
292   - rsp.CardHolderInfo = GetInfo(gameData, config)
  292 + rsp.CardHolderInfo = GetInfo(player, config)
293 293  
294 294 return
295 295 }
... ...
service/cardholder/logic.go
... ... @@ -15,52 +15,6 @@ import (
15 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 18 // CheckStatus 判断活动是否开启
65 19 func CheckStatus(conf *configs.CardActivityConfig) string {
66 20 sec := lxtime.NowUninx()
... ... @@ -120,14 +74,14 @@ func GetListFromArray(array []string, scale, count int) []string {
120 74 }
121 75  
122 76 // GetNewCard 按顺序查找数目最少的一张卡抽取
123   -func GetNewCard(gameData *DataCardHolder, conf *configs.CardActivityConfig) int {
  77 +func GetNewCard(player *DataCardHolder, conf *configs.CardActivityConfig) int {
124 78 if len(conf.CardConfig) < 1 {
125 79 return 0
126 80 }
127 81 rate := int64(100000000)
128 82 list := make([]int64, 0)
129 83 for id, _ := range conf.CardConfig {
130   - count, _ := gameData.Details.Cards[id]
  84 + count, _ := player.Details.Cards[id]
131 85 index := int64(count)*rate + int64(id)
132 86 list = append(list, index)
133 87 }
... ... @@ -137,10 +91,10 @@ func GetNewCard(gameData *DataCardHolder, conf *configs.CardActivityConfig) int
137 91 }
138 92  
139 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 95 for _, conf := range config.CardConfig {
142 96 if conf.SetId == albumId {
143   - count := gameData.Details.Cards[conf.Id]
  97 + count := player.Details.Cards[conf.Id]
144 98 if count < 1 {
145 99 return false
146 100 }
... ... @@ -150,9 +104,9 @@ func CheckAlbumFinish(albumId int, gameData *DataCardHolder, config *configs.Car
150 104 }
151 105  
152 106 // CheckRoundFinish 判断轮次是否已集齐(所有卡组集齐)
153   -func CheckRoundFinish(gameData *DataCardHolder, config *configs.CardActivityConfig) bool {
  107 +func CheckRoundFinish(player *DataCardHolder, config *configs.CardActivityConfig) bool {
154 108 for _, conf := range config.AlbumConfig {
155   - count := gameData.Details.Album[conf.SetId]
  109 + count := player.Details.Album[conf.SetId]
156 110 if count < 1 {
157 111 return false
158 112 }
... ... @@ -161,34 +115,34 @@ func CheckRoundFinish(gameData *DataCardHolder, config *configs.CardActivityConf
161 115 }
162 116  
163 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 124 // GetInfo 玩家卡牌活动信息
171   -func GetInfo(gameData *DataCardHolder, conf *configs.CardActivityConfig) models.CardHolderInfo {
  125 +func GetInfo(player *DataCardHolder, conf *configs.CardActivityConfig) models.CardHolderInfo {
172 126 info := models.CardHolderInfo{
173 127 Cards: make(map[int]int),
174 128 Album: make(map[int]int),
175 129 Round: 0,
176 130 }
177   - for i, i2 := range gameData.Details.Cards {
  131 + for i, i2 := range player.Details.Cards {
178 132 info.Cards[i] = i2
179 133 }
180   - for i, i2 := range gameData.Details.Album {
  134 + for i, i2 := range player.Details.Album {
181 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 139 return info
186 140 }
187 141  
188 142 // DoOpen 封装的抽卡逻辑
189 143 // openMode:开包类型0客户端驱动1星星商店购买2剩余星星兑换
190 144 func DoOpen(gameId string,
191   - gameData *DataCardHolder,
  145 + player *DataCardHolder,
192 146 config *configs.CardActivityConfig,
193 147 confCardholder configs.OpenCardholderConfig,
194 148 sequenceId, cohort string,
... ... @@ -198,22 +152,22 @@ func DoOpen(gameId string,
198 152  
199 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 158 newCards = append(newCards, cardId)
205 159 } else {
206 160 getCardFunc := func(cardConfigId string) {
207 161 confCardSequence, hasCardSequence := config.FindCardSequenceConfig(cardConfigId, sequenceId, cohort)
208 162 if hasCardSequence {
209 163 combineId := configs.CombineIdSequenceIdCohort(cardConfigId, sequenceId, cohort)
210   - scale := gameData.Details.CardSequenceScales[combineId]
  164 + scale := player.Details.CardSequenceScales[combineId]
211 165 cardId := GetOneFromArray(confCardSequence.CardIdLists, scale)
212 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 171 newCards = append(newCards, cardIdInt)
218 172 }
219 173 }
... ... @@ -228,10 +182,10 @@ func DoOpen(gameId string,
228 182 confNormalCardStar, hasNormalCardStar := config.FindNormalCardStarConfig(confCardholder.MinimumGuaranteeCardId, sequenceId, cohort)
229 183 if hasNormalCardStar {
230 184 combineIdStar := configs.CombineIdSequenceIdCohort(confCardholder.MinimumGuaranteeCardId, sequenceId, cohort)
231   - scaleStar := gameData.Details.StarSequenceScales[combineIdStar]
  185 + scaleStar := player.Details.StarSequenceScales[combineIdStar]
232 186 starIds := GetListFromArray(confNormalCardStar.NormalCardSequenceIds, scaleStar, count)
233 187 // 增加星级刻度
234   - gameData.Details.StarSequenceScales[combineIdStar] = scaleStar + count
  188 + player.Details.StarSequenceScales[combineIdStar] = scaleStar + count
235 189 // 遍历星级刻度抽取n张卡牌
236 190 for _, id := range starIds {
237 191 getCardFunc(id)
... ... @@ -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 199 _ = svmysql.Insert(NewRecordCardHolderOpen(recordBase,
246 200 openMode, utstring.StringToInt(confCardholder.Id), utjson.JsonString(newCards)),
247 201 gameId)
... ... @@ -252,7 +206,7 @@ func DoOpen(gameId string,
252 206  
253 207 // DoOpenCheckAward 封装的新卡判断是否出发卡组和轮次奖励的逻辑
254 208 func DoOpenCheckAward(gameId string,
255   - gameData *DataCardHolder,
  209 + player *DataCardHolder,
256 210 config *configs.CardActivityConfig,
257 211 sequenceId, cohort string,
258 212 newCards []int,
... ... @@ -271,7 +225,7 @@ func DoOpenCheckAward(gameId string,
271 225 }
272 226 albumId := confCard.SetId
273 227 // 是否已领过
274   - countGot := gameData.Details.Album[albumId]
  228 + countGot := player.Details.Album[albumId]
275 229 if countGot > 0 {
276 230 continue
277 231 }
... ... @@ -281,34 +235,34 @@ func DoOpenCheckAward(gameId string,
281 235 continue
282 236 }
283 237 // 检查卡组内卡是否集齐
284   - if !CheckAlbumFinish(albumId, gameData, config) {
  238 + if !CheckAlbumFinish(albumId, player, config) {
285 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 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 248 _ = svmysql.Insert(NewRecordCardHolderRewardAlbum(recordBase,
295 249 albumId, award),
296 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 260 _ = svmysql.Insert(NewRecordCardHolderRewardRound(recordBase,
307 261 awardRound),
308 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 270 }
317 271  
318 272 // CalculateStarCount 计算星星点数
319   -func CalculateStarCount(gameData *DataCardHolder, config *configs.CardActivityConfig) {
  273 +func CalculateStarCount(player *DataCardHolder, config *configs.CardActivityConfig) {
320 274 starCount := 0
321   - for cardId, cardCount := range gameData.Details.Cards {
  275 + for cardId, cardCount := range player.Details.Cards {
322 276 if cardCount <= 1 {
323 277 continue
324 278 }
... ... @@ -334,11 +288,11 @@ func CalculateStarCount(gameData *DataCardHolder, config *configs.CardActivityCo
334 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 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 296 enough = false
343 297 cardList = make(map[int]int)
344 298 starAmount := 0
... ... @@ -346,7 +300,7 @@ func GetStarCardList(gameData *DataCardHolder, config *configs.CardActivityConfi
346 300 // 等级依次从低到高
347 301 // 先普卡
348 302 for i := 1; i <= levelMax; i++ {
349   - for cardId, cardCount := range gameData.Details.Cards {
  303 + for cardId, cardCount := range player.Details.Cards {
350 304 if starAmount >= needStar {
351 305 enough = true
352 306 return
... ... @@ -373,7 +327,7 @@ func GetStarCardList(gameData *DataCardHolder, config *configs.CardActivityConfi
373 327 }
374 328 // 金卡
375 329 for i := 1; i <= levelMax; i++ {
376   - for cardId, cardCount := range gameData.Details.Cards {
  330 + for cardId, cardCount := range player.Details.Cards {
377 331 if starAmount >= needStar {
378 332 enough = true
379 333 return
... ... @@ -407,8 +361,8 @@ func GetStarCardList(gameData *DataCardHolder, config *configs.CardActivityConfi
407 361 }
408 362  
409 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 367 list := lo.Values[int, configs.StarShopConfig](config.StarShopConfig)
414 368 sort.Slice(list, func(i, j int) bool {
... ... @@ -418,19 +372,19 @@ func NextActivityAutoExchange(gameId string, gameData *DataCardHolder, config *c
418 372 // 遍历
419 373 for _, config := range list {
420 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 376 starCount -= config.NeedStarNumber
423 377 }
424 378 }
425 379  
426 380 // 开始处理抽卡
427 381 openMode := 2
428   - sequenceId, cohort := GetUserSequenceIdAndCohort(gameData.Uid)
  382 + sequenceId, cohort := GetUserSequenceIdAndCohort(player.Uid)
429 383 allNewCards := make([]int, 0)
430   - for _, idCardholder := range gameData.Details.AutoExchangeHolder {
  384 + for _, idCardholder := range player.Details.AutoExchangeHolder {
431 385 confCardholder, _ := config.CardholderConfig[strconv.Itoa(idCardholder)]
432 386 newCards := DoOpen(gameId,
433   - gameData, config,
  387 + player, config,
434 388 confCardholder,
435 389 sequenceId, cohort,
436 390 openMode)
... ... @@ -441,11 +395,11 @@ func NextActivityAutoExchange(gameId string, gameData *DataCardHolder, config *c
441 395 }
442 396 }
443 397 _, _ = DoOpenCheckAward(gameId,
444   - gameData, config,
  398 + player, config,
445 399 sequenceId, cohort,
446 400 allNewCards,
447 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 @@
  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   -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 @@
  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 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 48 return
49 49 }
... ...
service/roomrank/logic.go
1 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 @@
  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 +}
... ...