ecs/servers/game/data/tables.go

94 lines
1.8 KiB
Go
Raw Normal View History

2025-06-04 18:17:39 +08:00
package data
import (
2025-06-14 11:50:33 +08:00
"crypto/md5"
2025-06-04 18:17:39 +08:00
"fmt"
2025-06-14 11:50:33 +08:00
"github.com/oylshe1314/framework/server"
"github.com/oylshe1314/framework/util"
2025-06-04 18:17:39 +08:00
"os"
"reflect"
"strings"
)
type tableLoader interface {
load(buf []byte) error
}
type Tables struct {
2025-06-14 11:50:33 +08:00
dataDir string
Copy CopyTable
CopyMain CopyMainTable
2025-06-20 15:34:32 +08:00
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
2025-06-14 18:49:31 +08:00
Skill SkillTable
SkillBuff SkillBuffTable
Treasure TreasureTable
TreasureLevel TreasureLevelTable
TreasureRefine TreasureRefineTable
UpgradeMaster UpgradeMasterTable
2025-06-04 18:17:39 +08:00
}
2025-06-14 11:50:33 +08:00
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()
2025-06-04 18:17:39 +08:00
var fn = tt.NumField()
for i := range fn {
var sf = tt.Field(i)
2025-06-14 11:50:33 +08:00
if !sf.IsExported() {
continue
}
2025-06-04 18:17:39 +08:00
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
}
2025-06-14 11:50:33 +08:00
buf, err := os.ReadFile(fmt.Sprintf("%s/tb%s.json", this.dataDir, strings.ToLower(name)))
2025-06-04 18:17:39 +08:00
if err != nil {
2025-06-14 11:50:33 +08:00
return err
2025-06-04 18:17:39 +08:00
}
err = loader.load(buf)
if err != nil {
2025-06-14 11:50:33 +08:00
return err
2025-06-04 18:17:39 +08:00
}
}
2025-06-14 11:50:33 +08:00
return nil
2025-06-04 18:17:39 +08:00
}