343 lines
7.6 KiB
Go
343 lines
7.6 KiB
Go
// 校验任务条件
|
|
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
|
|
}
|