ecs/servers/game/data/tables.go
2025-06-04 18:17:39 +08:00

61 lines
1.1 KiB
Go

package data
import (
"fmt"
"os"
"reflect"
"strings"
)
type tableLoader interface {
load(buf []byte) error
}
type Tables struct {
Equip EquipTable
EquipLevel EquipLevelTable
EquipSet EquipSetTable
Hero HeroTable
HeroBond HeroBondTable
HeroBreak HeroBreakTable
HeroLevel HeroLevelTable
HeroGeneral HeroGeneralTable
Item ItemTable
ServerConfig ServerConfigTable
}
func NewTables(dataDir string) (*Tables, error) {
var tables = new(Tables)
var tt = reflect.TypeOf(tables).Elem()
var tv = reflect.ValueOf(tables).Elem()
var fn = tt.NumField()
for i := range fn {
var sf = tt.Field(i)
var ft = sf.Type
var name = ft.Name()
if strings.HasSuffix(name, "Table") {
name = strings.TrimSuffix(name, "Table")
}
var fv = tv.Field(i)
loader, ok := fv.Addr().Interface().(tableLoader)
if !ok {
continue
}
buf, err := os.ReadFile(fmt.Sprintf("%s/tb%s.json", dataDir, strings.ToLower(name)))
if err != nil {
return nil, err
}
err = loader.load(buf)
if err != nil {
return nil, err
}
}
return tables, nil
}