package cardholder import ( "apigame/configs" "apigame/models" "apigame/service/code-msg" "apigame/util/util-lx/lxalilog" "apigame/util/util-lx/lxtime" "apigame/util/utslice" "strconv" ) // HandleGetConfig 活动配置 func HandleGetConfig(req *models.ReqCardHolderGetConfig) (code string, rsp models.RspCardHolderGetConfig) { rsp = models.RspCardHolderGetConfig{} code = code_msg.RECODE_OK // 尝试更新配置 config, _ := configs.GetCardActivityConfig(req.GameID) rsp.ActivityId = config.Id rsp.PrepareTime = config.PreviewTime rsp.StartTime = config.StartTime rsp.EndTime = config.EndTime rsp.OpenLevel = config.OpenLevel rsp.Config = config.Client return } // HandleInfo 卡包信息 func HandleInfo(req *models.ReqCardHolderInfo) (code string, rsp models.RspCardHolderInfo) { rsp = models.RspCardHolderInfo{} code = code_msg.RECODE_OK // 尝试更新配置 config, hasConfig := configs.GetCardActivityConfig(req.GameID) if !hasConfig { code = code_msg.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR return } // 判断预告时间 sec := lxtime.NowUninx() if sec < config.StartTime { code = code_msg.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR return } // 读取游戏数据 player := LoadPlayer(req.GameID, req.UID, config) rsp.CardHolderInfo = GetInfo(player, 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 = code_msg.RECODE_OK // 尝试更新配置 config, hasConfig := configs.GetCardActivityConfig(req.GameID) if !hasConfig { code = code_msg.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR return } // 检查活动状态 code = CheckStatus(config) if code != code_msg.RECODE_OK { return } // 检查卡包ID for _, idCardholder := range req.Ids { _, okCardholder := config.CardholderConfig[strconv.Itoa(idCardholder)] if !okCardholder { code = code_msg.RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR return } } // 读取游戏数据 player := LoadPlayer(req.GameID, req.UID, config) // 检查游戏数据 轮次等 code = CheckGameData(player, config) if code != code_msg.RECODE_OK { return } // 开始处理抽卡 openMode := 0 sequenceId, cohort := GetUserSequenceIdAndCohort(player.Uid) allNewCards := make([]int, 0) for _, idCardholder := range req.Ids { confCardholder, _ := config.CardholderConfig[strconv.Itoa(idCardholder)] newCards := DoOpen(req.GameID, player, config, confCardholder, sequenceId, cohort, openMode) // 打乱顺序 utslice.Shuffle(newCards) for _, i3 := range newCards { allNewCards = append(allNewCards, i3) } rsp.NewCards = append(rsp.NewCards, newCards) } awardAlbum, awardRound := DoOpenCheckAward(req.GameID, player, config, sequenceId, cohort, allNewCards, openMode) rsp.AwardAlbum = awardAlbum rsp.AwardRound = awardRound // 计算星星点数 CalculateStarCount(player, config) // 存档 SavePlayer(req.GameID, player) // 返回信息 rsp.CardHolderInfo = GetInfo(player, config) return } // HandleShopExchange 星星商店兑换 func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp models.RspStarShopExchange) { rsp = models.RspStarShopExchange{ NewCards: make([]int, 0), AwardAlbum: make(map[int]string), } code = code_msg.RECODE_OK // 尝试更新配置 config, hasConfig := configs.GetCardActivityConfig(req.GameID) if !hasConfig { code = code_msg.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR return } // 检查活动状态 code = CheckStatus(config) if code != code_msg.RECODE_OK { return } // 检查星星商店ID confStarShop, okStarShopConfig := config.StarShopConfig[req.Id] if !okStarShopConfig { code = code_msg.RECODE_MERGE_CARDHOLDER_STARSHOPID_ERROR return } // 读取游戏数据 player := LoadPlayer(req.GameID, req.UID, config) // 检查游戏数据 轮次等 code = CheckGameData(player, config) if code != code_msg.RECODE_OK { return } // 判断星星数是否足够 if player.Details.StarCount < confStarShop.NeedStarNumber { code = code_msg.RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR return } // 判断配置 if len(confStarShop.CardBagIds) < 3 { lxalilog.Errors("StarShopConfig.CardBagIds error", confStarShop.Id) code = code_msg.RECODE_MERGE_CONFIG_ERROR return } cardholderId := confStarShop.CardBagIds[1] cardholderCount := confStarShop.CardBagIds[2] if cardholderCount < 1 { lxalilog.Errors("StarShopConfig.CardBagIds error", confStarShop.Id) code = code_msg.RECODE_MERGE_CONFIG_ERROR return } confCardholder, okCardholder := config.CardholderConfig[strconv.Itoa(cardholderId)] if !okCardholder { code = code_msg.RECODE_MERGE_CONFIG_ERROR return } // 按照规则扣除星星 enough, cardList := GetStarCardList(player, config, confStarShop.NeedStarNumber) if !enough { code = code_msg.RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR return } for i, i2 := range cardList { player.Details.Cards[i] -= i2 } // 开始处理抽卡 openMode := 1 sequenceId, cohort := GetUserSequenceIdAndCohort(player.Uid) for i := 0; i < cardholderCount; i++ { newCards := DoOpen(req.GameID, player, config, confCardholder, sequenceId, cohort, openMode) for _, i3 := range newCards { rsp.NewCards = append(rsp.NewCards, i3) } } awardAlbum, awardRound := DoOpenCheckAward(req.GameID, player, config, sequenceId, cohort, rsp.NewCards, openMode) rsp.AwardAlbum = awardAlbum rsp.AwardRound = awardRound // 计算星星点数 CalculateStarCount(player, config) // 存档 SavePlayer(req.GameID, player) utslice.Shuffle(rsp.NewCards) // 返回信息 rsp.CardHolderInfo = GetInfo(player, config) return } // HandleAutoExchangeInfo 上期剩余星星自动兑换信息 func HandleAutoExchangeInfo(req *models.ReqAutoExchangeInfo) (code string, rsp models.RspAutoExchangeInfo) { rsp = models.RspAutoExchangeInfo{ NewCards: make([]int, 0), AwardAlbum: make(map[int]string), AutoExchangeHolder: make([]int, 0), } code = code_msg.RECODE_OK // 尝试更新配置 config, hasConfig := configs.GetCardActivityConfig(req.GameID) if !hasConfig { code = code_msg.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR return } // 检查活动状态 code = CheckStatus(config) if code != code_msg.RECODE_OK { return } // 读取游戏数据 player := LoadPlayer(req.GameID, req.UID, config) // 检查游戏数据 轮次等 code = CheckGameData(player, config) if code != code_msg.RECODE_OK { return } if player.Details.LastStarCount <= 0 { code = code_msg.RECODE_MERGE_CARDHOLDER_NOAUTOEXCHANGEINFO_ERROR return } rsp.LastStarCount = player.Details.LastStarCount for _, i2 := range player.Details.AutoExchangeHolder { rsp.AutoExchangeHolder = append(rsp.AutoExchangeHolder, i2) } // 把当前的卡包内数据放在新卡数据里给客户端 for i1, i2 := range player.Details.Cards { for i := 0; i < i2; i++ { rsp.NewCards = append(rsp.NewCards, i1) } } player.Details.LastStarCount = 0 player.Details.AutoExchangeHolder = make([]int, 0) // 存档 SavePlayer(req.GameID, player) utslice.Shuffle(rsp.NewCards) // 返回信息 rsp.CardHolderInfo = GetInfo(player, config) return }