diff --git a/bin/json/game_rdtaskcondi.json b/bin/json/game_rdtaskcondi.json index dd5c5fc4b..5ff8cd481 100644 --- a/bin/json/game_rdtaskcondi.json +++ b/bin/json/game_rdtaskcondi.json @@ -1435,8 +1435,8 @@ "NPC": 1, "data1": 1, "data2": 111, - "data3": 1, - "data4": 1, + "data3": 0, + "data4": 0, "data5": 0 }, { @@ -1451,8 +1451,8 @@ "NPC": 2, "data1": 1, "data2": 112, - "data3": 2, - "data4": 2, + "data3": 0, + "data4": 0, "data5": 0 }, { @@ -1467,8 +1467,8 @@ "NPC": 3, "data1": 1, "data2": 113, - "data3": 3, - "data4": 3, + "data3": 0, + "data4": 0, "data5": 0 }, { @@ -1483,8 +1483,8 @@ "NPC": 10110, "data1": 1, "data2": 114, - "data3": 4, - "data4": 4, + "data3": 0, + "data4": 0, "data5": 0 }, { diff --git a/modules/worldtask/api_finish.go b/modules/worldtask/api_finish.go index 513c65f02..99a3ccac4 100644 --- a/modules/worldtask/api_finish.go +++ b/modules/worldtask/api_finish.go @@ -198,44 +198,6 @@ func (this *apiComp) Finish(session comm.IUserSession, req *pb.WorldtaskFinishRe } } - finishCall := func() { - // 完成任务 - if err := this.module.modelWorldtask.finishTask(req.GroupId, req.TaskId, userTask); err != nil { - code = pb.ErrorCode_WorldtaskFinish - this.module.Error("完成任务失败", - log.Field{Key: "uid", Value: uid}, - log.Field{Key: "groupId", Value: req.GroupId}, - log.Field{Key: "taskId", Value: req.TaskId}, - log.Field{Key: "err", Value: err.Error()}, - ) - return - } - // 发奖 - if code = this.module.DispenseRes(session, curTaskConf.Reword, true); code != pb.ErrorCode_Success { - this.module.Error("资源发放", - log.Field{Key: "uid", Value: uid}, - log.Field{Key: "groupId", Value: req.GroupId}, - log.Field{Key: "taskId", Value: req.TaskId}, - log.Field{Key: "reword", Value: curTaskConf.Reword}, - log.Field{Key: "code", Value: code}, - ) - } - - //判断是否配置了通知module - for _, m := range curTaskConf.Module { - i, err := this.service.GetModule(core.M_Modules(m)) - if err != nil { - this.module.Errorln(err) - continue - } - - if ic, ok := i.(comm.ITaskComplete); ok { - ic.TaskComplete(session, req.TaskId) - } - } - - } - //判断任务是否已完成 for _, v := range userTask.TaskList { if v == req.TaskId { @@ -248,7 +210,64 @@ func (this *apiComp) Finish(session comm.IUserSession, req *pb.WorldtaskFinishRe } } - finishCall() + var ( + condiId int32 + condiFlag bool + ) + for _, condId := range curTaskConf.Completetask { + if this.module.modelWorldtask.checkCondi(uid, condId) { + condiFlag = true + } else { + condiFlag = false + condiId = condId + } + } + + if !condiFlag { + rsp.Code = pb.ErrorCode_RtaskCondiNoReach + rsp.CondiId = condiId + rsp.TaskId = req.TaskId + if err := session.SendMsg(string(this.module.GetType()), WorldtaskSubtypeFinish, rsp); err != nil { + code = pb.ErrorCode_SystemError + return + } + return + } + + // 完成任务 + if err := this.module.modelWorldtask.finishTask(req.GroupId, req.TaskId, userTask); err != nil { + code = pb.ErrorCode_WorldtaskFinish + this.module.Error("完成任务失败", + log.Field{Key: "uid", Value: uid}, + log.Field{Key: "groupId", Value: req.GroupId}, + log.Field{Key: "taskId", Value: req.TaskId}, + log.Field{Key: "err", Value: err.Error()}, + ) + return + } + // 发奖 + if code = this.module.DispenseRes(session, curTaskConf.Reword, true); code != pb.ErrorCode_Success { + this.module.Error("资源发放", + log.Field{Key: "uid", Value: uid}, + log.Field{Key: "groupId", Value: req.GroupId}, + log.Field{Key: "taskId", Value: req.TaskId}, + log.Field{Key: "reword", Value: curTaskConf.Reword}, + log.Field{Key: "code", Value: code}, + ) + } + + //判断是否配置了通知module + for _, m := range curTaskConf.Module { + i, err := this.service.GetModule(core.M_Modules(m)) + if err != nil { + this.module.Errorln(err) + continue + } + + if ic, ok := i.(comm.ITaskComplete); ok { + ic.TaskComplete(session, req.TaskId) + } + } finishRsp() diff --git a/modules/worldtask/model_worldtask.go b/modules/worldtask/model_worldtask.go index a8ac21112..c0a715a54 100644 --- a/modules/worldtask/model_worldtask.go +++ b/modules/worldtask/model_worldtask.go @@ -134,6 +134,23 @@ func (this *ModelWorldtask) findNextTasks(parentTaskId int32) (taskIds []int32) return } +func (this *ModelWorldtask) checkCondi(uid string, condiId int32) bool { + if m, err := this.service.GetModule(comm.ModuleRtask); err == nil { + iwt, ok := m.(comm.IRtask) + if ok { + if mc := iwt.CheckCondi(uid, condiId); mc != pb.ErrorCode_Success { + this.moduleWorldtask.Debug("任务完成条件不满足", + log.Field{Key: "uid", Value: uid}, + log.Field{Key: "condiId", Value: condiId}, + ) + return false + } + return true + } + } + return false +} + func (this *ModelWorldtask) updateCheckCond(uid string, userTask *pb.DBWorldtask, nextTaskId int32) *pb.DBWorldtask { //检查下个任务的完成条件 nextTaskConf, err := this.moduleWorldtask.configure.getWorldtaskById(nextTaskId)