// 校验任务条件 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) (ok bool, err error) { 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 = lenParam(cfg, toArr(rd.Data)...); err == nil { //参数比较,默认第一个参数soGreateEqual,其它soEqual switch paramLen { case 1: return soGreatEqual(rd.Data[0], cfg.Data1) case 2: if ok, err = soGreatEqual(rd.Data[0], cfg.Data1); !ok { return } if ok, err = soEqual(rd.Data[1], cfg.Data2); !ok { return } case 3: if ok, err = soGreatEqual(rd.Data[0], cfg.Data1); !ok { return } if ok, err = soEqual(rd.Data[1], cfg.Data2); !ok { return } if ok, err = soEqual(rd.Data[2], cfg.Data3); !ok { return } case 4: if ok, err = soGreatEqual(rd.Data[0], cfg.Data1); !ok { return } if ok, err = soEqual(rd.Data[1], cfg.Data2); !ok { return } if ok, err = soEqual(rd.Data[2], cfg.Data3); !ok { return } if ok, err = soEqual(rd.Data[3], cfg.Data4); !ok { return } case 5: if ok, err = soGreatEqual(rd.Data[0], cfg.Data1); !ok { return } if ok, err = soEqual(rd.Data[1], cfg.Data2); !ok { return } if ok, err = soEqual(rd.Data[2], cfg.Data3); !ok { return } if ok, err = soEqual(rd.Data[3], cfg.Data4); !ok { return } if ok, err = soEqual(rd.Data[4], cfg.Data5); !ok { return } } } } return } func (this *ModelRtaskRecord) verifyFirstEqualParam(uid string, cfg *cfg.GameRdtaskCondiData) (ok bool, err error) { 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 } return soEqual(rd.Data[0], cfg.Data1) } return } func (this *ModelRtaskRecord) verifyFirstGreatEqualParam(uid string, cfg *cfg.GameRdtaskCondiData) (ok bool, err error) { 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 } return soGreatEqual(rd.Data[0], cfg.Data1) } return } // 英雄指定 func (this *ModelRtask) verfiyRtype1(uid string, cfg *cfg.GameRdtaskCondiData) (ok bool, err error) { heroModule, err := this.service.GetModule(comm.ModuleHero) if err != nil { return false, err } if h, y := heroModule.(comm.IHero); y { for _, v := range h.GetHeroList(uid) { ok, err = soEqual(cast.ToString(cfg.Data1), v.HeroID) if ok { return } } } return } // 剧情 func (this *ModelRtask) verifyRtype2(uid string, cfg *cfg.GameRdtaskCondiData) (ok bool, err error) { m, err := this.service.GetModule(comm.ModuleMline) if err != nil { return } if ml, y := m.(comm.IMline); y { qjId := ml.GetUserMlineData(uid, 1) return soEqual(qjId, cfg.Data1) } return } // 每日任务 func (this *ModelRtask) verifyRtype3(uid string, cfg *cfg.GameRdtaskCondiData) (ok bool, err error) { m, err := this.service.GetModule(comm.ModuleTask) if err != nil { return } if ml, y := m.(comm.ITask); y { for _, task := range ml.GetTaskDayFinished(uid) { if task.TaskId >= cfg.Data1 { ok = true break } } } return } // 指定英雄等级 func (this *ModelRtask) verifyRtype4(uid string, cfg *cfg.GameRdtaskCondiData) (ok bool, err error) { 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 { if ok, err = soEqual(hero.HeroID, cast.ToString(cfg.Data1)); !ok { return } if ok, err = soGreatEqual(hero.Lv, cfg.Data2); !ok { return } } } return } // 指定英雄的指定装备数量 func (this *ModelRtask) verifyRtype5(uid string, cfg *cfg.GameRdtaskCondiData) (ok bool, err error) { m, err := this.service.GetModule(comm.ModuleHero) if err != nil { return } if ml, y := m.(comm.IHero); y { var ( hero *pb.DBHero heroId string ) for _, v := range ml.GetHeroList(uid) { if cast.ToString(cfg.Data1) == v.HeroID { hero = v break } } var count int32 if hero != nil { heroId = hero.HeroID for _, v := range hero.EquipID { if v != "" { count++ } } } if ok, err = soEqual(heroId, cast.ToString(cfg.Data1)); !ok { return } return soGreatEqual(count, cfg.Data2) } return } // 指定英雄星级 func (this *ModelRtask) verifyRtype6(uid string, cfg *cfg.GameRdtaskCondiData) (ok bool, err error) { 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 { if ok, err = soEqual(hero.HeroID, cast.ToString(cfg.Data1)); !ok { return } return soGreatEqual(hero.Star, cfg.Data2) } } return } // 日常登录一次 func (this *ModelRtask) verfiyRtype7(uid string, cfg *cfg.GameRdtaskCondiData) (ok bool, err error) { 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 soEqual(utils.IsToday(user.Logintime), true) } } return } // 累计登陆xx天 func (this *ModelRtask) verfiyRtype8(uid string, cfg *cfg.GameRdtaskCondiData) (ok bool, err error) { 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 false, err } return soGreatEqual(ud.LoginAddCount, cfg.Data1) } return } // 连续登陆xx天 func (this *ModelRtask) verfiyRtype9(uid string, cfg *cfg.GameRdtaskCondiData) (ok bool, err error) { 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 false, err } return soGreatEqual(ud.LoginContinueCount, cfg.Data1) } return } // 拥有xx个好友 func (this *ModelRtask) verfiyRtype10(uid string, cfg *cfg.GameRdtaskCondiData) (ok bool, err error) { m, err := this.service.GetModule(comm.ModuleFriend) if err != nil { return } if mi, y := m.(comm.IFriend); y { count := mi.GetFriendCount(uid) return soGreatEqual(count, cfg.Data1) } return } // 用户等级达到xx级 func (this *ModelRtask) verifyRtype20(uid string, cfg *cfg.GameRdtaskCondiData) (ok bool, err error) { 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 soGreatEqual(user.Lv, cfg.Data1) } } return } // 日常任务活跃度达到xx func (this *ModelRtask) verifyRtype63(uid string, cfg *cfg.GameRdtaskCondiData) (ok bool, err error) { 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 false, err } if de != nil { return soGreatEqual(de.Activeday, cfg.Data1) } } return }