98 lines
2.0 KiB
Go
98 lines
2.0 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
|
|
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
|
|
}
|