Files
hk4e/gdconf/gcg_skill_data.go
2023-01-08 20:33:14 +08:00

81 lines
2.5 KiB
Go

package gdconf
import (
"fmt"
"github.com/hjson/hjson-go/v4"
"hk4e/pkg/logger"
"os"
"github.com/jszwec/csvutil"
)
// 卡牌技能配置表
type GCGSkillData struct {
SkillId int32 `csv:"SkillId"` // ID
ConfigJson string `csv:"ConfigJson,omitempty"` // 效果config
CostType1 int32 `csv:"CostType1,omitempty"` // 消耗的元素骰子类型1
CostValue1 int32 `csv:"CostValue1,omitempty"` // 消耗的元素骰子数量1
CostType2 int32 `csv:"CostType2,omitempty"` // 消耗的元素骰子类型2
CostValue2 int32 `csv:"CostValue2,omitempty"` // 消耗的元素骰子数量2
CostMap map[uint32]uint32 // 技能骰子消耗列表
SkillDamage uint32 // 技能伤害
}
type ConfigSkillEffect struct {
DeclaredValueMap map[string]*ConfigSkillEffectValue `json:"declaredValueMap"`
}
type ConfigSkillEffectValue struct {
Type string `json:"type"`
Value any `json:"value"`
}
func (g *GameDataConfig) loadGCGSkillData() {
g.GCGSkillDataMap = make(map[int32]*GCGSkillData)
data := g.readCsvFileData("GCGSkillData.csv")
var gcgSkillDataList []*GCGSkillData
err := csvutil.Unmarshal(data, &gcgSkillDataList)
if err != nil {
info := fmt.Sprintf("parse file error: %v", err)
panic(info)
}
for _, gcgSkillData := range gcgSkillDataList {
// 技能消耗整合进CostMap
gcgSkillData.CostMap = make(map[uint32]uint32, 2)
gcgSkillData.CostMap[uint32(gcgSkillData.CostType1)] = uint32(gcgSkillData.CostValue1)
gcgSkillData.CostMap[uint32(gcgSkillData.CostType2)] = uint32(gcgSkillData.CostValue2)
for costType, costValue := range gcgSkillData.CostMap {
// 两个值都不能为0
if costType == 0 || costValue == 0 {
delete(gcgSkillData.CostMap, costType)
}
}
// 技能效果Config
fileData, err := os.ReadFile(g.jsonPrefix + "gcg_card_skill/" + gcgSkillData.ConfigJson + ".json")
if err != nil {
info := fmt.Sprintf("open file error: %v, SkillId: %v", err, gcgSkillData.SkillId)
panic(info)
}
configSkillEffect := new(ConfigSkillEffect)
err = hjson.Unmarshal(fileData, configSkillEffect)
if err != nil {
info := fmt.Sprintf("parse file error: %v, SkillId: %v", err, gcgSkillData.SkillId)
panic(info)
}
// 技能伤害
for key, value := range configSkillEffect.DeclaredValueMap {
if key != "__KEY__DAMAGE" {
continue
}
if value.Type == "Damage" {
gcgSkillData.SkillDamage = uint32(value.Value.(float64))
}
}
// list -> map
g.GCGSkillDataMap[gcgSkillData.SkillId] = gcgSkillData
}
logger.Info("GCGSkillData count: %v", len(g.GCGSkillDataMap))
}