// 校验任务条件 package rtask import ( "go_dreamfactory/comm" "go_dreamfactory/pb" cfg "go_dreamfactory/sys/configure/structs" "go_dreamfactory/utils" "github.com/pkg/errors" "github.com/spf13/cast" ) func (this *ModelRtaskRecord) verifyFromDb(uid string, cfg *cfg.GameRdtaskCondiData) (err error, ok bool) { var rd *pb.RtaskData if rd, err = this.GetVerifyData(uid, cfg.Id); rd != nil { if len(rd.Data) == 0 { err = errors.WithMessagef(err, "玩家参数数据缺失 %v", rd.Data) return } var paramLen int if paramLen, err = verifyParam(cfg, toArr(rd.Data)...); err == nil { switch paramLen { case 1: return nil, soEqual(rd.Data[0], cfg.Data1) case 2: return nil, soEqual(rd.Data[0], cfg.Data1) && soEqual(rd.Data[1], cfg.Data2) case 3: return nil, soEqual(rd.Data[0], cfg.Data1) && soEqual(rd.Data[1], cfg.Data2) && soEqual(rd.Data[2], cfg.Data3) case 4: return nil, soEqual(rd.Data[0], cfg.Data1) && soEqual(rd.Data[1], cfg.Data2) && soEqual(rd.Data[2], cfg.Data3) && soEqual(rd.Data[3], cfg.Data4) case 5: return nil, soEqual(rd.Data[0], cfg.Data1) && soEqual(rd.Data[1], cfg.Data2) && soEqual(rd.Data[2], cfg.Data3) && soEqual(rd.Data[3], cfg.Data4) && soEqual(rd.Data[4], cfg.Data5) } } } return } // 英雄指定 func (this *ModelRtask) verfiyRtype1(uid string, cfg *cfg.GameRdtaskCondiData) (err error, ok bool) { heroModule, err := this.service.GetModule(comm.ModuleHero) if err != nil { return err, false } if h, y := heroModule.(comm.IHero); y { for _, v := range h.GetHeroList(uid) { if cast.ToString(cfg.Data1) == v.HeroID { ok = true return } } } return } // 剧情 func (this *ModelRtask) verifyRtype2(uid string, cfg *cfg.GameRdtaskCondiData) (err error, ok bool) { m, err := this.service.GetModule(comm.ModuleMainline) if err != nil { return } if ml, y := m.(comm.IMainline); y { qjId := ml.GetUsermainLineData(uid) return nil, qjId == cfg.Data1 } return } // 每日任务 func (this *ModelRtask) verifyRtype3(uid string, cfg *cfg.GameRdtaskCondiData) (err error, ok bool) { m, err := this.service.GetModule(comm.ModuleTask) if err != nil { return } if ml, y := m.(comm.ITask); y { for _, task := range ml.GetTaskFinished(uid, comm.TASK_DAILY) { if task.TaskId >= cfg.Data1 { ok = true break } } } return } // 指定英雄等级 func (this *ModelRtask) verifyRtype4(uid string, cfg *cfg.GameRdtaskCondiData) (err error, ok bool) { defer printCondiLog(uid, cfg) m, err := this.service.GetModule(comm.ModuleHero) if err != nil { return } if ml, y := m.(comm.IHero); y { var hero *pb.DBHero for _, v := range ml.GetHeroList(uid) { if cast.ToString(cfg.Data1) == v.HeroID { hero = v break } } if hero != nil { return nil, soEqual(hero.HeroID, cast.ToString(cfg.Data1)) && soEqual(hero.Lv, cfg.Data2) } } return } // 指定英雄的指定装备数量 func (this *ModelRtask) verifyRtype5(uid string, cfg *cfg.GameRdtaskCondiData) (err error, ok bool) { defer printCondiLog(uid, cfg) m, err := this.service.GetModule(comm.ModuleHero) if err != nil { return } if ml, y := m.(comm.IHero); y { var hero *pb.DBHero for _, v := range ml.GetHeroList(uid) { if cast.ToString(cfg.Data1) == v.HeroID { hero = v break } } var count int32 if hero != nil { for _, v := range hero.EquipID { if v != "" { count++ } } } return nil, soEqual(hero.HeroID, cast.ToString(cfg.Data1)) && soEqual(count, cfg.Data2) } return } // 指定英雄星级 func (this *ModelRtask) verifyRtype6(uid string, cfg *cfg.GameRdtaskCondiData) (err error, ok bool) { defer printCondiLog(uid, cfg) m, err := this.service.GetModule(comm.ModuleHero) if err != nil { return } if ml, y := m.(comm.IHero); y { var hero *pb.DBHero for _, v := range ml.GetHeroList(uid) { if cast.ToString(cfg.Data1) == v.HeroID { hero = v break } } if hero != nil { return nil, soEqual(hero.HeroID, cast.ToString(cfg.Data1)) && soEqual(hero.Star, cfg.Data2) } } return } // 日常登录一次 func (this *ModelRtask) verfiyRtype7(uid string, cfg *cfg.GameRdtaskCondiData) (err error, ok bool) { defer printCondiLog(uid, cfg) userModule, err := this.service.GetModule(comm.ModuleUser) if err != nil { return } if um, y := userModule.(comm.IUser); y { if user := um.GetUser(uid); user != nil { return nil, soEqual(utils.IsToday(user.Logintime), true) } } return } // 累计登陆xx天 func (this *ModelRtask) verfiyRtype8(uid string, cfg *cfg.GameRdtaskCondiData) (err error, ok bool) { defer printCondiLog(uid, cfg) userModule, err := this.service.GetModule(comm.ModuleUser) if err != nil { return } if um, y := userModule.(comm.IUser); y { ud, err := um.GetUserExpand(uid) if err != nil { return err, false } return nil, soEqual(ud.LoginAddCount, cfg.Data1) } return } // 连续登陆xx天 func (this *ModelRtask) verfiyRtype9(uid string, cfg *cfg.GameRdtaskCondiData) (err error, ok bool) { defer printCondiLog(uid, cfg) userModule, err := this.service.GetModule(comm.ModuleUser) if err != nil { return } if um, y := userModule.(comm.IUser); y { ud, err := um.GetUserExpand(uid) if err != nil { return err, false } return nil, soEqual(ud.LoginContinueCount, cfg.Data1) } return } // 拥有xx个好友 func (this *ModelRtask) verfiyRtype10(uid string, cfg *cfg.GameRdtaskCondiData) (err error, ok bool) { defer printCondiLog(uid, cfg) m, err := this.service.GetModule(comm.ModuleFriend) if err != nil { return } if mi, y := m.(comm.IFriend); y { count := mi.GetFriendCount(uid) return nil, soGreatThan(count, cfg.Data1) } return } // 用户等级达到xx级 func (this *ModelRtask) verifyRtype20(uid string, cfg *cfg.GameRdtaskCondiData) (err error, ok bool) { defer printCondiLog(uid, cfg) userModule, err := this.service.GetModule(comm.ModuleUser) if err != nil { return } if um, y := userModule.(comm.IUser); y { if user := um.GetUser(uid); user != nil { return nil, soEqual(user.Lv, cfg.Data1) } } return } // 日常任务活跃度达到xx func (this *ModelRtask) verifyRtype63(uid string, cfg *cfg.GameRdtaskCondiData) (err error, ok bool) { userModule, err := this.service.GetModule(comm.ModuleUser) if err != nil { return } if um, y := userModule.(comm.IUser); y { de, err := um.GetUserExpand(uid) if err != nil { return err, false } if de != nil { if de.Activeday == cfg.Data1 { ok = true } } } return }