Files
hk4e/gs/config/ability_embryos.go
2022-11-24 22:47:24 +08:00

75 lines
1.9 KiB
Go

package config
import (
"encoding/json"
"os"
"strings"
"hk4e/pkg/logger"
)
type AvatarConfigAbility struct {
AbilityName string `json:"abilityName"`
}
type AvatarConfig struct {
Abilities []*AvatarConfigAbility `json:"abilities"`
TargetAbilities []*AvatarConfigAbility `json:"targetAbilities"`
}
type AbilityEmbryoEntry struct {
Name string
Abilities []string
}
func (g *GameDataConfig) loadAbilityEmbryos() {
dirPath := g.binPrefix + "Avatar"
fileList, err := os.ReadDir(dirPath)
if err != nil {
logger.LOG.Error("open dir error: %v", err)
return
}
embryoList := make([]*AbilityEmbryoEntry, 0)
for _, file := range fileList {
fileName := file.Name()
if !strings.Contains(fileName, "ConfigAvatar_") {
continue
}
startIndex := strings.Index(fileName, "ConfigAvatar_")
endIndex := strings.Index(fileName, ".json")
if startIndex == -1 || endIndex == -1 || startIndex+13 > endIndex {
logger.LOG.Error("file name format error: %v", fileName)
continue
}
avatarName := fileName[startIndex+13 : endIndex]
fileData, err := os.ReadFile(dirPath + "/" + fileName)
if err != nil {
logger.LOG.Error("open file error: %v", err)
continue
}
avatarConfig := new(AvatarConfig)
err = json.Unmarshal(fileData, avatarConfig)
if err != nil {
logger.LOG.Error("parse file error: %v", err)
continue
}
if len(avatarConfig.Abilities) == 0 {
continue
}
abilityEmbryoEntry := new(AbilityEmbryoEntry)
abilityEmbryoEntry.Name = avatarName
for _, v := range avatarConfig.Abilities {
abilityEmbryoEntry.Abilities = append(abilityEmbryoEntry.Abilities, v.AbilityName)
}
embryoList = append(embryoList, abilityEmbryoEntry)
}
if len(embryoList) == 0 {
logger.LOG.Error("no embryo load")
}
g.AbilityEmbryos = make(map[string]*AbilityEmbryoEntry)
for _, v := range embryoList {
g.AbilityEmbryos[v.Name] = v
}
logger.LOG.Info("load %v AbilityEmbryos", len(g.AbilityEmbryos))
}