ecs/servers/game/data/tables.go

65 lines
1.2 KiB
Go
Raw Normal View History

2025-06-04 18:17:39 +08:00
package data
import (
"fmt"
"os"
"reflect"
"strings"
)
type tableLoader interface {
load(buf []byte) error
}
type Tables struct {
2025-06-05 17:47:59 +08:00
Copy CopyTable
CopyMain CopyMainTable
2025-06-04 18:17:39 +08:00
Equip EquipTable
EquipLevel EquipLevelTable
EquipSet EquipSetTable
Hero HeroTable
HeroBond HeroBondTable
2025-06-05 17:47:59 +08:00
HeroBook HeroBookTable
2025-06-04 18:17:39 +08:00
HeroBreak HeroBreakTable
HeroLevel HeroLevelTable
Item ItemTable
2025-06-05 17:47:59 +08:00
Monster MonsterTable
Scene SceneTable
2025-06-04 18:17:39 +08:00
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
}