config-registry.go 3.92 KB
package cardholder

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

var (
	ConfigRaws CardActivityConfigRaw // 活动配置 原始数据
	Config     CardActivityConfig    // 活动配置 分析后数据
)

func NewConfigs() {
	ConfigRaws = CardActivityConfigRaw{}
	Config = CardActivityConfig{}
}

// ConfigDecode 解析配置原始数据
func ConfigDecode() {
	Config = CardActivityConfig{
		Raw:                  ConfigRaws,
		Id:                   ConfigRaws.Id,
		Awards:               make(map[string]string),
		AlbumConfig:          make(map[string]AlbumConfig),
		CardConfig:           make(map[int]CardConfig),
		CardholderConfig:     make(map[string]CardholderConfig),
		NormalCardStarConfig: make(map[string]NormalCardStarConfig),
		CardSequenceConfig:   make(map[string]CardSequenceConfig),
	}
	// 解析奖励
	{
		err := json.Unmarshal([]byte(ConfigRaws.Awards), &Config.Awards)
		if err != nil {
			lxalilog.Errors(err, ConfigRaws.Awards, constd.GAME_ID_HT, ConfigRaws.Id)
			return
		}
	}
	// 卡组配置
	{
		configs := make([]AlbumConfig, 0)
		err := json.Unmarshal([]byte(ConfigRaws.AlbumConfig), &configs)
		if err != nil {
			lxalilog.Errors(err, ConfigRaws.AlbumConfig, constd.GAME_ID_HT, ConfigRaws.Id)
			return
		}
		for _, i2 := range configs {
			Config.AlbumConfig[i2.SetId] = i2
		}
	}
	// 卡牌配置
	{
		configs := make([]CardConfig, 0)
		err := json.Unmarshal([]byte(ConfigRaws.CardConfig), &configs)
		if err != nil {
			lxalilog.Errors(err, ConfigRaws.CardConfig, constd.GAME_ID_HT, ConfigRaws.Id)
			return
		}
		for _, i2 := range configs {
			Config.CardConfig[i2.Id] = i2
		}
	}
	// 卡包开卡规则
	{
		configs := make([]CardholderConfig, 0)
		err := json.Unmarshal([]byte(ConfigRaws.CardHolderConfig), &configs)
		if err != nil {
			lxalilog.Errors(err, ConfigRaws.CardHolderConfig, constd.GAME_ID_HT, ConfigRaws.Id)
			return
		}
		for _, i2 := range configs {
			Config.CardholderConfig[i2.Id] = i2
		}
	}
	// 卡片星级配置
	{
		configs := make([]NormalCardStarConfig, 0)
		err := json.Unmarshal([]byte(ConfigRaws.NormalCardStarSequence), &configs)
		if err != nil {
			lxalilog.Errors(err, ConfigRaws.NormalCardStarSequence, constd.GAME_ID_HT, ConfigRaws.Id)
			return
		}
		for _, i2 := range configs {
			i2.NormalCardSequenceIds = strings.Split(i2.NormalCardSequenceId, ",")
			combineId := CombineIdSequenceIdCohort(i2.Id, i2.SequenceId, i2.Cohort)
			Config.NormalCardStarConfig[combineId] = i2
		}
	}
	// 卡片星级对应卡牌配置
	{
		configs := make([]CardSequenceConfig, 0)
		err := json.Unmarshal([]byte(ConfigRaws.CardSequenceConfig), &configs)
		if err != nil {
			lxalilog.Errors(err, ConfigRaws.CardSequenceConfig, constd.GAME_ID_HT, ConfigRaws.Id)
			return
		}
		for _, i2 := range configs {
			i2.CardIdLists = strings.Split(i2.CardIdList, ",")
			combineId := CombineIdSequenceIdCohort(i2.Id, i2.SequenceId, i2.Cohort)
			Config.CardSequenceConfig[combineId] = i2
		}
	}
}

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

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

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