diff --git a/bin/json/game_rdtaskside.json b/bin/json/game_rdtaskside.json index 3e335b7e9..453c5b67f 100644 --- a/bin/json/game_rdtaskside.json +++ b/bin/json/game_rdtaskside.json @@ -763,22 +763,22 @@ "ChooseId": 200013, "Reward": [ { - "a": "equip", + "a": "equi", "t": "10031", "n": 1 }, { - "a": "equip", + "a": "equi", "t": "10032", "n": 1 }, { - "a": "equip", + "a": "equi", "t": "10033", "n": 1 }, { - "a": "equip", + "a": "equi", "t": "10034", "n": 1 } diff --git a/modules/rtask/api_battlefinish.go b/modules/rtask/api_battlefinish.go index 34685eafe..dac6f942d 100644 --- a/modules/rtask/api_battlefinish.go +++ b/modules/rtask/api_battlefinish.go @@ -19,6 +19,16 @@ func (this *apiComp) BattleFinish(session comm.IUserSession, req *pb.RtaskBattle if code = this.BattleFinishCheck(session, req); code != pb.ErrorCode_Success { return } + + defer func() { + rsp := &pb.RtaskFinishPush{ + RtaskId: req.RtaskId, + } + if err := session.SendMsg(string(this.moduleRtask.GetType()), "finish", rsp); err != nil { + code = pb.ErrorCode_SystemError + } + }() + // 获取当前任务配置 conf := this.moduleRtask.configure.getRtaskById(req.RtaskId) if conf == nil { @@ -49,31 +59,51 @@ func (this *apiComp) BattleFinish(session comm.IUserSession, req *pb.RtaskBattle frtaskArr = &pb.FrtaskIds{} } - if _, ok := utils.Findx(frtaskArr.RtaskIds, req.RtaskId); !ok { - if len(sideConf.ChooseId) == 0 && sideConf.EndTid[0] == -1 { - // 更新完成的任务 - frtaskArr.RtaskIds = append(frtaskArr.RtaskIds, req.RtaskId) - if rtask.FrtaskIds == nil { - rtask.FrtaskIds = make(map[int32]*pb.FrtaskIds) - } - rtask.FrtaskIds[conf.Group] = frtaskArr + //验证该任务是否已完成 + if _, ok := utils.Findx(frtaskArr.RtaskIds, req.RtaskId); ok { + code = pb.ErrorCode_RtaskFinished + return + } - update := map[string]interface{}{ - "frtaskIds": rtask.FrtaskIds, - } - if err := this.moduleRtask.modelRtask.Change(session.GetUserId(), update); err != nil { - code = pb.ErrorCode_SystemError - return - } - - // 发奖 - for _, v := range sideConf.Reward { - if v.ChooseId == 0 { - this.moduleRtask.DispenseRes(session, v.Reward, true) - } - } + // 校验完成条件 + for _, v := range sideConf.EndTid { + if v == -1 { + continue } + if err, ok := this.moduleRtask.modelRtask.checkCondi(session.GetUserId(), v); !ok { + if err != nil { + this.moduleRtask.Error(err.Error()) + } + code = pb.ErrorCode_RtaskCondiNoReach + return + } + } + // 更新完成的任务 + frtaskArr.RtaskIds = append(frtaskArr.RtaskIds, req.RtaskId) + if rtask.FrtaskIds == nil { + rtask.FrtaskIds = make(map[int32]*pb.FrtaskIds) + } + rtask.FrtaskIds[conf.Group] = frtaskArr + + update := map[string]interface{}{ + "frtaskIds": rtask.FrtaskIds, + } + if err := this.moduleRtask.modelRtask.Change(session.GetUserId(), update); err != nil { + code = pb.ErrorCode_SystemError + return + } + + // userexpand update + if err := this.moduleRtask.modelRtask.updateUserRtaskId(session.GetUserId(), req.RtaskId); err != nil { + this.moduleRtask.Errorf("update user rtaskId err %v", err) + } + + // 发奖 + for _, v := range sideConf.Reward { + if v.ChooseId == req.ChooseId { + this.moduleRtask.DispenseRes(session, v.Reward, true) + } } if err := session.SendMsg(string(this.moduleRtask.GetType()), RtaskSubTypeBattleFinish, diff --git a/modules/rtask/api_choose.go b/modules/rtask/api_choose.go index b2ca93921..19c5dbfcf 100644 --- a/modules/rtask/api_choose.go +++ b/modules/rtask/api_choose.go @@ -3,7 +3,6 @@ package rtask import ( "go_dreamfactory/comm" "go_dreamfactory/pb" - "go_dreamfactory/utils" "google.golang.org/protobuf/proto" ) @@ -21,103 +20,103 @@ func (this *apiComp) Choose(session comm.IUserSession, req *pb.RtaskChooseReq) ( } // 获取玩家的任务 - rtask := &pb.DBRtask{} - if err := this.moduleRtask.modelRtask.Get(session.GetUserId(), rtask); err != nil { - return - } + // rtask := &pb.DBRtask{} + // if err := this.moduleRtask.modelRtask.Get(session.GetUserId(), rtask); err != nil { + // return + // } - // 获取当前任务配置 - conf := this.moduleRtask.configure.getRtaskById(req.RtaskId) - if conf == nil { - code = pb.ErrorCode_ConfigNoFound - return - } + // // 获取当前任务配置 + // conf := this.moduleRtask.configure.getRtaskById(req.RtaskId) + // if conf == nil { + // code = pb.ErrorCode_ConfigNoFound + // return + // } - // 获取支线任务配置 - sideConf := this.moduleRtask.configure.getRtaskSidById(req.RtaskSubId) - if sideConf == nil { - code = pb.ErrorCode_ConfigNoFound - return - } + // // 获取支线任务配置 + // sideConf := this.moduleRtask.configure.getRtaskSidById(req.RtaskSubId) + // if sideConf == nil { + // code = pb.ErrorCode_ConfigNoFound + // return + // } - //获取选项配置 - chooseCnf := this.moduleRtask.configure.getRtaskChooseCfg(req.ChooseId) - if chooseCnf == nil { - code = pb.ErrorCode_ConfigNoFound - return - } + // //获取选项配置 + // chooseCnf := this.moduleRtask.configure.getRtaskChooseCfg(req.ChooseId) + // if chooseCnf == nil { + // code = pb.ErrorCode_ConfigNoFound + // return + // } - // 校验限定条件 - if chooseCnf.PreTid != 0 { - if err, ok := this.moduleRtask.modelRtask.checkCondi(session.GetUserId(), chooseCnf.PreTid); !ok { - this.moduleRtask.Errorf("no reach condi err: %v", err) - code = pb.ErrorCode_RtaskCondiNoReach - return - } - } + // // 校验限定条件 + // if chooseCnf.PreTid != 0 { + // if err, ok := this.moduleRtask.modelRtask.checkCondi(session.GetUserId(), chooseCnf.PreTid); !ok { + // this.moduleRtask.Errorf("no reach condi err: %v", err) + // code = pb.ErrorCode_RtaskCondiNoReach + // return + // } + // } - var ( - frtaskArr *pb.FrtaskIds //完成的任务 - ok bool - ) + // var ( + // frtaskArr *pb.FrtaskIds //完成的任务 + // ok bool + // ) - if frtaskArr, ok = rtask.FrtaskIds[conf.Group]; !ok { - frtaskArr = &pb.FrtaskIds{} - } + // if frtaskArr, ok = rtask.FrtaskIds[conf.Group]; !ok { + // frtaskArr = &pb.FrtaskIds{} + // } - //验证该任务是否已完成 - if _, ok := utils.Findx(frtaskArr.RtaskIds, req.RtaskId); ok { - code = pb.ErrorCode_RtaskFinished - return - } + // //验证该任务是否已完成 + // if _, ok := utils.Findx(frtaskArr.RtaskIds, req.RtaskId); ok { + // code = pb.ErrorCode_RtaskFinished + // return + // } - if chooseCnf.NextTid != 0 { - // 校验完成条件 - for _, v := range sideConf.EndTid { - if v == -1 { - continue - } - if err, ok := this.moduleRtask.modelRtask.checkCondi(session.GetUserId(), v); !ok { - if err != nil { - this.moduleRtask.Error(err.Error()) - } - code = pb.ErrorCode_RtaskCondiNoReach - return - } - } - // 更新完成的任务 - frtaskArr.RtaskIds = append(frtaskArr.RtaskIds, req.RtaskId) - if rtask.FrtaskIds == nil { - rtask.FrtaskIds = make(map[int32]*pb.FrtaskIds) - } - rtask.FrtaskIds[conf.Group] = frtaskArr - update := map[string]interface{}{ - "frtaskIds": rtask.FrtaskIds, - } - if err := this.moduleRtask.modelRtask.Change(session.GetUserId(), update); err != nil { - code = pb.ErrorCode_SystemError - return - } + // if chooseCnf.NextTid != 0 { + // // 校验完成条件 + // for _, v := range sideConf.EndTid { + // if v == -1 { + // continue + // } + // if err, ok := this.moduleRtask.modelRtask.checkCondi(session.GetUserId(), v); !ok { + // if err != nil { + // this.moduleRtask.Error(err.Error()) + // } + // code = pb.ErrorCode_RtaskCondiNoReach + // return + // } + // } + // // 更新完成的任务 + // frtaskArr.RtaskIds = append(frtaskArr.RtaskIds, req.RtaskId) + // if rtask.FrtaskIds == nil { + // rtask.FrtaskIds = make(map[int32]*pb.FrtaskIds) + // } + // rtask.FrtaskIds[conf.Group] = frtaskArr + // update := map[string]interface{}{ + // "frtaskIds": rtask.FrtaskIds, + // } + // if err := this.moduleRtask.modelRtask.Change(session.GetUserId(), update); err != nil { + // code = pb.ErrorCode_SystemError + // return + // } - // userexpand update - if err := this.moduleRtask.modelRtask.updateUserRtaskId(session.GetUserId(), req.RtaskId); err != nil { - this.moduleRtask.Errorf("update user rtaskId err %v", err) - } + // // userexpand update + // if err := this.moduleRtask.modelRtask.updateUserRtaskId(session.GetUserId(), req.RtaskId); err != nil { + // this.moduleRtask.Errorf("update user rtaskId err %v", err) + // } - // 发奖励 - for _, v := range sideConf.Reward { - if v.ChooseId == req.ChooseId { - code = this.moduleRtask.DispenseRes(session, v.Reward, true) - } - } + // // 发奖励 + // for _, v := range sideConf.Reward { + // if v.ChooseId == req.ChooseId { + // code = this.moduleRtask.DispenseRes(session, v.Reward, true) + // } + // } - rsp := &pb.RtaskFinishPush{ - RtaskId: req.RtaskId, - } - if err := session.SendMsg(string(this.moduleRtask.GetType()), "finish", rsp); err != nil { - code = pb.ErrorCode_SystemError - } - } + // rsp := &pb.RtaskFinishPush{ + // RtaskId: req.RtaskId, + // } + // if err := session.SendMsg(string(this.moduleRtask.GetType()), "finish", rsp); err != nil { + // code = pb.ErrorCode_SystemError + // } + // } rsp := &pb.RtaskChooseResp{ RtaskId: req.RtaskId, diff --git a/modules/rtask/module.go b/modules/rtask/module.go index af21006c0..09cf773b2 100644 --- a/modules/rtask/module.go +++ b/modules/rtask/module.go @@ -105,13 +105,13 @@ func (this *ModuleRtask) initRtaskVerifyHandle() { cfg: typeCfg, verify: this.modelRtask.verifyRtype6, }) - case comm.Rtype7: - this.registerVerifyHandle(v.Id, &rtaskCondi{ - find: this.modelRtaskRecord.lessEqualFirstParam, - cfg: typeCfg, - verify: this.modelRtask.verfiyRtype7, - update: this.modelRtaskRecord.addUpdate, - }) + // case comm.Rtype7: + // this.registerVerifyHandle(v.Id, &rtaskCondi{ + // find: this.modelRtaskRecord.lessEqualFirstParam, + // cfg: typeCfg, + // verify: this.modelRtask.verfiyRtype7, + // update: this.modelRtaskRecord.addUpdate, + // }) case comm.Rtype8: this.registerVerifyHandle(v.Id, &rtaskCondi{ cfg: typeCfg, @@ -134,7 +134,7 @@ func (this *ModuleRtask) initRtaskVerifyHandle() { verify: this.modelRtaskRecord.verifyFirstGreatEqualParam, update: this.modelRtaskRecord.overrideUpdate, }) - case comm.Rtype12, comm.Rtype13, comm.Rtype14, comm.Rtype15, + case comm.Rtype7, comm.Rtype12, comm.Rtype13, comm.Rtype14, comm.Rtype15, comm.Rtype18, comm.Rtype19, comm.Rtype21, comm.Rtype24, comm.Rtype26, comm.Rtype27, comm.Rtype28, comm.Rtype38, comm.Rtype39, comm.Rtype50, comm.Rtype51, comm.Rtype53, @@ -227,10 +227,14 @@ func (this *ModuleRtask) SendToRtask(session comm.IUserSession, rtaskType comm.T // update for _, v := range condis { if v.update != nil { - if err := v.update(session.GetUserId(), v.cfg, params...); err != nil { - code = pb.ErrorCode_DBError + //条件未达成才更新数据 + if code = this.CheckCondi(user.Id, v.cfg.Id); code != pb.ErrorCode_Success { + if err := v.update(session.GetUserId(), v.cfg, params...); err != nil { + code = pb.ErrorCode_DBError + } } - } + + } } return diff --git a/modules/rtask/updateHandle.go b/modules/rtask/updateHandle.go index 3763f2b9f..468026b0d 100644 --- a/modules/rtask/updateHandle.go +++ b/modules/rtask/updateHandle.go @@ -100,8 +100,7 @@ func (this *ModelRtaskRecord) addUpdate(uid string, cfg *cfg.GameRdtaskCondiData //查找任务数据 if v, ok := record.Vals[cfg.Id]; ok { count := v.Data[0] - count += vals[0] - vals[0] = count + vals[0] = count+1 v.Data = toMap(vals...) v.Timestamp = time.Now().Unix() diff --git a/modules/user/api_login.go b/modules/user/api_login.go index bbccd1355..e613ae938 100644 --- a/modules/user/api_login.go +++ b/modules/user/api_login.go @@ -60,6 +60,7 @@ func (this *apiComp) Login(session comm.IUserSession, req *pb.UserLoginReq) (cod Sid: req.Sid, Binduid: req.Account, Lastloginip: session.GetIP(), + Logintime: time.Now().Unix(), } err = this.module.modelUser.User_Create(user) if err != nil { @@ -135,12 +136,13 @@ func (this *apiComp) Login(session comm.IUserSession, req *pb.UserLoginReq) (cod rsp.Ex = expand } } - // 日常登录任务 - this.module.ModuleRtask.SendToRtask(session, comm.Rtype7, 1) // if this.module.ModuleSys.IsAccess("", user.Lv) { this.module.ModuleRtask.InitCondiData(user.Uid) // } + + // 日常登录任务 + this.module.ModuleRtask.SendToRtask(session, comm.Rtype7, 1) mail := &pb.DBMailData{ ObjId: primitive.NewObjectID().Hex(), diff --git a/pb/rtask_msg.pb.go b/pb/rtask_msg.pb.go index cb82b0bb5..5c1ac5faa 100644 --- a/pb/rtask_msg.pb.go +++ b/pb/rtask_msg.pb.go @@ -623,6 +623,7 @@ type RtaskBattleFinishReq struct { RtaskId int32 `protobuf:"varint,1,opt,name=rtaskId,proto3" json:"rtaskId"` //任务ID RtaskSubId int32 `protobuf:"varint,2,opt,name=rtaskSubId,proto3" json:"rtaskSubId"` //支线任务ID + ChooseId int32 `protobuf:"varint,3,opt,name=chooseId,proto3" json:"chooseId"` //选项配置ID } func (x *RtaskBattleFinishReq) Reset() { @@ -671,6 +672,13 @@ func (x *RtaskBattleFinishReq) GetRtaskSubId() int32 { return 0 } +func (x *RtaskBattleFinishReq) GetChooseId() int32 { + if x != nil { + return x.ChooseId + } + return 0 +} + type RtaskBattleFinishResp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1003,37 +1011,39 @@ var file_rtask_rtask_msg_proto_rawDesc = []byte{ 0x22, 0x37, 0x0a, 0x14, 0x52, 0x74, 0x61, 0x73, 0x6b, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1f, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x50, 0x0a, 0x14, 0x52, 0x74, 0x61, + 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x6c, 0x0a, 0x14, 0x52, 0x74, 0x61, 0x73, 0x6b, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x53, 0x75, 0x62, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0a, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x53, 0x75, 0x62, 0x49, 0x64, 0x22, 0x51, 0x0a, 0x15, 0x52, - 0x74, 0x61, 0x73, 0x6b, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, - 0x52, 0x65, 0x73, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x1e, - 0x0a, 0x0a, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x53, 0x75, 0x62, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0a, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x53, 0x75, 0x62, 0x49, 0x64, 0x22, 0x13, - 0x0a, 0x11, 0x52, 0x74, 0x61, 0x73, 0x6b, 0x47, 0x65, 0x74, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x52, 0x65, 0x71, 0x22, 0x3c, 0x0a, 0x12, 0x52, 0x74, 0x61, 0x73, 0x6b, 0x47, 0x65, 0x74, 0x72, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x26, 0x0a, 0x06, 0x72, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x44, 0x42, 0x52, 0x74, - 0x61, 0x73, 0x6b, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x06, 0x72, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x22, 0x94, 0x01, 0x0a, 0x0c, 0x52, 0x74, 0x61, 0x73, 0x6b, 0x54, 0x65, 0x73, 0x74, 0x52, - 0x65, 0x71, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, - 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x64, - 0x69, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x64, 0x69, - 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x72, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x72, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x22, 0x3f, 0x0a, 0x0d, 0x52, 0x74, 0x61, 0x73, - 0x6b, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x61, - 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x12, 0x1a, 0x0a, - 0x08, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, - 0x08, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, - 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x0a, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x53, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, + 0x68, 0x6f, 0x6f, 0x73, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x63, + 0x68, 0x6f, 0x6f, 0x73, 0x65, 0x49, 0x64, 0x22, 0x51, 0x0a, 0x15, 0x52, 0x74, 0x61, 0x73, 0x6b, + 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x18, 0x0a, 0x07, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x07, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x74, + 0x61, 0x73, 0x6b, 0x53, 0x75, 0x62, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, + 0x72, 0x74, 0x61, 0x73, 0x6b, 0x53, 0x75, 0x62, 0x49, 0x64, 0x22, 0x13, 0x0a, 0x11, 0x52, 0x74, + 0x61, 0x73, 0x6b, 0x47, 0x65, 0x74, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x22, + 0x3c, 0x0a, 0x12, 0x52, 0x74, 0x61, 0x73, 0x6b, 0x47, 0x65, 0x74, 0x72, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x26, 0x0a, 0x06, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x44, 0x42, 0x52, 0x74, 0x61, 0x73, 0x6b, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x06, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x22, 0x94, 0x01, + 0x0a, 0x0c, 0x52, 0x74, 0x61, 0x73, 0x6b, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x1c, + 0x0a, 0x09, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x09, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x49, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x49, 0x64, 0x12, 0x18, + 0x0a, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x74, 0x61, 0x73, + 0x6b, 0x49, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x74, 0x61, 0x73, + 0x6b, 0x49, 0x64, 0x73, 0x22, 0x3f, 0x0a, 0x0d, 0x52, 0x74, 0x61, 0x73, 0x6b, 0x54, 0x65, 0x73, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x74, 0x61, + 0x73, 0x6b, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x72, 0x74, 0x61, + 0x73, 0x6b, 0x49, 0x64, 0x73, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var (