package worldtask import ( "go_dreamfactory/comm" "go_dreamfactory/pb" ) // 任务完成条件 func (this *apiComp) CompleteCondiCheck(session comm.IUserSession, req *pb.WorldtaskCompleteCondiReq) (errdata *pb.ErrorData) { if req.TaskId <= 0 || req.CondiId <= 0 { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ReqParameterError, Title: pb.ErrorCode_ReqParameterError.ToString(), } } return } func (this *apiComp) CompleteCondi(session comm.IUserSession, req *pb.WorldtaskCompleteCondiReq) (errdata *pb.ErrorData) { if errdata = this.CompleteCondiCheck(session, req); errdata != nil { return } rsp := &pb.WorldtaskCompleteCondiResp{} uid := session.GetUserId() // 当前任务配置 curTaskConf, err := this.module.configure.getWorldtaskById(req.TaskId) if err != nil || curTaskConf == nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ConfigNoFound, Title: pb.ErrorCode_ConfigNoFound.ToString(), Message: err.Error(), } return } if (len(curTaskConf.Completetask) >= 1 && curTaskConf.Completetask[0] == 0) || len(curTaskConf.Completetask) == 0 { errdata = &pb.ErrorData{ Code: pb.ErrorCode_WorldtaskNoProcess, Title: pb.ErrorCode_WorldtaskNoProcess.ToString(), Message: "无完成条件", } return } myWorldtask, err := this.module.modelWorldtask.getWorldtask(uid) if err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, Title: pb.ErrorCode_DBError.ToString(), Message: err.Error(), } return } myWorldtask.Uid = uid // 校验任务条件 conds, err := this.module.ModuleBuried.FinishConditionAndCheck(uid, []int32{req.CondiId}, curTaskConf.Completetask...) if err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ExternalModule, Title: pb.ErrorCode_ExternalModule.ToString(), Message: comm.NewExternalModuleErr("buried", "CheckCondition", uid, req.CondiId).Error(), } return } // 设置当前任务的完成条件 for _, tasks := range myWorldtask.CurrentTasks { if task, ok := tasks.TaskMap[req.TaskId]; ok { for _, cond := range conds { for _, exist_cond := range task.Conds { if cond.Conid == exist_cond.Conid { continue } task.Conds = append(task.Conds, cond) } } break } } update := map[string]interface{}{ "currentTasks": myWorldtask.CurrentTasks, } if err := this.module.modelWorldtask.Change(uid, update); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, Title: pb.ErrorCode_DBError.ToString(), Message: err.Error(), } return } this.sendMsg(session, WorldtaskComplete, rsp) //结束任务 if curTaskConf.DeliverNpc == 0 { this.module.modelWorldtask.taskFinish(session, req.TaskId, myWorldtask, curTaskConf) this.module.modelWorldtask.taskFinishPush(session, myWorldtask, curTaskConf) } return }