feat(xmlres): 添加磁盘配置文件回退机制并支持JSON格式配置 - 新增readConfigContent函数,优先从资源包读取配置,失败时回退到磁盘文件 - 添加diskConfigPath变量存储本地配置路径 - 支持从磁盘读取JSON格式配置文件,增强配置灵活性 - 修改getJson函数增加错误处理和调试日志输出 - 将技能配置从XML格式改为JSON格式,提升数据解析效率 - 初始化时设置默认磁盘配置路径为public/config目录 ```
This commit is contained in:
@@ -5,7 +5,10 @@ import (
|
||||
|
||||
_ "blazing/common/data/xmlres/packed"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/ECUST-XX/xml"
|
||||
"github.com/gogf/gf/v2/os/gres"
|
||||
@@ -13,23 +16,55 @@ import (
|
||||
)
|
||||
|
||||
var path string
|
||||
var diskConfigPath string
|
||||
|
||||
func readConfigContent(path string) []byte {
|
||||
content := gres.GetContent(path)
|
||||
if len(content) > 0 {
|
||||
return content
|
||||
}
|
||||
|
||||
if diskConfigPath == "" {
|
||||
return content
|
||||
}
|
||||
|
||||
diskPath := filepath.Join(diskConfigPath, strings.TrimPrefix(path, "config/"))
|
||||
data, err := os.ReadFile(diskPath)
|
||||
if err != nil {
|
||||
fmt.Printf("[xmlres] readConfigContent fallback failed: path=%s disk=%s err=%v\n", path, diskPath, err)
|
||||
return content
|
||||
}
|
||||
|
||||
fmt.Printf("[xmlres] readConfigContent fallback hit: path=%s disk=%s len=%d\n", path, diskPath, len(data))
|
||||
return data
|
||||
}
|
||||
|
||||
func getXml[T any](path string) T {
|
||||
|
||||
// 解析XML到结构体
|
||||
var xmls T
|
||||
|
||||
t1 := gres.GetContent(path)
|
||||
t1 := readConfigContent(path)
|
||||
xml.Unmarshal(t1, &xmls)
|
||||
|
||||
return xmls
|
||||
}
|
||||
func getJson[T any](path string) T {
|
||||
|
||||
// 解析XML到结构体
|
||||
// 解析JSON到结构体
|
||||
var xmls T
|
||||
t1 := gres.GetContent(path)
|
||||
json.Unmarshal(t1, &xmls)
|
||||
t1 := readConfigContent(path)
|
||||
if len(t1) == 0 {
|
||||
fmt.Printf("[xmlres] getJson empty content: path=%s\n", path)
|
||||
return xmls
|
||||
}
|
||||
if err := json.Unmarshal(t1, &xmls); err != nil {
|
||||
head := string(t1)
|
||||
if len(head) > 300 {
|
||||
head = head[:300]
|
||||
}
|
||||
fmt.Printf("[xmlres] getJson unmarshal failed: path=%s len=%d err=%v head=%q\n", path, len(t1), err, head)
|
||||
}
|
||||
|
||||
return xmls
|
||||
}
|
||||
@@ -59,6 +94,7 @@ var (
|
||||
func Initfile() {
|
||||
//gres.Dump()
|
||||
path1, _ := os.Getwd()
|
||||
diskConfigPath = filepath.Join(path1, "public", "config")
|
||||
path = path1 + "/public/config/"
|
||||
path = "config/"
|
||||
MapConfig = getXml[Maps](path + "210.xml")
|
||||
@@ -87,10 +123,10 @@ func Initfile() {
|
||||
return gconv.Int(m.ProductID)
|
||||
|
||||
})
|
||||
Skill := getXml[MovesTbl](path + "227.xml")
|
||||
skillConfig := getJson[MovesJSON](path + "moves_flash.json")
|
||||
|
||||
SkillMap = make(map[int]Move, len(Skill.Moves))
|
||||
for _, v := range Skill.Moves {
|
||||
SkillMap = make(map[int]Move, len(skillConfig.MovesTbl.Moves.Move))
|
||||
for _, v := range skillConfig.MovesTbl.Moves.Move {
|
||||
v.SideEffectS = ParseSideEffectArgs(v.SideEffect)
|
||||
v.SideEffectArgS = ParseSideEffectArgs(v.SideEffectArg)
|
||||
SkillMap[v.ID] = v
|
||||
|
||||
Reference in New Issue
Block a user