handle.go 7.12 KB
package ht_cardholder

import (
	"apigame/models"
	"apigame/service/constd"
	"apigame/util/uttype"
	"strconv"
)

// HandleInfo 卡包信息
func HandleInfo(req *models.ReqHtCardHolderInfo) (code string, rsp models.RspHtCardHolderInfo) {
	rsp = models.RspHtCardHolderInfo{}
	code = constd.RECODE_OK

	// 尝试更新配置
	TryUpdateConfigs()

	// 读取游戏数据
	gameData := LoadData(req.UID)

	rsp.HtCardHolderInfo = gameData.GetInfo()

	return
}

// HandleGetNew 获取卡包
func HandleGetNew(req *models.ReqHtCardHolderGetNew) (code string, rsp models.RspHtCardHolderGetNew) {
	rsp = models.RspHtCardHolderGetNew{}
	code = constd.RECODE_OK

	// 尝试更新配置
	TryUpdateConfigs()

	// 检查活动状态
	code = CheckStatus()
	if code != constd.RECODE_OK {
		return
	}
	// 检查卡包ID
	_, okCardholderConfig := Config.CardholderConfig[strconv.Itoa(req.Id)]
	if !okCardholderConfig {
		code = constd.RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR
		return
	}
	// 检查卡包数量
	if req.Count < 1 {
		code = constd.RECODE_MERGE_CARDHOLDER_COUNTILLEGAL_ERROR
		return
	}

	// 读取游戏数据
	gameData := LoadData(req.UID)

	gameData.Details.Cardholder[req.Id] += req.Count
	SaveData(gameData)

	// 返回信息
	rsp.HtCardHolderInfo = gameData.GetInfo()

	return
}

// HandleOpen 打开卡包
func HandleOpen(req *models.ReqHtCardHolderOpen) (code string, rsp models.RspHtCardHolderOpen) {
	rsp = models.RspHtCardHolderOpen{}
	code = constd.RECODE_OK

	// 尝试更新配置
	TryUpdateConfigs()

	// 检查活动状态
	code = CheckStatus()
	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.UID)

	// 判断卡包数目
	countOld, _ := gameData.Details.Cardholder[req.Id]
	if countOld < 1 {
		code = constd.RECODE_MERGE_CARDHOLDER_CARDHOLDER_NOTENOUGH_ERROR
		return
	}

	// 开始处理抽卡
	sequenceId, cohort := GetUserSequenceIdAndCohort(req.UID)
	//logs.Debug("wjwdbg🐸 用户序列组IDsequenceId", sequenceId)
	//logs.Debug("wjwdbg🐸 用户分组IDcohort:", cohort)
	if confCardholder.IsNew != 0 {
		// 如果是新卡包 按顺序查找数目最少的一张卡抽取
		cardId := GetNewCard(gameData)
		//logs.Debug("wjwdbg🐸 抽取新卡ID:", cardId)
		// 增加卡牌
		gameData.Details.Cards[cardId] += 1
		rsp.NewCards = append(rsp.NewCards, cardId)
	} else {
		getCardFunc := func(cardConfigId string) {
			confCardSequence, hasCardSequence := FindCardSequenceConfig(cardConfigId, sequenceId, cohort)
			if hasCardSequence {
				combineId := CombineIdSequenceIdCohort(cardConfigId, sequenceId, cohort)
				scale := gameData.Details.CardSequenceScales[combineId]
				cardId := GetOneFromArray(confCardSequence.CardIdLists, scale)
				cardIdInt := uttype.StringToInt(cardId)
				// 增加刻度
				gameData.Details.CardSequenceScales[combineId] = scale + 1
				// 增加卡牌
				gameData.Details.Cards[cardIdInt] += 1
				//logs.Debug("wjwdbg😊 抽取卡牌ID:", cardIdInt)
				rsp.NewCards = append(rsp.NewCards, cardIdInt)
			}
		}
		// 正常抽卡
		// 先抽保底卡
		if confCardholder.GuaranteedStarCardId != "0" {
			getCardFunc(confCardholder.GuaranteedStarCardId)
			//logs.Debug("wjwdbg🐸 保底卡牌配置ID:", confCardholder.GuaranteedStarCardId)
		}
		// 非保底卡
		if confCardholder.NormalCardNumber > 0 {
			count := confCardholder.NormalCardNumber
			confNormalCardStar, hasNormalCardStar := FindNormalCardStarConfig(confCardholder.MinimumGuaranteeCardId, sequenceId, cohort)
			if hasNormalCardStar {
				combineIdStar := CombineIdSequenceIdCohort(confCardholder.MinimumGuaranteeCardId, sequenceId, cohort)
				scaleStar := gameData.Details.StarSequenceScales[combineIdStar]
				starIds := GetListFromArray(confNormalCardStar.NormalCardSequenceIds, scaleStar, count)
				// 增加星级刻度
				gameData.Details.StarSequenceScales[combineIdStar] = scaleStar + count
				//logs.Debug("wjwdbg🐸 非保底卡星级ID:", confCardholder.MinimumGuaranteeCardId)
				//logs.Debug("wjwdbg🐸 非保底卡星级抽取序列:", starIds)
				// 遍历星级刻度抽取n张卡牌
				for _, id := range starIds {
					getCardFunc(id)
				}
			}
		}
	}

	// 删除一个卡包
	gameData.Details.Cardholder[req.Id] = countOld - 1

	// 存档
	SaveData(gameData)

	//logs.Debug("wjwdbg🐸 获取卡牌列表:", rsp.NewCards)
	uttype.Shuffle(rsp.NewCards)
	//logs.Debug("wjwdbg🐸 获取卡牌列表打乱:", rsp.NewCards)

	// 返回信息
	rsp.HtCardHolderInfo = gameData.GetInfo()

	return
}

// HandleGetRewardAlbum 领取卡组奖励
func HandleGetRewardAlbum(req *models.ReqHtCardHolderGetRewardAlbum) (code string, rsp models.RspHtCardHolderGetRewardAlbum) {
	rsp = models.RspHtCardHolderGetRewardAlbum{}
	code = constd.RECODE_OK

	// 尝试更新配置
	TryUpdateConfigs()

	// 检查活动状态
	code = CheckStatus()
	if code != constd.RECODE_OK {
		return
	}
	// 检查卡组ID
	albumId := strconv.Itoa(req.Id)
	confAlbum, okAlbum := Config.AlbumConfig[albumId]
	if !okAlbum {
		code = constd.RECODE_MERGE_CARDHOLDER_ALBUMID_ERROR
		return
	}

	// 读取游戏数据
	gameData := LoadData(req.UID)

	// 是否已领过
	countGot := gameData.Details.Album[albumId]
	if countGot > 0 {
		code = constd.RECODE_MERGE_CARDHOLDER_ALBUM_HASGOT_ERROR
		return
	}
	// 检查卡组内卡是否集齐
	for _, config := range Config.CardConfig {
		if config.SetId == albumId {
			count := gameData.Details.Cards[config.Id]
			if count < 1 {
				code = constd.RECODE_MERGE_CARDHOLDER_ALBUM_NOTFINISH_ERROR
				return
			}
		}
	}

	gameData.Details.Album[albumId] += 1
	SaveData(gameData)

	// 当前轮次
	round := gameData.Details.Round
	// 返回奖励
	rsp.Award = confAlbum.Rewards[uttype.IntToString(round)]

	// 返回信息
	rsp.HtCardHolderInfo = gameData.GetInfo()

	return
}

// HandleGetRewardRound 领取轮次奖励
func HandleGetRewardRound(req *models.ReqHtCardHolderGetRewardRound) (code string, rsp models.RspHtCardHolderGetRewardRound) {
	rsp = models.RspHtCardHolderGetRewardRound{}
	code = constd.RECODE_OK

	//// 尝试更新配置
	//TryUpdateConfigs()
	//
	//// 检查活动状态
	//code = CheckStatus()
	//if code != constd.RECODE_OK {
	//	return
	//}
	//// 检查卡组ID
	//albumId := strconv.Itoa(req.Id)
	//confAlbum, okAlbum := Config.AlbumConfig[albumId]
	//if !okAlbum {
	//	code = constd.RECODE_MERGE_CARDHOLDER_ALBUMID_ERROR
	//	return
	//}
	//
	//// 读取游戏数据
	//gameData := LoadData(req.UID)
	//
	//// 是否已领过
	//countGot := gameData.Details.Album[albumId]
	//if countGot > 0 {
	//	code = constd.RECODE_MERGE_CARDHOLDER_ALBUM_HASGOT_ERROR
	//	return
	//}
	//// 检查卡组内卡是否集齐
	//for _, config := range Config.CardConfig {
	//	if config.SetId == albumId {
	//		count := gameData.Details.Cards[config.Id]
	//		if count < 1 {
	//			code = constd.RECODE_MERGE_CARDHOLDER_ALBUM_NOTFINISH_ERROR
	//			return
	//		}
	//	}
	//}
	//
	//gameData.Details.Album[albumId] += 1
	//SaveData(gameData)
	//
	//// 返回奖励
	//rsp.Award = confAlbum.Rewards
	//
	//// 返回信息
	//rsp.HtCardHolderInfo = gameData.GetInfo()

	return
}