ecs/servers/game/data/tables.go

69 lines
1.3 KiB
Go

package data
import (
"fmt"
"os"
"reflect"
"strings"
)
type tableLoader interface {
load(buf []byte) error
}
type Tables struct {
Copy CopyTable
CopyMain CopyMainTable
Equip EquipTable
EquipLevel EquipLevelTable
EquipSet EquipSetTable
Hero HeroTable
HeroBond HeroBondTable
HeroBook HeroBookTable
HeroBreak HeroBreakTable
HeroLevel HeroLevelTable
FunctionOpen FunctionOpenTable
Item ItemTable
Monster MonsterTable
Scene SceneTable
ServerConfig ServerConfigTable
Treasure TreasureTable
TreasureLevel TreasureLevelTable
UpgradeMaster UpgradeMasterTable
}
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
}