decode.go 4.71 KB
package confcardholder

import (
	"apigame/util/util-lx/lxalilog"
	"encoding/json"
	"errors"
	"fmt"
)

// Decode 解析配置原始数据
func (c *ActivityConfig) Decode(gameId string, rawData any) {
	raw := rawData.(*ActivityConfigRaw)
	c.GameId = gameId
	c.Raw = raw

	c.Id = raw.Id
	c.OpenLevel = raw.OpenLevel
	c.PreviewTime = raw.PreviewTime
	c.StartTime = raw.StartTime
	c.EndTime = raw.EndTime
	c.Round = raw.Round
	c.IconPath = raw.IconPath

	c.Awards = make(map[string]string)
	c.AlbumConfig = make(map[int]AlbumConfig)
	c.CardConfig = make(map[int]CardConfig)
	c.CardholderConfig = make(map[int]OpenCardholderConfig)
	c.NormalCardStarConfig = make(map[string]NormalCardStarConfig)
	c.CardSequenceConfig = make(map[string]CardSequenceConfig)
	c.StarShopConfig = make(map[int]StarShopConfig)
	// 解析奖励
	{
		err := json.Unmarshal([]byte(raw.Awards), &c.Awards)
		if err != nil {
			lxalilog.Errors(err, raw.Awards, gameId, raw.Id)
			return
		}
	}
	// 卡组配置
	{
		configs := make([]AlbumConfig, 0)
		err := json.Unmarshal([]byte(raw.AlbumConfig), &configs)
		if err != nil {
			lxalilog.Errors(err, raw.AlbumConfig, gameId, raw.Id)
			return
		}
		for _, i2 := range configs {
			c.AlbumConfig[i2.SetId] = i2
		}
	}
	// 卡牌配置
	{
		configs := make([]CardConfig, 0)
		err := json.Unmarshal([]byte(raw.CardConfig), &configs)
		if err != nil {
			lxalilog.Errors(err, raw.CardConfig, gameId, raw.Id)
			return
		}
		for _, i2 := range configs {
			c.CardConfig[i2.Id] = i2
		}
	}
	// 卡包开卡规则
	{
		configs := make([]OpenCardholderConfig, 0)
		err := json.Unmarshal([]byte(raw.CardHolderConfig), &configs)
		if err != nil {
			lxalilog.Errors(err, raw.CardHolderConfig, gameId, raw.Id)
			return
		}
		for _, i2 := range configs {
			c.CardholderConfig[i2.Id] = i2
		}
	}
	// 卡片星级配置
	{
		configs := make([]NormalCardStarConfig, 0)
		err := json.Unmarshal([]byte(raw.NormalCardStarSequence), &configs)
		if err != nil {
			lxalilog.Errors(err, raw.NormalCardStarSequence, gameId, raw.Id)
			return
		}
		for _, i2 := range configs {
			combineId := CombineIdSequenceIdCohort(i2.Id, i2.SequenceId, i2.Cohort)
			c.NormalCardStarConfig[combineId] = i2
		}
	}
	// 卡片星级对应卡牌配置
	{
		configs := make([]CardSequenceConfig, 0)
		err := json.Unmarshal([]byte(raw.CardSequenceConfig), &configs)
		if err != nil {
			lxalilog.Errors(err, raw.CardSequenceConfig, gameId, raw.Id)
			return
		}
		for _, i2 := range configs {
			combineId := CombineIdSequenceIdCohort(i2.Id, i2.SequenceId, i2.Cohort)
			c.CardSequenceConfig[combineId] = i2
		}
	}
	// 星星商店配置
	{
		configs := make([]StarShopConfig, 0)
		err := json.Unmarshal([]byte(raw.StarShopConfig), &configs)
		if err != nil {
			lxalilog.Errors(err, raw.StarShopConfig, gameId, raw.Id)
			return
		}
		for _, i2 := range configs {
			c.StarShopConfig[i2.Id] = i2
		}
	}

	c.GenerateConfigClient()
}

// GenerateConfigClient 生成给客户端的配置
func (c *ActivityConfig) GenerateConfigClient() {
	configClient := &ActivityConfigClient{
		Id:          c.Id,
		Round:       c.Round,
		IconPath:    c.IconPath,
		RoundAwards: c.Awards,
		Albums:      make([]AlbumConfig, 0),
		Cards:       make([]CardConfig, 0),
		Holders:     make([]OpenCardholderConfig, 0),
		StarShop:    make([]StarShopConfig, 0),
	}
	for _, i2 := range c.AlbumConfig {
		configClient.Albums = append(configClient.Albums, i2)
	}
	for _, i2 := range c.CardConfig {
		configClient.Cards = append(configClient.Cards, i2)
	}
	for _, i2 := range c.CardholderConfig {
		configClient.Holders = append(configClient.Holders, i2)
	}
	for _, i2 := range c.StarShopConfig {
		configClient.StarShop = append(configClient.StarShop, i2)
	}
	c.Client = configClient
}

// CombineIdSequenceIdCohort 组合ID k=ID_用户序列_用户分组
func CombineIdSequenceIdCohort(id, sequenceId, cohort int) string {
	return fmt.Sprintf("%d_%d_%d", id, sequenceId, cohort)
}

// FindNormalCardStarConfig 查找配置 非保底卡星级ID
func (c *ActivityConfig) FindNormalCardStarConfig(id, sequenceId, cohort int) (conf NormalCardStarConfig, has bool) {
	combineId := CombineIdSequenceIdCohort(id, sequenceId, cohort)
	conf, has = c.NormalCardStarConfig[combineId]
	if !has {
		lxalilog.Errors(errors.New("ht_cardholder NormalCardStarConfig error"), id, sequenceId, cohort)
	}
	return
}

// FindCardSequenceConfig 查找配置 星级ID对应的卡片
func (c *ActivityConfig) FindCardSequenceConfig(id, sequenceId, cohort int) (conf CardSequenceConfig, has bool) {
	combineId := CombineIdSequenceIdCohort(id, sequenceId, cohort)
	conf, has = c.CardSequenceConfig[combineId]
	if !has {
		lxalilog.Errors(errors.New("ht_cardholder CardSequenceConfig error"), id, sequenceId, cohort)
		fmt.Println(id)
		fmt.Println(sequenceId)
		fmt.Println(cohort)
	}
	return
}