更新表

This commit is contained in:
wh_zcy 2022-09-27 20:38:01 +08:00
parent 1910f945d5
commit f909fca637
7 changed files with 199 additions and 155 deletions

View File

@ -763,22 +763,22 @@
"ChooseId": 200013, "ChooseId": 200013,
"Reward": [ "Reward": [
{ {
"a": "equip", "a": "equi",
"t": "10031", "t": "10031",
"n": 1 "n": 1
}, },
{ {
"a": "equip", "a": "equi",
"t": "10032", "t": "10032",
"n": 1 "n": 1
}, },
{ {
"a": "equip", "a": "equi",
"t": "10033", "t": "10033",
"n": 1 "n": 1
}, },
{ {
"a": "equip", "a": "equi",
"t": "10034", "t": "10034",
"n": 1 "n": 1
} }

View File

@ -19,6 +19,16 @@ func (this *apiComp) BattleFinish(session comm.IUserSession, req *pb.RtaskBattle
if code = this.BattleFinishCheck(session, req); code != pb.ErrorCode_Success { if code = this.BattleFinishCheck(session, req); code != pb.ErrorCode_Success {
return 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) conf := this.moduleRtask.configure.getRtaskById(req.RtaskId)
if conf == nil { if conf == nil {
@ -49,31 +59,51 @@ func (this *apiComp) BattleFinish(session comm.IUserSession, req *pb.RtaskBattle
frtaskArr = &pb.FrtaskIds{} frtaskArr = &pb.FrtaskIds{}
} }
if _, ok := utils.Findx(frtaskArr.RtaskIds, req.RtaskId); !ok { //验证该任务是否已完成
if len(sideConf.ChooseId) == 0 && sideConf.EndTid[0] == -1 { if _, ok := utils.Findx(frtaskArr.RtaskIds, req.RtaskId); ok {
// 更新完成的任务 code = pb.ErrorCode_RtaskFinished
frtaskArr.RtaskIds = append(frtaskArr.RtaskIds, req.RtaskId) return
if rtask.FrtaskIds == nil { }
rtask.FrtaskIds = make(map[int32]*pb.FrtaskIds)
}
rtask.FrtaskIds[conf.Group] = frtaskArr
update := map[string]interface{}{ // 校验完成条件
"frtaskIds": rtask.FrtaskIds, for _, v := range sideConf.EndTid {
} if v == -1 {
if err := this.moduleRtask.modelRtask.Change(session.GetUserId(), update); err != nil { continue
code = pb.ErrorCode_SystemError
return
}
// 发奖
for _, v := range sideConf.Reward {
if v.ChooseId == 0 {
this.moduleRtask.DispenseRes(session, v.Reward, true)
}
}
} }
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, if err := session.SendMsg(string(this.moduleRtask.GetType()), RtaskSubTypeBattleFinish,

View File

@ -3,7 +3,6 @@ package rtask
import ( import (
"go_dreamfactory/comm" "go_dreamfactory/comm"
"go_dreamfactory/pb" "go_dreamfactory/pb"
"go_dreamfactory/utils"
"google.golang.org/protobuf/proto" "google.golang.org/protobuf/proto"
) )
@ -21,103 +20,103 @@ func (this *apiComp) Choose(session comm.IUserSession, req *pb.RtaskChooseReq) (
} }
// 获取玩家的任务 // 获取玩家的任务
rtask := &pb.DBRtask{} // rtask := &pb.DBRtask{}
if err := this.moduleRtask.modelRtask.Get(session.GetUserId(), rtask); err != nil { // if err := this.moduleRtask.modelRtask.Get(session.GetUserId(), rtask); err != nil {
return // return
} // }
// 获取当前任务配置 // // 获取当前任务配置
conf := this.moduleRtask.configure.getRtaskById(req.RtaskId) // conf := this.moduleRtask.configure.getRtaskById(req.RtaskId)
if conf == nil { // if conf == nil {
code = pb.ErrorCode_ConfigNoFound // code = pb.ErrorCode_ConfigNoFound
return // return
} // }
// 获取支线任务配置 // // 获取支线任务配置
sideConf := this.moduleRtask.configure.getRtaskSidById(req.RtaskSubId) // sideConf := this.moduleRtask.configure.getRtaskSidById(req.RtaskSubId)
if sideConf == nil { // if sideConf == nil {
code = pb.ErrorCode_ConfigNoFound // code = pb.ErrorCode_ConfigNoFound
return // return
} // }
//获取选项配置 // //获取选项配置
chooseCnf := this.moduleRtask.configure.getRtaskChooseCfg(req.ChooseId) // chooseCnf := this.moduleRtask.configure.getRtaskChooseCfg(req.ChooseId)
if chooseCnf == nil { // if chooseCnf == nil {
code = pb.ErrorCode_ConfigNoFound // code = pb.ErrorCode_ConfigNoFound
return // return
} // }
// 校验限定条件 // // 校验限定条件
if chooseCnf.PreTid != 0 { // if chooseCnf.PreTid != 0 {
if err, ok := this.moduleRtask.modelRtask.checkCondi(session.GetUserId(), chooseCnf.PreTid); !ok { // if err, ok := this.moduleRtask.modelRtask.checkCondi(session.GetUserId(), chooseCnf.PreTid); !ok {
this.moduleRtask.Errorf("no reach condi err: %v", err) // this.moduleRtask.Errorf("no reach condi err: %v", err)
code = pb.ErrorCode_RtaskCondiNoReach // code = pb.ErrorCode_RtaskCondiNoReach
return // return
} // }
} // }
var ( // var (
frtaskArr *pb.FrtaskIds //完成的任务 // frtaskArr *pb.FrtaskIds //完成的任务
ok bool // ok bool
) // )
if frtaskArr, ok = rtask.FrtaskIds[conf.Group]; !ok { // if frtaskArr, ok = rtask.FrtaskIds[conf.Group]; !ok {
frtaskArr = &pb.FrtaskIds{} // frtaskArr = &pb.FrtaskIds{}
} // }
//验证该任务是否已完成 // //验证该任务是否已完成
if _, ok := utils.Findx(frtaskArr.RtaskIds, req.RtaskId); ok { // if _, ok := utils.Findx(frtaskArr.RtaskIds, req.RtaskId); ok {
code = pb.ErrorCode_RtaskFinished // code = pb.ErrorCode_RtaskFinished
return // return
} // }
if chooseCnf.NextTid != 0 { // if chooseCnf.NextTid != 0 {
// 校验完成条件 // // 校验完成条件
for _, v := range sideConf.EndTid { // for _, v := range sideConf.EndTid {
if v == -1 { // if v == -1 {
continue // continue
} // }
if err, ok := this.moduleRtask.modelRtask.checkCondi(session.GetUserId(), v); !ok { // if err, ok := this.moduleRtask.modelRtask.checkCondi(session.GetUserId(), v); !ok {
if err != nil { // if err != nil {
this.moduleRtask.Error(err.Error()) // this.moduleRtask.Error(err.Error())
} // }
code = pb.ErrorCode_RtaskCondiNoReach // code = pb.ErrorCode_RtaskCondiNoReach
return // return
} // }
} // }
// 更新完成的任务 // // 更新完成的任务
frtaskArr.RtaskIds = append(frtaskArr.RtaskIds, req.RtaskId) // frtaskArr.RtaskIds = append(frtaskArr.RtaskIds, req.RtaskId)
if rtask.FrtaskIds == nil { // if rtask.FrtaskIds == nil {
rtask.FrtaskIds = make(map[int32]*pb.FrtaskIds) // rtask.FrtaskIds = make(map[int32]*pb.FrtaskIds)
} // }
rtask.FrtaskIds[conf.Group] = frtaskArr // rtask.FrtaskIds[conf.Group] = frtaskArr
update := map[string]interface{}{ // update := map[string]interface{}{
"frtaskIds": rtask.FrtaskIds, // "frtaskIds": rtask.FrtaskIds,
} // }
if err := this.moduleRtask.modelRtask.Change(session.GetUserId(), update); err != nil { // if err := this.moduleRtask.modelRtask.Change(session.GetUserId(), update); err != nil {
code = pb.ErrorCode_SystemError // code = pb.ErrorCode_SystemError
return // return
} // }
// userexpand update // // userexpand update
if err := this.moduleRtask.modelRtask.updateUserRtaskId(session.GetUserId(), req.RtaskId); err != nil { // if err := this.moduleRtask.modelRtask.updateUserRtaskId(session.GetUserId(), req.RtaskId); err != nil {
this.moduleRtask.Errorf("update user rtaskId err %v", err) // this.moduleRtask.Errorf("update user rtaskId err %v", err)
} // }
// 发奖励 // // 发奖励
for _, v := range sideConf.Reward { // for _, v := range sideConf.Reward {
if v.ChooseId == req.ChooseId { // if v.ChooseId == req.ChooseId {
code = this.moduleRtask.DispenseRes(session, v.Reward, true) // code = this.moduleRtask.DispenseRes(session, v.Reward, true)
} // }
} // }
rsp := &pb.RtaskFinishPush{ // rsp := &pb.RtaskFinishPush{
RtaskId: req.RtaskId, // RtaskId: req.RtaskId,
} // }
if err := session.SendMsg(string(this.moduleRtask.GetType()), "finish", rsp); err != nil { // if err := session.SendMsg(string(this.moduleRtask.GetType()), "finish", rsp); err != nil {
code = pb.ErrorCode_SystemError // code = pb.ErrorCode_SystemError
} // }
} // }
rsp := &pb.RtaskChooseResp{ rsp := &pb.RtaskChooseResp{
RtaskId: req.RtaskId, RtaskId: req.RtaskId,

View File

@ -105,13 +105,13 @@ func (this *ModuleRtask) initRtaskVerifyHandle() {
cfg: typeCfg, cfg: typeCfg,
verify: this.modelRtask.verifyRtype6, verify: this.modelRtask.verifyRtype6,
}) })
case comm.Rtype7: // case comm.Rtype7:
this.registerVerifyHandle(v.Id, &rtaskCondi{ // this.registerVerifyHandle(v.Id, &rtaskCondi{
find: this.modelRtaskRecord.lessEqualFirstParam, // find: this.modelRtaskRecord.lessEqualFirstParam,
cfg: typeCfg, // cfg: typeCfg,
verify: this.modelRtask.verfiyRtype7, // verify: this.modelRtask.verfiyRtype7,
update: this.modelRtaskRecord.addUpdate, // update: this.modelRtaskRecord.addUpdate,
}) // })
case comm.Rtype8: case comm.Rtype8:
this.registerVerifyHandle(v.Id, &rtaskCondi{ this.registerVerifyHandle(v.Id, &rtaskCondi{
cfg: typeCfg, cfg: typeCfg,
@ -134,7 +134,7 @@ func (this *ModuleRtask) initRtaskVerifyHandle() {
verify: this.modelRtaskRecord.verifyFirstGreatEqualParam, verify: this.modelRtaskRecord.verifyFirstGreatEqualParam,
update: this.modelRtaskRecord.overrideUpdate, 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.Rtype18, comm.Rtype19, comm.Rtype21, comm.Rtype24,
comm.Rtype26, comm.Rtype27, comm.Rtype28, comm.Rtype38, comm.Rtype26, comm.Rtype27, comm.Rtype28, comm.Rtype38,
comm.Rtype39, comm.Rtype50, comm.Rtype51, comm.Rtype53, comm.Rtype39, comm.Rtype50, comm.Rtype51, comm.Rtype53,
@ -227,9 +227,13 @@ func (this *ModuleRtask) SendToRtask(session comm.IUserSession, rtaskType comm.T
// update // update
for _, v := range condis { for _, v := range condis {
if v.update != nil { 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
}
} }
} }
} }

View File

@ -100,8 +100,7 @@ func (this *ModelRtaskRecord) addUpdate(uid string, cfg *cfg.GameRdtaskCondiData
//查找任务数据 //查找任务数据
if v, ok := record.Vals[cfg.Id]; ok { if v, ok := record.Vals[cfg.Id]; ok {
count := v.Data[0] count := v.Data[0]
count += vals[0] vals[0] = count+1
vals[0] = count
v.Data = toMap(vals...) v.Data = toMap(vals...)
v.Timestamp = time.Now().Unix() v.Timestamp = time.Now().Unix()

View File

@ -60,6 +60,7 @@ func (this *apiComp) Login(session comm.IUserSession, req *pb.UserLoginReq) (cod
Sid: req.Sid, Sid: req.Sid,
Binduid: req.Account, Binduid: req.Account,
Lastloginip: session.GetIP(), Lastloginip: session.GetIP(),
Logintime: time.Now().Unix(),
} }
err = this.module.modelUser.User_Create(user) err = this.module.modelUser.User_Create(user)
if err != nil { if err != nil {
@ -135,13 +136,14 @@ func (this *apiComp) Login(session comm.IUserSession, req *pb.UserLoginReq) (cod
rsp.Ex = expand rsp.Ex = expand
} }
} }
// 日常登录任务
this.module.ModuleRtask.SendToRtask(session, comm.Rtype7, 1)
// if this.module.ModuleSys.IsAccess("", user.Lv) { // if this.module.ModuleSys.IsAccess("", user.Lv) {
this.module.ModuleRtask.InitCondiData(user.Uid) this.module.ModuleRtask.InitCondiData(user.Uid)
// } // }
// 日常登录任务
this.module.ModuleRtask.SendToRtask(session, comm.Rtype7, 1)
mail := &pb.DBMailData{ mail := &pb.DBMailData{
ObjId: primitive.NewObjectID().Hex(), ObjId: primitive.NewObjectID().Hex(),
Uid: user.Uid, Uid: user.Uid,

View File

@ -623,6 +623,7 @@ type RtaskBattleFinishReq struct {
RtaskId int32 `protobuf:"varint,1,opt,name=rtaskId,proto3" json:"rtaskId"` //任务ID RtaskId int32 `protobuf:"varint,1,opt,name=rtaskId,proto3" json:"rtaskId"` //任务ID
RtaskSubId int32 `protobuf:"varint,2,opt,name=rtaskSubId,proto3" json:"rtaskSubId"` //支线任务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() { func (x *RtaskBattleFinishReq) Reset() {
@ -671,6 +672,13 @@ func (x *RtaskBattleFinishReq) GetRtaskSubId() int32 {
return 0 return 0
} }
func (x *RtaskBattleFinishReq) GetChooseId() int32 {
if x != nil {
return x.ChooseId
}
return 0
}
type RtaskBattleFinishResp struct { type RtaskBattleFinishResp struct {
state protoimpl.MessageState state protoimpl.MessageState
sizeCache protoimpl.SizeCache 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, 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, 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, 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, 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, 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, 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, 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, 0x0a, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x53, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63,
0x74, 0x61, 0x73, 0x6b, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x68, 0x6f, 0x6f, 0x73, 0x65, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x63,
0x52, 0x65, 0x73, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x18, 0x68, 0x6f, 0x6f, 0x73, 0x65, 0x49, 0x64, 0x22, 0x51, 0x0a, 0x15, 0x52, 0x74, 0x61, 0x73, 0x6b,
0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x1e, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70,
0x0a, 0x0a, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x53, 0x75, 0x62, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
0x28, 0x05, 0x52, 0x0a, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x53, 0x75, 0x62, 0x49, 0x64, 0x22, 0x13, 0x05, 0x52, 0x07, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x74,
0x0a, 0x11, 0x52, 0x74, 0x61, 0x73, 0x6b, 0x47, 0x65, 0x74, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x61, 0x73, 0x6b, 0x53, 0x75, 0x62, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a,
0x52, 0x65, 0x71, 0x22, 0x3c, 0x0a, 0x12, 0x52, 0x74, 0x61, 0x73, 0x6b, 0x47, 0x65, 0x74, 0x72, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x53, 0x75, 0x62, 0x49, 0x64, 0x22, 0x13, 0x0a, 0x11, 0x52, 0x74,
0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x26, 0x0a, 0x06, 0x72, 0x65, 0x63, 0x61, 0x73, 0x6b, 0x47, 0x65, 0x74, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x22,
0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x44, 0x42, 0x52, 0x74, 0x3c, 0x0a, 0x12, 0x52, 0x74, 0x61, 0x73, 0x6b, 0x47, 0x65, 0x74, 0x72, 0x65, 0x63, 0x6f, 0x72,
0x61, 0x73, 0x6b, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x06, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x26, 0x0a, 0x06, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18,
0x64, 0x22, 0x94, 0x01, 0x0a, 0x0c, 0x52, 0x74, 0x61, 0x73, 0x6b, 0x54, 0x65, 0x73, 0x74, 0x52, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x44, 0x42, 0x52, 0x74, 0x61, 0x73, 0x6b, 0x52,
0x65, 0x71, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x06, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x22, 0x94, 0x01,
0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x0a, 0x0c, 0x52, 0x74, 0x61, 0x73, 0x6b, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x1c,
0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x0a, 0x09, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x64, 0x05, 0x52, 0x09, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06,
0x69, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x70, 0x61,
0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x04, 0x20, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x49, 0x64, 0x18,
0x01, 0x28, 0x05, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x49, 0x64, 0x12, 0x18,
0x72, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x0a, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52,
0x72, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x22, 0x3f, 0x0a, 0x0d, 0x52, 0x74, 0x61, 0x73, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x74, 0x61, 0x73,
0x6b, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x6b, 0x49, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x74, 0x61, 0x73,
0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x12, 0x1a, 0x0a, 0x6b, 0x49, 0x64, 0x73, 0x22, 0x3f, 0x0a, 0x0d, 0x52, 0x74, 0x61, 0x73, 0x6b, 0x54, 0x65, 0x73,
0x08, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20,
0x08, 0x72, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x73, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x01, 0x28, 0x08, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x74, 0x61,
0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 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 ( var (