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 RewardActive RewardActiveTable RewardDaily RewardDailyTable RewardLogin RewardLoginTable Scene SceneTable ServerConfig ServerConfigTable Skill SkillTable SkillBuff SkillBuffTable Task TaskTable 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 }