This commit is contained in:
liwei 2023-07-26 17:04:47 +08:00
commit 66ede35f5d
8 changed files with 90 additions and 51 deletions

View File

@ -30,8 +30,10 @@ func (this *apiComp) Finish(session comm.IUserSession, req *pb.StonehengeFinishR
update["curRoomIndes"] = stone.CurRoomIndes
stone.Rooms = &pb.RoomData{}
update["rooms"] = stone.Rooms
stone.Envbuff = make([]int32, 0)
update["envbuff"] = stone.Envbuff
stone.Webuff = make([]int32, 0)
update["envbuff"] = stone.Webuff
stone.Enemybuff = make([]int32, 0)
update["enemybuff"] = stone.Enemybuff
stone.Hero = make([]*pb.BattleRole, 0)
update["hero"] = stone.Hero

View File

@ -30,8 +30,10 @@ func (this *apiComp) GetList(session comm.IUserSession, req *pb.StonehengeGetLis
update["curRoomIndes"] = stone.CurRoomIndes
stone.Rooms = &pb.RoomData{}
update["rooms"] = stone.Rooms
stone.Envbuff = make([]int32, 0)
update["envbuff"] = stone.Envbuff
stone.Webuff = make([]int32, 0)
update["envbuff"] = stone.Webuff
stone.Enemybuff = make([]int32, 0)
update["enemybuff"] = stone.Enemybuff
stone.Hero = make([]*pb.BattleRole, 0)
update["hero"] = stone.Hero

View File

@ -612,25 +612,29 @@ func (this *configureComp) GetGameStoneBuff(addType int32) (m map[int32]struct{}
return this.buff[addType]
}
func (this *configureComp) CheckStage() (friend []int32, enemy []int32) {
func (this *configureComp) CheckStage() (bossStage map[int32]*StageData) {
var (
boosEvent map[int32]int32 // key stageid value rommid
)
bossStage = make(map[int32]*StageData, 0)
boosEvent = make(map[int32]int32, 0)
for k, v := range this.szStage {
if c := this.GetStageConfByStageid(k, v-1); c != nil {
// 根据传送门组生成传送门
if rooms := this.GetRoomGroupDataByLottery(c.PortalGroup); len(rooms) > 0 {
stageData := &StageData{}
boosEvent[k] = rooms[0]
if roomconf, err := this.GetStoneRoomDataById(rooms[0]); err == nil {
// buff 组 roomconf.BossEvent
this.GetEventGroupDataByLottery(roomconf.BossEvent)
// 生成 我方buff
if bossConf := this.GetBossConfById(roomconf.BossEvent); bossConf != nil {
friend = this.GetBuffGroupDataByLottery(bossConf.FriendlyBuffGroup, 0, nil)
enemy = this.GetBuffGroupDataByLottery(bossConf.EnemyBuffGroup, 0, nil)
stageData.maineBuff = this.GetBuffGroupDataByLottery(bossConf.FriendlyBuffGroup, 0, nil)
stageData.enemyBuff = this.GetBuffGroupDataByLottery(bossConf.EnemyBuffGroup, 0, nil)
}
stageData.rtime = configure.Now().Unix()
}
bossStage[rooms[0]] = stageData
}
}
}

View File

@ -8,16 +8,31 @@ import (
"go_dreamfactory/modules"
"go_dreamfactory/pb"
"go_dreamfactory/utils"
"sync"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/x/bsonx"
)
const (
StoneBossKey = "StoneBossKey"
)
type StageData struct {
maineBuff []int32 // 我方buff
enemyBuff []int32 // 敌方buff
roomid int32 // 传送门id
rtime int64 // 刷新时间
}
// 石阵秘境
type MStonehenge struct {
modules.MCompModel
module *Stonehenge
lock sync.RWMutex
bossStage map[int32]*StageData
}
//组件初始化接口
@ -25,7 +40,7 @@ func (this *MStonehenge) Init(service core.IService, module core.IModule, comp c
this.TableName = comm.TableStonehenge
this.MCompModel.Init(service, module, comp, opt)
this.module = module.(*Stonehenge)
this.bossStage = make(map[int32]*StageData)
//创建uid索引
this.DB.CreateIndex(core.SqlTable(this.TableName), mongo.IndexModel{
Keys: bsonx.Doc{{Key: "uid", Value: bsonx.Int32(1)}},
@ -66,5 +81,10 @@ func (this *MStonehenge) ChangeStonehengeData(uid string, update map[string]inte
func (this *MStonehenge) loadStoneBoos() (err error) {
this.module.ModuleTools.GetGlobalData(StoneBossKey, this.bossStage)
if len(this.bossStage) == 0 {
// 生成数据
this.bossStage = this.module.configure.CheckStage()
}
return
}

View File

@ -29,6 +29,7 @@ func (this *apiComp) FuncGetList(session comm.IUserSession, req *pb.SysFuncGetLi
if len(req.Keys) == 0 {
for _, v := range opencfg.GetDataList() {
if list.Cond[v.Id] == 0 {
id := this.module.modelSys.validCond(session.GetUserId(), v)
if id != "" {
if v.ActivateType == 1 { // 需要手动激活的

View File

@ -79,7 +79,7 @@ func (this *ModelSys) validCond(uid string, condData *cfg.GameOpencondData) stri
}
case 3: //世界任务ID
module, err := this.service.GetModule(comm.ModuleTask)
module, err := this.service.GetModule(comm.ModuleWtask)
if err != nil {
this.moduleSys.Debugln(err)
return ""

View File

@ -120,11 +120,12 @@ type DBStonehenge struct {
StageID int32 `protobuf:"varint,3,opt,name=stageID,proto3" json:"stageID"` // 关卡id
CurRoomIndes int32 `protobuf:"varint,4,opt,name=curRoomIndes,proto3" json:"curRoomIndes"` // 当前房间索引 初始 0 每通关一次+1
Rooms *RoomData `protobuf:"bytes,5,opt,name=rooms,proto3" json:"rooms"` // 当前房间信息
Envbuff []int32 `protobuf:"varint,6,rep,packed,name=envbuff,proto3" json:"envbuff"` // 环境buff 不能被更改
Userbuff map[int32]int32 `protobuf:"bytes,7,rep,name=userbuff,proto3" json:"userbuff" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // 玩家获得的buff key buff 类型
Hero []*BattleRole `protobuf:"bytes,8,rep,name=hero,proto3" json:"hero"` // 英雄信息
Reward map[int32]bool `protobuf:"bytes,9,rep,name=reward,proto3" json:"reward" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // 是否首通 key:stageid
Addweight map[int32]int32 `protobuf:"bytes,10,rep,name=addweight,proto3" json:"addweight" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // 选择buff权重增加 key 类型
Webuff []int32 `protobuf:"varint,6,rep,packed,name=webuff,proto3" json:"webuff"` // 我方环境buff 不能被更改
Enemybuff []int32 `protobuf:"varint,7,rep,packed,name=enemybuff,proto3" json:"enemybuff"` // 地方环境buff 不能被更改
Userbuff map[int32]int32 `protobuf:"bytes,8,rep,name=userbuff,proto3" json:"userbuff" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // 玩家获得的buff key buff 类型
Hero []*BattleRole `protobuf:"bytes,9,rep,name=hero,proto3" json:"hero"` // 英雄信息
Reward map[int32]bool `protobuf:"bytes,10,rep,name=reward,proto3" json:"reward" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // 是否首通 key:stageid
Addweight map[int32]int32 `protobuf:"bytes,11,rep,name=addweight,proto3" json:"addweight" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // 选择buff权重增加 key 类型
Etime int64 `protobuf:"varint,12,opt,name=etime,proto3" json:"etime"` // 结算时间
}
@ -195,9 +196,16 @@ func (x *DBStonehenge) GetRooms() *RoomData {
return nil
}
func (x *DBStonehenge) GetEnvbuff() []int32 {
func (x *DBStonehenge) GetWebuff() []int32 {
if x != nil {
return x.Envbuff
return x.Webuff
}
return nil
}
func (x *DBStonehenge) GetEnemybuff() []int32 {
if x != nil {
return x.Enemybuff
}
return nil
}
@ -259,7 +267,7 @@ var file_stonehenge_stonehenge_db_proto_rawDesc = []byte{
0x6e, 0x74, 0x69, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76,
0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xbe, 0x04, 0x0a, 0x0c, 0x44, 0x42, 0x53, 0x74, 0x6f, 0x6e,
0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xda, 0x04, 0x0a, 0x0c, 0x44, 0x42, 0x53, 0x74, 0x6f, 0x6e,
0x65, 0x68, 0x65, 0x6e, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20,
0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, 0x61, 0x67,
@ -268,35 +276,37 @@ var file_stonehenge_stonehenge_db_proto_rawDesc = []byte{
0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x52, 0x6f, 0x6f,
0x6d, 0x49, 0x6e, 0x64, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x05, 0x72, 0x6f, 0x6f, 0x6d, 0x73, 0x18,
0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x44, 0x61, 0x74, 0x61,
0x52, 0x05, 0x72, 0x6f, 0x6f, 0x6d, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x76, 0x62, 0x75,
0x66, 0x66, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x65, 0x6e, 0x76, 0x62, 0x75, 0x66,
0x66, 0x12, 0x37, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x62, 0x75, 0x66, 0x66, 0x18, 0x07, 0x20,
0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x44, 0x42, 0x53, 0x74, 0x6f, 0x6e, 0x65, 0x68, 0x65, 0x6e,
0x67, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x62, 0x75, 0x66, 0x66, 0x45, 0x6e, 0x74, 0x72, 0x79,
0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x62, 0x75, 0x66, 0x66, 0x12, 0x1f, 0x0a, 0x04, 0x68, 0x65,
0x72, 0x6f, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x42, 0x61, 0x74, 0x74, 0x6c,
0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x68, 0x65, 0x72, 0x6f, 0x12, 0x31, 0x0a, 0x06, 0x72,
0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x44, 0x42,
0x53, 0x74, 0x6f, 0x6e, 0x65, 0x68, 0x65, 0x6e, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72,
0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x3a,
0x0a, 0x09, 0x61, 0x64, 0x64, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x0a, 0x20, 0x03, 0x28,
0x0b, 0x32, 0x1c, 0x2e, 0x44, 0x42, 0x53, 0x74, 0x6f, 0x6e, 0x65, 0x68, 0x65, 0x6e, 0x67, 0x65,
0x2e, 0x41, 0x64, 0x64, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52,
0x09, 0x61, 0x64, 0x64, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x74,
0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x65, 0x74, 0x69, 0x6d, 0x65,
0x1a, 0x3b, 0x0a, 0x0d, 0x55, 0x73, 0x65, 0x72, 0x62, 0x75, 0x66, 0x66, 0x45, 0x6e, 0x74, 0x72,
0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03,
0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a,
0x0b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14,
0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76,
0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x77,
0x65, 0x69, 0x67, 0x68, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05,
0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c,
0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x52, 0x05, 0x72, 0x6f, 0x6f, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x62, 0x75, 0x66,
0x66, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x06, 0x77, 0x65, 0x62, 0x75, 0x66, 0x66, 0x12,
0x1c, 0x0a, 0x09, 0x65, 0x6e, 0x65, 0x6d, 0x79, 0x62, 0x75, 0x66, 0x66, 0x18, 0x07, 0x20, 0x03,
0x28, 0x05, 0x52, 0x09, 0x65, 0x6e, 0x65, 0x6d, 0x79, 0x62, 0x75, 0x66, 0x66, 0x12, 0x37, 0x0a,
0x08, 0x75, 0x73, 0x65, 0x72, 0x62, 0x75, 0x66, 0x66, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x1b, 0x2e, 0x44, 0x42, 0x53, 0x74, 0x6f, 0x6e, 0x65, 0x68, 0x65, 0x6e, 0x67, 0x65, 0x2e, 0x55,
0x73, 0x65, 0x72, 0x62, 0x75, 0x66, 0x66, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x75, 0x73,
0x65, 0x72, 0x62, 0x75, 0x66, 0x66, 0x12, 0x1f, 0x0a, 0x04, 0x68, 0x65, 0x72, 0x6f, 0x18, 0x09,
0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x42, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x52, 0x6f, 0x6c,
0x65, 0x52, 0x04, 0x68, 0x65, 0x72, 0x6f, 0x12, 0x31, 0x0a, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72,
0x64, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x44, 0x42, 0x53, 0x74, 0x6f, 0x6e,
0x65, 0x68, 0x65, 0x6e, 0x67, 0x65, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x74,
0x72, 0x79, 0x52, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x3a, 0x0a, 0x09, 0x61, 0x64,
0x64, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e,
0x44, 0x42, 0x53, 0x74, 0x6f, 0x6e, 0x65, 0x68, 0x65, 0x6e, 0x67, 0x65, 0x2e, 0x41, 0x64, 0x64,
0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x61, 0x64, 0x64,
0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x18,
0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x1a, 0x3b, 0x0a, 0x0d,
0x55, 0x73, 0x65, 0x72, 0x62, 0x75, 0x66, 0x66, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05,
0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x52, 0x65, 0x77,
0x61, 0x72, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61,
0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x41, 0x64, 0x64, 0x77, 0x65, 0x69, 0x67, 0x68,
0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20,
0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02,
0x38, 0x01, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x33,
}
var (

View File

@ -65,7 +65,7 @@ type StonehengeGetListResp struct {
unknownFields protoimpl.UnknownFields
Data *DBStonehenge `protobuf:"bytes,1,opt,name=data,proto3" json:"data"`
Boosid []int32 `protobuf:"varint,2,rep,packed,name=boosid,proto3" json:"boosid"`
Roomid []int32 `protobuf:"varint,2,rep,packed,name=roomid,proto3" json:"roomid"` //房间id 根据房间找boss
}
func (x *StonehengeGetListResp) Reset() {
@ -107,9 +107,9 @@ func (x *StonehengeGetListResp) GetData() *DBStonehenge {
return nil
}
func (x *StonehengeGetListResp) GetBoosid() []int32 {
func (x *StonehengeGetListResp) GetRoomid() []int32 {
if x != nil {
return x.Boosid
return x.Roomid
}
return nil
}
@ -905,8 +905,8 @@ var file_stonehenge_stonehenge_msg_proto_rawDesc = []byte{
0x65, 0x6e, 0x67, 0x65, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12,
0x21, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e,
0x44, 0x42, 0x53, 0x74, 0x6f, 0x6e, 0x65, 0x68, 0x65, 0x6e, 0x67, 0x65, 0x52, 0x04, 0x64, 0x61,
0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x6f, 0x6f, 0x73, 0x69, 0x64, 0x18, 0x02, 0x20, 0x03,
0x28, 0x05, 0x52, 0x06, 0x62, 0x6f, 0x6f, 0x73, 0x69, 0x64, 0x22, 0x61, 0x0a, 0x17, 0x53, 0x74,
0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x69, 0x64, 0x18, 0x02, 0x20, 0x03,
0x28, 0x05, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x69, 0x64, 0x22, 0x61, 0x0a, 0x17, 0x53, 0x74,
0x6f, 0x6e, 0x65, 0x68, 0x65, 0x6e, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x4c, 0x65, 0x76,
0x65, 0x6c, 0x52, 0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x68, 0x69, 0x64, 0x18, 0x01, 0x20, 0x03,
0x28, 0x09, 0x52, 0x03, 0x68, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x75, 0x66, 0x66, 0x54,