ecs/servers/game/data/tables.go

98 lines
2.0 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
2025-06-21 16:17:24 +08:00
RewardActive RewardActiveTable
RewardDaily RewardDailyTable
RewardLogin RewardLoginTable
Scene SceneTable
ServerConfig ServerConfigTable
2025-06-14 18:49:31 +08:00
Skill SkillTable
SkillBuff SkillBuffTable
2025-06-21 16:17:24 +08:00
Task TaskTable
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
}