handle.go 3.12 KB
package ht_cardholder

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

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

	// 尝试更新配置
	TryUpdateConfigs()

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

	rsp.HtCardHolderInfo = gameData.GetInfo()

	return
}

// HandleGetNew 获取卡包
func HandleGetNew(req *dto.ReqHtCardHolderGetNew) (code string, rsp dto.RspHtCardHolderGetNew) {
	rsp = dto.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 *dto.ReqHtCardHolderOpen) (code string, rsp dto.RspHtCardHolderOpen) {
	rsp = dto.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)
	if confCardholder.IsNew != 0 {
		// 如果是新卡包 按顺序查找数目最少的一张卡抽取
		cardId := GetNewCard(gameData)
		// 增加卡牌
		gameData.Details.Cards[cardId] += 1
		rsp.NewCards = append(rsp.NewCards, cardId)
	} else {
		// 正常抽卡
		// 先抽保底卡
		if confCardholder.GuaranteedStar != "0" {
			confGuaranteed, hasGuaranteed := FindCardSequenceConfig(confCardholder.GuaranteedStar, sequenceId, cohort)
			if hasGuaranteed {
				combineId := CombineIdSequenceIdCohort(confCardholder.GuaranteedStar, sequenceId, cohort)
				scale := gameData.Details.CardSequenceScales[combineId]
				cardId := GetOneFromArray(confGuaranteed.CardIdLists, scale)
				cardIdInt := uttype.StringToInt(cardId)
				// 增加刻度
				gameData.Details.CardSequenceScales[combineId] = scale + 1
				// 增加卡牌
				gameData.Details.Cards[cardIdInt] += 1
				rsp.NewCards = append(rsp.NewCards, cardIdInt)
			}
		}

	}

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

	// 存档
	SaveData(gameData)

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

	return
}