From f73939d0c6efaf6d473404283dc67e506a8d1612 Mon Sep 17 00:00:00 2001 From: liwei <2211068034@qq.com> Date: Mon, 7 Aug 2023 16:28:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E5=91=A8=E9=95=BF=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- comm/imodule.go | 12 -- modules/storyline/api_complete.go | 33 +++- modules/task/api_activereceive.go | 18 +- modules/task/api_receive.go | 21 ++- modules/task/model_active.go | 103 +++++------- modules/task/model_task.go | 265 +++++------------------------- modules/task/module.go | 129 ++++++++------- modules/user/api_initdata.go | 16 +- modules/user/api_login.go | 3 - services/worker/main.go | 3 +- 10 files changed, 212 insertions(+), 391 deletions(-) diff --git a/comm/imodule.go b/comm/imodule.go index f71d03ae8..34bc8610a 100644 --- a/comm/imodule.go +++ b/comm/imodule.go @@ -252,18 +252,6 @@ type ( } //任务 ITask interface { - //初始化 日常/周常/成就 - InitTaskAll(uid string) - // 初始化指定的任务 - InitTaskByTag(uid string, taskTag TaskTag) - //清空任务 - ResetTask(uid string, taskTag TaskTag) - // 清理玩家任务数据 - CleanData(uid string) - // 获取当前任务 - GetTaskById(uid string, taskTag, taskId int32) *pb.TaskData - // 获取已完成的日任务列表 - GetTaskDayFinished(uid string) []*pb.TaskData ///红点 IGetReddot } diff --git a/modules/storyline/api_complete.go b/modules/storyline/api_complete.go index 2e546b131..a410b54ba 100644 --- a/modules/storyline/api_complete.go +++ b/modules/storyline/api_complete.go @@ -21,6 +21,7 @@ func (this *apiComp) Complete(session comm.IUserSession, req *pb.StorylineComple conf *cfg.GameHeroupstoryChapterData award []*pb.UserAssets ok bool + iswin bool err error ) if errdata = this.CompleteCheck(session, req); errdata != nil { @@ -35,6 +36,7 @@ func (this *apiComp) Complete(session comm.IUserSession, req *pb.StorylineComple } return } + if info, err = this.module.modeltask.getUserDTasks(session.GetUserId()); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, @@ -44,6 +46,15 @@ func (this *apiComp) Complete(session comm.IUserSession, req *pb.StorylineComple return } + if item.Level[req.Level] != 0 { + errdata = &pb.ErrorData{ + Code: pb.ErrorCode_ReqParameterError, + Title: pb.ErrorCode_ReqParameterError.ToString(), + Message: fmt.Sprintf("%d received", req.Level), + } + return + } + if item, ok = info.Item[conf.Hero]; !ok { info.Item[conf.Hero] = &pb.DBStorylineItem{ Id: conf.Hero, @@ -51,14 +62,22 @@ func (this *apiComp) Complete(session comm.IUserSession, req *pb.StorylineComple } item = info.Item[conf.Hero] } - - if item.Level[req.Level] != 0 { - errdata = &pb.ErrorData{ - Code: pb.ErrorCode_ReqParameterError, - Title: pb.ErrorCode_ReqParameterError.ToString(), - Message: fmt.Sprintf("%d received", req.Level), + if conf.Leveltype == 1 { //剧情关卡 + item.Level[req.Level] = req.Story + } else if conf.Leveltype == 2 { //战斗管卡 + if errdata, iswin = this.module.battle.CheckBattleReport(session, req.Report); errdata != nil { + return } - return + if !iswin { + errdata = &pb.ErrorData{ + Code: pb.ErrorCode_ReqParameterError, + Title: pb.ErrorCode_ReqParameterError.ToString(), + Message: "battle no win!", + } + } + item.Level[req.Level] = 1 + } else { + item.Level[req.Level] = 1 } if errdata = this.module.DispenseRes(session, conf.Reward, true); errdata != nil { diff --git a/modules/task/api_activereceive.go b/modules/task/api_activereceive.go index 91e981b26..7d57db5e6 100644 --- a/modules/task/api_activereceive.go +++ b/modules/task/api_activereceive.go @@ -24,6 +24,11 @@ func (this *apiComp) ActiveReceiveCheck(session comm.IUserSession, req *pb.TaskA } func (this *apiComp) ActiveReceive(session comm.IUserSession, req *pb.TaskActiveReceiveReq) (errdata *pb.ErrorData) { + var ( + active *pb.DBActivity + err error + ) + if errdata = this.ActiveReceiveCheck(session, req); errdata != nil { return } @@ -51,9 +56,16 @@ func (this *apiComp) ActiveReceive(session comm.IUserSession, req *pb.TaskActive var flag bool update := map[string]interface{}{} // 玩家的 - activeList := this.module.modelTaskActive.getActiveList(uid) + if active, err = this.module.modelTaskActive.getActiveList(uid); err != nil { + errdata = &pb.ErrorData{ + Code: pb.ErrorCode_DBError, + Title: pb.ErrorCode_DBError.ToString(), + Message: err.Error(), + } + return + } // var activityData *pb.ActivityData - for _, v := range activeList { + for _, v := range active.ActivityList { if v.TaskId == req.Id { if v.Received != 1 { conf := this.module.configure.getTaskActiveById(v.TaskId) @@ -96,7 +108,7 @@ func (this *apiComp) ActiveReceive(session comm.IUserSession, req *pb.TaskActive } if flag { - update["activityList"] = activeList + update["activityList"] = active.ActivityList if err := this.module.modelTaskActive.Change(session.GetUserId(), update); err != nil { this.module.Errorf("updateReceive err %v", err) diff --git a/modules/task/api_receive.go b/modules/task/api_receive.go index e1752767e..9f2605d52 100644 --- a/modules/task/api_receive.go +++ b/modules/task/api_receive.go @@ -30,14 +30,19 @@ func (this *apiComp) ReceiveCheck(session comm.IUserSession, req *pb.TaskReceive } func (this *apiComp) Receive(session comm.IUserSession, req *pb.TaskReceiveReq) (errdata *pb.ErrorData) { + var ( + userTask *pb.DBTask + taskDataList []*pb.TaskData + active *pb.DBActivity + err error + ) + if errdata = this.ReceiveCheck(session, req); errdata != nil { return } uid := session.GetUserId() // 获取待领取的任务 - userTask := this.module.modelTask.getUserTask(uid, req.Id) - - if userTask == nil { + if userTask, err = this.module.modelTask.getUserTask(uid); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_TaskNotFound, Title: pb.ErrorCode_TaskNotFound.ToString(), @@ -45,8 +50,6 @@ func (this *apiComp) Receive(session comm.IUserSession, req *pb.TaskReceiveReq) return } - var taskDataList []*pb.TaskData - switch req.TaskTag { case int32(comm.TASK_DAILY): taskDataList = userTask.DayList @@ -115,10 +118,12 @@ func (this *apiComp) Receive(session comm.IUserSession, req *pb.TaskReceiveReq) // 周任务 自动领取奖励 if comm.TaskTag(req.TaskTag) == comm.TASK_WEEKLY { TaskActive := make(map[string]interface{}) - activeList := this.module.modelTaskActive.getActiveList(uid) + if active, err = this.module.modelTaskActive.getActiveList(uid); err != nil { + + } var rewards []*cfg.Gameatn var maxTaskId int32 - for _, v := range activeList { + for _, v := range active.ActivityList { if v.Received != 1 { conf := this.module.configure.getTaskActiveById(v.TaskId) if conf == nil { @@ -141,7 +146,7 @@ func (this *apiComp) Receive(session comm.IUserSession, req *pb.TaskReceiveReq) } if len(rewards) > 0 { - TaskActive["activityList"] = activeList + TaskActive["activityList"] = active.ActivityList if err := this.module.modelTaskActive.Change(session.GetUserId(), TaskActive); err != nil { this.module.Errorf("updateReceive err %v", err) diff --git a/modules/task/model_active.go b/modules/task/model_active.go index 1401c6ecb..707a071ce 100644 --- a/modules/task/model_active.go +++ b/modules/task/model_active.go @@ -3,6 +3,7 @@ package task import ( "go_dreamfactory/comm" "go_dreamfactory/lego/core" + "go_dreamfactory/lego/sys/mgo" "go_dreamfactory/modules" "go_dreamfactory/pb" @@ -13,13 +14,13 @@ import ( type ModelTaskActive struct { modules.MCompModel - moduleTask *ModuleTask + module *ModuleTask } func (this *ModelTaskActive) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) { this.TableName = comm.TableTaskActive err = this.MCompModel.Init(service, module, comp, options) - this.moduleTask = module.(*ModuleTask) + this.module = module.(*ModuleTask) // 加索引 this.DB.CreateIndex(core.SqlTable(this.TableName), mongo.IndexModel{ Keys: bsonx.Doc{{Key: "uid", Value: bsonx.Int32(1)}}, @@ -28,55 +29,40 @@ func (this *ModelTaskActive) Init(service core.IService, module core.IModule, co } // 初始化活跃度 -func (this *ModelTaskActive) initActiveReward(uid string, taskTag comm.TaskTag) { - task := &pb.DBActivity{} - if err := this.Get(uid, task); err != nil { - if err == mongo.ErrNoDocuments { - objId := primitive.NewObjectID().Hex() - task = &pb.DBActivity{ - Uid: uid, - Id: objId, - } - this.moduleTask.modelTaskActive.Add(uid, task) - } else { - this.moduleTask.Errorf("getTaskList err %v", err) - return - } - } - - data := this.moduleTask.configure.getTaskActiveByTag(int32(taskTag)) - +func (this *ModelTaskActive) initActiveReward(active *pb.DBActivity, taskTag comm.TaskTag) { + data := this.module.configure.getTaskActiveByTag(int32(taskTag)) for _, conf := range data { ta := &pb.ActivityData{ Tag: int32(taskTag), TaskId: conf.Key, } - task.ActivityList = append(task.ActivityList, ta) - } - update := map[string]interface{}{ - "activityList": task.ActivityList, - } - if err := this.moduleTask.modelTaskActive.Change(uid, update); err != nil { - this.moduleTask.Errorf("uid:%v tag:%v initActivity err %v", uid, err) - return + active.ActivityList = append(active.ActivityList, ta) } } -func (this *ModelTaskActive) getActiveList(uid string) (list []*pb.ActivityData) { - task := &pb.DBActivity{} - if err := this.Get(uid, task); err != nil { - this.moduleTask.Errorf("getTaskList err %v", err) +func (this *ModelTaskActive) getActiveList(uid string) (active *pb.DBActivity, err error) { + active = &pb.DBActivity{} + if err = this.Get(uid, active); err != nil && err != mgo.MongodbNil { + this.module.Errorf("getTaskList err %v", err) return } - - return task.ActivityList + if err == mongo.ErrNoDocuments { + objId := primitive.NewObjectID().Hex() + active = &pb.DBActivity{ + Uid: uid, + Id: objId, + ActivityList: make([]*pb.ActivityData, 0), + } + err = this.Add(uid, active) + } + return } // 获取玩家活跃度列表 func (this *ModelTaskActive) getActiveListByTag(uid string, taskTag comm.TaskTag) (list []*pb.ActivityData) { task := &pb.DBActivity{} if err := this.Get(uid, task); err != nil { - this.moduleTask.Errorf("getTaskList err %v", err) + this.module.Errorf("getTaskList err %v", err) return } @@ -90,29 +76,19 @@ func (this *ModelTaskActive) getActiveListByTag(uid string, taskTag comm.TaskTag } // 查询完成的且未领取的任务 发现未领取返回true -func (this *ModelTaskActive) noReceiveTaskActive(uid string, taskTag comm.TaskTag) (bool, error) { - // 获取玩家活跃度 - expand, err := this.moduleTask.ModuleUser.GetUserExpand(uid) - if err != nil { - return false, err - } - task := &pb.DBActivity{} - if err := this.Get(uid, task); err != nil { - // this.moduleTask.Warnf("getTaskActivityList err %v", err) - return false, err - } +func (this *ModelTaskActive) noReceiveTaskActive(user *pb.DBUserExpand, activityList []*pb.ActivityData, taskTag comm.TaskTag) (bool, error) { - for _, v := range task.ActivityList { + for _, v := range activityList { if v.Tag == int32(taskTag) && v.Received == 0 { - conf := this.moduleTask.configure.getTaskActiveById(v.TaskId) - if conf != nil && expand != nil { + conf := this.module.configure.getTaskActiveById(v.TaskId) + if conf != nil && user != nil { switch taskTag { case comm.TASK_DAILY: - if expand.Activeday >= conf.Active { + if user.Activeday >= conf.Active { return true, nil } case comm.TASK_WEEKLY: - if expand.Activeweek >= conf.Active { + if user.Activeweek >= conf.Active { return true, nil } } @@ -137,27 +113,34 @@ func (this *ModelTaskActive) updateReceive(uid string, data map[string]interface if len(data) == 0 { return } - return this.moduleTask.modelTaskActive.Change(uid, data) + return this.module.modelTaskActive.Change(uid, data) } // 清空活跃度任务 func (this *ModelTaskActive) clearTask(uid string, taskTag ...comm.TaskTag) { if len(taskTag) == 0 { - this.moduleTask.Errorf("least one param for taskTag") + this.module.Errorf("least one param for taskTag") return } - data := this.getActiveList(uid) - for i := 0; i < len(data); i++ { - if data[i].Tag == int32(taskTag[0]) { - data = append(data[:i], data[i+1:]...) + var ( + active *pb.DBActivity + err error + ) + if active, err = this.getActiveList(uid); err != nil { + this.module.Errorln(err) + return + } + for i := 0; i < len(active.ActivityList); i++ { + if active.ActivityList[i].Tag == int32(taskTag[0]) { + active.ActivityList = append(active.ActivityList[:i], active.ActivityList[i+1:]...) i-- } } update := map[string]interface{}{ - "activityList": data, + "activityList": active.ActivityList, } - if err := this.moduleTask.modelTaskActive.Change(uid, update); err != nil { - this.moduleTask.Errorf("uid: %v err:%v", uid, err) + if err := this.module.modelTaskActive.Change(uid, update); err != nil { + this.module.Errorf("uid: %v err:%v", uid, err) return } diff --git a/modules/task/model_task.go b/modules/task/model_task.go index 8cf6032a5..8fd4cc27b 100644 --- a/modules/task/model_task.go +++ b/modules/task/model_task.go @@ -6,6 +6,7 @@ import ( "go_dreamfactory/lego/core" event_v2 "go_dreamfactory/lego/sys/event/v2" "go_dreamfactory/lego/sys/log" + "go_dreamfactory/lego/sys/mgo" "go_dreamfactory/modules" "go_dreamfactory/pb" "sort" @@ -18,14 +19,14 @@ import ( type ModelTask struct { modules.MCompModel - moduleTask *ModuleTask - EventApp *event_v2.App + module *ModuleTask + EventApp *event_v2.App } func (this *ModelTask) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) { this.TableName = comm.TableTask err = this.MCompModel.Init(service, module, comp, options) - this.moduleTask = module.(*ModuleTask) + this.module = module.(*ModuleTask) this.EventApp = event_v2.NewApp() // this.EventApp.Listen(comm.EventTaskChanged, this.doTaskHandle) this.DB.CreateIndex(core.SqlTable(this.TableName), mongo.IndexModel{ @@ -35,12 +36,7 @@ func (this *ModelTask) Init(service core.IService, module core.IModule, comp cor } // 查询完成的且未领取的任务 发现未领取返回true -func (this *ModelTask) noReceiveTask(uid string, taskTag comm.TaskTag) (bool, error) { - task := &pb.DBTask{} - if err := this.Get(uid, task); err != nil { - this.moduleTask.Errorf("getTaskList err %v", err) - return false, err - } +func (this *ModelTask) noReceiveTask(task *pb.DBTask, taskTag comm.TaskTag) (bool, error) { if taskTag == comm.TASK_DAILY { for _, v := range task.DayList { if v.Received == 0 { @@ -64,9 +60,9 @@ func (this *ModelTask) checkTaskStatus(uid string, list []*pb.TaskData) []*pb.Ta condIds = append(condIds, v.TypeId) } - conds, err := this.moduleTask.ModuleBuried.CheckCondition(uid, condIds...) + conds, err := this.module.ModuleBuried.CheckCondition(uid, condIds...) if err != nil { - this.moduleTask.Error(err.Error()) + this.module.Error(err.Error()) return nil } @@ -88,7 +84,7 @@ func (this *ModelTask) checkTaskStatus(uid string, list []*pb.TaskData) []*pb.Ta func (this *ModelTask) getTaskListByTag(uid string, taskTag comm.TaskTag) *pb.DBTask { task := &pb.DBTask{} if err := this.Get(uid, task); err != nil { - this.moduleTask.Errorf("getTaskList err %v", err) + this.module.Errorf("getTaskList err %v", err) return nil } @@ -120,8 +116,8 @@ func (this *ModelTask) getTaskListByTag(uid string, taskTag comm.TaskTag) *pb.DB update["weekList"] = dataList } - if err := this.moduleTask.modelTask.Change(uid, update); err != nil { - this.moduleTask.Error("change err", log.Field{Key: "uid", Value: uid}) + if err := this.module.modelTask.Change(uid, update); err != nil { + this.module.Error("change err", log.Field{Key: "uid", Value: uid}) } // 当前玩家成就任务 @@ -136,7 +132,7 @@ func (this *ModelTask) getTaskListByTag(uid string, taskTag comm.TaskTag) *pb.DB // 判断上个成就任务领取了才显示最后一个任务 isReceived := func(taskId int32) bool { - if preCnf := this.moduleTask.configure.getPreTask(taskId); preCnf != nil { + if preCnf := this.module.configure.getPreTask(taskId); preCnf != nil { if preTask := getCurTask(preCnf.Key); preTask != nil { if preTask.Received == 1 { return true @@ -151,16 +147,16 @@ func (this *ModelTask) getTaskListByTag(uid string, taskTag comm.TaskTag) *pb.DB if taskTag == comm.TASK_ACHIEVE { for _, v := range task.AchieveList { - if curTask := this.moduleTask.configure.getTaskById(v.TaskId); curTask != nil { + if curTask := this.module.configure.getTaskById(v.TaskId); curTask != nil { if v.Received == 0 { - isFirst := this.moduleTask.configure.isFirstTask(curTask.Key) + isFirst := this.module.configure.isFirstTask(curTask.Key) if curTask.IdAfter == 0 && isFirst { //未领取和没有下个连续任务的 achieveList = append(achieveList, v) continue } if isFirst && curTask.IdAfter != 0 { //连续任务的第一个任务 - next := this.moduleTask.configure.getTaskById(curTask.IdAfter) + next := this.module.configure.getTaskById(curTask.IdAfter) if next != nil && v.Received == 0 { achieveList = append(achieveList, v) } @@ -176,7 +172,7 @@ func (this *ModelTask) getTaskListByTag(uid string, taskTag comm.TaskTag) *pb.DB achieveList = this.checkTaskStatus(uid, achieveList) update["achieveList"] = achieveList - if err := this.moduleTask.modelTask.Change(uid, update); err != nil { + if err := this.module.modelTask.Change(uid, update); err != nil { log.Error("err", log.Field{Key: "uid", Value: uid}) } @@ -190,7 +186,7 @@ func (this *ModelTask) getTaskListByTag(uid string, taskTag comm.TaskTag) *pb.DB func (this *ModelTask) getTaskById(uid string, taskTag comm.TaskTag, taskId int32) *pb.DBTask { task := &pb.DBTask{} if err := this.Get(uid, task); err != nil { - this.moduleTask.Errorf("getTaskById err %v", err) + this.module.Errorf("getTaskById err %v", err) return nil } @@ -220,28 +216,13 @@ func (this *ModelTask) getTaskById(uid string, taskTag comm.TaskTag, taskId int3 } // 初始化任务 -func (this *ModelTask) initTask(uid string, taskTag comm.TaskTag) error { - task := &pb.DBTask{} - if err := this.Get(uid, task); err != nil { - if err == mongo.ErrNoDocuments { - objId := primitive.NewObjectID().Hex() - task = &pb.DBTask{ - Uid: uid, - Id: objId, - } - if err := this.Add(uid, task); err != nil { - this.moduleTask.Errorf("initTask addlists err %v", err) - return err - } - } else { - this.moduleTask.Errorf("getTaskList err %v", err) - return err - } - } - - data := this.moduleTask.configure.getTaskByTag(int32(taskTag)) - update := map[string]interface{}{} +func (this *ModelTask) initTask(opencond map[string]int32, task *pb.DBTask, taskTag comm.TaskTag) error { + data := this.module.configure.getTaskByTag(int32(taskTag)) for _, cnf := range data { + if unlock, ok := opencond[cnf.Open]; !ok || unlock != 2 { + continue + } + t := &pb.TaskData{ Tag: cnf.IdTag, TypeId: cnf.TypeId, @@ -251,59 +232,39 @@ func (this *ModelTask) initTask(uid string, taskTag comm.TaskTag) error { } if taskTag == comm.TASK_DAILY { task.DayList = append(task.DayList, t) - update["dayList"] = task.DayList } else if taskTag == comm.TASK_WEEKLY { task.WeekList = append(task.WeekList, t) - update["weekList"] = task.WeekList } else if taskTag == comm.TASK_ACHIEVE { task.AchieveList = append(task.AchieveList, t) - update["achieveList"] = task.AchieveList - } - } - - if len(update) > 0 { - if err := this.Change(uid, update); err != nil { - this.moduleTask.Errorf("initTask err %v", err) - return err } } return nil } // 查询用户任务 -func (this *ModelTask) getUserTask(uid string, taskId int32) *pb.DBTask { - task := &pb.DBTask{} - if err := this.Get(uid, task); err != nil { - this.moduleTask.Errorf("getTaskList err %v", err) - return nil +func (this *ModelTask) getUserTask(uid string) (task *pb.DBTask, err error) { + task = &pb.DBTask{} + if err = this.Get(uid, task); err != nil && err != mgo.MongodbNil { + return } - return task + if err == mongo.ErrNoDocuments { + objId := primitive.NewObjectID().Hex() + task = &pb.DBTask{ + Uid: uid, + Id: objId, + } + if err = this.Add(uid, task); err != nil { + return + } + } + return } -// 获取已完成的(日、周)任务 -// func (this *ModelTask) getFinishTasks(uid string, taskTag comm.TaskTag) (list []*pb.TaskData) { -// task := this.getTaskListByTag(uid, taskTag) -// if taskTag == comm.TASK_DAILY { -// for _, v := range task.DayList { -// if v.Status == 1 { -// list = append(list, v) -// } -// } -// } else if taskTag == comm.TASK_WEEKLY { -// for _, v := range task.WeekList { -// if v.Status == 1 { -// list = append(list, v) -// } -// } -// } -// return -// } - // 获取待处理的(日、周)任务 func (this *ModelTask) getUnFinishTasks(uid string, taskId int32) (list []*pb.TaskData) { task := &pb.DBTask{} if err := this.Get(uid, task); err != nil { - this.moduleTask.Errorf("getTaskById err %v", err) + this.module.Errorf("getTaskById err %v", err) return nil } @@ -330,23 +291,12 @@ func (this *ModelTask) getUnFinishTasks(uid string, taskId int32) (list []*pb.Ta return } -// 检查任务状态 返回等待处理的任务 -func (this *ModelTask) checkTask(uid string, taskId int32) (*pb.TaskData, bool) { - taskList := this.getUnFinishTasks(uid, taskId) - for _, v := range taskList { - if taskId == v.TaskId { - return v, true - } - } - return nil, false -} - // 更改用户任务 // Deprecated func (this *ModelTask) modifyUserTask(uid string, taskId int32, data map[string]interface{}) error { var task *pb.DBTask if err := this.GetList(uid, &task); err != nil { - this.moduleTask.Errorf("getTaskById err %v", err) + this.module.Errorf("getTaskById err %v", err) return nil } var err error @@ -386,146 +336,15 @@ func (this *ModelTask) modifyUserTask(uid string, taskId int32, data map[string] return err } -// 清空任务 -// func (this *ModelTask) clearTask(uid string, taskTag ...comm.TaskTag) { -// if len(taskTag) == 0 { -// this.moduleTask.Error("TaskTag参数缺失", -// log.Field{Key: "uid", Value: uid}, -// log.Field{Key: "params", Value: taskTag}, -// ) -// return -// } -// var task *pb.DBTask -// if err := this.GetList(uid, &task); err != nil { -// this.moduleTask.Errorf("getTaskById err %v", err) -// return -// } - -// if task == nil { -// this.moduleTask.Error("任务数据空", -// log.Field{Key: "uid", Value: uid}, -// log.Field{Key: "taskTag", Value: taskTag}, -// ) -// return -// } - -// dr := this.moduleTask.ModuleRtask.GetCondiData(uid) - -// update := map[string]interface{}{} -// if taskTag[0] == comm.TASK_DAILY { -// for _, v := range task.DayList { -// //删除任务条件数据 -// if dr != nil && dr.Vals != nil { -// delete(dr.Vals, v.TypeId) -// } -// } -// if err := this.moduleTask.ModuleRtask.ChangeCondi(uid, dr.Vals); err != nil { -// this.moduleTask.Error("更新任务条件数据", log.Field{Key: "uid", Value: uid}) -// } -// update["dayList"] = make([]*pb.TaskData, 0) -// } else if taskTag[0] == comm.TASK_WEEKLY { -// for _, v := range task.WeekList { -// //删除任务条件数据 -// if dr != nil && dr.Vals != nil { -// delete(dr.Vals, v.TypeId) -// } -// } -// if err := this.moduleTask.ModuleRtask.ChangeCondi(uid, dr.Vals); err != nil { -// this.moduleTask.Error("更新任务条件数据", log.Field{Key: "uid", Value: uid}) -// } -// update["weekList"] = make([]*pb.TaskData, 0) -// } else if taskTag[0] == comm.TASK_ACHIEVE { -// for _, v := range task.AchieveList { -// //删除任务条件数据 -// if dr != nil && dr.Vals != nil { -// delete(dr.Vals, v.TypeId) -// } -// } -// if err := this.moduleTask.ModuleRtask.ChangeCondi(uid, dr.Vals); err != nil { -// this.moduleTask.Error("更新任务条件数据", log.Field{Key: "uid", Value: uid}) -// } -// update["weekList"] = make([]*pb.TaskData, 0) -// } - -// if err := this.moduleTask.modelTask.Change(uid, update); err != nil { -// this.moduleTask.Error("清空任务数据", log.Field{Key: "uid", Value: uid}) -// } - -// } - -// 任务处理 -// func (this *ModelTask) doTaskHandle(event interface{}, next func(event interface{})) { -// tl := event.(*TaskListen) - -// data, err := this.moduleTask.configure.getTasks(int32(tl.TaskType)) -// if err != nil { -// this.moduleTask.Errorf("taskHandle err %v", err) -// return -// } - -// // 获取玩家的任务条件数据 -// dr := this.moduleTask.ModuleRtask.GetCondiData(tl.Uid) -// if dr == nil { -// return -// } - -// // 遍历事件列表 -// for _, conf := range data { -// // 从任务条件中查找 -// ret, ok := dr.Vals[conf.TypeId] -// if !ok { -// continue -// } - -// task, ok := this.checkTask(tl.Uid, conf.Key) -// if !ok { -// this.moduleTask.Debug("任务已完成", log.Field{Key: "uid", Value: tl.Uid}, log.Field{Key: "任务ID", Value: conf.Key}) -// continue -// } - -// var ( -// progress int32 -// update map[string]interface{} -// ) - -// if code := this.moduleTask.ModuleRtask.CheckCondi(tl.Uid, conf.TypeId); code == nil { -// // update data -// if ret != nil && len(ret.Data) > 0 { -// progress = ret.Data[0] -// } -// update = map[string]interface{}{ -// "progress": progress, -// "status": 1, -// } -// } else { -// if ret != nil && len(ret.Data) > 0 { -// progress = ret.Data[0] -// } -// update = map[string]interface{}{ -// "progress": progress, -// } -// } -// if err = this.modifyUserTask(tl.Uid, task.TaskId, update); err != nil { -// return -// } -// this.moduleTask.Debug("更新任务", -// log.Field{Key: "uid", Value: tl.Uid}, log.Field{Key: "任务ID", Value: conf.Key}, -// log.Field{Key: "事件ID", Value: conf.TypeId}, log.Field{Key: "progress", Value: update["progress"]}, -// log.Field{Key: "status", Value: update["status"]}, -// ) -// } -// return -// } - // 更新活跃度 func (this *ModelTask) updateActive(uid string, cfgId int32) error { // 更新活跃度 - de, err := this.moduleTask.ModuleUser.GetUserExpand(uid) + de, err := this.module.ModuleUser.GetUserExpand(uid) if err != nil { return err } - conf := this.moduleTask.configure.getTaskById(cfgId) + conf := this.module.configure.getTaskById(cfgId) if conf == nil { return errors.New(fmt.Sprintf("%v config nil", cfgId)) } @@ -542,7 +361,7 @@ func (this *ModelTask) updateActive(uid string, cfgId int32) error { "activeweek": de.Activeweek, } - return this.moduleTask.ModuleUser.ChangeUserExpand(uid, update) + return this.module.ModuleUser.ChangeUserExpand(uid, update) } type TaskListen struct { diff --git a/modules/task/module.go b/modules/task/module.go index c08ba2561..e7170e571 100644 --- a/modules/task/module.go +++ b/modules/task/module.go @@ -51,30 +51,50 @@ func (this *ModuleTask) OnInstallComp() { // 模块启动接口 func (this *ModuleTask) Start() (err error) { err = this.ModuleBase.Start() + event.RegisterGO(comm.EventUserLogin, this.EventUserLogin) event.RegisterGO(comm.EventUserOffline, this.CleanTask) return } -// 初始化日常、周常、成就 -func (this *ModuleTask) InitTaskAll(uid string) { - this.modelTask.initTask(uid, comm.TASK_DAILY) - this.modelTask.initTask(uid, comm.TASK_WEEKLY) - this.modelTask.initTask(uid, comm.TASK_ACHIEVE) - this.modelTaskActive.initActiveReward(uid, comm.TASK_DAILY) - this.modelTaskActive.initActiveReward(uid, comm.TASK_WEEKLY) -} +func (this *ModuleTask) EventUserLogin(session comm.IUserSession) { + var ( + opencond map[string]int32 + errdata *pb.ErrorData + task *pb.DBTask + active *pb.DBActivity + err error + ) + if opencond, errdata = this.ModuleSys.QueryOpenCondData(session.GetUserId()); errdata != nil { + this.Errorf("getTaskList err %v", errdata) + return + } -// 初始化指定的任务 -func (this *ModuleTask) InitTaskByTag(uid string, taskTag comm.TaskTag) { - switch taskTag { - case comm.TASK_DAILY: - this.modelTask.initTask(uid, comm.TASK_DAILY) - this.modelTaskActive.initActiveReward(uid, comm.TASK_DAILY) - case comm.TASK_WEEKLY: - this.modelTask.initTask(uid, comm.TASK_WEEKLY) - this.modelTaskActive.initActiveReward(uid, comm.TASK_WEEKLY) - case comm.TASK_ACHIEVE: - this.modelTask.initTask(uid, comm.TASK_ACHIEVE) + if task, err = this.modelTask.getUserTask(session.GetUserId()); err != nil { + this.Errorf("getTaskList err %v", err) + return + } + this.modelTask.initTask(opencond, task, comm.TASK_DAILY) + this.modelTask.initTask(opencond, task, comm.TASK_WEEKLY) + this.modelTask.initTask(opencond, task, comm.TASK_ACHIEVE) + if err = this.modelTask.Change(session.GetUserId(), map[string]interface{}{ + "dayList": task.DayList, + "weekList": task.WeekList, + "achieveList": task.AchieveList, + }); err != nil { + log.Error("err", log.Field{Key: "uid", Value: session.GetUserId()}) + return + } + + if active, err = this.modelTaskActive.getActiveList(session.GetUserId()); err != nil { + return + } + this.modelTaskActive.initActiveReward(active, comm.TASK_DAILY) + this.modelTaskActive.initActiveReward(active, comm.TASK_WEEKLY) + if err = this.modelTaskActive.Change(session.GetUserId(), map[string]interface{}{ + "activityList": active.ActivityList, + }); err != nil { + log.Error("err", log.Field{Key: "uid", Value: session.GetUserId()}) + return } } @@ -97,61 +117,40 @@ func (this *ModuleTask) resetActive(uid string, taskTag comm.TaskTag) { } } -// 获取玩家指定任务 -func (this *ModuleTask) GetTaskById(uid string, taskTag, taskId int32) *pb.TaskData { - var task *pb.DBTask - if err := this.modelTask.GetList(uid, &task); err != nil { - log.Errorf("GetTaskById err %v", err) - return nil - } - - if taskTag == int32(comm.TASK_DAILY) { - for _, v := range task.DayList { - if v.TaskId == taskId { - return v - } - } - } - - return nil -} - -// 重置任务 -func (this *ModuleTask) ResetTask(uid string, taskTag comm.TaskTag) { - this.resetActive(uid, taskTag) - // this.modelTask.clearTask(uid, taskTag) - this.modelTaskActive.clearTask(uid, taskTag) -} - -// 清理任务数据 -func (this *ModuleTask) CleanData(uid string) { - // this.modelTask.clearTask(uid) - this.modelTaskActive.clearTask(uid) -} - -// 任务处理器注册 -type taskHandle func(uid string, taskId int32, tp *pb.TaskParam) *pb.DBTask - -// 获取每日任务列表 -// Deprecated -func (this *ModuleTask) GetTaskDayFinished(uid string) []*pb.TaskData { - return nil //this.modelTask.getFinishTasks(uid, comm.TASK_DAILY) -} - func (this *ModuleTask) Reddot(session comm.IUserSession, rid ...comm.ReddotType) (reddot map[comm.ReddotType]*pb.ReddotItem) { reddot = make(map[comm.ReddotType]*pb.ReddotItem) + var ( + task *pb.DBTask = &pb.DBTask{} + active *pb.DBActivity + userExpand *pb.DBUserExpand + err error + ) + if task, err = this.modelTask.getUserTask(session.GetUserId()); err != nil { + this.Errorf("getTaskList err %v", err) + return + } + + if active, err = this.modelTaskActive.getActiveList(session.GetUserId()); err != nil { + return + } + // 获取玩家活跃度 + userExpand, err = this.ModuleUser.GetUserExpand(session.GetUserId()) + if err != nil { + return + } for _, v := range rid { + switch v { case comm.Reddot10101: - tf, _ := this.modelTask.noReceiveTask(session.GetUserId(), comm.TASK_DAILY) + tf, _ := this.modelTask.noReceiveTask(task, comm.TASK_DAILY) reddot[comm.Reddot10101] = &pb.ReddotItem{ Rid: int32(comm.Reddot10101), Activated: tf, Nextchanagetime: 0, } case comm.Reddot10102: - tf, _ := this.modelTask.noReceiveTask(session.GetUserId(), comm.TASK_WEEKLY) + tf, _ := this.modelTask.noReceiveTask(task, comm.TASK_WEEKLY) reddot[comm.Reddot10102] = &pb.ReddotItem{ Rid: int32(comm.Reddot10102), Activated: tf, @@ -159,21 +158,21 @@ func (this *ModuleTask) Reddot(session comm.IUserSession, rid ...comm.ReddotType } case comm.Reddot10103: - tf, _ := this.modelTask.noReceiveTask(session.GetUserId(), comm.TASK_ACHIEVE) + tf, _ := this.modelTask.noReceiveTask(task, comm.TASK_ACHIEVE) reddot[comm.Reddot10103] = &pb.ReddotItem{ Rid: int32(comm.Reddot10103), Activated: tf, Nextchanagetime: 0, } case comm.Reddot10201: - tf, _ := this.modelTaskActive.noReceiveTaskActive(session.GetUserId(), comm.TASK_DAILY) + tf, _ := this.modelTaskActive.noReceiveTaskActive(userExpand, active.ActivityList, comm.TASK_DAILY) reddot[comm.Reddot10201] = &pb.ReddotItem{ Rid: int32(comm.Reddot10201), Activated: tf, Nextchanagetime: 0, } case comm.Reddot10301: - tf, _ := this.modelTaskActive.noReceiveTaskActive(session.GetUserId(), comm.TASK_WEEKLY) + tf, _ := this.modelTaskActive.noReceiveTaskActive(userExpand, active.ActivityList, comm.TASK_WEEKLY) reddot[comm.Reddot10301] = &pb.ReddotItem{ Rid: int32(comm.Reddot10301), Activated: tf, diff --git a/modules/user/api_initdata.go b/modules/user/api_initdata.go index 1142a0638..533972c7f 100644 --- a/modules/user/api_initdata.go +++ b/modules/user/api_initdata.go @@ -31,8 +31,8 @@ func (this *apiComp) Initdata(session comm.IUserSession, req *pb.UserInitdataReq if !this.module.modelSetting.checkInitCount(session.GetUserId()) { errdata = &pb.ErrorData{ - Code: pb.ErrorCode_UserResetData, - Title: pb.ErrorCode_UserResetData.ToString(), + Code: pb.ErrorCode_UserResetData, + Title: pb.ErrorCode_UserResetData.ToString(), } return } @@ -40,24 +40,22 @@ func (this *apiComp) Initdata(session comm.IUserSession, req *pb.UserInitdataReq if vc, ok := this.module.modelSetting.checkVeriCode(session.GetUserId()); ok { if vc != req.Code { errdata = &pb.ErrorData{ - Code: pb.ErrorCode_VeriCodeNoValid, - Title: pb.ErrorCode_VeriCodeNoValid.ToString(), + Code: pb.ErrorCode_VeriCodeNoValid, + Title: pb.ErrorCode_VeriCodeNoValid.ToString(), } return } else { //验证码验证通过 // TODO 检查该用户是否加入过工会 // 清除玩家数据 - this.module.ModuleTask.CleanData(session.GetUserId()) //玩家任务 this.module.ModuleHero.CleanData(session.GetUserId()) //英雄数据 this.module.modelSetting.cleanData(session.GetUserId()) //用户设置 - - this.module.modelUser.delete(session.GetUserId()) //删除用户 + this.module.modelUser.delete(session.GetUserId()) //删除用户 } } else { errdata = &pb.ErrorData{ - Code: pb.ErrorCode_VeriCodeExpired, - Title: pb.ErrorCode_VeriCodeExpired.ToString(), + Code: pb.ErrorCode_VeriCodeExpired, + Title: pb.ErrorCode_VeriCodeExpired.ToString(), } } return diff --git a/modules/user/api_login.go b/modules/user/api_login.go index 9d0fec1fa..0c6b50cca 100644 --- a/modules/user/api_login.go +++ b/modules/user/api_login.go @@ -66,9 +66,6 @@ func (this *apiComp) Login(session comm.IUserSession, req *pb.UserLoginReq) (err log.Errorf("User_CreateUser err %v", err) return } - - //初始化任务 - go this.module.ModuleTask.InitTaskAll(user.Uid) isNewUser = true } else { // 玩家是否已在线 diff --git a/services/worker/main.go b/services/worker/main.go index adfffebaa..f4df38510 100644 --- a/services/worker/main.go +++ b/services/worker/main.go @@ -53,6 +53,7 @@ import ( "go_dreamfactory/modules/smithy" "go_dreamfactory/modules/sociaty" "go_dreamfactory/modules/stonehenge" + "go_dreamfactory/modules/storyline" "go_dreamfactory/modules/sys" "go_dreamfactory/modules/task" "go_dreamfactory/modules/tools" @@ -119,7 +120,6 @@ func main() { pay.NewModule(), privilege.NewModule(), growtask.NewModule(), - // worldtask.NewModule(), academy.NewModule(), reddot.NewModule(), combat.NewModule(), @@ -149,6 +149,7 @@ func main() { herotask.NewModule(), shopcenter.NewModule(), addrecharge.NewModule(), + storyline.NewModule(), ) }