ecs/servers/game/data/tables.go
2025-06-20 15:34:32 +08:00

94 lines
1.8 KiB
Go

package data
import (
"crypto/md5"
"fmt"
"github.com/oylshe1314/framework/server"
"github.com/oylshe1314/framework/util"
"os"
"reflect"
"strings"
)
type tableLoader interface {
load(buf []byte) error
}
type Tables struct {
dataDir string
Copy CopyTable
CopyMain CopyMainTable
Drop DropTable
Equip EquipTable
EquipLevel EquipLevelTable
EquipRefine EquipRefineTable
EquipSet EquipSetTable
Hero HeroTable
HeroBond HeroBondTable
HeroBook HeroBookTable
HeroBreak HeroBreakTable
HeroLevel HeroLevelTable
HeroSoul HeroSoulTable
FunctionOpen FunctionOpenTable
Item ItemTable
Monster MonsterTable
Scene SceneTable
ServerConfig ServerConfigTable
Skill SkillTable
SkillBuff SkillBuffTable
Treasure TreasureTable
TreasureLevel TreasureLevelTable
TreasureRefine TreasureRefineTable
UpgradeMaster UpgradeMasterTable
}
func NewTables(dataDir string) *Tables {
return &Tables{dataDir: dataDir}
}
func (this *Tables) Load() error {
allHash, _, err := util.HashAll(md5.New(), true, nil, []string{this.dataDir}, nil)
if err != nil {
return err
}
server.DataHash = allHash[0]
var tt = reflect.TypeOf(this).Elem()
var tv = reflect.ValueOf(this).Elem()
var fn = tt.NumField()
for i := range fn {
var sf = tt.Field(i)
if !sf.IsExported() {
continue
}
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", this.dataDir, strings.ToLower(name)))
if err != nil {
return err
}
err = loader.load(buf)
if err != nil {
return err
}
}
return nil
}