/* 模块名:viking 描述:维京远征 开发:梅雄风 */ package viking import ( "go_dreamfactory/comm" "go_dreamfactory/lego/base" "go_dreamfactory/lego/core" "go_dreamfactory/utils" "go_dreamfactory/modules" "go_dreamfactory/pb" "go_dreamfactory/sys/configure" ) type Viking struct { modules.ModuleBase modelViking *modelViking api *apiComp configure *configureComp modulerank *ModelRank battle comm.IBattle service base.IRPCXService modelsrank *ModelSRank } const ( Cycle int32 = 14 // 持续14天 Continued int32 = 30 ) func NewModule() core.IModule { return &Viking{} } func (this *Viking) GetType() core.M_Modules { return comm.ModuleViking } func (this *Viking) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) { if err = this.ModuleBase.Init(service, module, options); err != nil { return } this.service = service.(base.IRPCXService) return } func (this *Viking) OnInstallComp() { this.ModuleBase.OnInstallComp() this.api = this.RegisterComp(new(apiComp)).(*apiComp) this.modelViking = this.RegisterComp(new(modelViking)).(*modelViking) this.modulerank = this.RegisterComp(new(ModelRank)).(*ModelRank) this.modelsrank = this.RegisterComp(new(ModelSRank)).(*ModelSRank) this.configure = this.RegisterComp(new(configureComp)).(*configureComp) } // 接口信息 func (this *Viking) ModifyVikingData(uid string, data map[string]interface{}) (errdata *pb.ErrorData) { err := this.modelViking.modifyVikingDataByObjId(uid, data) if err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, Title: pb.ErrorCode_DBError.ToString(), Message: err.Error(), } } return } func (this *Viking) Start() (err error) { if err = this.ModuleBase.Start(); err != nil { return } var module core.IModule if module, err = this.service.GetModule(comm.ModuleBattle); err != nil { return } this.battle = module.(comm.IBattle) this.CheckCurSeasonData() return } func (this *Viking) CheckUserBaseVikingInfo(uid string) (data []*pb.DBVikingRank) { if d := this.modulerank.getVikingRank(uid); d.Id != "" { for k, v := range d.Data { if k <= 3 { data = append(data, &pb.DBVikingRank{ Uinfo: d.Uinfo, Line: v.Line[v.Maxnandu], Difficulty: v.Maxnandu, Bosstype: k, Costtime: v.Costime[v.Maxnandu], }) } } } return } //红点查询 func (this *Viking) Reddot(session comm.IUserSession, rid ...comm.ReddotType) (reddot map[comm.ReddotType]*pb.ReddotItem) { reddot = make(map[comm.ReddotType]*pb.ReddotItem) for _, v := range rid { switch v { case comm.Reddot13102: reddot[comm.Reddot13102] = &pb.ReddotItem{ Rid: int32(comm.Reddot13102), Activated: this.modelViking.checkReddot31(session), } break } } return } // 解锁远征所有难度 func (this *Viking) CompleteAllLevel(session comm.IUserSession) (errdata *pb.ErrorData) { list, err := this.modelViking.getVikingList(session.GetUserId()) if err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, Title: pb.ErrorCode_DBError.ToString(), Message: err.Error(), } return } list.Boss = make(map[int32]int32) list.BossTime = make(map[string]int32) conf := this.configure.GetVikingBossAllData() for k, v := range conf { list.Boss[k] = v } mapData := make(map[string]interface{}, 0) mapData["boss"] = list.Boss mapData["bossTime"] = list.BossTime errdata = this.ModifyVikingData(session.GetUserId(), mapData) session.SendMsg(string(this.GetType()), VikingGetListResp, &pb.VikingGetListResp{Data: list}) return } // 检查当前赛季是在本服还是在跨服 func (this *Viking) CheckCurSeasonData() (bLocal bool, endSeasonTime int64) { var subTime int64 var oneSeason int64 openTime := this.service.GetOpentime().Unix() this.Debugf("%d", openTime) // 获取第一个赛季结束的时间 oneSeason = utils.GetTodayZeroTime(openTime) //+ int64((6-d)*3600*24) this.Debugf("%d", oneSeason) var c int32 if Continued%Cycle == 0 { c = Continued / Cycle } else { c = Continued/Cycle + 1 } if configure.Now().Unix() > oneSeason { subTime = configure.Now().Unix() - oneSeason subTime = subTime/(14*3600*24) + 1 } // 只需判断当前时间是否大于第c个赛季即可 endSeasonTime = oneSeason endSeasonTime += 14 * 3600 * 24 * int64(c) if endSeasonTime <= configure.Now().Unix() { endSeasonTime = oneSeason + subTime*14*3600*24 return false, endSeasonTime } endSeasonTime = oneSeason + subTime*14*3600*24 return true, endSeasonTime } // 检查上一个赛季实在本服还是在跨服 func (this *Viking) CheckPreSeasonData() (bLocal bool) { openTime := this.service.GetOpentime().Unix() this.Debugf("%d", openTime) // 获取第一个赛季结束的时间 endSeasonTime := utils.GetTodayZeroTime(openTime) //+ int64((6-d)*3600*24) this.Debugf("%d", endSeasonTime) var c int32 if Continued%Cycle == 0 { c = Continued / Cycle } else { c = Continued/Cycle + 1 } // 只需判断当前时间是否大于第c个赛季即可 endSeasonTime += 3600 * 24 * int64(Cycle*c) if endSeasonTime <= configure.Now().Unix()-int64(Cycle*3600*24) { return false } return true }