package warorder import ( "fmt" "go_dreamfactory/comm" "go_dreamfactory/lego/core" "go_dreamfactory/modules" "go_dreamfactory/sys/configure" cfg "go_dreamfactory/sys/configure/structs" "sync" ) const ( game_passcheck = "game_passcheck.json" game_passcheckexp = "game_passcheckexp.json" game_passchecktask = "game_passchecktask.json" game_passcheckprice = "game_passcheckprice.json" ) type configureComp struct { modules.MCompConfigure module *Warorder lock sync.RWMutex order map[int32][]*cfg.GamePassCheckData //战令 exps map[int32][]*cfg.GamePassCheckExpData //战令 } func (this *configureComp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) { err = this.MCompConfigure.Init(service, module, comp, options) this.module = module.(*Warorder) err = this.LoadConfigure(game_passchecktask, cfg.NewGamePassCheckTask) err = this.LoadConfigure(game_passcheckprice, cfg.NewGamePassCheckPrice) configure.RegisterConfigure(game_passcheck, cfg.NewGamePassCheck, this.updatePassCheck) configure.RegisterConfigure(game_passcheckexp, cfg.NewGamePassCheckExp, this.updatePassCheckExp) return } func (this *configureComp) getorder(wtype int32) (results []*cfg.GamePassCheckData, err error) { this.lock.RLock() defer this.lock.RUnlock() var ok bool if results, ok = this.order[wtype]; !ok { err = fmt.Errorf("no found wtype:%d", wtype) } return } func (this *configureComp) getexp(wtype int32) (results []*cfg.GamePassCheckExpData, err error) { this.lock.RLock() defer this.lock.RUnlock() var ok bool if results, ok = this.exps[wtype]; !ok { err = fmt.Errorf("no found wtype:%d", wtype) } return } // 读取任务配置表 func (this *configureComp) getPassCheckCfg() (data *cfg.GamePassCheck, err error) { var ( v interface{} ok bool ) if v, err = this.GetConfigure(game_passcheck); err != nil { return } else { if data, ok = v.(*cfg.GamePassCheck); !ok { err = fmt.Errorf("%T is *cfg.GameWorldTask", v) return } } return } // 读取任务配置表 func (this *configureComp) getGamePassCheckPrice() (confs []*cfg.GamePassCheckPriceData, err error) { var ( v interface{} ) if v, err = this.GetConfigure(game_passcheckprice); err != nil { return } else { confs = v.(*cfg.GamePassCheckPrice).GetDataList() } return } // 更新任务配置表 func (this *configureComp) updatePassCheck() { gwt, err := this.getPassCheckCfg() if err != nil { this.module.Error("世界任务配置表异常!") return } orderConf := make(map[int32][]*cfg.GamePassCheckData) for _, v := range gwt.GetDataList() { if _, ok := orderConf[v.PasscheckType]; !ok { orderConf[v.PasscheckType] = make([]*cfg.GamePassCheckData, 0) } orderConf[v.PasscheckType] = append(orderConf[v.PasscheckType], v) } this.lock.Lock() this.order = orderConf this.lock.Unlock() } // 更新任务配置表 func (this *configureComp) updatePassCheckExp() { var ( v interface{} conf *cfg.GamePassCheckExp err error ok bool ) if v, err = this.GetConfigure(game_passcheckexp); err != nil { return } else { if conf, ok = v.(*cfg.GamePassCheckExp); !ok { err = fmt.Errorf("%T is *cfg.GamePassCheckExp", v) return } } exps := make(map[int32][]*cfg.GamePassCheckExpData) for _, v := range conf.GetDataList() { if _, ok := exps[v.PasscheckType]; !ok { exps[v.PasscheckType] = make([]*cfg.GamePassCheckExpData, 0) } exps[v.PasscheckType] = append(exps[v.PasscheckType], v) } this.lock.Lock() this.exps = exps this.lock.Unlock() } // 读取任务配置表 func (this *configureComp) getGamePassCheckTask() (confs map[int32]*cfg.GamePassCheckTaskData, err error) { var ( v interface{} ) if v, err = this.GetConfigure(game_passchecktask); err != nil { return } else { confs = v.(*cfg.GamePassCheckTask).GetDataMap() } return } // 读取任务配置表 func (this *configureComp) getGamePassCheckTaskById(id int32) (conf *cfg.GamePassCheckTaskData, err error) { var ( v interface{} ok bool ) if v, err = this.GetConfigure(game_passchecktask); err != nil { return } else { if conf, ok = v.(*cfg.GamePassCheckTask).GetDataMap()[id]; !ok { err = comm.NewNotFoundConfErr(string(this.module.GetType()), game_passchecktask, id) this.module.Errorln(err) return } } return } func (this *configureComp) getWarorderLvByExp(exp int32, wtype int32) (conf *cfg.GamePassCheckExpData, err error) { var ( exps []*cfg.GamePassCheckExpData ) if exps, err = this.getexp(wtype); err != nil { this.module.Errorln(err) return } for _, v := range exps { if exp < v.Parameter { return } else { conf = v } } return } func (this *configureComp) getWarorderLvp(lv int32, wtype int32) (conf *cfg.GamePassCheckExpData, err error) { var ( exps []*cfg.GamePassCheckExpData ) if exps, err = this.getexp(wtype); err != nil { this.module.Errorln(err) return } for _, v := range exps { if lv == v.Id { conf = v return } } err = fmt.Errorf("lv:%d no conf !", lv) return } func (this *configureComp) getWarorderLvpMax(wtype int32) (conf *cfg.GamePassCheckExpData, err error) { var ( exps []*cfg.GamePassCheckExpData maxlv int32 ) if exps, err = this.getexp(wtype); err != nil { this.module.Errorln(err) return } for _, v := range exps { if maxlv < v.Id { maxlv = v.Id conf = v } } return }