From ab3528cd59d4657ca91d38f000aabdb49c6b1f36 Mon Sep 17 00:00:00 2001 From: wh_zcy Date: Thu, 1 Jun 2023 14:56:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BB=BB=E5=8A=A1=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/worldtask/api_accept.go | 13 ++++-- modules/worldtask/api_completetask.go | 13 ++++-- modules/worldtask/api_finish.go | 59 +++++++++++++++------------ modules/worldtask/model_worldtask.go | 48 +++++++++++----------- modules/worldtask/module.go | 10 ++--- 5 files changed, 83 insertions(+), 60 deletions(-) diff --git a/modules/worldtask/api_accept.go b/modules/worldtask/api_accept.go index c57cf1e86..92788d5a9 100644 --- a/modules/worldtask/api_accept.go +++ b/modules/worldtask/api_accept.go @@ -4,7 +4,6 @@ import ( "fmt" "go_dreamfactory/comm" "go_dreamfactory/pb" - "go_dreamfactory/utils" ) // 任务接取 @@ -90,9 +89,17 @@ func (a *apiComp) Accept(session comm.IUserSession, req *pb.WorldtaskAcceptReq) a.module.modelWorldtask.taskFinishPush(session, req.GroupId, myWorldtask, curTaskConf) } else { // 已完成的任务条件 - rsp.CondiIds, _, err = a.module.ModuleBuried.CheckCondition(uid, curTaskConf.Completetask...) + conds, err := a.module.ModuleBuried.CheckCondition(uid, curTaskConf.Completetask...) if err == nil { - a.module.ModuleBuried.ActiveCondition(uid, utils.NoContain(rsp.CondiIds, curTaskConf.Completetask)...) + var unfinishCondIds []int32 + for _, cond := range conds { + if cond.State == pb.BuriedItemFinishState_finish { + rsp.CondiIds = append(rsp.CondiIds, cond.Conid) + } else if cond.State == pb.BuriedItemFinishState_unfinish { + unfinishCondIds = append(unfinishCondIds, cond.Conid) + } + } + a.module.ModuleBuried.ActiveCondition(uid, unfinishCondIds...) } } diff --git a/modules/worldtask/api_completetask.go b/modules/worldtask/api_completetask.go index d73d191f2..89ae663b8 100644 --- a/modules/worldtask/api_completetask.go +++ b/modules/worldtask/api_completetask.go @@ -45,9 +45,16 @@ func (this *apiComp) CompleteCondi(session comm.IUserSession, req *pb.WorldtaskC myWorldtask.Uid = uid wt := myWorldtask.CurrentTask[req.GroupId] - condIds, _, err := this.module.ModuleBuried.CheckCondition(uid, req.CondiId) - if err == nil && len(condIds) > 0 { - wt.CondiIds = append(wt.CondiIds, condIds...) + conds, err := this.module.ModuleBuried.CheckCondition(uid, req.CondiId) + if err != nil { + code = pb.ErrorCode_ExternalModule + data.Title = code.ToString() + data.Message = comm.NewExternalModuleErr("buried", "CheckCondition", uid, req.CondiId).Error() + } + for _, cond := range conds { + if cond.State == pb.BuriedItemFinishState_finish { + wt.CondiIds = append(wt.CondiIds, cond.Conid) + } } myWorldtask.CurrentTask[req.GroupId] = wt diff --git a/modules/worldtask/api_finish.go b/modules/worldtask/api_finish.go index 70fd52d52..0e62a3063 100644 --- a/modules/worldtask/api_finish.go +++ b/modules/worldtask/api_finish.go @@ -104,11 +104,8 @@ func (this *apiComp) Finish(session comm.IUserSession, req *pb.WorldtaskFinishRe for _, condId := range curTaskConf.Completetask { if v, ok := userTask.CurrentTask[req.GroupId]; ok { if _, ok := utils.Findx(v.CondiIds, condId); !ok { - // - conIds, _, err := this.module.ModuleBuried.CheckCondition(uid, condId) - if err == nil && len(conIds) > 0 { - condiFlag = true - } else { + conds, err := this.module.ModuleBuried.CheckCondition(uid, condId) + if err != nil { code = pb.ErrorCode_ExternalModule data = &pb.ErrorData{ Title: code.ToString(), @@ -116,6 +113,11 @@ func (this *apiComp) Finish(session comm.IUserSession, req *pb.WorldtaskFinishRe } return } + for _, cond := range conds { + if cond.Conid == condId && cond.State == pb.BuriedItemFinishState_finish { + condiFlag = true + } + } } else { condiFlag = true } @@ -164,6 +166,7 @@ func (this *apiComp) Finish(session comm.IUserSession, req *pb.WorldtaskFinishRe return } +// Deprecated func (this *apiComp) updateCheckCond(uid string, userTask *pb.DBWorldtask, nextTaskId int32) (*pb.DBWorldtask, error) { //检查下个任务的完成条件 nextTaskConf, err := this.module.configure.getWorldtaskById(nextTaskId) @@ -190,29 +193,33 @@ func (this *apiComp) updateCheckCond(uid string, userTask *pb.DBWorldtask, nextT userTask.CurrentTask[nextTaskConf.Group] = wt update["currentTask"] = userTask.CurrentTask } else { - for _, condiId := range nextTaskConf.Completetask { - if condiId == 0 { - continue + nwt, ok := userTask.CurrentTask[nextTaskConf.Group] + if ok { + nwt.TaskId = nextTaskId + nwt.TaskType = nextTaskConf.Des + } else { + nwt = &pb.Worldtask{ + TaskId: nextTaskId, + TaskType: nextTaskConf.Des, } - nwt, ok := userTask.CurrentTask[nextTaskConf.Group] - if ok { - nwt.TaskId = nextTaskId - nwt.TaskType = nextTaskConf.Des - } else { - nwt = &pb.Worldtask{ - TaskId: nextTaskId, - TaskType: nextTaskConf.Des, - } - } - - condIds, _, err := this.module.ModuleBuried.CheckCondition(uid, condiId) - if err == nil && len(condIds) > 0 { - nwt.CondiIds = condIds - userTask.CurrentTask[nextTaskConf.Group] = nwt - update["currentTask"] = userTask.CurrentTask - } - } + + conds, err := this.module.ModuleBuried.CheckCondition(uid, nextTaskConf.Completetask...) + if err != nil { + this.module.Errorf("buried err:%v", err.Error()) + return nil, err + } + + var condIds []int32 + for _, cond := range conds { + if cond.State == pb.BuriedItemFinishState_finish { + condIds = append(condIds, cond.Conid) + } + } + + nwt.CondiIds = condIds + userTask.CurrentTask[nextTaskConf.Group] = nwt + update["currentTask"] = userTask.CurrentTask } if len(update) > 0 { diff --git a/modules/worldtask/model_worldtask.go b/modules/worldtask/model_worldtask.go index 6e25f993a..530f32525 100644 --- a/modules/worldtask/model_worldtask.go +++ b/modules/worldtask/model_worldtask.go @@ -195,31 +195,33 @@ func (this *ModelWorldtask) updateCurrentTaskCond(uid string, userLv int32, user userTask.CurrentTask[nextTaskConf.Group] = wt update["currentTask"] = userTask.CurrentTask } else { - for _, condiId := range nextTaskConf.Completetask { - if condiId == 0 { - continue + nwt, ok := userTask.CurrentTask[nextTaskConf.Group] + if ok { + nwt.TaskId = nextTaskId + nwt.TaskType = nextTaskConf.Des + } else { + nwt = &pb.Worldtask{ + TaskId: nextTaskId, + TaskType: nextTaskConf.Des, } - nwt, ok := userTask.CurrentTask[nextTaskConf.Group] - if ok { - nwt.TaskId = nextTaskId - nwt.TaskType = nextTaskConf.Des - } else { - nwt = &pb.Worldtask{ - TaskId: nextTaskId, - TaskType: nextTaskConf.Des, - } - } - - condIds, _, err := this.moduleWorldtask.ModuleBuried.CheckCondition(uid, condiId) - if err == nil && len(condIds) > 0 { - nwt.CondiIds = condIds - userTask.CurrentTask[nextTaskConf.Group] = nwt - update["currentTask"] = userTask.CurrentTask - } - userTask.CurrentTask[nextTaskConf.Group] = nwt - update["currentTask"] = userTask.CurrentTask - } + + conds, err := this.moduleWorldtask.ModuleBuried.CheckCondition(uid, nextTaskConf.Completetask...) + if err != nil { + this.moduleWorldtask.Errorf("buried err:%v", err.Error()) + return nil + } + + var condIds []int32 + for _, cond := range conds { + if cond.State == pb.BuriedItemFinishState_finish { + condIds = append(condIds, cond.Conid) + } + } + + nwt.CondiIds = condIds + userTask.CurrentTask[nextTaskConf.Group] = nwt + update["currentTask"] = userTask.CurrentTask } if len(update) > 0 { diff --git a/modules/worldtask/module.go b/modules/worldtask/module.go index 1acef7f32..a8a8f46c7 100644 --- a/modules/worldtask/module.go +++ b/modules/worldtask/module.go @@ -58,8 +58,8 @@ func (this *Worldtask) Start() (err error) { return } -func (this *Worldtask) TCondFinishNotify(uid string, conids []int32) { - this.Debug("世界任务完成条件通知", log.Field{Key: "uid", Value: uid}, log.Field{Key: "condIds", Value: conids}) +func (this *Worldtask) TCondFinishNotify(uid string, conds []*pb.ConIProgress) { + this.Debug("世界任务完成条件通知", log.Field{Key: "uid", Value: uid}, log.Field{Key: "condIds", Value: conds}) session, ok := this.GetUserSession(uid) if !ok { @@ -85,14 +85,14 @@ func (this *Worldtask) TCondFinishNotify(uid string, conids []int32) { finishedCondIds := []int32{} for _, c := range this.worldtaskConf.GetDataList() { for _, v := range c.Completetask { - for _, condId := range conids { - if v == condId { + for _, cond := range conds { + if v == cond.Conid { //校验任务是否是当前任务 if task, ok := userTask.CurrentTask[c.Group]; ok { if task.NpcStatus == 1 && c.Key == task.TaskId { groupId = c.Group taskId = c.Key - finishedCondIds = append(finishedCondIds, condId) + finishedCondIds = append(finishedCondIds, cond.Conid) } } break