package passon import ( "go_dreamfactory/comm" "go_dreamfactory/modules" "go_dreamfactory/pb" "sort" "go_dreamfactory/lego/base" "go_dreamfactory/lego/core" "go_dreamfactory/lego/sys/log" ) const moduleName = "传功塔" /* 模块名:PassOn 描述:传功系统 开发:李伟 */ func NewModule() core.IModule { m := new(Passon) return m } type Passon struct { modules.ModuleBase api *apiComp modelPasson *modelPasson configure *Configure_Comp service base.IRPCXService } func (this *Passon) GetType() core.M_Modules { return comm.ModulePasson } func (this *Passon) OnInstallComp() { this.ModuleBase.OnInstallComp() this.api = this.RegisterComp(new(apiComp)).(*apiComp) this.modelPasson = this.RegisterComp(new(modelPasson)).(*modelPasson) this.configure = this.RegisterComp(new(Configure_Comp)).(*Configure_Comp) } func (this *Passon) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) { err = this.ModuleBase.Init(service, module, options) this.service = service.(base.IRPCXService) return } func (this *Passon) Start() (err error) { err = this.ModuleBase.Start() return } // 英雄升级 func (this *Passon) HeroUpLv(session comm.IUserSession, heroid string, lv int32) { var ( passon *pb.DBPasson heros []*pb.DBHero change map[string]bool = make(map[string]bool) errdata *pb.ErrorData err error ) if passon, err = this.modelPasson.getUserPasson(session.GetUserId()); err != nil { this.Error("getUserPasson err", log.Field{Key: "err", Value: err.Error()}) return } if lv <= passon.Passonlv { return } for _, v := range passon.Teacher { if v == heroid { return } } heros = this.ModuleHero.GetHeroList(session.GetUserId()) // 使用sort.Slice进行排序 sort.Slice(heros, func(i, j int) bool { return heros[i].Lv > heros[j].Lv }) if len(heros) < 5 { for i, v := range heros { passon.Teacher[i] = v.Id } if err = this.modelPasson.updateUserPasson(session.GetUserId(), passon); err != nil { this.Errorln(err) return } return } for i := 0; i < 5; i++ { if heros[i].Ispasson { change[heros[i].Id] = false for ii, v := range passon.Student { if v.Heroid == heros[i].Id { passon.Student[ii].State = 0 passon.Student[ii].Cdtime = 0 passon.Student[ii].Heroid = "" } } } passon.Teacher[i] = heros[i].Id } defer func() { session.Push() this.PutUserSession(session) }() if len(change) > 0 { if errdata = this.ModuleHero.PassonHero(session, change); errdata != nil { this.Errorln(errdata) return } } if passon.Passonlv != heros[4].Lv { passon.Passonlv = heros[4].Lv this.ModuleUser.ChangeUserExpand(session.GetUserId(), map[string]interface{}{ "passonlv": passon.Passonlv, }) session.SendMsg(string(this.GetType()), "lvchange", &pb.PassonLvChangePush{Lv: passon.Passonlv}) } if err = this.modelPasson.updateUserPasson(session.GetUserId(), passon); err != nil { this.Errorln(err) return } }