package cardholder import ( "apigame/dto" "apigame/models" "apigame/service/constd" "apigame/util/util-lx/lxalilog" "apigame/util/util-lx/lxtime" "apigame/util/uttype" "strconv" ) // HandleGetConfig 活动配置 func HandleGetConfig(req *models.ReqCardHolderGetConfig) (code string, rsp models.RspCardHolderGetConfig) { rsp = models.RspCardHolderGetConfig{} code = constd.RECODE_OK // 尝试更新配置 config, _ := TryUpdateConfig(req.GameID) rsp.ActivityId = config.Id rsp.PrepareTime = config.Raw.PreviewTime rsp.StartTime = config.Raw.StartTime rsp.EndTime = config.Raw.EndTime rsp.OpenLevel = config.Raw.OpenLevel rsp.Config = config.Client return } // HandleInfo 卡包信息 func HandleInfo(req *models.ReqCardHolderInfo) (code string, rsp models.RspCardHolderInfo) { rsp = models.RspCardHolderInfo{} code = constd.RECODE_OK // 尝试更新配置 config, hasConfig := TryUpdateConfig(req.GameID) if !hasConfig { code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR return } // 判断预告时间 sec := lxtime.NowUninx() if sec < config.Raw.StartTime { code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR return } // 读取游戏数据 gameData := LoadData(req.GameID, req.UID, config.Id) rsp.CardHolderInfo = GetInfo(gameData, config) return } // HandleOpen 打开卡包 func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardHolderOpen) { rsp = models.RspCardHolderOpen{ NewCards: make([]int, 0), AwardAlbum: make(map[int]string), } code = constd.RECODE_OK // 尝试更新配置 config, hasConfig := TryUpdateConfig(req.GameID) if !hasConfig { code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR return } // 检查活动状态 code = CheckStatus(config) if code != constd.RECODE_OK { return } // 检查卡包ID confCardholder, okCardholderConfig := config.CardholderConfig[strconv.Itoa(req.Id)] if !okCardholderConfig { code = constd.RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR return } // 读取游戏数据 gameData := LoadData(req.GameID, req.UID, config.Id) // 检查游戏数据 轮次等 code = CheckGameData(gameData, config) if code != constd.RECODE_OK { return } // 开始处理抽卡 sequenceId, cohort := GetUserSequenceIdAndCohort(req.UID) DoOpen(req, &rsp, gameData, config, confCardholder, sequenceId, cohort, true) // 根据新获得卡牌列表 判断 触发的卡组奖励列表 for _, cardId := range rsp.NewCards { confCard, hasConfCard := config.CardConfig[cardId] if !hasConfCard { lxalilog.Errors("CardConfig cant find cardId", cardId) continue } albumId := confCard.SetId // 是否已领过 countGot := gameData.Details.Album[albumId] if countGot > 0 { continue } confAlbum, hasConfAlbum := config.AlbumConfig[albumId] if !hasConfAlbum { lxalilog.Errors("AlbumConfig cant find albumId", albumId) continue } // 检查卡组内卡是否集齐 if !CheckAlbumFinish(albumId, gameData, config) { continue } // 集齐处理发奖 gameData.Details.Album[albumId] += 1 award := confAlbum.Rewards[uttype.IntToString(gameData.Details.Round)] rsp.AwardAlbum[albumId] = award { // 记录日志 recordBase := dto.NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round) dto.SaveRecord(req.GameID, dto.NewCardHolderRecordRewardAlbum(recordBase, albumId, award)) } } // 判断 处理 发放轮次奖励 轮次完成 if CheckRoundFinish(gameData, config) { // 返回奖励 rsp.AwardRound = config.Awards[uttype.IntToString(gameData.Details.Round)] // 记录日志 recordBase := dto.NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round) dto.SaveRecord(req.GameID, dto.NewCardHolderRecordRewardRound(recordBase, rsp.AwardRound)) // 处理轮次完成 HandleNextRound(gameData) } // 存档 SaveData(req.GameID, gameData) uttype.Shuffle(rsp.NewCards) // 返回信息 rsp.CardHolderInfo = GetInfo(gameData, config) return }